From 28c247f1c7e1768a80c583bfdf4f94ff73c39a9f Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Fri, 21 Feb 2020 18:25:01 -0800
Subject: [PATCH 001/103] Sample App: Todolist
This changeset adds a new sample app, which ties together all the
features thus far and adds some new ones to facilitate easy app
development. I'm using this sample to help define the underlying
framework structure, when used with Micronaut/Soy.
The sample is built with unified modelling via Protobuf, and RPC
dispatch via gRPC. The UI is built with Soy, with SSR support via
Soy/Java, and re-hydrated CSR support via Soy/JS (and `idom`).
The app's data backend is powered by Firestore, with objects
mediated for serialization by the framework. This process is also
driven by the protos. Auth is also powered by Firebase, which
enables easy data permissions.
Via the central API definition, the app can automatically generate
an API console, docs, and Open API/Swagger configs. It is also
dispatchable from nearly any platform (via either gRPC or REST).
Endpoints served in this manner support either Protobuf on the wire,
or JSON (when using REST).
Styles are defined in SASS but processed by both GSS and PostCSS,
which enables both (1) tight optimization on a per-browser basis,
and (2) style modularity when serving. The server can also rewrite
styles using a Soy/GSS rewrite map.
The sample additionally demonstrates testing, with coverage (where
supported by the framework, so far).
Related and blocking issues:
- [ ] Sample Apps (#26)
- [ ] App Framework (#27)
- [ ] MVP Functionality Matrix (#43)
- [ ] Source-aware Server Targets
- [ ] Modular JS serving, by entrypoint
- [ ] Modular CSS serving, by entrypoint
- [x] Early page render context/frame template
- [x] Basic asset templates/common templates
- [ ] Unable to natively compile complex Soy templates
The following checklist tracks progress towards the above:
- [ ] Data Adapters
- [ ] Initial adapter: in-memory
- [ ] First implementation: Firestore
- [ ] RBE/RCE Fixes
- [x] Remove Python (for now)
- [ ] Restore Python support w/fix for CI
- [ ] Basic gRPC Support
- [x] Ability to build/inject/run a gRPC server
- [ ] Some way to smoothly serve/proxy this
- [ ] Some plan for Envoy support
- [ ] TLS vs. ATLS?
- [ ] Ability to generate a gRPC client
- [ ] Frontend serving logic (more coming soon)
- [ ] Basic *Todolist* app
- [x] Unified Model: services and objects
- [x] Object definitions
- [x] Service definition (`Tasks`)
- [x] Service configuration
- [x] Auth (API keys, Firebase auth)
- [x] Documentation config
- [x] Quotas and properties
- [ ] Server-side
- [ ] `HomeController`: serve anonymous app frame
- [ ] Basic implementation
- [ ] Login UI kickoff (via Firebase Auth UI / MDL)
- [ ] Anonymous app container
- [ ] `AppController`: serve logged-in app frame
- [ ] Basic implementation
- [ ] Logout UI kickoff and handler
- [ ] Auth/session lifecycle
- [ ] Rejoiner support
- [ ] GraphQL schema/support
- [ ] Web app
- [ ] gRPC invocation logic
- [ ] Initial style structure
- [ ] Java-based app implementation
- [ ] Issues to file
- [ ] Future: Telemetry
- [ ] Future: iOS App
- [ ] Future: Android App
- [ ] Future: Chrome Extension
---
.bazelproject | 2 +-
.bazelrc | 3 +-
.bazelversion | 2 +-
.buildkite/pipeline.yml | 7 +
.gcloudignore | 6 +
.gitmodules | 3 +
.ijwb/.bazelproject | 4 +-
LICENSE.txt | 203 +
LICENSES/grpc-gateway.txt | 27 +
Makefile | 4 +-
README.md | 7 +-
WORKSPACE | 33 +-
cloudbuild.yaml | 18 +
defs/build.bzl | 32 +-
defs/toolchain/backend.bzl | 2 +
defs/toolchain/java/plugins/BUILD.bazel | 16 +-
defs/toolchain/java/repos.bzl | 52 +-
defs/toolchain/java/rules.bzl | 66 +-
defs/toolchain/python/rules.bzl | 48 +-
defs/toolchain/schema.bzl | 60 +-
defs/toolchain/soy/rules.bzl | 39 +-
defs/toolchain/templates.bzl | 2 +
external/proto_common.bzl | 19 +-
external/safe_html_types.bzl | 13 +
{proto => gust}/BUILD.bazel | 0
gust/api/BUILD.bazel | 40 +
gust/api/openapiv2.proto | 379 ++
gust/api/services.proto | 65 +
gust/base/BUILD.bazel | 38 +
gust/base/language.proto | 66 +
gust/base/language.soy | 38 +
{proto => gust}/core/BUILD.bazel | 6 +-
.../core/datamodel.proto | 52 +-
gust/dom/BUILD.bazel | 15 +
gust/dom/assets.soy | 45 +
gust/page/BUILD.bazel | 48 +
gust/page/media.proto | 190 +
gust/page/page.proto | 400 ++
gust/page/page.soy | 187 +
gust/page/semantic.proto | 70 +
java/gust/backend/Application.java | 15 +-
java/gust/backend/BUILD.bazel | 5 +-
java/gust/backend/TemplateProvider.java | 59 +
java/gust/backend/TemplateProvider.kt | 34 -
javatests/BUILD.bazel | 11 +
javatests/gust/BUILD.bazel | 1 +
javatests/gust/DualStackTest.java | 14 +-
javatests/gust/backend/ApplicationTest.java | 18 +
javatests/gust/backend/BUILD.bazel | 31 +
.../gust/backend/TemplateProviderTest.java | 31 +
maven_install.json | 5054 +++++++++++++++--
samples/todolist/.bazelrc | 82 +
samples/todolist/.bazelversion | 1 +
samples/todolist/BUILD.bazel | 3 +
samples/todolist/WORKSPACE | 80 +
samples/todolist/package.json | 8 +
samples/todolist/src/BUILD.bazel | 106 +
samples/todolist/src/api.yml | 324 ++
samples/todolist/src/application.yml | 130 +
samples/todolist/src/home.soy | 20 +
samples/todolist/src/logback.xml | 13 +
samples/todolist/src/reflection.json | 38 +
samples/todolist/src/server/HomeController.kt | 44 +
samples/todolist/src/server/TasksService.kt | 48 +
.../src/server/TodolistInterceptor.kt | 50 +
samples/todolist/src/server/TodolistLogic.kt | 22 +
samples/todolist/src/todolist.proto | 659 +++
vendor/google/safe-html-types | 1 +
68 files changed, 8645 insertions(+), 564 deletions(-)
create mode 100644 .gcloudignore
create mode 100644 LICENSE.txt
create mode 100644 LICENSES/grpc-gateway.txt
create mode 100644 cloudbuild.yaml
create mode 100644 external/safe_html_types.bzl
rename {proto => gust}/BUILD.bazel (100%)
create mode 100644 gust/api/BUILD.bazel
create mode 100644 gust/api/openapiv2.proto
create mode 100644 gust/api/services.proto
create mode 100644 gust/base/BUILD.bazel
create mode 100644 gust/base/language.proto
create mode 100644 gust/base/language.soy
rename {proto => gust}/core/BUILD.bazel (78%)
rename proto/core/Datamodel.proto => gust/core/datamodel.proto (89%)
create mode 100644 gust/dom/BUILD.bazel
create mode 100644 gust/dom/assets.soy
create mode 100644 gust/page/BUILD.bazel
create mode 100644 gust/page/media.proto
create mode 100644 gust/page/page.proto
create mode 100644 gust/page/page.soy
create mode 100644 gust/page/semantic.proto
create mode 100644 java/gust/backend/TemplateProvider.java
delete mode 100644 java/gust/backend/TemplateProvider.kt
create mode 100644 javatests/gust/backend/ApplicationTest.java
create mode 100644 javatests/gust/backend/BUILD.bazel
create mode 100644 javatests/gust/backend/TemplateProviderTest.java
create mode 100644 samples/todolist/.bazelrc
create mode 100644 samples/todolist/.bazelversion
create mode 100644 samples/todolist/BUILD.bazel
create mode 100644 samples/todolist/WORKSPACE
create mode 100644 samples/todolist/package.json
create mode 100644 samples/todolist/src/BUILD.bazel
create mode 100644 samples/todolist/src/api.yml
create mode 100644 samples/todolist/src/application.yml
create mode 100644 samples/todolist/src/home.soy
create mode 100644 samples/todolist/src/logback.xml
create mode 100644 samples/todolist/src/reflection.json
create mode 100644 samples/todolist/src/server/HomeController.kt
create mode 100644 samples/todolist/src/server/TasksService.kt
create mode 100644 samples/todolist/src/server/TodolistInterceptor.kt
create mode 100644 samples/todolist/src/server/TodolistLogic.kt
create mode 100644 samples/todolist/src/todolist.proto
create mode 160000 vendor/google/safe-html-types
diff --git a/.bazelproject b/.bazelproject
index 6426b4dd4..44bbc514d 100644
--- a/.bazelproject
+++ b/.bazelproject
@@ -11,7 +11,7 @@ workspace_type: java
java_language_level: 11
targets:
- //proto/...
+ //gust/...
//java/...
//js/...
//style/...
diff --git a/.bazelrc b/.bazelrc
index 27b7d0fcd..6e142c1c7 100644
--- a/.bazelrc
+++ b/.bazelrc
@@ -8,7 +8,6 @@ common --experimental_allow_incremental_repository_updates
build --watchfs
build --symlink_prefix=dist/
build --nolegacy_external_runfiles
-build --disk_cache=~/.cache/bazel-disk-cache
build --incompatible_strict_action_env
build --javacopt="-encoding UTF-8"
build --strict_java_deps=strict
@@ -36,6 +35,7 @@ build:dev --experimental_persistent_javac
build:dev --define=jdk=zulu
build:dev --define=ZULUBASE=/Library/Java/JavaVirtualMachines/zulu-12.jdk/Contents/Home
build:dev --javabase=//defs/toolchain/java:java_runtime
+build:dev --disk_cache=~/.cache/bazel-disk-cache
query --output=label_kind
@@ -83,6 +83,7 @@ build:remote --google_default_credentials=true
test --instrumentation_filter=//...
test --instrument_test_targets
+coverage --instrumentation_filter=//...
coverage --instrument_test_targets
try-import %workspace%/.bazelrc.user
diff --git a/.bazelversion b/.bazelversion
index 3e3c2f1e5..7ec1d6db4 100644
--- a/.bazelversion
+++ b/.bazelversion
@@ -1 +1 @@
-2.1.1
+2.1.0
diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml
index 741de88a0..6e99b7f9c 100644
--- a/.buildkite/pipeline.yml
+++ b/.buildkite/pipeline.yml
@@ -14,6 +14,9 @@ steps:
- command: "make build CI=yes TARGETS='//samples/rest_mvc/java:MicronautMVCSample-native-bin' && make build CI=yes TARGETS='//samples/soy_ssr/src:MicronautSSRSample-native-bin'"
label: ":java: Build: Native Binaries"
depends_on: framework-build
+ key: native-build
+ soft_fail:
+ - exit_status: 2
- wait
@@ -22,6 +25,9 @@ steps:
- command: "make build samples CI=yes"
label: ":gcloud: Publish: Images"
+ depends_on: native-build
+ soft_fail:
+ - exit_status: 2
- command: "echo 'registry=https://npm.pkg.github.com/sgammon' > .npmrc && npm publish"
label: ":octocat: + :npm: Staging: NPM"
@@ -53,4 +59,5 @@ steps:
- command: "make release-images CI=yes"
label: ":docker: Release: Docker"
+ depends_on: native-build
if: build.tag != null
diff --git a/.gcloudignore b/.gcloudignore
new file mode 100644
index 000000000..475125a9c
--- /dev/null
+++ b/.gcloudignore
@@ -0,0 +1,6 @@
+.git/modules
+node_modules/
+dist/
+build/
+vendor/
+#!include:.gitignore
diff --git a/.gitmodules b/.gitmodules
index 71312d773..86ac6d8f6 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -23,3 +23,6 @@
[submodule "api_common"]
path = vendor/google/api-common
url = git@github.com:googleapis/api-common-protos.git
+[submodule "safe_html_types"]
+ path = vendor/google/safe-html-types
+ url = git@github.com:google/safe-html-types.git
diff --git a/.ijwb/.bazelproject b/.ijwb/.bazelproject
index 3abd03f99..4cc7ebfec 100644
--- a/.ijwb/.bazelproject
+++ b/.ijwb/.bazelproject
@@ -8,7 +8,7 @@ directories:
external
js
java
- proto
+ gust
tests
jstests
javatests
@@ -23,7 +23,7 @@ directories:
targets:
//samples/...
- //proto/...
+ //gust/...
//java/...
//js/...
//style/...
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 000000000..6b0b1270f
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,203 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
diff --git a/LICENSES/grpc-gateway.txt b/LICENSES/grpc-gateway.txt
new file mode 100644
index 000000000..364516251
--- /dev/null
+++ b/LICENSES/grpc-gateway.txt
@@ -0,0 +1,27 @@
+Copyright (c) 2015, Gengo, Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ * Neither the name of Gengo, Inc. nor the names of its
+ contributors may be used to endorse or promote products derived from this
+ software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Makefile b/Makefile
index b5d948e92..6c3a3328f 100644
--- a/Makefile
+++ b/Makefile
@@ -48,9 +48,9 @@ COVERAGE_ARGS ?= --function-coverage \
--rc genhtml_hi_limit=90
APP ?=
-TARGETS ?= //java/... //proto/... //js/... //style/...
+TARGETS ?= //java/... //gust/... //js/... //style/... //jstests/...
TESTS ?= //tests/...
-COVERABLE ?= //javatests/... //jstests/...
+COVERABLE ?= //javatests:suite
TAG ?=
TEST_ARGS ?= --test_output=errors
diff --git a/README.md b/README.md
index c4c12f9ea..7376985d2 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,8 @@
-## `GUST` [![Build status](https://badge.buildkite.com/7a69b0fadb7d08b691e96177f589971a7646217b1a8b4a269e.svg)](https://buildkite.com/bloombox/gust)
+## `@elide-tools/elide` [![Build status](https://badge.buildkite.com/7a69b0fadb7d08b691e96177f589971a7646217b1a8b4a269e.svg)](https://buildkite.com/bloomworks/elide)
-** Hello, world! ** I'm a framework.
+
+### Licensing
+
+Below we specify licensing details for the Gust/Elide framework, including pointers to licenses for any dependent software. Gust/Elide itself is licensed under the Apache 2.0 License, which is enclosed in the `LICENSE.txt` file. Licenses for any dependent software (as required/applicable) are embedded in the `LICENSES/` directory, each within their own text file named for the software or framework.
diff --git a/WORKSPACE b/WORKSPACE
index 75f957ac8..d400bcd72 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -149,24 +149,31 @@ load("@io_bazel_stardoc//:setup.bzl", "stardoc_repositories")
stardoc_repositories()
## Python
-load("@rules_python//python:repositories.bzl", "py_repositories")
-py_repositories()
+#load("@rules_python//python:repositories.bzl", "py_repositories")
+#py_repositories()
+
+#load("@rules_python//python:pip.bzl", "pip_repositories")
+#pip_repositories()
+
+#load("@rules_python//python:pip.bzl", pip_import = "pip3_import")
-load("@rules_python//python:pip.bzl", "pip_repositories")
-pip_repositories()
+#pip_import(
+# name = "py",
+# requirements = "//defs/toolchain/python:requirements_base.txt")
-load("@rules_python//python:pip.bzl", pip_import = "pip3_import")
+#pip_import(
+# name = "werkzeug",
+# requirements = "//defs/toolchain/python:requirements_werkzeug.txt")
-pip_import(
- name = "py",
- requirements = "//defs/toolchain/python:requirements_base.txt")
+#load("//defs/toolchain/python:repos.bzl", "gust_python_repositories")
+#gust_python_repositories()
-pip_import(
- name = "werkzeug",
- requirements = "//defs/toolchain/python:requirements_werkzeug.txt")
+## gRPC Java
+load("@io_grpc_java//:repositories.bzl", "grpc_java_repositories")
+grpc_java_repositories()
-load("//defs/toolchain/python:repos.bzl", "gust_python_repositories")
-gust_python_repositories()
+load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps")
+protobuf_deps()
## Java Containers
load("@io_bazel_rules_docker//container:container.bzl", "container_pull")
diff --git a/cloudbuild.yaml b/cloudbuild.yaml
new file mode 100644
index 000000000..2d9524193
--- /dev/null
+++ b/cloudbuild.yaml
@@ -0,0 +1,18 @@
+
+steps:
+- name: 'l.gcr.io/google/bazel'
+ args:
+ - --bazelrc=.bazelrc
+ - test
+ - --config=remote
+ - --remote_instance_name=projects/bloom-sandbox/instances/default_instance
+ - --
+ - //gust/...
+ - //js/...
+ - //java/...
+ - //style/...
+
+timeout: 30m
+options:
+ machineType: "N1_HIGHCPU_32"
+
diff --git a/defs/build.bzl b/defs/build.bzl
index f1f421720..b7c0e38d1 100644
--- a/defs/build.bzl
+++ b/defs/build.bzl
@@ -188,12 +188,28 @@ DEPS = {
"overlay": "mdl.bzl",
"seal": "f65b744aa0865bce2f9727b1b116fadf10639b63f4b511165a2ab65afa6d1046"},
+ # Common Protocol Buffers
"proto_common": {
"type": "github",
"repo": "googleapis/api-common-protos",
- "target": "a1049653796e24778de3073bd04760588494aecd",
+ "target": "fd62e4d97ca6829b9166ae86bc6429574ff4e5db",
"overlay": "proto_common.bzl",
- "seal": "280bdadd0cc490ac601ba577694e290b2aa3bc5636dcb9f0d9eca27dc0f5791d"},
+ "seal": "4a84c293b3758d2cd5b6da27ffb0166f6ce23b99f70ea14ef28cb77099744889"},
+
+ # Safe HTML Types
+ "safe_html_types": {
+ "type": "github",
+ "repo": "google/safe-html-types",
+ "target": "8507735457ea41a37dfa027fb176d49d5783c4ba",
+ "overlay": "safe_html_types.bzl",
+ "seal": "2356090e7632f49ea581bb6f8808fa038a7433d433f3e8d7045a36f81fb39d65"},
+
+ # gRPC: Java
+ "io_grpc_java": {
+ "type": "github",
+ "repo": "grpc/grpc-java",
+ "target": "a98db126e265259ea73c2156833cbf872aa86811",
+ "seal": "f83e71b2ab65c3c133d6ee6ac968efee21f5cb93a25825b50740538e50905b9b"},
# Google: Closure Stylesheets
"com_google_closure_stylesheets": {
@@ -218,6 +234,16 @@ DEPS = {
]),
},
+ # JavaX: Annotations API
+ "javax_annotation_api": {
+ "type": "java",
+ "licenses": ["notice"], # Apache 2.0
+ "seal": None,
+ "targets": [
+ "https://repo1.maven.org/maven2/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar",
+ ],
+ },
+
# Google: Soy
"com_google_template_soy": {
"type": "java",
@@ -233,7 +259,6 @@ DEPS = {
"@com_google_inject_extensions_guice_assistedinject",
"@com_google_inject_extensions_guice_multibindings",
"@com_google_inject_guice",
- "@com_google_protobuf//:protobuf_java",
"@com_ibm_icu_icu4j",
"@javax_inject",
"@org_json",
@@ -241,6 +266,7 @@ DEPS = {
"@org_ow2_asm_analysis",
"@org_ow2_asm_commons",
"@org_ow2_asm_util",
+ "@com_google_protobuf//:protobuf_java",
],
"inject": "\n".join([
("java_binary(\n" +
diff --git a/defs/toolchain/backend.bzl b/defs/toolchain/backend.bzl
index 72b588849..2d20042dd 100644
--- a/defs/toolchain/backend.bzl
+++ b/defs/toolchain/backend.bzl
@@ -4,6 +4,7 @@ load(
_jdk_binary = "jdk_binary",
_jdk_library = "jdk_library",
_micronaut_library = "micronaut_library",
+ _micronaut_service = "micronaut_service",
_micronaut_controller = "micronaut_controller",
_micronaut_application = "micronaut_application",
_micronaut_native_configset = "micronaut_native_configset",
@@ -41,6 +42,7 @@ jdk_binary = _jdk_binary
jdk_library = _jdk_library
micronaut_test = _micronaut_test
micronaut_library = _micronaut_library
+micronaut_service = _micronaut_service
micronaut_controller = _micronaut_controller
micronaut_application = _micronaut_application
micronaut_native_configset = _micronaut_native_configset
diff --git a/defs/toolchain/java/plugins/BUILD.bazel b/defs/toolchain/java/plugins/BUILD.bazel
index 8394f4390..7c714d826 100644
--- a/defs/toolchain/java/plugins/BUILD.bazel
+++ b/defs/toolchain/java/plugins/BUILD.bazel
@@ -17,12 +17,14 @@ load(
java_library(
name = "micronaut-inject",
exports = [
+ "@javax_annotation_api",
maven("io.micronaut:micronaut-core"),
maven("io.micronaut:micronaut-inject"),
maven("io.micronaut:micronaut-inject-java"),
maven("io.micronaut:micronaut-validation"),
],
runtime_deps = [
+ "@javax_annotation_api",
maven("io.micronaut:micronaut-core"),
maven("io.micronaut:micronaut-inject"),
maven("io.micronaut:micronaut-inject-java"),
@@ -31,20 +33,6 @@ java_library(
]
)
-java_library(
- name = "dagger_compiler",
- exports = ["//external:jar/com/google/dagger/dagger_compiler"],
- runtime_deps = [
- ":dagger",
- ":dagger_producers",
- "//third_party/java/com/google/code/findbugs:jsr305",
- "//third_party/java/com/google/googlejavaformat:google_java_format",
- "//third_party/java/com/google/guava",
- "//third_party/java/com/squareup:javapoet",
- "//third_party/java/javax/inject:javax_inject",
- ],
-)
-
java_plugin(
name = "micronaut-beans",
generates_api = True,
diff --git a/defs/toolchain/java/repos.bzl b/defs/toolchain/java/repos.bzl
index a4ccb1733..b32cf1e5d 100644
--- a/defs/toolchain/java/repos.bzl
+++ b/defs/toolchain/java/repos.bzl
@@ -19,17 +19,19 @@ load(
"GRAALVM_VERSION",
)
+FETCH_SOURCES = True
+STRICT_DEPENDENCIES = True
ASM_VERSION = "7.0"
SLF4J_VERSION = "1.7.26"
-ANNOTATIONS_VERSION = "1.3.2"
-SOY_VERSION = "2019-10-08"
-GUAVA_VERSION = "28.2-jre"
-FINDBUGS_VERSION = "3.0.2"
PROTOBUF_VERSION = "3.11.4"
+GRPC_JAVA_VERSION = "1.26.0"
+OPENTRACING_VERSION = "0.2.1"
+
MICRONAUT_VERSION = "1.3.1"
+MICRONAUT_GRPC_VERSION = "1.1.1"
MICRONAUT_TEST_VERSION = "1.1.2"
MICRONAUT_REDIS_VERSION = "1.2.0"
MICRONAUT_SECURITY_VERSION = "1.3.0"
@@ -45,12 +47,15 @@ REPOSITORIES = [
BUILD_ARTIFACTS = [
"org.ow2.asm:asm:%s" % ASM_VERSION,
"org.slf4j:slf4j-api:%s" % SLF4J_VERSION,
- "javax.annotation:javax.annotation-api:%s" % ANNOTATIONS_VERSION,
]
MICRONAUT_BUILD_ARTIFACTS = [
- "com.google.guava:guava:%s" % GUAVA_VERSION,
- "com.google.code.findbugs:jsr305:%s" % FINDBUGS_VERSION,
+ "io.grpc:grpc-core:%s" % GRPC_JAVA_VERSION,
+ "io.grpc:grpc-auth:%s" % GRPC_JAVA_VERSION,
+ "io.grpc:grpc-api:%s" % GRPC_JAVA_VERSION,
+ "io.grpc:grpc-stub:%s" % GRPC_JAVA_VERSION,
+ "io.grpc:grpc-context:%s" % GRPC_JAVA_VERSION,
+ "io.grpc:grpc-protobuf:%s" % GRPC_JAVA_VERSION,
"com.google.protobuf:protobuf-java:%s" % PROTOBUF_VERSION,
"io.micronaut:micronaut-aop:%s" % MICRONAUT_VERSION,
"io.micronaut:micronaut-core:%s" % MICRONAUT_VERSION,
@@ -64,13 +69,27 @@ MICRONAUT_BUILD_ARTIFACTS = [
"io.micronaut:micronaut-http-server-netty:%s" % MICRONAUT_VERSION,
"io.micronaut:micronaut-graal:%s" % MICRONAUT_VERSION,
"io.micronaut:micronaut-views:%s" % MICRONAUT_VERSION,
+ "io.micronaut:micronaut-views-soy:%s" % MICRONAUT_VERSION,
"io.micronaut:micronaut-router:%s" % MICRONAUT_VERSION,
"io.micronaut:micronaut-session:%s" % MICRONAUT_VERSION,
"io.micronaut:micronaut-tracing:%s" % MICRONAUT_VERSION,
"io.micronaut:micronaut-security:%s" % MICRONAUT_SECURITY_VERSION,
"io.micronaut:micronaut-multitenancy:%s" % MICRONAUT_VERSION,
+ "io.micronaut.grpc:micronaut-grpc-runtime:%s" % MICRONAUT_GRPC_VERSION,
+ "io.micronaut.grpc:micronaut-grpc-annotation:%s" % MICRONAUT_GRPC_VERSION,
+ "io.micronaut.grpc:micronaut-protobuff-support:%s" % MICRONAUT_GRPC_VERSION,
"io.micronaut.configuration:micronaut-redis-lettuce:%s" % MICRONAUT_REDIS_VERSION,
- maven.artifact("com.google.template", "soy", SOY_VERSION, neverlink = True),
+
+ maven.artifact("io.micronaut", "micronaut-views", MICRONAUT_VERSION, exclusions = [
+ maven.exclusion(
+ artifact = "types",
+ group = "com.google.common.html.types",
+ ),
+ maven.exclusion(
+ artifact = "soy",
+ group = "com.google.template",
+ ),
+ ]),
]
RUNTIME_ARTIFACTS = [
@@ -80,6 +99,7 @@ RUNTIME_ARTIFACTS = [
MICRONAUT_RUNTIME_ARTIFACTS = [
"io.micronaut:micronaut-runtime:%s" % MICRONAUT_VERSION,
+ "io.opentracing.contrib:opentracing-grpc:%s" % OPENTRACING_VERSION,
]
TEST_ARTIFACTS = [
@@ -106,8 +126,24 @@ def _gust_java_deps(micronaut = True):
maven_install(
artifacts = artifacts,
repositories = REPOSITORIES,
+ fetch_sources = FETCH_SOURCES,
maven_install_json = "@gust//:maven_install.json",
generate_compat_repositories = True,
+ strict_visibility = STRICT_DEPENDENCIES,
+ excluded_artifacts = [
+ "com.google.template:soy",
+ "com.google.common.html.types:types",
+ ],
+ override_targets = {
+ "com.google.guava:guava": "@com_google_guava",
+ "com.google.template:soy": "@com_google_template_soy",
+ "com.google.common.html.types:types": "@com_google_template_soy",
+ "com.google.code:gson": "@com_google_code_gson",
+ "com.google.code.findbugs:jsr305": "@com_google_code_findbugs_jsr305",
+ "com.google.closure:stylesheets": "@com_google_closure_stylesheets",
+ "javax.inject:javax.inject": "@javax_inject",
+ "javax.annotation:javax.annotation-api": "@javax_annotation_api",
+ },
)
diff --git a/defs/toolchain/java/rules.bzl b/defs/toolchain/java/rules.bzl
index d16c8d829..390156fb8 100644
--- a/defs/toolchain/java/rules.bzl
+++ b/defs/toolchain/java/rules.bzl
@@ -39,6 +39,7 @@ load(
load(
"//defs/toolchain:schema.bzl",
+ "GRPCJAVA_POSTFIX_",
"JAVAPROTO_POSTFIX_",
"CLOSUREPROTO_POSTFIX_",
)
@@ -56,12 +57,15 @@ load(
INJECTED_MICRONAUT_DEPS = [
+ "@javax_inject",
+ "@javax_annotation_api",
"@gust//java:framework",
"@gust//defs/toolchain/java/plugins:micronaut",
- maven("com.google.guava:guava"),
- maven("com.google.template:soy"),
+ "@com_google_guava",
+ "@com_google_template_soy",
+ "@com_google_common_html_types",
+ "@com_google_code_findbugs_jsr305",
maven("com.google.protobuf:protobuf-java"),
- maven("com.google.code.findbugs:jsr305"),
maven("io.micronaut:micronaut-aop"),
maven("io.micronaut:micronaut-core"),
maven("io.micronaut:micronaut-http"),
@@ -73,7 +77,24 @@ INJECTED_MICRONAUT_DEPS = [
maven("io.micronaut:micronaut-http-server-netty"),
maven("io.micronaut:micronaut-graal"),
maven("io.micronaut:micronaut-views"),
+ maven("io.micronaut:micronaut-views-soy"),
maven("io.micronaut:micronaut-router"),
+ maven("io.micronaut:micronaut-tracing"),
+ maven("io.micronaut:micronaut-session"),
+ maven("io.micronaut:micronaut-security"),
+ maven("io.micronaut:micronaut-multitenancy"),
+]
+
+INJECTED_MICRONAUT_GRPC_DEPS = [
+ maven("io.grpc:grpc-core"),
+ maven("io.grpc:grpc-auth"),
+ maven("io.grpc:grpc-api"),
+ maven("io.grpc:grpc-stub"),
+ maven("io.grpc:grpc-context"),
+ maven("io.grpc:grpc-protobuf"),
+ maven("io.micronaut.grpc:micronaut-grpc-runtime"),
+ maven("io.micronaut.grpc:micronaut-grpc-annotation"),
+ maven("io.micronaut.grpc:micronaut-protobuff-support"),
]
INJECTED_MICRONAUT_RUNTIME_DEPS = [
@@ -210,7 +231,6 @@ def _micronaut_controller(name,
deps = [],
protos = [],
templates = [],
- proto_deps = [],
runtime_deps = [],
data = [],
**kwargs):
@@ -223,6 +243,35 @@ def _micronaut_controller(name,
srcs = srcs,
proto_deps = protos,
templates = templates,
+ deps = (deps or []),
+ runtime_deps = runtime_deps,
+ data = data,
+ **kwargs
+ )
+
+
+
+def _micronaut_service(name,
+ srcs,
+ deps = [],
+ protos = [],
+ services = [],
+ templates = [],
+ runtime_deps = [],
+ data = [],
+ **kwargs):
+
+ """ Wraps a Micronaut library with dependencies for services via gRPC. """
+
+ _micronaut_library(
+ name = name,
+ srcs = srcs,
+ proto_deps = protos + services,
+ templates = templates,
+ deps = (deps or []) + [
+ ("%s-%s" % (svc, GRPCJAVA_POSTFIX_))
+ for svc in services
+ ] + INJECTED_MICRONAUT_GRPC_DEPS,
runtime_deps = runtime_deps,
data = data,
**kwargs
@@ -262,6 +311,7 @@ def _micronaut_application(name,
image_format = "OCI",
srcs = [],
controllers = [],
+ services = [],
tag = None,
deps = None,
proto_deps = [],
@@ -279,10 +329,10 @@ def _micronaut_application(name,
computed_jvm_flags = _annotate_jvm_flags([i for i in jvm_flags], defs)
if len(srcs) > 0:
- computed_deps = _dedupe_deps((deps or []) + INJECTED_MICRONAUT_DEPS + controllers)
+ computed_deps = _dedupe_deps((deps or []) + INJECTED_MICRONAUT_DEPS + controllers + services)
computed_image_deps = _dedupe_deps((deps or []) + INJECTED_MICRONAUT_DEPS)
computed_image_layers = _dedupe_deps((
- INJECTED_MICRONAUT_RUNTIME_DEPS + [template_loader] + controllers))
+ INJECTED_MICRONAUT_RUNTIME_DEPS + [template_loader] + controllers + services))
computed_runtime_deps = [template_loader]
if inject_main:
@@ -294,6 +344,7 @@ def _micronaut_application(name,
computed_runtime_deps = _dedupe_deps(
(deps or []) +
INJECTED_MICRONAUT_DEPS +
+ services +
controllers + [
maven("io.micronaut:micronaut-runtime"),
] + [template_loader] + [("%s-%s" % (
@@ -334,7 +385,7 @@ def _micronaut_application(name,
resource_jars = [
("%s-lib" % r) for r in native_configsets
],
- resource_strip_prefix = "java/gust/",
+ resource_strip_prefix = "java/gust" in config and "java/gust/" or None,
)
if native:
@@ -431,6 +482,7 @@ ensure_types_ = _ensure_types
jdk_binary = _jdk_binary
jdk_library = _jdk_library
micronaut_library = _micronaut_library
+micronaut_service = _micronaut_service
micronaut_controller = _micronaut_controller
micronaut_application = _micronaut_application
micronaut_native_configset = _micronaut_native_configset
diff --git a/defs/toolchain/python/rules.bzl b/defs/toolchain/python/rules.bzl
index f654e013b..1f8255aef 100644
--- a/defs/toolchain/python/rules.bzl
+++ b/defs/toolchain/python/rules.bzl
@@ -5,21 +5,21 @@ load(
_py_library = "py_library",
)
-load(
- "@py//:requirements.bzl",
- _requirement = "requirement",
-)
+#load(
+# "@py//:requirements.bzl",
+# _requirement = "requirement",
+#)
-load(
- "@werkzeug//:requirements.bzl",
- _werkzeug_requirement = "requirement",
-)
+#load(
+# "@werkzeug//:requirements.bzl",
+# _werkzeug_requirement = "requirement",
+#)
-WERKZEUG_DEPS = [
- _werkzeug_requirement("werkzeug"),
- _requirement("protobuf"),
-]
+#WERKZEUG_DEPS = [
+# _werkzeug_requirement("werkzeug"),
+# _requirement("protobuf"),
+#]
def _werkzeug_library(name,
@@ -29,11 +29,11 @@ def _werkzeug_library(name,
""" Python library, containing some piece of code, which is used in conjunction with a
Werkzeug-based backend. """
- _py_library(
- name = name,
- srcs = srcs,
- deps = (deps + WERKZEUG_DEPS),
- )
+# _py_library(
+# name = name,
+# srcs = srcs,
+# deps = (deps + WERKZEUG_DEPS),
+# )
def _werkzeug_application(name,
@@ -43,13 +43,13 @@ def _werkzeug_application(name,
""" Wrap a Python library as a Werkzeug application entrypoint, with injected dependencies
for Werkzeug, Redis, Soy, Protobuf, gRPC, and so on. """
- _py_binary(
- name = name,
- srcs = [entry_point],
- main = entry_point,
- deps = (deps + WERKZEUG_DEPS),
- python_version = "PY3",
- )
+# _py_binary(
+# name = name,
+# srcs = [entry_point],
+# main = entry_point,
+# deps = (deps + WERKZEUG_DEPS),
+# python_version = "PY3",
+# )
py_binary = _py_binary
diff --git a/defs/toolchain/schema.bzl b/defs/toolchain/schema.bzl
index 6151d23b8..86f98df97 100644
--- a/defs/toolchain/schema.bzl
+++ b/defs/toolchain/schema.bzl
@@ -10,8 +10,14 @@ load(
_proto_library="proto_library"
)
+load(
+ "@io_grpc_java//:java_grpc_library.bzl",
+ _java_grpc_library = "java_grpc_library"
+)
+
JAVAPROTO_POSTFIX_ = "java_proto"
CLOSUREPROTO_POSTFIX_ = "closure_proto"
+GRPCJAVA_POSTFIX_ = "grpc_java"
_PROTO_ROOT = "/proto"
_native_proto = _proto_library
@@ -20,11 +26,16 @@ _native_java_proto = native.java_proto_library
INJECTED_PROTO_DEPS = [
- "//proto/core:Datamodel",
+ str(Label("@gust//gust/core:datamodel")),
+]
+
+INJECTED_SERVICE_DEPS = [
+ str(Label("@gust//gust/api:services")),
+ str(Label("@safe_html_types//:proto")),
]
-def __declare_lang_protos(name, internal, kwargs):
+def __declare_lang_protos(name, internal, service, kwargs):
""" Declare Java and CC proto libraries. """
@@ -36,18 +47,19 @@ def __declare_lang_protos(name, internal, kwargs):
)
-def __declare_native(name, internal, kwargs):
+def __declare_native(name, internal, service, kwargs):
""" Declare a target as a native proto library. """
kwargs["name"] = name
if not internal:
- kwargs["deps"] = kwargs.get("deps", []) + INJECTED_PROTO_DEPS
+ kwargs["deps"] = kwargs.get("deps", []) + INJECTED_PROTO_DEPS + (
+ service and INJECTED_SERVICE_DEPS or [])
_native_proto(
**kwargs
)
-def __declare_closure_proto(name, internal, kwargs):
+def __declare_closure_proto(name, internal, service, kwargs):
""" Declare a target as a Closure proto library. """
@@ -58,6 +70,7 @@ def __declare_closure_proto(name, internal, kwargs):
**ckwargs
)
+
def _proto(name,
_internal = False,
**kwargs):
@@ -73,9 +86,9 @@ def _proto(name,
:returns: Nothing - defines rules instead.
"""
- __declare_native(name, _internal, kwargs)
- __declare_closure_proto(name, _internal, kwargs)
- __declare_lang_protos(name, _internal, kwargs)
+ __declare_native(name, _internal, False, kwargs)
+ __declare_closure_proto(name, _internal, False, kwargs)
+ __declare_lang_protos(name, _internal, False, kwargs)
def _module(name,
@@ -91,10 +104,35 @@ def _module(name,
:returns: Nothing - defines rules instead.
"""
- __declare_native(name, _internal, kwargs)
- __declare_closure_proto(name, _internal, kwargs)
- __declare_lang_protos(name, _internal, kwargs)
+ __declare_native(name, _internal, False, kwargs)
+ __declare_closure_proto(name, _internal, False, kwargs)
+ __declare_lang_protos(name, _internal, False, kwargs)
+
+
+def _service(name,
+ flavor = "normal",
+ **kwargs):
+
+ """
+ Define a service, contained in a Protobuf file, potentially with models to carry along as well. This injects
+ additional dependencies and prepares targets related to RPC services.
+
+ :param name: Name of the target.
+ :param kwargs: Keyword arguments to pass along.
+ """
+
+ __declare_native(name, False, True, kwargs)
+ __declare_closure_proto(name, False, True, kwargs)
+ __declare_lang_protos(name, False, True, kwargs)
+
+ _java_grpc_library(
+ name = "%s-%s" % (name, GRPCJAVA_POSTFIX_),
+ srcs = [":%s" % name],
+ deps = [":%s-%s" % (name, JAVAPROTO_POSTFIX_)],
+ flavor = flavor,
+ )
model = _proto
+service = _service
model_package = _module
diff --git a/defs/toolchain/soy/rules.bzl b/defs/toolchain/soy/rules.bzl
index 288f7f9ad..cb8d65c98 100644
--- a/defs/toolchain/soy/rules.bzl
+++ b/defs/toolchain/soy/rules.bzl
@@ -1,4 +1,3 @@
-
load(
"@io_bazel_rules_closure//closure/private/rules:soy_library.bzl",
_soy_library = "soy_library",
@@ -24,6 +23,14 @@ load(
_PYTHON_TEMPLATES = "PYTHON_TEMPLATES",
)
+INJECTED_SSR_SOY_DEPS = [
+ "//gust/page:page_soy",
+]
+
+INJECTED_SSR_PROTO_DEPS = [
+ "//gust/page:page_proto",
+]
+
def _template_library(name,
srcs,
@@ -36,6 +43,7 @@ def _template_library(name,
js = _JS_TEMPLATES,
java = _JAVA_TEMPLATES,
python = _PYTHON_TEMPLATES,
+ java_package = None,
precompile = True):
""" Declare a universal, cross-platform template library, making use of the built-in
@@ -73,7 +81,36 @@ def _template_library(name,
[("%s-java_jcompiled" % p) for p in soy_deps]),
proto_deps = [("%s-%s" % (p, CLOSUREPROTO_POSTFIX_)) for p in proto_deps],
precompile = precompile,
+ java_package = java_package,
)
+def _ssr_library(name,
+ srcs,
+ soy_deps = [],
+ js_deps = [],
+ py_deps = [],
+ java_deps = [],
+ proto_deps = [],
+ style_deps = [],
+ java = _JAVA_TEMPLATES,
+ python = _PYTHON_TEMPLATES,
+ java_package = None,
+ precompile = True,
+ **kwargs):
+
+ """ Declare a template for use exclusively during SSR (Server-Side Rendering). This
+ also injects additional SSR-related dependencies automatically. """
+
+ _template_library(
+ name = name,
+ srcs = srcs,
+ soy_deps = (soy_deps or []) + INJECTED_SSR_SOY_DEPS,
+ proto_deps = (proto_deps or []) + INJECTED_SSR_PROTO_DEPS,
+ java_package = None,
+ js = False,
+ )
+
+
+ssr_library = _ssr_library
template_library = _template_library
diff --git a/defs/toolchain/templates.bzl b/defs/toolchain/templates.bzl
index dad0d74c4..cd633a13e 100644
--- a/defs/toolchain/templates.bzl
+++ b/defs/toolchain/templates.bzl
@@ -1,8 +1,10 @@
load(
"//defs/toolchain/soy:rules.bzl",
+ _ssr_library = "ssr_library",
_template_library = "template_library",
)
+ssr_library = _ssr_library
template_library = _template_library
diff --git a/external/proto_common.bzl b/external/proto_common.bzl
index 889b2b72c..ddca044a1 100644
--- a/external/proto_common.bzl
+++ b/external/proto_common.bzl
@@ -1,4 +1,3 @@
-
package(
default_visibility = ["//visibility:public"],
)
@@ -71,3 +70,21 @@ proto_library(
name = "type_timeofday",
srcs = ["google/type/timeofday.proto"],
)
+
+# RPC Types
+proto_library(
+ name = "rpc_code",
+ srcs = ["google/rpc/code.proto"],
+)
+
+proto_library(
+ name = "rpc_error_details",
+ srcs = ["google/rpc/error_details.proto"],
+ deps = ["@com_google_protobuf//:duration_proto"],
+)
+
+proto_library(
+ name = "rpc_status",
+ srcs = ["google/rpc/status.proto"],
+ deps = ["@com_google_protobuf//:any_proto"],
+)
diff --git a/external/safe_html_types.bzl b/external/safe_html_types.bzl
new file mode 100644
index 000000000..f7aba1a0e
--- /dev/null
+++ b/external/safe_html_types.bzl
@@ -0,0 +1,13 @@
+package(
+ default_visibility = ["//visibility:public"],
+)
+
+load("@rules_proto//proto:defs.bzl", "proto_library")
+
+
+# Safe HTML Types
+proto_library(
+ name = "proto",
+ srcs = ["proto/src/main/protobuf/webutil/html/types/html.proto"],
+ strip_import_prefix = "proto/src/main/protobuf",
+)
diff --git a/proto/BUILD.bazel b/gust/BUILD.bazel
similarity index 100%
rename from proto/BUILD.bazel
rename to gust/BUILD.bazel
diff --git a/gust/api/BUILD.bazel b/gust/api/BUILD.bazel
new file mode 100644
index 000000000..08b5fb5ee
--- /dev/null
+++ b/gust/api/BUILD.bazel
@@ -0,0 +1,40 @@
+package(
+ default_visibility = ["//visibility:public"],
+)
+
+load(
+ "//defs/toolchain:schema.bzl",
+ "model",
+ "model_package",
+)
+
+## API/Services
+model(
+ name = "openapiv2",
+ srcs = ["openapiv2.proto"],
+ deps = [
+ "@com_google_protobuf//:any_proto",
+ "@com_google_protobuf//:struct_proto",
+ ],
+ _internal = True,
+)
+
+model(
+ name = "services",
+ srcs = ["services.proto"],
+ deps = [
+ ":openapiv2",
+ "@com_google_protobuf//:descriptor_proto",
+ ],
+ _internal = True,
+)
+
+
+model_package(
+ name = "api",
+ deps = [
+ ":openapiv2",
+ ":services",
+ ],
+ _internal = True,
+)
diff --git a/gust/api/openapiv2.proto b/gust/api/openapiv2.proto
new file mode 100644
index 000000000..00530a4c3
--- /dev/null
+++ b/gust/api/openapiv2.proto
@@ -0,0 +1,379 @@
+/**
+ * Specifies annotation-consumed structures specifically dealing with OpenAPI v2/Swagger definitions. This source file
+ * was inlined from `grpc-gateway` and modified (see `LICENSES/grpc-gateway.txt`).
+ */
+
+syntax = "proto3";
+
+package api.services.openapiv2;
+
+option optimize_for = SPEED;
+option cc_enable_arenas = true;
+option java_multiple_files = true;
+option java_string_check_utf8 = true;
+option java_outer_classname = "OpenAPIv2";
+option php_namespace = "Elide";
+option php_class_prefix = "ELD";
+option swift_prefix = "Elide";
+option objc_class_prefix = "ELD";
+option ruby_package = "Elide::API";
+option java_package = "tools.elide.api";
+option csharp_namespace = "Elide.API";
+option go_package = "github.com/elide-tools/elide/api";
+
+import "google/protobuf/any.proto";
+import "google/protobuf/struct.proto";
+
+
+// `Swagger` is a representation of OpenAPI v2 specification's Swagger object.
+//
+// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#swaggerObject
+message Swagger {
+ string swagger = 1;
+ Info info = 2;
+ string host = 3;
+
+ // `base_path` is the common prefix path used on all API endpoints (ie. /api, /v1, etc.). By adding this,
+ // it allows you to remove this portion from the path endpoints in your Swagger file making them easier
+ // to read. Note that using `base_path` does not change the endpoint paths that are generated in the resulting
+ // Swagger file. If you wish to use `base_path` with relatively generated Swagger paths, the
+ // `base_path` prefix must be manually removed from your `google.api.http` paths and your code changed to
+ // serve the API from the `base_path`.
+ string base_path = 4;
+ enum SwaggerScheme {
+ UNKNOWN = 0;
+ HTTP = 1;
+ HTTPS = 2;
+ WS = 3;
+ WSS = 4;
+ }
+ repeated SwaggerScheme schemes = 5;
+ repeated string consumes = 6;
+ repeated string produces = 7;
+ // field 8 is reserved for 'paths'.
+ reserved 8;
+ // field 9 is reserved for 'definitions', which at this time are already
+ // exposed as and customizable as proto messages.
+ reserved 9;
+ map responses = 10;
+ SecurityDefinitions security_definitions = 11;
+ repeated SecurityRequirement security = 12;
+ // field 13 is reserved for 'tags', which are supposed to be exposed as and
+ // customizable as proto services.
+ // service objects into OpenAPI v2 Tag objects.
+ reserved 13;
+ ExternalDocumentation external_docs = 14;
+ map extensions = 15;
+}
+
+// `Operation` is a representation of OpenAPI v2 specification's Operation object.
+//
+// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#operationObject
+message Operation {
+ repeated string tags = 1;
+ string summary = 2;
+ string description = 3;
+ ExternalDocumentation external_docs = 4;
+ string operation_id = 5;
+ repeated string consumes = 6;
+ repeated string produces = 7;
+ // field 8 is reserved for 'parameters'.
+ reserved 8;
+ map responses = 9;
+ repeated string schemes = 10;
+ bool deprecated = 11;
+ repeated SecurityRequirement security = 12;
+ map extensions = 13;
+}
+
+// `Response` is a representation of OpenAPI v2 specification's Response object.
+//
+// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#responseObject
+//
+message Response {
+ // `Description` is a short description of the response.
+ // GFM syntax can be used for rich text representation.
+ string description = 1;
+ // `Schema` optionally defines the structure of the response.
+ // If `Schema` is not provided, it means there is no content to the response.
+ Schema schema = 2;
+ // field 3 is reserved for 'headers'.
+ reserved 3;
+ // `Examples` gives per-mimetype response examples.
+ // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#example-object
+ map examples = 4;
+ map extensions = 5;
+}
+
+// `Info` is a representation of OpenAPI v2 specification's Info object.
+//
+// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#infoObject
+message Info {
+ string title = 1;
+ string description = 2;
+ string terms_of_service = 3;
+ Contact contact = 4;
+ License license = 5;
+ string version = 6;
+ map extensions = 7;
+}
+
+// `Contact` is a representation of OpenAPI v2 specification's Contact object.
+//
+// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#contactObject
+message Contact {
+ string name = 1;
+ string url = 2;
+ string email = 3;
+}
+
+// `License` is a representation of OpenAPI v2 specification's License object.
+//
+// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#licenseObject
+message License {
+ // Required. The license name used for the API.
+ string name = 1;
+ // A URL to the license used for the API.
+ string url = 2;
+}
+
+// `ExternalDocumentation` is a representation of OpenAPI v2 specification's
+// ExternalDocumentation object.
+//
+// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#externalDocumentationObject
+message ExternalDocumentation {
+ string description = 1;
+ string url = 2;
+}
+
+// `Schema` is a representation of OpenAPI v2 specification's Schema object.
+//
+// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#schemaObject
+message Schema {
+ JSONSchema json_schema = 1;
+ string discriminator = 2;
+ bool read_only = 3;
+ // field 4 is reserved for 'xml'.
+ reserved 4;
+ ExternalDocumentation external_docs = 5;
+ google.protobuf.Any example = 6;
+}
+
+// `JSONSchema` represents properties from JSON Schema taken, and as used, in
+// the OpenAPI v2 spec.
+//
+// This includes changes made by OpenAPI v2.
+//
+// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#schemaObject
+//
+// See also: https://cswr.github.io/JsonSchema/spec/basic_types/,
+// https://github.com/json-schema-org/json-schema-spec/blob/master/schema.json
+message JSONSchema {
+ // field 1 is reserved for '$id', omitted from OpenAPI v2.
+ reserved 1;
+ // field 2 is reserved for '$schema', omitted from OpenAPI v2.
+ reserved 2;
+ // Ref is used to define an external reference to include in the message.
+ // This could be a fully qualified proto message reference, and that type must be imported
+ // into the protofile. If no message is identified, the Ref will be used verbatim in
+ // the output.
+ // For example:
+ // `ref: ".google.protobuf.Timestamp"`.
+ string ref = 3;
+ // field 4 is reserved for '$comment', omitted from OpenAPI v2.
+ reserved 4;
+ string title = 5;
+ string description = 6;
+ string default = 7;
+ bool read_only = 8;
+ // field 9 is reserved for 'examples', which is omitted from OpenAPI v2 in favor of 'example' field.
+ reserved 9;
+ double multiple_of = 10;
+ double maximum = 11;
+ bool exclusive_maximum = 12;
+ double minimum = 13;
+ bool exclusive_minimum = 14;
+ uint64 max_length = 15;
+ uint64 min_length = 16;
+ string pattern = 17;
+ // field 18 is reserved for 'additionalItems', omitted from OpenAPI v2.
+ reserved 18;
+ // field 19 is reserved for 'items', but in OpenAPI-specific way.
+ reserved 19;
+ uint64 max_items = 20;
+ uint64 min_items = 21;
+ bool unique_items = 22;
+ // field 23 is reserved for 'contains', omitted from OpenAPI v2.
+ reserved 23;
+ uint64 max_properties = 24;
+ uint64 min_properties = 25;
+ repeated string required = 26;
+ // field 27 is reserved for 'additionalProperties', but in OpenAPI-specific way.
+ reserved 27;
+ // field 28 is reserved for 'definitions', omitted from OpenAPI v2.
+ reserved 28;
+ // field 29 is reserved for 'properties', but in OpenAPI-specific way.
+ reserved 29;
+ // following fields are reserved, as the properties have been omitted from OpenAPI v2:
+ // patternProperties, dependencies, propertyNames, const
+ reserved 30 to 33;
+ // Items in 'array' must be unique.
+ repeated string array = 34;
+
+ enum JSONSchemaSimpleTypes {
+ UNKNOWN = 0;
+ ARRAY = 1;
+ BOOLEAN = 2;
+ INTEGER = 3;
+ NULL = 4;
+ NUMBER = 5;
+ OBJECT = 6;
+ STRING = 7;
+ }
+
+ repeated JSONSchemaSimpleTypes type = 35;
+ // following fields are reserved, as the properties have been omitted from OpenAPI v2:
+ // format, contentMediaType, contentEncoding, if, then, else
+ reserved 36 to 41;
+ // field 42 is reserved for 'allOf', but in OpenAPI-specific way.
+ reserved 42;
+ // following fields are reserved, as the properties have been omitted from OpenAPI v2:
+ // anyOf, oneOf, not
+ reserved 43 to 45;
+}
+
+// `Tag` is a representation of OpenAPI v2 specification's Tag object.
+//
+// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#tagObject
+message Tag {
+ // field 1 is reserved for 'name'. In our generator, this is (to be) extracted
+ // from the name of proto service, and thus not exposed to the user, as
+ // changing tag object's name would break the link to the references to the
+ // tag in individual operation specifications.
+ //
+ // global Tag object, then use that name to reference the tag throughout the
+ // Swagger file.
+ reserved 1;
+ string description = 2;
+ ExternalDocumentation external_docs = 3;
+}
+
+// `SecurityDefinitions` is a representation of OpenAPI v2 specification's
+// Security Definitions object.
+//
+// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#securityDefinitionsObject
+//
+// A declaration of the security schemes available to be used in the
+// specification. This does not enforce the security schemes on the operations
+// and only serves to provide the relevant details for each scheme.
+message SecurityDefinitions {
+ // A single security scheme definition, mapping a "name" to the scheme it defines.
+ map security = 1;
+}
+
+// `SecurityScheme` is a representation of OpenAPI v2 specification's
+// Security Scheme object.
+//
+// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#securitySchemeObject
+//
+// Allows the definition of a security scheme that can be used by the
+// operations. Supported schemes are basic authentication, an API key (either as
+// a header or as a query parameter) and OAuth2's common flows (implicit,
+// password, application and access code).
+message SecurityScheme {
+ // Required. The type of the security scheme. Valid values are "basic",
+ // "apiKey" or "oauth2".
+ enum Type {
+ TYPE_INVALID = 0;
+ TYPE_BASIC = 1;
+ TYPE_API_KEY = 2;
+ TYPE_OAUTH2 = 3;
+ }
+
+ // Required. The location of the API key. Valid values are "query" or "header".
+ enum In {
+ IN_INVALID = 0;
+ IN_QUERY = 1;
+ IN_HEADER = 2;
+ }
+
+ // Required. The flow used by the OAuth2 security scheme. Valid values are
+ // "implicit", "password", "application" or "accessCode".
+ enum Flow {
+ FLOW_INVALID = 0;
+ FLOW_IMPLICIT = 1;
+ FLOW_PASSWORD = 2;
+ FLOW_APPLICATION = 3;
+ FLOW_ACCESS_CODE = 4;
+ }
+
+ // Required. The type of the security scheme. Valid values are "basic",
+ // "apiKey" or "oauth2".
+ Type type = 1;
+ // A short description for security scheme.
+ string description = 2;
+ // Required. The name of the header or query parameter to be used.
+ //
+ // Valid for apiKey.
+ string name = 3;
+ // Required. The location of the API key. Valid values are "query" or "header".
+ //
+ // Valid for apiKey.
+ In in = 4;
+ // Required. The flow used by the OAuth2 security scheme. Valid values are
+ // "implicit", "password", "application" or "accessCode".
+ //
+ // Valid for oauth2.
+ Flow flow = 5;
+ // Required. The authorization URL to be used for this flow. This SHOULD be in
+ // the form of a URL.
+ //
+ // Valid for oauth2/implicit and oauth2/accessCode.
+ string authorization_url = 6;
+ // Required. The token URL to be used for this flow. This SHOULD be in the
+ // form of a URL.
+ //
+ // Valid for oauth2/password, oauth2/application and oauth2/accessCode.
+ string token_url = 7;
+ // Required. The available scopes for the OAuth2 security scheme.
+ //
+ // Valid for oauth2.
+ Scopes scopes = 8;
+ map extensions = 9;
+}
+
+// `SecurityRequirement` is a representation of OpenAPI v2 specification's
+// Security Requirement object.
+//
+// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#securityRequirementObject
+//
+// Lists the required security schemes to execute this operation. The object can
+// have multiple security schemes declared in it which are all required (that
+// is, there is a logical AND between the schemes).
+//
+// The name used for each property MUST correspond to a security scheme
+// declared in the Security Definitions.
+message SecurityRequirement {
+ // If the security scheme is of type "oauth2", then the value is a list of
+ // scope names required for the execution. For other security scheme types,
+ // the array MUST be empty.
+ message SecurityRequirementValue {
+ repeated string scope = 1;
+ }
+ // Each name must correspond to a security scheme which is declared in
+ // the Security Definitions. If the security scheme is of type "oauth2",
+ // then the value is a list of scope names required for the execution.
+ // For other security scheme types, the array MUST be empty.
+ map security_requirement = 1;
+}
+
+// `Scopes` is a representation of OpenAPI v2 specification's Scopes object.
+//
+// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#scopesObject
+//
+// Lists the available scopes for an OAuth2 security scheme.
+message Scopes {
+ // Maps between a name of a scope to a short description of it (as the value
+ // of the property).
+ map scope = 1;
+}
diff --git a/gust/api/services.proto b/gust/api/services.proto
new file mode 100644
index 000000000..c2c0f38f0
--- /dev/null
+++ b/gust/api/services.proto
@@ -0,0 +1,65 @@
+/**
+ * Specifies annotations that modify or otherwise deal with service definitions, which are used to generate APIs through
+ * tools like gRPC. This source file was inlined from `grpc-gateway` and modified (see `LICENSES/grpc-gateway.txt`).
+ */
+syntax = "proto3";
+
+package api.services;
+
+option optimize_for = SPEED;
+option cc_enable_arenas = true;
+option java_multiple_files = true;
+option java_string_check_utf8 = true;
+option java_outer_classname = "Services";
+option php_namespace = "Elide";
+option php_class_prefix = "ELD";
+option swift_prefix = "Elide";
+option objc_class_prefix = "ELD";
+option ruby_package = "Elide::API";
+option java_package = "tools.elide.api";
+option csharp_namespace = "Elide.API";
+option go_package = "github.com/elide-tools/elide/api";
+
+import "google/protobuf/descriptor.proto";
+import "gust/api/openapiv2.proto";
+
+
+extend google.protobuf.FileOptions {
+ // ID assigned by protobuf-global-extension-registry@google.com for grpc-gateway project.
+ //
+ // All IDs are the same, as assigned. It is okay that they are the same, as they extend
+ // different descriptor messages.
+ api.services.openapiv2.Swagger openapiv2_swagger = 1042;
+}
+
+extend google.protobuf.MethodOptions {
+ // ID assigned by protobuf-global-extension-registry@google.com for grpc-gateway project.
+ //
+ // All IDs are the same, as assigned. It is okay that they are the same, as they extend
+ // different descriptor messages.
+ api.services.openapiv2.Operation openapiv2_operation = 1042;
+}
+
+extend google.protobuf.MessageOptions {
+ // ID assigned by protobuf-global-extension-registry@google.com for grpc-gateway project.
+ //
+ // All IDs are the same, as assigned. It is okay that they are the same, as they extend
+ // different descriptor messages.
+ api.services.openapiv2.Schema openapiv2_schema = 1042;
+}
+
+extend google.protobuf.ServiceOptions {
+ // ID assigned by protobuf-global-extension-registry@google.com for grpc-gateway project.
+ //
+ // All IDs are the same, as assigned. It is okay that they are the same, as they extend
+ // different descriptor messages.
+ api.services.openapiv2.Tag openapiv2_tag = 1042;
+}
+
+extend google.protobuf.FieldOptions {
+ // ID assigned by protobuf-global-extension-registry@google.com for grpc-gateway project.
+ //
+ // All IDs are the same, as assigned. It is okay that they are the same, as they extend
+ // different descriptor messages.
+ api.services.openapiv2.JSONSchema openapiv2_field = 1042;
+}
diff --git a/gust/base/BUILD.bazel b/gust/base/BUILD.bazel
new file mode 100644
index 000000000..16d58d430
--- /dev/null
+++ b/gust/base/BUILD.bazel
@@ -0,0 +1,38 @@
+package(
+ default_visibility = ["//visibility:public"],
+)
+
+load(
+ "//defs/toolchain:schema.bzl",
+ "model",
+ "model_package",
+)
+
+load(
+ "//defs/toolchain:templates.bzl",
+ "template_library",
+)
+
+## Base Models
+model(
+ name = "language_proto",
+ srcs = ["language.proto"],
+)
+
+
+model_package(
+ name = "base",
+ deps = [
+ ":language_proto",
+ ],
+ _internal = True,
+)
+
+
+## Base Templates
+template_library(
+ name = "language_soy",
+ srcs = ["language.soy"],
+ proto_deps = [":language_proto"],
+ java_package = "gust.core.language",
+)
diff --git a/gust/base/language.proto b/gust/base/language.proto
new file mode 100644
index 000000000..1223f7b18
--- /dev/null
+++ b/gust/base/language.proto
@@ -0,0 +1,66 @@
+/**
+ * Defines basic framework structures related to modelling human language. These structures are renderable by the Soy
+ * templates stored alongside them, and are used for various things throughout the codebase.
+ */
+syntax = "proto3";
+package base;
+
+option optimize_for = SPEED;
+option cc_enable_arenas = true;
+option java_multiple_files = true;
+option java_string_check_utf8 = true;
+option java_outer_classname = "BaseLanguage";
+option php_namespace = "Elide";
+option php_class_prefix = "ELD";
+option swift_prefix = "Elide";
+option objc_class_prefix = "ELD";
+option ruby_package = "Elide::Base";
+option java_package = "tools.elide.base";
+option csharp_namespace = "Elide.Base";
+option go_package = "github.com/elide-tools/elide/base";
+
+
+// Specifies common/major languages present in software development or the open internet. This is not an exhaustive list
+// and if you need to specify an entry that isn't present (without a code change), it is best to opt for the `iso_`-
+// prefixed fields in `LanguageSpec`.
+enum Language {
+ // Generic, unqualified reference to English.
+ ENGLISH = 0;
+
+ // Traditional French.
+ FRENCH = 1;
+
+ // Generic, unqualified reference to Spanish.
+ SPANISH = 2;
+
+ // Generic, unqualified reference to Chinese.
+ CHINESE = 3;
+
+ // Specific reference to Mandarin Chinese.
+ CHINESE_MANDARIN = 4;
+
+ // Specific reference to Cantonese.
+ CHINESE_CANTONESE = 5;
+}
+
+// Specifies a given language, along with a nationality for that language.
+message LanguageSpec {
+ // Specifies a language either via the enumerated specifier, or the proper two-character ISO code for the language.
+ oneof selection {
+ // Enumerated language specifier.
+ Language language = 1;
+
+ // Two-character ISO-standard language specifier (for example: "EN" for English, "FR" for French). Casing doesn't
+ // matter but upper-casing should be preferred for consistency.
+ string iso_language = 2;
+ }
+
+ // Specifies an optional modifier for a given language `selection`.
+ oneof modifier {
+ // Two-character ISO-standard country code, used as a modifier for a language spec (i.e. the `us` in `en-us`).
+ string iso_country = 3;
+
+ // Dialect to specify as part of this language spec, based on a simple two-character string.
+ string dialect = 4;
+ }
+}
diff --git a/gust/base/language.soy b/gust/base/language.soy
new file mode 100644
index 000000000..4a8a8c9ec
--- /dev/null
+++ b/gust/base/language.soy
@@ -0,0 +1,38 @@
+
+{namespace gust.base}
+
+
+/**
+ * Render a standard language specification into a text designation that includes both the language and the dialect. In
+ * many cases, the dialect is simply a country code. For example, a language specification with the main language set to
+ * `ENGLISH`, and a dialect of `US`, should produce `en-US`.
+ */
+{template .languageSpec kind="text"}
+ {@param spec: base.LanguageSpec} /** Specifies information about the language to render into string form. */
+
+ {let $resolvedLanguage kind="text"}
+ {switch $spec.language}
+ {case 0}en
+ {case 1}fr
+ {case 2}sp
+ {case 3}cn
+ {case 4}cn
+ {case 5}cn
+ {default}en
+ {/switch}
+ {/let}
+ {let $resolvedDialect kind="text"}
+ {if isNonnull($spec.dialect)}
+ {$spec.dialect}
+ {else}
+ US
+ {/if}
+ {/let}
+ {if isNonnull($resolvedLanguage)}
+ {if isNonnull($resolvedDialect)}
+ {$resolvedLanguage}-{$resolvedDialect}
+ {else}
+ {$resolvedLanguage}
+ {/if}
+ {/if}
+{/template}
diff --git a/proto/core/BUILD.bazel b/gust/core/BUILD.bazel
similarity index 78%
rename from proto/core/BUILD.bazel
rename to gust/core/BUILD.bazel
index 52f56ae3c..98fad0869 100644
--- a/proto/core/BUILD.bazel
+++ b/gust/core/BUILD.bazel
@@ -10,8 +10,8 @@ load(
## Core
model(
- name = "Datamodel",
- srcs = ["Datamodel.proto"],
+ name = "datamodel",
+ srcs = ["datamodel.proto"],
deps = ["@com_google_protobuf//:descriptor_proto"],
_internal = True,
)
@@ -19,6 +19,6 @@ model(
model_package(
name = "core",
- deps = [":Datamodel"],
+ deps = [":datamodel"],
_internal = True,
)
diff --git a/proto/core/Datamodel.proto b/gust/core/datamodel.proto
similarity index 89%
rename from proto/core/Datamodel.proto
rename to gust/core/datamodel.proto
index 30f49fa43..9267989ec 100644
--- a/proto/core/Datamodel.proto
+++ b/gust/core/datamodel.proto
@@ -1,4 +1,3 @@
-
/**
* Specifies structures that relate to data modeling and the structure of the data. Enumerates collection mode and field
* type, required status, and so on. Also includes field metadata (like summaries, descriptions, and so on).
@@ -6,6 +5,20 @@
syntax = "proto3";
package core;
+option optimize_for = SPEED;
+option cc_enable_arenas = true;
+option java_multiple_files = true;
+option java_string_check_utf8 = true;
+option java_outer_classname = "Datamodel";
+option php_namespace = "Elide";
+option php_class_prefix = "ELD";
+option swift_prefix = "Elide";
+option objc_class_prefix = "ELD";
+option ruby_package = "Elide::Core";
+option java_package = "tools.elide.core";
+option csharp_namespace = "Elide.Core";
+option go_package = "github.com/elide-tools/elide/core/datamodel;datamodel";
+
import "google/protobuf/descriptor.proto";
@@ -75,11 +88,8 @@ enum FieldType {
// Specifies the types an object may use when defining special objects. These types govern how an object is treated,
// listed, and adapted throughout its lifecycle.
enum DatapointType {
- // The datamodel has no special type specified.
- NO_TYPE = 0;
-
// The datamodel represents an object record.
- OBJECT = 1;
+ OBJECT = 0;
// The datamodel represents an event type.
EVENT = 2;
@@ -92,6 +102,17 @@ enum DatapointType {
}
+// Specifies a special role, if applicable, for a given enumerated type. Each selection governs some special behavior
+// related to defined enums with APIs, databases, and so on.
+enum EnumeratedType {
+ // Specifies a generic enumeration structure.
+ GENERIC_ENUMERATION = 0;
+
+ // Specifies a structure which enumerates error states.
+ ERRORS = 1;
+}
+
+
// Options specified for a given datamodel point (which can be a message, a field, an enum, and so on), which describe
// how the object or field may be validated in various circumstances, and how it should be handled with regard to
// exposure visibility to invoking code.
@@ -181,37 +202,34 @@ message FieldPersistenceOptions {
// Field type, for special-case fields.
FieldType type = 1;
- // String description of this field included in schemas.
- string description = 2;
-
// Summary for this field, which provides a narrative description. It should be suitable for use in external
// circumstances, like documentation.
- string summary = 3;
+ string summary = 2;
// This item is a timestamp, and we would like it to be automatically updated each time the model that contains it is
// modified in underlying storage. The field should be read-only.
- bool stamp_update = 5;
+ bool stamp_update = 3;
// This item is a timestamp, and we would like it to be automatically set when the model is created. After that point,
// we would like this field to be read-only.
- bool stamp_create = 6;
+ bool stamp_create = 4;
// This field should not allow writes, but rather produce its value dynamically. Fields marked in this manner cannot
// be set by external code at any point in time.
- bool read_only = 7;
+ bool read_only = 5;
// This field should allow writes when the model that contains it is written, but then, henceforth, the model should
// not allow this field to be mutated.
- bool immutable = 8;
+ bool immutable = 6;
// This field should always be explicitly listed with a value, even if it is set to the default value. This function
// is especially useful for enums with default values, when there is a desire to have consistent indexes.
- bool explicit = 9;
+ bool explicit = 7;
// Describes the visibility level of a given field in a tree of fields. This value applies recursively under message
// fields on which it is applied. Depending on the visibility level active when data is deserialized or serialized,
// certain data may be withheld corresponding to the invoking user or system's access level.
- FieldVisibility visibility = 10;
+ FieldVisibility visibility = 8;
}
@@ -282,8 +300,10 @@ extend google.protobuf.EnumValueOptions {
DatapointOptions value = 8007;
}
-
extend google.protobuf.EnumOptions {
+ // Specifies a special role, if applicable, for a given enumerated type.
+ EnumeratedType enum_role = 9000;
+
// Settings that specify state for this enum value, including validation settings, as applicable.
DatapointOptions enumeration = 9001;
}
diff --git a/gust/dom/BUILD.bazel b/gust/dom/BUILD.bazel
new file mode 100644
index 000000000..d282d42d6
--- /dev/null
+++ b/gust/dom/BUILD.bazel
@@ -0,0 +1,15 @@
+package(
+ default_visibility = ["//visibility:public"],
+)
+
+load(
+ "//defs/toolchain:templates.bzl",
+ "template_library",
+)
+
+
+template_library(
+ name = "assets_soy",
+ srcs = ["assets.soy"],
+ java_package = "gust.dom",
+)
diff --git a/gust/dom/assets.soy b/gust/dom/assets.soy
new file mode 100644
index 000000000..b31389ece
--- /dev/null
+++ b/gust/dom/assets.soy
@@ -0,0 +1,45 @@
+
+{namespace gust.dom.assets}
+
+
+/**
+ * Render a script asset link from a given `JavaScript` proto type. These style references are always made via URIs
+ * listed in HTML
+{/template}
+
+
+/**
+ * Render a stylesheet asset link from a given `Stylesheet` proto type. These style references are always made via URIs
+ * listed in HTML links.
+ */
+{template .stylesheet}
+ {@param sheet: trusted_resource_uri} /** URI at which to include the stylesheet. */
+ {@param? media: string} /** Media attribute to specify for the stylesheet. */
+
+ {if isNonnull($sheet)}
+
+ {/if}
+{/template}
diff --git a/gust/page/BUILD.bazel b/gust/page/BUILD.bazel
new file mode 100644
index 000000000..c5244d689
--- /dev/null
+++ b/gust/page/BUILD.bazel
@@ -0,0 +1,48 @@
+package(
+ default_visibility = ["//visibility:public"],
+)
+
+load(
+ "//defs/toolchain:schema.bzl",
+ "model",
+)
+
+load(
+ "//defs/toolchain:templates.bzl",
+ "template_library",
+)
+
+
+## Page Models
+model(
+ name = "media_proto",
+ srcs = ["media.proto"],
+)
+
+model(
+ name = "semantic_proto",
+ srcs = ["semantic.proto"],
+ deps = [":media_proto"],
+)
+
+model(
+ name = "page_proto",
+ srcs = ["page.proto"],
+ deps = [
+ ":semantic_proto",
+ "//gust/base:language_proto",
+ "@safe_html_types//:proto",
+ ]
+)
+
+## Page Templates
+template_library(
+ name = "page_soy",
+ srcs = ["page.soy"],
+ java_package = "gust.page",
+ proto_deps = [":page_proto"],
+ soy_deps = [
+ "//gust/base:language_soy",
+ "//gust/dom:assets_soy",
+ ]
+)
diff --git a/gust/page/media.proto b/gust/page/media.proto
new file mode 100644
index 000000000..2cce0ea11
--- /dev/null
+++ b/gust/page/media.proto
@@ -0,0 +1,190 @@
+/**
+ * Structures that express and define page media assets, such as videos and images. Used by regular page context and
+ * also semantic metadata context.
+ */
+syntax = "proto3";
+package page;
+
+option optimize_for = SPEED;
+option cc_enable_arenas = true;
+option java_multiple_files = true;
+option java_string_check_utf8 = true;
+option java_outer_classname = "WebMedia";
+option php_namespace = "Elide";
+option php_class_prefix = "ELD";
+option swift_prefix = "Elide";
+option objc_class_prefix = "ELD";
+option ruby_package = "Elide::Page";
+option java_package = "tools.elide.page";
+option csharp_namespace = "Elide.Page";
+option go_package = "github.com/elide-tools/elide/page";
+
+
+// Enumerates known or supported video asset providers.
+enum VideoProvider {
+ // Private hosting for a given video asset.
+ PRIVATE = 0;
+
+ // YouTube hosting for a given video asset.
+ YOUTUBE = 1;
+
+ // Vimeo hosting for a given video asset.
+ VIMEO = 2;
+}
+
+
+// Defines broad types of media that may be expressed.
+enum MediaType {
+ // This media is an image asset of some kind.
+ IMAGE = 0;
+
+ // This media is a video asset of some kind.
+ VIDEO = 1;
+
+ // This media is an audio asset of some kind.
+ AUDIO = 2;
+
+ // The media is a link to another asset or page of some kind.
+ LINK = 3;
+
+ // The media is an arbitrary kind of digital document.
+ DOCUMENT = 4;
+}
+
+
+// Describes resolutions at which video assets may be made available.
+enum VideoResolution {
+ // The video is available in low-res form.
+ LOW = 0;
+
+ // The video is available in HD (720p/720i-1080p/1080i) form.
+ HD = 1;
+
+ // The video is available in 4K Ultra HD (UHD).
+ UHD = 2;
+}
+
+
+// Defines the structure of attached content media, which is intended for emission in a given web page
+// via some sort of render process, depending on the context in which this media is used.
+message MediaAsset {
+ // Describes concrete information about a media link, attached to some web page or data point.
+ message Link {
+ // URI to consider for an attached media link.
+ string uri = 1;
+
+ // Alternative text to display for this link, if applicable.
+ string alt = 2;
+ }
+
+ // Describes concrete information about an image asset, attached to some web page or data point.
+ message Image {
+ // Describes information about an individual image asset, which is part of an attached image.
+ message ImageAsset {
+ // Specifies the intended resolution of this image asset.
+ float resolution = 1;
+
+ // Specifies the kind of image attached as this asset.
+ string mime = 2;
+
+ // Specifies the native width of this image asset.
+ uint64 width = 3;
+
+ // Specifies the native height of this image asset.
+ uint64 height = 4;
+
+ // Specifies the content, or content by reference, for this image.
+ oneof content {
+ // Raw Base64 content to be embedded directly in an image tag.
+ string b64 = 10;
+
+ // URI to be used in reference to this image asset.
+ string uri = 20;
+ }
+ }
+
+ // Concrete information regarding this image asset.
+ repeated ImageAsset asset = 1;
+ }
+
+ // Describes concrete information about a video asset, attached to some web page or data point.
+ message Video {
+ // Describes information about an individual video asset, which is part of an attached video.
+ message VideoAsset {
+ // Resolutions at which a video might be available.
+ VideoResolution resolution = 1;
+
+ // Image asset to be used as a thumbnail for this video asset.
+ Image thumb = 2;
+
+ // URI where the video may be streamed or accessed.
+ string uri = 3;
+ }
+
+ // Describes where the video may be streamed from, or accessed.
+ VideoProvider provider = 1;
+
+ // Title to display for this video asset.
+ string title = 2;
+
+ // Description for this video asset.
+ string description = 3;
+
+ // Duration of the video asset, in milliseconds.
+ uint64 run_time = 4;
+
+ // Describes the assets that back this video media.
+ repeated VideoAsset asset = 5;
+ }
+
+ // Specifies information about a digital document of some kind, that is being referenced as an asset.
+ message Document {
+ // Enumerates common types of digital documents.
+ enum DocumentType {
+ // Default: generic document type.
+ GENERIC_DOCUMENT = 0;
+
+ // Plain text document.
+ TEXT_PLAIN = 1;
+
+ // Rich text document.
+ TEXT_RICH = 2;
+
+ // Markdown-formatted document.
+ TEXT_MARKDOWN = 3;
+
+ // HTML-formatted document.
+ TEXT_HTML = 4;
+
+ // Comma Separated Values in text format.
+ TEXT_CSV = 5;
+
+ // Portable Document Format.
+ PDF = 6;
+
+ // Word (old format, extension `.doc`).
+ WORD_DOC = 7;
+
+ // Word (new format, extension `.docx`).
+ WORD_DOCX = 8;
+ }
+
+ // Specifies the type of document.
+ DocumentType type = 1;
+ }
+
+ // Describes, in broad terms, the kind of media being attached.
+ MediaType kind = 1;
+
+ // Specifies concrete information about the attached media asset.
+ oneof media {
+ // Describes concrete information about an attached media link.
+ Link link = 10;
+
+ // Describes concrete information about an attached image.
+ Image image = 20;
+
+ // Describes concrete information about an attached video.
+ Video video = 30;
+ }
+}
diff --git a/gust/page/page.proto b/gust/page/page.proto
new file mode 100644
index 000000000..1d0223292
--- /dev/null
+++ b/gust/page/page.proto
@@ -0,0 +1,400 @@
+/**
+ * Defines structures related to "page context" - i.e. the typed base context for rendering pages server-side. These
+ * structures provide definitions for the page head, scripts appended to the body, and other page metadata.
+ */
+syntax = "proto3";
+package page;
+
+option optimize_for = SPEED;
+option cc_enable_arenas = true;
+option java_multiple_files = true;
+option java_string_check_utf8 = true;
+option java_outer_classname = "WebContext";
+option php_namespace = "Elide";
+option php_class_prefix = "ELD";
+option swift_prefix = "Elide";
+option objc_class_prefix = "ELD";
+option ruby_package = "Elide::Page";
+option java_package = "tools.elide.page";
+option csharp_namespace = "Elide.Page";
+option go_package = "github.com/elide-tools/elide/page";
+
+import "webutil/html/types/html.proto";
+
+import "gust/base/language.proto";
+import "gust/page/semantic.proto";
+
+
+// Defines the notion of a *Render Context* for server-side pages in Gust. This protocol message is filled out with data
+// as configured by the developer (from `application.yml` and the active controller, as applicable) and provided as an
+// injected value to all server-side render operations.
+//
+// When preparing context in Gust, adding a static script or stylesheet is done through `Context`. Setting page metadata
+// like the title, keywords, and manifest - also all done through `Context`. This of course has the added benefit of
+// being completely serializable, repeatable, and so on (i.e. all the benefits Protobuf brings).
+//
+// Major context modules include:
+// - *Metadata*: Page-level metadata.
+// - *OpenGraph*: Properties for OG tags.
+// - *Twitter*: Properties for Twitter cards.
+// - *AppManifest*: Information to link or derive a web application manifest.
+// - *Styles*: Stylesheets and inline head-injected styles ("lifted styles").
+// - *Scripts*: Scripts to include, and inline head-injected logic ("lifted JS").
+message Context {
+ // Defines the structure of well-known page-level metadata, including the page title, description,
+ // keywords, and so on.
+ message Metadata {
+ // Tags for the Facebook Crawler.
+ message OpenGraph {
+ // Name of the website.
+ string site_name = 1;
+
+ // Title of the page.
+ string title = 2;
+
+ // Description of the page.
+ string description = 3;
+
+ // The language the page is written in.
+ base.LanguageSpec locale = 4;
+
+ // The type of page - i.e. article, website, video.
+ string type = 5;
+
+ // Thumbnail to display when page is shared.
+ string image = 6;
+
+ // Directs facebook to scrape another url instead of the url the page was served from.
+ string url = 7;
+ }
+
+ // Tags for the Twitter Crawler.
+ message Twitter {
+ // Name of the website.
+ string site_name = 1;
+
+ // Title of the page.
+ string title = 2;
+
+ // Description of the page.
+ string description = 3;
+
+ // The language the page is written in.
+ base.LanguageSpec locale = 4;
+
+ // The type of card to display on Twitter.
+ string card = 5;
+
+ // Thumbnail to display when page is shared.
+ string image = 6;
+
+ // Directs facebook to scrape another url instead of the url the page was served from.
+ string url = 7;
+ }
+
+ // Defines the HTML title for the page, emitted in the .
+ string title = 1;
+
+ // Defines the meta description content for the page.
+ string description = 2;
+
+ // Defines meta tag keywords, to be included in the page.
+ repeated string keyword = 3;
+
+ // Defines semantic content structure and binding content.
+ page.SemanticMetadata semantic = 4;
+
+ // Defines the viewport settings that should be used by the rendered page.
+ string viewport = 5;
+
+ // Defines a link to a web application manifest, if applicable.
+ webutil.html.types.TrustedResourceUrlProto manifest = 6;
+
+ // Defines a hex code to use as the primary theme color for the application.
+ string theme = 7;
+
+ // Defines an icon to use in iOS circumstances, when used as an app shortcut.
+ string touch_icon = 8;
+
+ // Defines an image to use in iOS circumstances, when launching as an app shortcut.
+ string startup_image = 9;
+
+ // Defines a favicon image link to apply to the browser tab.
+ webutil.html.types.TrustedResourceUrlProto favicon = 10;
+
+ // Defines the language we are rendering the page for.
+ base.LanguageSpec language = 11;
+
+ // Identifier for Google Tag Manager.
+ string gtm_id = 12;
+
+ // Facebook application identifier.
+ string fb_app_id = 13;
+
+ // Describes OpenGraph data for a given page.
+ OpenGraph open_graph = 14;
+
+ // Directive for indexers/robots.
+ string robots = 15;
+
+ // Directive for color scheme compatibility.
+ string color_scheme = 16;
+ }
+
+ // Specifies details about an application manifest, which should be or is linked to a given web
+ // page, that is being rendered by the render engine.
+ message AppManifest {
+ // Specifies the structure of an icon graphic linked to this web page via an application manifest.
+ // Icons can be specified in multiple formats and sizes.
+ message Icon {
+ // Specifies the URI for a given icon.
+ webutil.html.types.TrustedResourceUrlProto src = 1;
+
+ // Specifies the sizes that a given icon is available in.
+ repeated uint32 size = 2;
+
+ // Specifies the content type of a given icon.
+ string mime_type = 3;
+ }
+
+ // Enumerates display modes which are available for selection in the web application manifest
+ // spec. Each display mode is described herein.
+ enum DisplayMode {
+ // Regular browser UI. Default value if left unspecified.
+ BROWSER = 0;
+
+ // All of the available display area is used and no user agent chrome is shown.
+ FULLSCREEN = 1;
+
+ // The application will look and feel like a standalone application. This can include the application
+ // having a different window, its own icon in the application launcher, etc. In this mode, the user
+ // agent will exclude UI elements for controlling navigation, but can include other UI elements such
+ // as a status bar.
+ STANDALONE = 2;
+
+ // The application will look and feel like a standalone application, but will have a minimal set of UI
+ // elements for controlling navigation. The elements will vary by browser.
+ MINIMAL_UI = 3;
+ }
+
+ // Describes available orientation modes, for specifying the default orientation mode for an application
+ // within a web app manifest.
+ enum OrientationMode {
+ // Unspecified, or default, orientation mode/settings.
+ UNSPECIFIED_ORIENTATION = 0;
+
+ // Any orientation mode is supported.
+ ANY = 1;
+
+ // Use the natural orientation mode for the device.
+ NATURAL = 2;
+
+ // Use landscape mode by default.
+ LANDSCAPE = 3;
+
+ // Use portrait mode by default.
+ PORTRAIT = 4;
+ }
+
+ // Specifies details about a related application, which should be considered canonically the same
+ // as this application, but for a different platform.
+ message RelatedApplication {
+ // Enumerates known platforms where related applications might reside.
+ enum AppPlatform {
+ // Unspecified application platform.
+ UNSPECIFIED_APP_PLATFORM = 0;
+
+ // Apple App Store.
+ APPSTORE = 1;
+
+ // Google Play Store.
+ PLAYSTORE = 2;
+
+ // Additional web application.
+ WEB = 3;
+ }
+
+ // ID for this alternative application option.
+ string id = 1;
+
+ // Platform that the related app is listed on.
+ AppPlatform platform = 2;
+
+ // URI where the alternative application can be downloaded.
+ webutil.html.types.TrustedResourceUrlProto uri = 3;
+ }
+
+ // Full name for this application.
+ string name = 1;
+
+ // Short name for this application.
+ string short_name = 2;
+
+ // Starting URL where this application can be entered.
+ string start_url = 3;
+
+ // Defines the developers' preferred display mode for this application.
+ DisplayMode display = 4;
+
+ // Defines the expected application background color.
+ string background_color = 5;
+
+ // Specifies a narrative description about this application.
+ string description = 6;
+
+ // Specifies the language direction - RTL or LTR, for this application.
+ string direction = 7;
+
+ // Specifies the language this application is being served in.
+ base.LanguageSpec language = 8;
+
+ // Specifies expected screen orientation for this application.
+ OrientationMode orientation = 9;
+
+ // Defines the navigation scope for this web application's context.
+ string scope = 11;
+
+ // Flag indicating whether we want to prefer native apps for the user's experience.
+ bool prefer_related_applications = 12;
+
+ // Related native applications that should be considered along with this web application.
+ repeated RelatedApplication related_application = 13;
+
+ // Application icons listed with this manifest.
+ repeated Icon app_icon = 14;
+ }
+
+ // Defines page-level style settings (CSS), including external stylesheets, lifted CSS that should
+ // be rendered in the , and more.
+ message Styles {
+ // Defines the notion of an external stylesheet document, written in CSS, which should be included
+ // via reference rather than inline.
+ message Stylesheet {
+ // URI to a given stylesheet asset.
+ webutil.html.types.TrustedResourceUrlProto uri = 1;
+
+ // Media setting to apply to the style sheet.
+ string media = 2;
+ }
+
+ // CSS code that should be emitted early in the .
+ webutil.html.types.SafeStyleProto lifted = 1;
+
+ // External CSS code to be included in tags.
+ repeated Stylesheet link = 2;
+ }
+
+ // Specifies information about sets of fonts to include in the page via CSS declarations, or imports/link
+ // references. Fonts are considered part of the stylesheet set of a page.
+ message Fonts {
+ // Specifies types of references to font assets that are understood by the rendering system.
+ enum FontReferenceType {
+ // Specifies an internal font, or an explicit set of font assets.
+ INTERNAL = 0;
+
+ // Specifies a font hosted on Google Fonts.
+ GOOGLE_FONTS = 1;
+ }
+
+ // Specifies types of font formats supported for serving by the system.
+ enum FontFormat {
+ // Unspecified font format.
+ UNSPECIFIED_FORMAT = 0;
+
+ // OpenType Format (OTF).
+ OPENTYPE = 1;
+
+ // TrueType Format (TTF).
+ TRUETYPE = 2;
+
+ // Scalable Vector Graphics (SVG).
+ VECTOR = 3;
+
+ // Web Open Font Format (WOFF).
+ WEBFONT = 4;
+
+ // Web Open Font Format 2 (WOFF2).
+ WEBFONT2 = 5;
+
+ // Embedded OpenType (EOT).
+ EMBEDDED_OPENTYPE = 6;
+ }
+
+ // Specifies information about an individual reference to a font file.
+ message FontReference {
+ // Specifies the type of reference being made.
+ FontReferenceType type = 1;
+
+ // Specifies the format of the font reference being made.
+ FontFormat format = 2;
+
+ // Name of the font reference.
+ string name = 3;
+
+ // Weight of the font reference.
+ string weight = 4;
+
+ // Variant of the font reference.
+ string variant = 5;
+
+ // URI reference to this font asset.
+ webutil.html.types.TrustedResourceUrlProto uri = 6;
+ }
+
+ // Specifies a package of fonts included for reference in a given web page.
+ message FontPackage {
+ // Specifies the CSS name used for this font package/family.
+ string name = 1;
+
+ // References to individual constituent font assets.
+ repeated FontReference reference = 2;
+ }
+
+ // Specifies packages of fonts included for reference.
+ repeated FontPackage package = 1;
+ }
+
+ // Specifies information about JavaScript code that should be included with a given page render. Scripts
+ // included in this manner may be emitted inline or by reference (URI).
+ message Scripts {
+ // Defines the notion of an external script document, written in JavaScript, which should be included
+ // via reference rather than inline.
+ message JavaScript {
+ // URI to a given script asset.
+ webutil.html.types.TrustedResourceUrlProto uri = 1;
+
+ // Whether to add the `module` flag to a script.
+ bool module = 2;
+
+ // Whether to add the `defer` flag to a script.
+ bool defer = 3;
+
+ // Whether to add the `async` flag to a script.
+ bool async = 4;
+
+ // ID at which to attach the script tag.
+ string id = 5;
+ }
+
+ // JavaScript code that should be emitted early in the .
+ webutil.html.types.SafeScriptProto lifted = 1;
+
+ // External JavaScript code to be included in tags.
+ repeated JavaScript link = 2;
+ }
+
+ // Metadata definitions for this web page render context.
+ Metadata meta = 1;
+
+ // CSS definitions and lifted code for the page head.
+ Styles styles = 2;
+
+ // Fonts to include/load on the page.
+ Fonts fonts = 3;
+
+ // Scripts to include on the page or lift into the head.
+ Scripts scripts = 4;
+
+ // Application manifest for a given page or web app.
+ AppManifest manifest = 7;
+}
diff --git a/gust/page/page.soy b/gust/page/page.soy
new file mode 100644
index 000000000..d5dbecb05
--- /dev/null
+++ b/gust/page/page.soy
@@ -0,0 +1,187 @@
+
+{namespace gust.page}
+
+
+/**
+ * Content root template, which wraps all major visible page content in all cases. The content root is customizable
+ * in various ways, and linked to GSS stylesheets which apply the customizations. The content root changes based on the
+ * invoking browser - mobile or desktop.
+ */
+{template .contentRoot}
+ {@param? mobile: bool} /** Flag indicating that a mobile browser was detected. */
+ {@param? content: html} /** HTML content to inject into the main body. */
+ {@param? pageId: string} /** ID to apply to the whole page, optionally. */
+ {@param? pageClass: string} /** Class name to apply to the whole page, optionally. */
+
+ {let $inner kind="html"}
+ {if isNonnull($content)}
+ {$content}
+ {else}
+
+ {/if}
+ {/let}
+
+
+ {$inner}
+
+{/template}
+
+
+/**
+ * Generic wrapping template for an HTML web page. This is generally used enclosed from a page template, so that the
+ * server may have a routine to render a page in full. Page frames are never rendered on the front-end, because the DOM
+ * already exists when rendering occurs.
+ */
+{template .wrap}
+ {@inject page: page.Context} /** Main page-level context, provided to include metadata and page assets. */
+ {@param? pageId: string} /** CSS ID to apply to the whole page, optionally. */
+ {@param? base: trusted_resource_uri} /** Optional page base to apply. */
+ {@param? pageClass: string} /** Class name(s) to apply to the whole page, optionally. */
+ {@param? bodyClass: string} /** Class name(s) to apply to the body element. */
+ {@param? mobile: bool} /** Flag indicating that a mobile browser was detected. */
+ {@param? liftedCSS: css} /** Lifted CSS to apply, if any. */
+ {@param? liftedJS: js} /** Lifted JavaScrs)ipt to apply, if any. */
+ {@param? content: html} /** Injected body content to apply. */
+ {@param? preconnect: list<[domain: uri, crossorigin: bool]>} /** Pre-connect domains. */
+ {@param? additionalHead: html} /** Additional HTML to apply to the head block. */
+ {@param? ogTags: html} /** OpenGraph tags to include at the bottom of the head block. */
+ {@param? jsonLD: js} /** JSON-LD (JSON Linked Data) description for the page, if any. */
+ {@inject? contentSecurity: [header: string, policy: string]} /** Injected CSP to apply via meta tags. */
+
+ {let $languageSpec kind="text"}
+ {if isNonnull($page) and isNonnull($page.meta) and isNonnull($page.meta.language)}
+ {call gust.base.languageSpec}
+ {param spec: $page.meta.language /}
+ {/call}
+ {else}en-US{/if}
+ {/let}
+
+
+
+
+
+
+ {if isNonnull($base)}
+
+ {/if}
+
+ {if isNonnull($preconnect)}
+ {for $preconnectDirective in $preconnect}
+
+ {/for}
+ {/if}
+ {if isNonnull($contentSecurity)}
+
+ {/if}
+ {if isNonnull($liftedCSS)}
+
+ {/if}
+ {if isNonnull($page) and isNonnull($page.styles) and isNonnull($page.styles.linkList)}
+ {for $styleDirective in $page.styles.linkList}
+ {call gust.dom.assets.stylesheet}
+ {param sheet: $styleDirective.uri /}
+ {param media: $styleDirective.media /}
+ {/call}
+ {/for}
+ {/if}
+ {if isNonnull($page) and isNonnull($page.meta) and $page.meta.viewport}
+
+ {else}
+
+ {/if}
+ {if isNonnull($page) and isNonnull($page.meta) and $page.meta.favicon}
+
+ {/if}
+ {if isNonnull($page) and isNonnull($page.meta) and $page.meta.manifest}
+
+ {/if}
+ {if isNonnull($liftedJS)}
+
+ {/if}
+ {if isNonnull($page) and isNonnull($page.scripts) and $page.scripts.linkList}
+ {for $scriptDirective in $page.scripts.linkList}
+ {call gust.dom.assets.script}
+ {param script: $scriptDirective.uri /}
+ {param id: $scriptDirective.id /}
+ {param defer: $scriptDirective.defer /}
+ {param async: $scriptDirective.async /}
+ {param module: $scriptDirective.module /}
+ {/call}
+ {/for}
+ {/if}
+ {if isNonnull($page) and isNonnull($page.meta) and $page.meta.theme}
+
+ {/if}
+ {if isNonnull($page) and isNonnull($page.meta) and $page.meta.touchIcon}
+
+ {/if}
+ {if isNonnull($page) and isNonnull($page.meta) and $page.meta.startupImage}
+
+ {/if}
+ {if isNonnull($page) and isNonnull($page.meta) and $page.meta.description}
+
+ {/if}
+ {if isNonnull($page) and isNonnull($page.meta) and $page.meta.keywordList}
+ {let $metaKeywords kind="text"}
+ {for $keyword in $page.meta.keywordList}
+ {if not isFirst($keyword)}, {/if}
+ {$keyword}
+ {/for}
+ {/let}
+
+ {/if}
+ {if $additionalHead}{$additionalHead}{/if}
+ {if isNonnull($page) and isNonnull($page.meta) and isNonnull($page.meta.title)}
+ {$page.meta.title}
+ {/if}
+ {if isNonnull($page) and isNonnull($page.meta) and isNonnull($page.meta.openGraph)}
+ {if $page.meta.openGraph.url}
+
+ {/if}
+ {if $page.meta.openGraph.title}
+
+
+ {/if}
+ {if $page.meta.openGraph.description}
+
+
+ {/if}
+ {if $page.meta.openGraph.image}
+
+
+ {/if}
+ {if $languageSpec}
+
+ {/if}
+ {if $page.meta.openGraph.type}
+
+
+ {/if}
+
+
+ {/if}
+ {if isNonnull($ogTags)}
+ {$ogTags}
+ {/if}
+
+
+ {call .contentRoot}
+ {param pageId: $pageId /}
+ {param mobile: $mobile /}
+ {param content: $content /}
+ {param pageClass: $pageClass /}
+ {/call}
+ {if $jsonLD}
+
+ {/if}
+
+
+{/template}
diff --git a/gust/page/semantic.proto b/gust/page/semantic.proto
new file mode 100644
index 000000000..9bbaebe1d
--- /dev/null
+++ b/gust/page/semantic.proto
@@ -0,0 +1,70 @@
+/**
+ * Defines models related to semantic page metadata, which define such structure as the type/role of the page itself,
+ * the organization it belongs to, and so on.
+ */
+syntax = "proto3";
+package page;
+
+option optimize_for = SPEED;
+option cc_enable_arenas = true;
+option java_multiple_files = true;
+option java_string_check_utf8 = true;
+option java_outer_classname = "WebSemantics";
+option php_namespace = "Elide";
+option php_class_prefix = "ELD";
+option swift_prefix = "Elide";
+option objc_class_prefix = "ELD";
+option ruby_package = "Elide::Page";
+option java_package = "tools.elide.page";
+option csharp_namespace = "Elide.Page";
+option go_package = "github.com/elide-tools/elide/page";
+
+import "gust/page/media.proto";
+
+
+// Enumerates known semantic types, which are further mapped to their implementation types in each
+// semantic expression framework by implementing code.
+enum Kind {
+ // Default content kind: generic web page or web application.
+ WEB_PAGE = 0;
+
+ // Master products view: listing of multiple products. Produces impression events in analytics
+ // for each section or product displayed to the user.
+ MASTER = 1;
+
+ // Detail product view: information about a single product or product group. Produces view events
+ // in analytics for each product or product group displayed to the user.
+ DETAIL = 2;
+}
+
+
+// Enumerates semantic metadata formats that are supported for rendering into the page.
+enum Format {
+ // Specifies generic metadata tags as a metadata format.
+ GENERIC = 0;
+
+ // Specifies OpenGraph tags as a metadata format.
+ OPENGRAPH = 1;
+
+ // Specifies JSON-LD as a metadata format.
+ JSON_LD = 2;
+}
+
+// Defines the structure of top-level metadata with regard to semantic content, attached to a given
+// web page for emission in meta tags in various formats.
+message SemanticMetadata {
+ // Defines the "kind" of content contained on a given page.
+ Kind kind = 1;
+
+ // Formats to render semantic metadata in.
+ repeated Format format = 2;
+
+ // Describes page-level semantic media.
+ repeated MediaAsset media = 3;
+
+ // Payloads describing the semantic metadata attached.
+ oneof payload {
+ // Semantic metadata content.
+ string content = 4;
+ }
+}
diff --git a/java/gust/backend/Application.java b/java/gust/backend/Application.java
index df0344f2a..c9ecfde9f 100644
--- a/java/gust/backend/Application.java
+++ b/java/gust/backend/Application.java
@@ -12,18 +12,21 @@
* Main application class, which bootstraps a backend Gust app via Micronaut, including any configured controllers,
* services, or assets. This is where execution starts when running on a JVM.
*/
-public class Application {
+@SuppressWarnings("WeakerAccess")
+public final class Application {
+ private Application() { /* Disallow instantiation. */ }
+
/** Root configuration for a Micronaut app. */
- private static final String rootConfig = "/application.yml";
+ public static final String rootConfig = "/application.yml";
/** Default configuration provided by Gust. */
- private static final String defaultConfig = "/gust" + rootConfig;
+ public static final String defaultConfig = "/gust" + rootConfig;
/** Root logging configuration for a Micronaut app. */
- private static final String loggingConfig = "/logback.xml";
+ public static final String loggingConfig = "/logback.xml";
/** Default configuration provided by Gust. */
- private static final String defaultLoggingConfig = "/gust" + loggingConfig;
+ public static final String defaultLoggingConfig = "/gust" + loggingConfig;
/**
* Attempt to load a given global config file, failing if we can't find it in the expected spot, or the backup spot,
@@ -34,7 +37,7 @@ public class Application {
* @param alt Alternate configuration file name.
* @throws RuntimeException Wrapping an {@link IOException}, If the configuration can't be loaded.
*/
- private static void loadConfig(@Nonnull String role, @Nonnull String name, @Nullable String alt) {
+ public static void loadConfig(@Nonnull String role, @Nonnull String name, @Nullable String alt) {
try (final InputStream configStream = Application.class.getResourceAsStream(name)) {
if (configStream == null) {
if (alt != null) {
diff --git a/java/gust/backend/BUILD.bazel b/java/gust/backend/BUILD.bazel
index 147fa9368..3b2455ef4 100644
--- a/java/gust/backend/BUILD.bazel
+++ b/java/gust/backend/BUILD.bazel
@@ -37,16 +37,17 @@ template_library(
micronaut_library(
name = "TemplateProvider",
- srcs = ["TemplateProvider.kt"],
+ srcs = ["TemplateProvider.java"],
templates = [":page"],
+ deps = [maven("io.micronaut:micronaut-views-soy")],
)
jdk_library(
name = "Application",
srcs = ["Application.java"],
deps = [
+ "@com_google_code_findbugs_jsr305",
maven("io.micronaut:micronaut-runtime"),
- maven("com.google.code.findbugs:jsr305"),
],
runtime_deps = [
maven("io.micronaut:micronaut-runtime"),
diff --git a/java/gust/backend/TemplateProvider.java b/java/gust/backend/TemplateProvider.java
new file mode 100644
index 000000000..e1d091356
--- /dev/null
+++ b/java/gust/backend/TemplateProvider.java
@@ -0,0 +1,59 @@
+package gust.backend;
+
+import com.google.template.soy.SoyFileSet;
+import com.google.template.soy.jbcsrc.api.SoySauce;
+import com.google.template.soy.jbcsrc.api.SoySauceBuilder;
+import com.google.template.soy.shared.SoyCssRenamingMap;
+import com.google.template.soy.shared.SoyIdRenamingMap;
+import io.micronaut.views.soy.SoyFileSetProvider;
+import io.micronaut.views.soy.SoyNamingMapProvider;
+
+import javax.annotation.Nullable;
+import javax.inject.Singleton;
+
+
+/** Default Soy template provider. */
+@Singleton
+public class TemplateProvider implements SoyFileSetProvider, SoyNamingMapProvider {
+ private static final SoySauce compiledTemplates;
+
+ static {
+ compiledTemplates = new SoySauceBuilder().build();
+ }
+
+ /**
+ * Provide a Soy file set for the embedded templates.
+ *
+ * @return Prepared Soy file set.
+ */
+ @Nullable @Override public SoyFileSet provideSoyFileSet() {
+ return null;
+ }
+
+ /**
+ * Provide the compiled Soy file set for embedded templates.
+ *
+ * @return Pre-compiled Soy templates.
+ */
+ @Nullable @Override public SoySauce provideCompiledTemplates() {
+ return compiledTemplates;
+ }
+
+ /**
+ * By default, return `null` for the Soy CSS renaming map.
+ *
+ * @return `null`, by default.
+ */
+ @Nullable @Override public SoyCssRenamingMap cssRenamingMap() {
+ return null;
+ }
+
+ /**
+ * By default, return `null` for the Soy ID renaming map.
+ *
+ * @return `null`, by default.
+ */
+ @Nullable @Override public SoyIdRenamingMap idRenamingMap() {
+ return null;
+ }
+}
diff --git a/java/gust/backend/TemplateProvider.kt b/java/gust/backend/TemplateProvider.kt
deleted file mode 100644
index f172033f9..000000000
--- a/java/gust/backend/TemplateProvider.kt
+++ /dev/null
@@ -1,34 +0,0 @@
-package gust.backend
-
-import com.google.template.soy.SoyFileSet
-import com.google.template.soy.jbcsrc.api.SoySauce
-import com.google.template.soy.jbcsrc.api.SoySauceBuilder
-import io.micronaut.views.soy.SoyFileSetProvider
-import io.micronaut.views.soy.SoyNamingMapProvider
-import javax.inject.Singleton
-
-
-/** Default Soy template provider. */
-@Singleton
-open class TemplateProvider: SoyFileSetProvider, SoyNamingMapProvider {
- /** Initialized compiled template set. */
- companion object {
- @JvmStatic
- private val compiledTemplates: SoySauce = SoySauceBuilder()
- .build()
- }
-
- /**
- * Provide a Soy file set for the embedded templates.
- *
- * @return Prepared Soy file set.
- */
- override fun provideSoyFileSet(): SoyFileSet? = null
-
- /**
- * Provide the compiled Soy file set for embedded templates.
- *
- * @return Pre-compiled Soy templates.
- */
- override fun provideCompiledTemplates(): SoySauce = compiledTemplates
-}
diff --git a/javatests/BUILD.bazel b/javatests/BUILD.bazel
index 67cb1e21d..d45414f8b 100644
--- a/javatests/BUILD.bazel
+++ b/javatests/BUILD.bazel
@@ -1,3 +1,14 @@
package(
default_visibility = ["//visibility:public"],
)
+
+
+test_suite(
+ name = "suite",
+ testonly = True,
+ tests = [
+ "//javatests/gust:DualStackTest",
+ "//javatests/gust/backend:ApplicationTest",
+ "//javatests/gust/backend:TemplateProviderTest",
+ ],
+)
diff --git a/javatests/gust/BUILD.bazel b/javatests/gust/BUILD.bazel
index 5a30443d2..d39e64790 100644
--- a/javatests/gust/BUILD.bazel
+++ b/javatests/gust/BUILD.bazel
@@ -14,4 +14,5 @@ jdk_test(
srcs = ["DualStackTest.java"],
deps = ["//java/gust:Core"],
test_class = "javatests.gust.DualStackTest",
+ testonly = True,
)
diff --git a/javatests/gust/DualStackTest.java b/javatests/gust/DualStackTest.java
index e68ac19ec..4ce05bcb4 100644
--- a/javatests/gust/DualStackTest.java
+++ b/javatests/gust/DualStackTest.java
@@ -7,12 +7,10 @@
import static org.junit.Assert.assertNotNull;
-/**
- * Tests that J2CL classes can be used Java-side.
- */
-public class DualStackTest {
- @Test
- public void testDualStackObject() {
+/** Tests that J2CL classes can be used Java-side. */
+public final class DualStackTest {
+ /** Test that {@link Core} can be used as a dual-stack object. */
+ @Test public void testDualStackObject() {
assertNotNull(
"Core object should produce version",
Core.getGustVersion());
@@ -22,6 +20,7 @@ public void testDualStackObject() {
Core.getGustVersion());
}
+ /** Test that {@link Core#getEngine()} responds as expected. */
@Test
public void testBackendExecutionEngine() {
assertNotNull(
@@ -34,6 +33,7 @@ public void testBackendExecutionEngine() {
Core.getEngine());
}
+ /** Test that {@link Core#isDebugMode()} responds as expected. */
@Test
public void testDebugModeNonnull() {
assertNotNull(
@@ -41,6 +41,7 @@ public void testDebugModeNonnull() {
Core.isDebugMode());
}
+ /** Test that {@link Core#isDevMode()} responds as expected. */
@Test
public void testDevModeNonnull() {
assertNotNull(
@@ -48,6 +49,7 @@ public void testDevModeNonnull() {
Core.isDevMode());
}
+ /** Test that {@link Core#isProductionMode()} responds as expected. */
@Test
public void testProdModeNonnull() {
assertNotNull(
diff --git a/javatests/gust/backend/ApplicationTest.java b/javatests/gust/backend/ApplicationTest.java
new file mode 100644
index 000000000..e82713e4a
--- /dev/null
+++ b/javatests/gust/backend/ApplicationTest.java
@@ -0,0 +1,18 @@
+package javatests.gust.backend;
+
+import gust.backend.Application;
+import org.junit.Test;
+
+
+/** Test the default Micronaut application runner class. */
+public final class ApplicationTest {
+ /** Try loading a known-bad application yaml. */
+ @Test(expected = RuntimeException.class) public void testLoadApplicationYamlError() {
+ Application.loadConfig("app", "bad.yml", "bad.yml");
+ }
+
+ /** Try loading a known-good application yaml. */
+ @Test public void testLoadApplicationYamlValid() {
+ Application.loadConfig("app", Application.rootConfig, Application.defaultConfig);
+ }
+}
diff --git a/javatests/gust/backend/BUILD.bazel b/javatests/gust/backend/BUILD.bazel
new file mode 100644
index 000000000..2bd05e9a1
--- /dev/null
+++ b/javatests/gust/backend/BUILD.bazel
@@ -0,0 +1,31 @@
+package(
+ default_visibility = ["//visibility:public"],
+)
+
+
+load(
+ "//defs/toolchain/java:testing.bzl",
+ "jdk_test",
+)
+
+
+jdk_test(
+ name = "ApplicationTest",
+ srcs = ["ApplicationTest.java"],
+ deps = ["//java/gust/backend:Application"],
+ test_class = "javatests.gust.backend.ApplicationTest",
+ testonly = True,
+ classpath_resources = [
+ "//java/gust:logback.xml",
+ "//java/gust:application.yml",
+ ],
+)
+
+
+jdk_test(
+ name = "TemplateProviderTest",
+ srcs = ["TemplateProviderTest.java"],
+ deps = ["//java/gust/backend:TemplateProvider"],
+ test_class = "javatests.gust.backend.TemplateProviderTest",
+ testonly = True,
+)
diff --git a/javatests/gust/backend/TemplateProviderTest.java b/javatests/gust/backend/TemplateProviderTest.java
new file mode 100644
index 000000000..af8d5c884
--- /dev/null
+++ b/javatests/gust/backend/TemplateProviderTest.java
@@ -0,0 +1,31 @@
+package javatests.gust.backend;
+
+import org.junit.Test;
+
+import gust.backend.TemplateProvider;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+
+/** Tests the core backend {@link TemplateProvider}, which is responsible for loading Soy templates. */
+public final class TemplateProviderTest {
+ /** Test that the template provider can be constructed without error. */
+ @Test public void templateProviderInit() {
+ new TemplateProvider();
+ }
+
+ /** Ensure that, by default, {@link TemplateProvider#provideSoyFileSet()} is null . */
+ @Test public void soyFileSetDefaultNull() {
+ final TemplateProvider provider = new TemplateProvider();
+ assertNull("`TemplateProvider.provideSoyFileSet` should return `null` by default",
+ provider.provideSoyFileSet());
+ }
+
+ /** Ensure that, by default, {@link TemplateProvider#provideCompiledTemplates()} is not null . */
+ @Test public void soyCompiledTemplatesNotNull() {
+ final TemplateProvider provider = new TemplateProvider();
+ assertNotNull("`TemplateProvider.provideCompiledTemplates` should never return `null`",
+ provider.provideCompiledTemplates());
+ }
+}
diff --git a/maven_install.json b/maven_install.json
index 40ebfc81a..1c11e0e99 100644
--- a/maven_install.json
+++ b/maven_install.json
@@ -1,46 +1,18 @@
{
"dependency_tree": {
- "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": 281535427,
+ "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": 100953722,
"conflict_resolution": {
- "com.google.guava:guava:28.0-jre": "com.google.guava:guava:28.2-jre"
+ "com.google.guava:guava:28.0-jre": "com.google.guava:guava:28.1-android"
},
"dependencies": [
{
- "coord": "aopalliance:aopalliance:1.0",
+ "coord": "com.fasterxml.jackson.core:jackson-annotations:2.10.1",
"dependencies": [],
"directDependencies": [],
"exclusions": [
- "com.google.guava:guava",
- "com.google.guava:guava-testlib"
- ],
- "file": "v1/https/jcenter.bintray.com/aopalliance/aopalliance/1.0/aopalliance-1.0.jar",
- "mirror_urls": [
- "https://jcenter.bintray.com/aopalliance/aopalliance/1.0/aopalliance-1.0.jar",
- "https://maven.google.com/aopalliance/aopalliance/1.0/aopalliance-1.0.jar",
- "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/aopalliance/aopalliance/1.0/aopalliance-1.0.jar"
- ],
- "sha256": "0addec670fedcd3f113c5c8091d783280d23f75e3acb841b61a9cdb079376a08",
- "url": "https://jcenter.bintray.com/aopalliance/aopalliance/1.0/aopalliance-1.0.jar"
- },
- {
- "coord": "args4j:args4j:2.0.23",
- "dependencies": [],
- "directDependencies": [],
- "file": "v1/https/jcenter.bintray.com/args4j/args4j/2.0.23/args4j-2.0.23.jar",
- "mirror_urls": [
- "https://jcenter.bintray.com/args4j/args4j/2.0.23/args4j-2.0.23.jar",
- "https://maven.google.com/args4j/args4j/2.0.23/args4j-2.0.23.jar",
- "https://repo1.maven.org/maven2/args4j/args4j/2.0.23/args4j-2.0.23.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/args4j/args4j/2.0.23/args4j-2.0.23.jar"
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
],
- "sha256": "457557186c22180be7a8ae577e05a8084a864f7fd1fb53a3dbcbecb25fda3ce5",
- "url": "https://jcenter.bintray.com/args4j/args4j/2.0.23/args4j-2.0.23.jar"
- },
- {
- "coord": "com.fasterxml.jackson.core:jackson-annotations:2.10.1",
- "dependencies": [],
- "directDependencies": [],
"file": "v1/https/jcenter.bintray.com/com/fasterxml/jackson/core/jackson-annotations/2.10.1/jackson-annotations-2.10.1.jar",
"mirror_urls": [
"https://jcenter.bintray.com/com/fasterxml/jackson/core/jackson-annotations/2.10.1/jackson-annotations-2.10.1.jar",
@@ -51,10 +23,32 @@
"sha256": "673f8ae16becea4fa937404b3a851417faf42df3bbc592028bbe2bfe0cc9d8cb",
"url": "https://jcenter.bintray.com/com/fasterxml/jackson/core/jackson-annotations/2.10.1/jackson-annotations-2.10.1.jar"
},
+ {
+ "coord": "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/fasterxml/jackson/core/jackson-annotations/2.10.1/jackson-annotations-2.10.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/fasterxml/jackson/core/jackson-annotations/2.10.1/jackson-annotations-2.10.1-sources.jar",
+ "https://maven.google.com/com/fasterxml/jackson/core/jackson-annotations/2.10.1/jackson-annotations-2.10.1-sources.jar",
+ "https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-annotations/2.10.1/jackson-annotations-2.10.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/fasterxml/jackson/core/jackson-annotations/2.10.1/jackson-annotations-2.10.1-sources.jar"
+ ],
+ "sha256": "51edbe61480b811fc9ceaa158e233b88a193b58b69a4c9cfe7c8b2ef50f98b5d",
+ "url": "https://jcenter.bintray.com/com/fasterxml/jackson/core/jackson-annotations/2.10.1/jackson-annotations-2.10.1-sources.jar"
+ },
{
"coord": "com.fasterxml.jackson.core:jackson-core:2.10.1",
"dependencies": [],
"directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/com/fasterxml/jackson/core/jackson-core/2.10.1/jackson-core-2.10.1.jar",
"mirror_urls": [
"https://jcenter.bintray.com/com/fasterxml/jackson/core/jackson-core/2.10.1/jackson-core-2.10.1.jar",
@@ -65,6 +59,24 @@
"sha256": "79bffbdcd349f69a5ac252e2b4096131704386af4fa14d95395ea9a0e423cf33",
"url": "https://jcenter.bintray.com/com/fasterxml/jackson/core/jackson-core/2.10.1/jackson-core-2.10.1.jar"
},
+ {
+ "coord": "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/fasterxml/jackson/core/jackson-core/2.10.1/jackson-core-2.10.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/fasterxml/jackson/core/jackson-core/2.10.1/jackson-core-2.10.1-sources.jar",
+ "https://maven.google.com/com/fasterxml/jackson/core/jackson-core/2.10.1/jackson-core-2.10.1-sources.jar",
+ "https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/2.10.1/jackson-core-2.10.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/fasterxml/jackson/core/jackson-core/2.10.1/jackson-core-2.10.1-sources.jar"
+ ],
+ "sha256": "001eeeb4ae3241e0e880ab2f9b867c33d560c73b34a5d69d9b216b8b04cfb9bd",
+ "url": "https://jcenter.bintray.com/com/fasterxml/jackson/core/jackson-core/2.10.1/jackson-core-2.10.1-sources.jar"
+ },
{
"coord": "com.fasterxml.jackson.core:jackson-databind:2.10.1",
"dependencies": [
@@ -75,6 +87,10 @@
"com.fasterxml.jackson.core:jackson-annotations:2.10.1",
"com.fasterxml.jackson.core:jackson-core:2.10.1"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/com/fasterxml/jackson/core/jackson-databind/2.10.1/jackson-databind-2.10.1.jar",
"mirror_urls": [
"https://jcenter.bintray.com/com/fasterxml/jackson/core/jackson-databind/2.10.1/jackson-databind-2.10.1.jar",
@@ -85,6 +101,30 @@
"sha256": "2d23f47001492233565adf5a34f225f2ae89564cee08024873ec36b7842ede46",
"url": "https://jcenter.bintray.com/com/fasterxml/jackson/core/jackson-databind/2.10.1/jackson-databind-2.10.1.jar"
},
+ {
+ "coord": "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
+ "dependencies": [
+ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1"
+ ],
+ "directDependencies": [
+ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/fasterxml/jackson/core/jackson-databind/2.10.1/jackson-databind-2.10.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/fasterxml/jackson/core/jackson-databind/2.10.1/jackson-databind-2.10.1-sources.jar",
+ "https://maven.google.com/com/fasterxml/jackson/core/jackson-databind/2.10.1/jackson-databind-2.10.1-sources.jar",
+ "https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-databind/2.10.1/jackson-databind-2.10.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/fasterxml/jackson/core/jackson-databind/2.10.1/jackson-databind-2.10.1-sources.jar"
+ ],
+ "sha256": "43fb05e9652c4aef1e272b330649037e92d32b96af005a49e4b801a7f1585e15",
+ "url": "https://jcenter.bintray.com/com/fasterxml/jackson/core/jackson-databind/2.10.1/jackson-databind-2.10.1-sources.jar"
+ },
{
"coord": "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.1",
"dependencies": [
@@ -96,6 +136,10 @@
"com.fasterxml.jackson.core:jackson-core:2.10.1",
"com.fasterxml.jackson.core:jackson-databind:2.10.1"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.10.1/jackson-datatype-jdk8-2.10.1.jar",
"mirror_urls": [
"https://jcenter.bintray.com/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.10.1/jackson-datatype-jdk8-2.10.1.jar",
@@ -106,6 +150,31 @@
"sha256": "05c45b1441e74ea5e4b0c7a20823d2c7cfded946108902b5691a129e78f60515",
"url": "https://jcenter.bintray.com/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.10.1/jackson-datatype-jdk8-2.10.1.jar"
},
+ {
+ "coord": "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
+ "dependencies": [
+ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
+ "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1"
+ ],
+ "directDependencies": [
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
+ "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.10.1/jackson-datatype-jdk8-2.10.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.10.1/jackson-datatype-jdk8-2.10.1-sources.jar",
+ "https://maven.google.com/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.10.1/jackson-datatype-jdk8-2.10.1-sources.jar",
+ "https://repo1.maven.org/maven2/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.10.1/jackson-datatype-jdk8-2.10.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.10.1/jackson-datatype-jdk8-2.10.1-sources.jar"
+ ],
+ "sha256": "308dfb0d8cc24f29bab64cf689deace73c1b9df05ef7c456b0981c0da863e46a",
+ "url": "https://jcenter.bintray.com/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.10.1/jackson-datatype-jdk8-2.10.1-sources.jar"
+ },
{
"coord": "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.10.1",
"dependencies": [
@@ -118,6 +187,10 @@
"com.fasterxml.jackson.core:jackson-core:2.10.1",
"com.fasterxml.jackson.core:jackson-databind:2.10.1"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.10.1/jackson-datatype-jsr310-2.10.1.jar",
"mirror_urls": [
"https://jcenter.bintray.com/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.10.1/jackson-datatype-jsr310-2.10.1.jar",
@@ -128,6 +201,32 @@
"sha256": "5e7d0363068e3d42ac7f6234c88ade8867174009866e6f00f496edb5b295b56f",
"url": "https://jcenter.bintray.com/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.10.1/jackson-datatype-jsr310-2.10.1.jar"
},
+ {
+ "coord": "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
+ "dependencies": [
+ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
+ "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1"
+ ],
+ "directDependencies": [
+ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
+ "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.10.1/jackson-datatype-jsr310-2.10.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.10.1/jackson-datatype-jsr310-2.10.1-sources.jar",
+ "https://maven.google.com/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.10.1/jackson-datatype-jsr310-2.10.1-sources.jar",
+ "https://repo1.maven.org/maven2/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.10.1/jackson-datatype-jsr310-2.10.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.10.1/jackson-datatype-jsr310-2.10.1-sources.jar"
+ ],
+ "sha256": "1ce1544e19e8a355609c9248d18dad1663b8acb48a29f36bf9fb47b0ff0e17f0",
+ "url": "https://jcenter.bintray.com/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.10.1/jackson-datatype-jsr310-2.10.1-sources.jar"
+ },
{
"coord": "com.github.wumpz:diffutils:2.2",
"dependencies": [
@@ -136,6 +235,10 @@
"directDependencies": [
"org.eclipse.jgit:org.eclipse.jgit:4.4.1.201607150455-r"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/com/github/wumpz/diffutils/2.2/diffutils-2.2.jar",
"mirror_urls": [
"https://jcenter.bintray.com/com/github/wumpz/diffutils/2.2/diffutils-2.2.jar",
@@ -146,10 +249,148 @@
"sha256": "df78fbcb23b86cda037a4a28cb255c5dd9f2f110d977656902586d18c61cfeb4",
"url": "https://jcenter.bintray.com/com/github/wumpz/diffutils/2.2/diffutils-2.2.jar"
},
+ {
+ "coord": "com.github.wumpz:diffutils:jar:sources:2.2",
+ "dependencies": [
+ "org.eclipse.jgit:org.eclipse.jgit:jar:sources:4.4.1.201607150455-r"
+ ],
+ "directDependencies": [
+ "org.eclipse.jgit:org.eclipse.jgit:jar:sources:4.4.1.201607150455-r"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/github/wumpz/diffutils/2.2/diffutils-2.2-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/github/wumpz/diffutils/2.2/diffutils-2.2-sources.jar",
+ "https://maven.google.com/com/github/wumpz/diffutils/2.2/diffutils-2.2-sources.jar",
+ "https://repo1.maven.org/maven2/com/github/wumpz/diffutils/2.2/diffutils-2.2-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/github/wumpz/diffutils/2.2/diffutils-2.2-sources.jar"
+ ],
+ "sha256": "82d73942952a78a0e31ef517a83296862adfb41e7b95b0b098d238ad11436abe",
+ "url": "https://jcenter.bintray.com/com/github/wumpz/diffutils/2.2/diffutils-2.2-sources.jar"
+ },
+ {
+ "coord": "com.google.android:annotations:4.1.1.4",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar",
+ "https://maven.google.com/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar",
+ "https://repo1.maven.org/maven2/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar"
+ ],
+ "sha256": "ba734e1e84c09d615af6a09d33034b4f0442f8772dec120efb376d86a565ae15",
+ "url": "https://jcenter.bintray.com/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar"
+ },
+ {
+ "coord": "com.google.android:annotations:jar:sources:4.1.1.4",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4-sources.jar",
+ "https://maven.google.com/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4-sources.jar"
+ ],
+ "sha256": "e9b667aa958df78ea1ad115f7bbac18a5869c3128b1d5043feb360b0cfce9d40",
+ "url": "https://jcenter.bintray.com/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4-sources.jar"
+ },
+ {
+ "coord": "com.google.api.grpc:proto-google-common-protos:1.12.0",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.protobuf:protobuf-java",
+ "com.google.api:api-common",
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar",
+ "https://maven.google.com/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar",
+ "https://repo1.maven.org/maven2/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar"
+ ],
+ "sha256": "bd60cd7a423b00fb824c27bdd0293aaf4781be1daba6ed256311103fb4b84108",
+ "url": "https://jcenter.bintray.com/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar"
+ },
+ {
+ "coord": "com.google.api.grpc:proto-google-common-protos:jar:sources:1.12.0",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.protobuf:protobuf-java",
+ "com.google.api:api-common",
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0-sources.jar",
+ "https://maven.google.com/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0-sources.jar"
+ ],
+ "sha256": "936fdc055855a956ef82afb1b408bd0bd5ea5d040fe6f6fc25c4955879db649a",
+ "url": "https://jcenter.bintray.com/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0-sources.jar"
+ },
+ {
+ "coord": "com.google.auth:google-auth-library-credentials:0.18.0",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/auth/google-auth-library-credentials/0.18.0/google-auth-library-credentials-0.18.0.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/auth/google-auth-library-credentials/0.18.0/google-auth-library-credentials-0.18.0.jar",
+ "https://maven.google.com/com/google/auth/google-auth-library-credentials/0.18.0/google-auth-library-credentials-0.18.0.jar",
+ "https://repo1.maven.org/maven2/com/google/auth/google-auth-library-credentials/0.18.0/google-auth-library-credentials-0.18.0.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/auth/google-auth-library-credentials/0.18.0/google-auth-library-credentials-0.18.0.jar"
+ ],
+ "sha256": "2377b149dbf63f000f96b66f5dc0f07b9da3928f5e3f31973f2d21fcb63ce6ff",
+ "url": "https://jcenter.bintray.com/com/google/auth/google-auth-library-credentials/0.18.0/google-auth-library-credentials-0.18.0.jar"
+ },
+ {
+ "coord": "com.google.auth:google-auth-library-credentials:jar:sources:0.18.0",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/auth/google-auth-library-credentials/0.18.0/google-auth-library-credentials-0.18.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/auth/google-auth-library-credentials/0.18.0/google-auth-library-credentials-0.18.0-sources.jar",
+ "https://maven.google.com/com/google/auth/google-auth-library-credentials/0.18.0/google-auth-library-credentials-0.18.0-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/auth/google-auth-library-credentials/0.18.0/google-auth-library-credentials-0.18.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/auth/google-auth-library-credentials/0.18.0/google-auth-library-credentials-0.18.0-sources.jar"
+ ],
+ "sha256": "bd7b9d3297e4df3411edc59bbe418cc33f2a529ac4979c4f6fa59f1e662527f3",
+ "url": "https://jcenter.bintray.com/com/google/auth/google-auth-library-credentials/0.18.0/google-auth-library-credentials-0.18.0-sources.jar"
+ },
{
"coord": "com.google.code.findbugs:jsr305:3.0.2",
"dependencies": [],
"directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar",
"mirror_urls": [
"https://jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar",
@@ -161,63 +402,103 @@
"url": "https://jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar"
},
{
- "coord": "com.google.code.gson:gson:2.7",
+ "coord": "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
"dependencies": [],
"directDependencies": [],
- "file": "v1/https/jcenter.bintray.com/com/google/code/gson/gson/2.7/gson-2.7.jar",
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2-sources.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/com/google/code/gson/gson/2.7/gson-2.7.jar",
- "https://maven.google.com/com/google/code/gson/gson/2.7/gson-2.7.jar",
- "https://repo1.maven.org/maven2/com/google/code/gson/gson/2.7/gson-2.7.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/com/google/code/gson/gson/2.7/gson-2.7.jar"
+ "https://jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2-sources.jar",
+ "https://maven.google.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2-sources.jar"
],
- "sha256": "2d43eb5ea9e133d2ee2405cc14f5ee08951b8361302fdd93494a3a997b508d32",
- "url": "https://jcenter.bintray.com/com/google/code/gson/gson/2.7/gson-2.7.jar"
+ "sha256": "1c9e85e272d0708c6a591dc74828c71603053b48cc75ae83cce56912a2aa063b",
+ "url": "https://jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2-sources.jar"
},
{
- "coord": "com.google.common.html.types:types:1.0.6",
- "dependencies": [
- "javax.annotation:jsr250-api:1.0",
- "com.google.jsinterop:jsinterop-annotations:1.0.1"
+ "coord": "com.google.code.gson:gson:2.8.6",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
],
- "directDependencies": [
- "com.google.jsinterop:jsinterop-annotations:1.0.1",
- "javax.annotation:jsr250-api:1.0"
+ "file": "v1/https/jcenter.bintray.com/com/google/code/gson/gson/2.8.6/gson-2.8.6.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/code/gson/gson/2.8.6/gson-2.8.6.jar",
+ "https://maven.google.com/com/google/code/gson/gson/2.8.6/gson-2.8.6.jar",
+ "https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.6/gson-2.8.6.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/code/gson/gson/2.8.6/gson-2.8.6.jar"
],
+ "sha256": "c8fb4839054d280b3033f800d1f5a97de2f028eb8ba2eb458ad287e536f3f25f",
+ "url": "https://jcenter.bintray.com/com/google/code/gson/gson/2.8.6/gson-2.8.6.jar"
+ },
+ {
+ "coord": "com.google.code.gson:gson:jar:sources:2.8.6",
+ "dependencies": [],
+ "directDependencies": [],
"exclusions": [
- "com.google.errorprone:error_prone_annotations",
- "com.google.guava:guava-testlib",
- "com.google.guava:guava",
- "com.google.protobuf:protobuf-java"
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
],
- "file": "v1/https/jcenter.bintray.com/com/google/common/html/types/types/1.0.6/types-1.0.6.jar",
+ "file": "v1/https/jcenter.bintray.com/com/google/code/gson/gson/2.8.6/gson-2.8.6-sources.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/com/google/common/html/types/types/1.0.6/types-1.0.6.jar",
- "https://maven.google.com/com/google/common/html/types/types/1.0.6/types-1.0.6.jar",
- "https://repo1.maven.org/maven2/com/google/common/html/types/types/1.0.6/types-1.0.6.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/com/google/common/html/types/types/1.0.6/types-1.0.6.jar"
+ "https://jcenter.bintray.com/com/google/code/gson/gson/2.8.6/gson-2.8.6-sources.jar",
+ "https://maven.google.com/com/google/code/gson/gson/2.8.6/gson-2.8.6-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.6/gson-2.8.6-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/code/gson/gson/2.8.6/gson-2.8.6-sources.jar"
],
- "sha256": "991d7091237994131dc36f154e27ac18d66a5f203ccb0eb54997291350b5ba83",
- "url": "https://jcenter.bintray.com/com/google/common/html/types/types/1.0.6/types-1.0.6.jar"
+ "sha256": "da4d787939dc8de214724a20d88614b70ef8c3a4931d9c694300b5d9098ed9bc",
+ "url": "https://jcenter.bintray.com/com/google/code/gson/gson/2.8.6/gson-2.8.6-sources.jar"
},
{
- "coord": "com.google.errorprone:error_prone_annotations:2.3.4",
+ "coord": "com.google.errorprone:error_prone_annotations:2.3.3",
"dependencies": [],
"directDependencies": [],
- "file": "v1/https/jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar",
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar",
+ "https://maven.google.com/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar",
+ "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar"
+ ],
+ "sha256": "ec59f1b702d9afc09e8c3929f5c42777dec623a6ea2731ac694332c7d7680f5a",
+ "url": "https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar"
+ },
+ {
+ "coord": "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3-sources.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar",
- "https://maven.google.com/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar",
- "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar"
+ "https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3-sources.jar",
+ "https://maven.google.com/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3-sources.jar"
],
- "sha256": "baf7d6ea97ce606c53e11b6854ba5f2ce7ef5c24dddf0afa18d1260bd25b002c",
- "url": "https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar"
+ "sha256": "f58446b80b5f1e98bcb74dae5c0710ed8e52baafe5a4bb315f769f306d85634a",
+ "url": "https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3-sources.jar"
},
{
"coord": "com.google.guava:failureaccess:1.0.1",
"dependencies": [],
"directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar",
"mirror_urls": [
"https://jcenter.bintray.com/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar",
@@ -229,37 +510,99 @@
"url": "https://jcenter.bintray.com/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar"
},
{
- "coord": "com.google.guava:guava:28.2-jre",
+ "coord": "com.google.guava:failureaccess:jar:sources:1.0.1",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1-sources.jar",
+ "https://maven.google.com/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1-sources.jar"
+ ],
+ "sha256": "092346eebbb1657b51aa7485a246bf602bb464cc0b0e2e1c7e7201fadce1e98f",
+ "url": "https://jcenter.bintray.com/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1-sources.jar"
+ },
+ {
+ "coord": "com.google.guava:guava:28.1-android",
"dependencies": [
"com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
+ "org.codehaus.mojo:animal-sniffer-annotations:1.18",
"com.google.j2objc:j2objc-annotations:1.3",
+ "com.google.errorprone:error_prone_annotations:2.3.3",
"com.google.code.findbugs:jsr305:3.0.2",
- "com.google.errorprone:error_prone_annotations:2.3.4",
- "org.checkerframework:checker-qual:2.10.0",
- "com.google.guava:failureaccess:1.0.1"
+ "com.google.guava:failureaccess:1.0.1",
+ "org.checkerframework:checker-compat-qual:2.5.5"
],
"directDependencies": [
"com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
+ "org.codehaus.mojo:animal-sniffer-annotations:1.18",
"com.google.j2objc:j2objc-annotations:1.3",
+ "com.google.errorprone:error_prone_annotations:2.3.3",
"com.google.code.findbugs:jsr305:3.0.2",
- "com.google.errorprone:error_prone_annotations:2.3.4",
- "org.checkerframework:checker-qual:2.10.0",
- "com.google.guava:failureaccess:1.0.1"
+ "com.google.guava:failureaccess:1.0.1",
+ "org.checkerframework:checker-compat-qual:2.5.5"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/guava/guava/28.1-android/guava-28.1-android.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/guava/guava/28.1-android/guava-28.1-android.jar",
+ "https://maven.google.com/com/google/guava/guava/28.1-android/guava-28.1-android.jar",
+ "https://repo1.maven.org/maven2/com/google/guava/guava/28.1-android/guava-28.1-android.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/guava/guava/28.1-android/guava-28.1-android.jar"
+ ],
+ "sha256": "e112ce92c0f0733965eede73d94589c59a72128b06b08bba5ebe2f9ea672ef60",
+ "url": "https://jcenter.bintray.com/com/google/guava/guava/28.1-android/guava-28.1-android.jar"
+ },
+ {
+ "coord": "com.google.guava:guava:jar:sources:28.1-android",
+ "dependencies": [
+ "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
+ "org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
+ "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
+ "com.google.guava:failureaccess:jar:sources:1.0.1"
+ ],
+ "directDependencies": [
+ "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
+ "org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
+ "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
+ "com.google.guava:failureaccess:jar:sources:1.0.1"
],
- "file": "v1/https/jcenter.bintray.com/com/google/guava/guava/28.2-jre/guava-28.2-jre.jar",
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/guava/guava/28.1-android/guava-28.1-android-sources.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/com/google/guava/guava/28.2-jre/guava-28.2-jre.jar",
- "https://maven.google.com/com/google/guava/guava/28.2-jre/guava-28.2-jre.jar",
- "https://repo1.maven.org/maven2/com/google/guava/guava/28.2-jre/guava-28.2-jre.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/com/google/guava/guava/28.2-jre/guava-28.2-jre.jar"
+ "https://jcenter.bintray.com/com/google/guava/guava/28.1-android/guava-28.1-android-sources.jar",
+ "https://maven.google.com/com/google/guava/guava/28.1-android/guava-28.1-android-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/guava/guava/28.1-android/guava-28.1-android-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/guava/guava/28.1-android/guava-28.1-android-sources.jar"
],
- "sha256": "fc3aa363ad87223d1fbea584eee015a862150f6d34c71f24dc74088a635f08ef",
- "url": "https://jcenter.bintray.com/com/google/guava/guava/28.2-jre/guava-28.2-jre.jar"
+ "sha256": "7048029c5488142e8697eab2f7cd6ddcd1c5098843d6a6818e9c58db86b5549d",
+ "url": "https://jcenter.bintray.com/com/google/guava/guava/28.1-android/guava-28.1-android-sources.jar"
},
{
"coord": "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
"dependencies": [],
"directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar",
"mirror_urls": [
"https://jcenter.bintray.com/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar",
@@ -271,98 +614,117 @@
"url": "https://jcenter.bintray.com/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar"
},
{
- "coord": "com.google.inject.extensions:guice-multibindings:4.1.0",
- "dependencies": [
- "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
- "com.google.j2objc:j2objc-annotations:1.3",
- "com.google.code.findbugs:jsr305:3.0.2",
- "aopalliance:aopalliance:1.0",
- "com.google.errorprone:error_prone_annotations:2.3.4",
- "com.google.guava:guava:28.2-jre",
- "org.checkerframework:checker-qual:2.10.0",
- "com.google.inject:guice:4.1.0",
- "com.google.guava:failureaccess:1.0.1",
- "javax.inject:javax.inject:1"
+ "coord": "com.google.j2objc:j2objc-annotations:1.3",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
],
- "directDependencies": [
- "com.google.inject:guice:4.1.0"
+ "file": "v1/https/jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar",
+ "https://maven.google.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar",
+ "https://repo1.maven.org/maven2/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar"
+ ],
+ "sha256": "21af30c92267bd6122c0e0b4d20cccb6641a37eaf956c6540ec471d584e64a7b",
+ "url": "https://jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar"
+ },
+ {
+ "coord": "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
],
- "file": "v1/https/jcenter.bintray.com/com/google/inject/extensions/guice-multibindings/4.1.0/guice-multibindings-4.1.0.jar",
+ "file": "v1/https/jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3-sources.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/com/google/inject/extensions/guice-multibindings/4.1.0/guice-multibindings-4.1.0.jar",
- "https://maven.google.com/com/google/inject/extensions/guice-multibindings/4.1.0/guice-multibindings-4.1.0.jar",
- "https://repo1.maven.org/maven2/com/google/inject/extensions/guice-multibindings/4.1.0/guice-multibindings-4.1.0.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/com/google/inject/extensions/guice-multibindings/4.1.0/guice-multibindings-4.1.0.jar"
+ "https://jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3-sources.jar",
+ "https://maven.google.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3-sources.jar"
],
- "sha256": "592773a4c745cc87ba37fa0647fed8126c7e474349c603c9f229aa25d3ef5448",
- "url": "https://jcenter.bintray.com/com/google/inject/extensions/guice-multibindings/4.1.0/guice-multibindings-4.1.0.jar"
+ "sha256": "ba4df669fec153fa4cd0ef8d02c6d3ef0702b7ac4cabe080facf3b6e490bb972",
+ "url": "https://jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3-sources.jar"
},
{
- "coord": "com.google.inject:guice:4.1.0",
+ "coord": "com.google.protobuf:protobuf-java-util:3.11.1",
"dependencies": [
"com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
+ "com.google.guava:guava:28.1-android",
+ "org.codehaus.mojo:animal-sniffer-annotations:1.18",
"com.google.j2objc:j2objc-annotations:1.3",
+ "com.google.errorprone:error_prone_annotations:2.3.3",
"com.google.code.findbugs:jsr305:3.0.2",
- "aopalliance:aopalliance:1.0",
- "com.google.errorprone:error_prone_annotations:2.3.4",
- "com.google.guava:guava:28.2-jre",
- "org.checkerframework:checker-qual:2.10.0",
+ "com.google.protobuf:protobuf-java:3.11.4",
+ "com.google.code.gson:gson:2.8.6",
"com.google.guava:failureaccess:1.0.1",
- "javax.inject:javax.inject:1"
+ "org.checkerframework:checker-compat-qual:2.5.5"
],
"directDependencies": [
- "aopalliance:aopalliance:1.0",
- "com.google.guava:guava:28.2-jre",
- "javax.inject:javax.inject:1"
+ "com.google.code.gson:gson:2.8.6",
+ "com.google.errorprone:error_prone_annotations:2.3.3",
+ "com.google.guava:guava:28.1-android",
+ "com.google.protobuf:protobuf-java:3.11.4"
],
- "file": "v1/https/jcenter.bintray.com/com/google/inject/guice/4.1.0/guice-4.1.0.jar",
- "mirror_urls": [
- "https://jcenter.bintray.com/com/google/inject/guice/4.1.0/guice-4.1.0.jar",
- "https://maven.google.com/com/google/inject/guice/4.1.0/guice-4.1.0.jar",
- "https://repo1.maven.org/maven2/com/google/inject/guice/4.1.0/guice-4.1.0.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/com/google/inject/guice/4.1.0/guice-4.1.0.jar"
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
],
- "sha256": "9b9df27a5b8c7864112b4137fd92b36c3f1395bfe57be42fedf2f520ead1a93e",
- "url": "https://jcenter.bintray.com/com/google/inject/guice/4.1.0/guice-4.1.0.jar"
- },
- {
- "coord": "com.google.j2objc:j2objc-annotations:1.3",
- "dependencies": [],
- "directDependencies": [],
- "file": "v1/https/jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar",
+ "file": "v1/https/jcenter.bintray.com/com/google/protobuf/protobuf-java-util/3.11.1/protobuf-java-util-3.11.1.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar",
- "https://maven.google.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar",
- "https://repo1.maven.org/maven2/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar"
+ "https://jcenter.bintray.com/com/google/protobuf/protobuf-java-util/3.11.1/protobuf-java-util-3.11.1.jar",
+ "https://maven.google.com/com/google/protobuf/protobuf-java-util/3.11.1/protobuf-java-util-3.11.1.jar",
+ "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-java-util/3.11.1/protobuf-java-util-3.11.1.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/protobuf/protobuf-java-util/3.11.1/protobuf-java-util-3.11.1.jar"
],
- "sha256": "21af30c92267bd6122c0e0b4d20cccb6641a37eaf956c6540ec471d584e64a7b",
- "url": "https://jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar"
+ "sha256": "dc7d8c502199c1309b284f9a8d0afff82356f0477d9a155ba4e50abb06e15313",
+ "url": "https://jcenter.bintray.com/com/google/protobuf/protobuf-java-util/3.11.1/protobuf-java-util-3.11.1.jar"
},
{
- "coord": "com.google.jsinterop:jsinterop-annotations:1.0.1",
- "dependencies": [],
- "directDependencies": [],
+ "coord": "com.google.protobuf:protobuf-java-util:jar:sources:3.11.1",
+ "dependencies": [
+ "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.protobuf:protobuf-java:jar:sources:3.11.4",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "com.google.code.gson:gson:jar:sources:2.8.6",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
+ "org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
+ "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
+ "com.google.guava:guava:jar:sources:28.1-android",
+ "com.google.guava:failureaccess:jar:sources:1.0.1"
+ ],
+ "directDependencies": [
+ "com.google.code.gson:gson:jar:sources:2.8.6",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
+ "com.google.guava:guava:jar:sources:28.1-android",
+ "com.google.protobuf:protobuf-java:jar:sources:3.11.4"
+ ],
"exclusions": [
- "com.google.errorprone:error_prone_annotations",
- "com.google.guava:guava-testlib",
- "com.google.guava:guava",
- "com.google.protobuf:protobuf-java"
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
],
- "file": "v1/https/jcenter.bintray.com/com/google/jsinterop/jsinterop-annotations/1.0.1/jsinterop-annotations-1.0.1.jar",
+ "file": "v1/https/jcenter.bintray.com/com/google/protobuf/protobuf-java-util/3.11.1/protobuf-java-util-3.11.1-sources.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/com/google/jsinterop/jsinterop-annotations/1.0.1/jsinterop-annotations-1.0.1.jar",
- "https://maven.google.com/com/google/jsinterop/jsinterop-annotations/1.0.1/jsinterop-annotations-1.0.1.jar",
- "https://repo1.maven.org/maven2/com/google/jsinterop/jsinterop-annotations/1.0.1/jsinterop-annotations-1.0.1.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/com/google/jsinterop/jsinterop-annotations/1.0.1/jsinterop-annotations-1.0.1.jar"
+ "https://jcenter.bintray.com/com/google/protobuf/protobuf-java-util/3.11.1/protobuf-java-util-3.11.1-sources.jar",
+ "https://maven.google.com/com/google/protobuf/protobuf-java-util/3.11.1/protobuf-java-util-3.11.1-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-java-util/3.11.1/protobuf-java-util-3.11.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/protobuf/protobuf-java-util/3.11.1/protobuf-java-util-3.11.1-sources.jar"
],
- "sha256": "b2cc45519d62a1144f8cd932fa0c2c30a944c3ae9f060934587a337d81b391c8",
- "url": "https://jcenter.bintray.com/com/google/jsinterop/jsinterop-annotations/1.0.1/jsinterop-annotations-1.0.1.jar"
+ "sha256": "236b015889438e77ba203700675090753bdbf251e561984ebb94bc95f080590b",
+ "url": "https://jcenter.bintray.com/com/google/protobuf/protobuf-java-util/3.11.1/protobuf-java-util-3.11.1-sources.jar"
},
{
"coord": "com.google.protobuf:protobuf-java:3.11.4",
"dependencies": [],
"directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/com/google/protobuf/protobuf-java/3.11.4/protobuf-java-3.11.4.jar",
"mirror_urls": [
"https://jcenter.bintray.com/com/google/protobuf/protobuf-java/3.11.4/protobuf-java-3.11.4.jar",
@@ -374,74 +736,22 @@
"url": "https://jcenter.bintray.com/com/google/protobuf/protobuf-java/3.11.4/protobuf-java-3.11.4.jar"
},
{
- "coord": "com.google.template:soy:2019-10-08",
- "dependencies": [
- "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
- "args4j:args4j:2.0.23",
- "com.google.j2objc:j2objc-annotations:1.3",
- "org.ow2.asm:asm-tree:7.0",
- "com.google.common.html.types:types:1.0.6",
- "com.google.code.findbugs:jsr305:3.0.2",
- "org.ow2.asm:asm:7.0",
- "org.json:json:20160212",
- "com.google.protobuf:protobuf-java:3.11.4",
- "aopalliance:aopalliance:1.0",
- "com.google.code.gson:gson:2.7",
- "com.google.inject.extensions:guice-multibindings:4.1.0",
- "org.ow2.asm:asm-commons:7.0",
- "com.google.errorprone:error_prone_annotations:2.3.4",
- "org.ow2.asm:asm-util:7.0",
- "com.google.guava:guava:28.2-jre",
- "org.checkerframework:checker-qual:2.10.0",
- "com.google.inject:guice:4.1.0",
- "com.google.guava:failureaccess:1.0.1",
- "javax.inject:javax.inject:1",
- "com.google.jsinterop:jsinterop-annotations:1.0.1",
- "javax.annotation:jsr250-api:1.0",
- "org.ow2.asm:asm-analysis:7.0",
- "com.ibm.icu:icu4j:57.1"
- ],
- "directDependencies": [
- "args4j:args4j:2.0.23",
- "com.google.common.html.types:types:1.0.6",
- "com.google.code.findbugs:jsr305:3.0.2",
- "org.ow2.asm:asm:7.0",
- "org.json:json:20160212",
- "com.google.protobuf:protobuf-java:3.11.4",
- "com.google.code.gson:gson:2.7",
- "com.google.inject.extensions:guice-multibindings:4.1.0",
- "org.ow2.asm:asm-commons:7.0",
- "com.google.errorprone:error_prone_annotations:2.3.4",
- "org.ow2.asm:asm-util:7.0",
- "com.google.guava:guava:28.2-jre",
- "com.google.inject:guice:4.1.0",
- "javax.inject:javax.inject:1",
- "org.ow2.asm:asm-analysis:7.0",
- "com.ibm.icu:icu4j:57.1"
- ],
- "file": "v1/https/jcenter.bintray.com/com/google/template/soy/2019-10-08/soy-2019-10-08.jar",
- "mirror_urls": [
- "https://jcenter.bintray.com/com/google/template/soy/2019-10-08/soy-2019-10-08.jar",
- "https://maven.google.com/com/google/template/soy/2019-10-08/soy-2019-10-08.jar",
- "https://repo1.maven.org/maven2/com/google/template/soy/2019-10-08/soy-2019-10-08.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/com/google/template/soy/2019-10-08/soy-2019-10-08.jar"
- ],
- "sha256": "ab5b7d5f22c7cae335d914cb9dcea60133a38f6a35d435d372711da40ee9bde1",
- "url": "https://jcenter.bintray.com/com/google/template/soy/2019-10-08/soy-2019-10-08.jar"
- },
- {
- "coord": "com.ibm.icu:icu4j:57.1",
+ "coord": "com.google.protobuf:protobuf-java:jar:sources:3.11.4",
"dependencies": [],
"directDependencies": [],
- "file": "v1/https/jcenter.bintray.com/com/ibm/icu/icu4j/57.1/icu4j-57.1.jar",
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/protobuf/protobuf-java/3.11.4/protobuf-java-3.11.4-sources.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/com/ibm/icu/icu4j/57.1/icu4j-57.1.jar",
- "https://maven.google.com/com/ibm/icu/icu4j/57.1/icu4j-57.1.jar",
- "https://repo1.maven.org/maven2/com/ibm/icu/icu4j/57.1/icu4j-57.1.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/com/ibm/icu/icu4j/57.1/icu4j-57.1.jar"
+ "https://jcenter.bintray.com/com/google/protobuf/protobuf-java/3.11.4/protobuf-java-3.11.4-sources.jar",
+ "https://maven.google.com/com/google/protobuf/protobuf-java/3.11.4/protobuf-java-3.11.4-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-java/3.11.4/protobuf-java-3.11.4-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/protobuf/protobuf-java/3.11.4/protobuf-java-3.11.4-sources.jar"
],
- "sha256": "759d89ed2f8c6a6b627ab954be5913fbdc464f62254a513294e52260f28591ee",
- "url": "https://jcenter.bintray.com/com/ibm/icu/icu4j/57.1/icu4j-57.1.jar"
+ "sha256": "bc220c90651f509fba201f857715fbc4bd3a15580506ab96413f2bc1728ec4a8",
+ "url": "https://jcenter.bintray.com/com/google/protobuf/protobuf-java/3.11.4/protobuf-java-3.11.4-sources.jar"
},
{
"coord": "com.squareup.okhttp3:okhttp:3.11.0",
@@ -451,6 +761,10 @@
"directDependencies": [
"com.squareup.okio:okio:1.14.0"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/com/squareup/okhttp3/okhttp/3.11.0/okhttp-3.11.0.jar",
"mirror_urls": [
"https://jcenter.bintray.com/com/squareup/okhttp3/okhttp/3.11.0/okhttp-3.11.0.jar",
@@ -462,10 +776,36 @@
"url": "https://jcenter.bintray.com/com/squareup/okhttp3/okhttp/3.11.0/okhttp-3.11.0.jar"
},
{
- "coord": "com.squareup.okio:okio:1.14.0",
- "dependencies": [],
- "directDependencies": [],
- "file": "v1/https/jcenter.bintray.com/com/squareup/okio/okio/1.14.0/okio-1.14.0.jar",
+ "coord": "com.squareup.okhttp3:okhttp:jar:sources:3.11.0",
+ "dependencies": [
+ "com.squareup.okio:okio:jar:sources:1.14.0"
+ ],
+ "directDependencies": [
+ "com.squareup.okio:okio:jar:sources:1.14.0"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/squareup/okhttp3/okhttp/3.11.0/okhttp-3.11.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/squareup/okhttp3/okhttp/3.11.0/okhttp-3.11.0-sources.jar",
+ "https://maven.google.com/com/squareup/okhttp3/okhttp/3.11.0/okhttp-3.11.0-sources.jar",
+ "https://repo1.maven.org/maven2/com/squareup/okhttp3/okhttp/3.11.0/okhttp-3.11.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/squareup/okhttp3/okhttp/3.11.0/okhttp-3.11.0-sources.jar"
+ ],
+ "sha256": "2dade1d534496d68302adba898eafd7b019cd60c91afb763a50f5bde02ca3f68",
+ "url": "https://jcenter.bintray.com/com/squareup/okhttp3/okhttp/3.11.0/okhttp-3.11.0-sources.jar"
+ },
+ {
+ "coord": "com.squareup.okio:okio:1.14.0",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/squareup/okio/okio/1.14.0/okio-1.14.0.jar",
"mirror_urls": [
"https://jcenter.bintray.com/com/squareup/okio/okio/1.14.0/okio-1.14.0.jar",
"https://maven.google.com/com/squareup/okio/okio/1.14.0/okio-1.14.0.jar",
@@ -475,10 +815,32 @@
"sha256": "4633c331f50642ebe795dc089d6a5928aff43071c9d17e7840a009eea2fe95a3",
"url": "https://jcenter.bintray.com/com/squareup/okio/okio/1.14.0/okio-1.14.0.jar"
},
+ {
+ "coord": "com.squareup.okio:okio:jar:sources:1.14.0",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/squareup/okio/okio/1.14.0/okio-1.14.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/squareup/okio/okio/1.14.0/okio-1.14.0-sources.jar",
+ "https://maven.google.com/com/squareup/okio/okio/1.14.0/okio-1.14.0-sources.jar",
+ "https://repo1.maven.org/maven2/com/squareup/okio/okio/1.14.0/okio-1.14.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/squareup/okio/okio/1.14.0/okio-1.14.0-sources.jar"
+ ],
+ "sha256": "ccc34a4ef40021db61ce5c3ee796cca1a3fcc869ea292bb1ce4b5e7708034158",
+ "url": "https://jcenter.bintray.com/com/squareup/okio/okio/1.14.0/okio-1.14.0-sources.jar"
+ },
{
"coord": "com.univocity:univocity-parsers:2.7.6",
"dependencies": [],
"directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/com/univocity/univocity-parsers/2.7.6/univocity-parsers-2.7.6.jar",
"mirror_urls": [
"https://jcenter.bintray.com/com/univocity/univocity-parsers/2.7.6/univocity-parsers-2.7.6.jar",
@@ -489,6 +851,24 @@
"sha256": "5c3d77078594e9ad34f69ce1eb8ca81a07e6a6cb9bfc3e1eeb8d9cb8d1be487c",
"url": "https://jcenter.bintray.com/com/univocity/univocity-parsers/2.7.6/univocity-parsers-2.7.6.jar"
},
+ {
+ "coord": "com.univocity:univocity-parsers:jar:sources:2.7.6",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/univocity/univocity-parsers/2.7.6/univocity-parsers-2.7.6-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/univocity/univocity-parsers/2.7.6/univocity-parsers-2.7.6-sources.jar",
+ "https://maven.google.com/com/univocity/univocity-parsers/2.7.6/univocity-parsers-2.7.6-sources.jar",
+ "https://repo1.maven.org/maven2/com/univocity/univocity-parsers/2.7.6/univocity-parsers-2.7.6-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/univocity/univocity-parsers/2.7.6/univocity-parsers-2.7.6-sources.jar"
+ ],
+ "sha256": "b6b4272875cd5c348aeb05613fba0b82032d179291d1d6efbe713ea8754bd3a0",
+ "url": "https://jcenter.bintray.com/com/univocity/univocity-parsers/2.7.6/univocity-parsers-2.7.6-sources.jar"
+ },
{
"coord": "io.arrow-kt:arrow-annotations:0.8.2",
"dependencies": [
@@ -501,6 +881,10 @@
"io.kindedj:kindedj:1.1.0",
"org.jetbrains.kotlin:kotlin-stdlib:1.3.20"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/arrow-kt/arrow-annotations/0.8.2/arrow-annotations-0.8.2.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/arrow-kt/arrow-annotations/0.8.2/arrow-annotations-0.8.2.jar",
@@ -511,6 +895,32 @@
"sha256": "475c15a5a12c5daccb61716356f0c1bd8fcd6812fb44b728c14ae9c267d5ae82",
"url": "https://jcenter.bintray.com/io/arrow-kt/arrow-annotations/0.8.2/arrow-annotations-0.8.2.jar"
},
+ {
+ "coord": "io.arrow-kt:arrow-annotations:jar:sources:0.8.2",
+ "dependencies": [
+ "io.kindedj:kindedj:jar:sources:1.1.0",
+ "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.3.20",
+ "org.jetbrains:annotations:jar:sources:13.0",
+ "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.3.20"
+ ],
+ "directDependencies": [
+ "io.kindedj:kindedj:jar:sources:1.1.0",
+ "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.3.20"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/arrow-kt/arrow-annotations/0.8.2/arrow-annotations-0.8.2-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/arrow-kt/arrow-annotations/0.8.2/arrow-annotations-0.8.2-sources.jar",
+ "https://maven.google.com/io/arrow-kt/arrow-annotations/0.8.2/arrow-annotations-0.8.2-sources.jar",
+ "https://repo1.maven.org/maven2/io/arrow-kt/arrow-annotations/0.8.2/arrow-annotations-0.8.2-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/arrow-kt/arrow-annotations/0.8.2/arrow-annotations-0.8.2-sources.jar"
+ ],
+ "sha256": "2639dce494fc7f2890ce0a3c9c5111d2c50d6c9c395a0b3188ddcbc3cde95fbc",
+ "url": "https://jcenter.bintray.com/io/arrow-kt/arrow-annotations/0.8.2/arrow-annotations-0.8.2-sources.jar"
+ },
{
"coord": "io.arrow-kt:arrow-core:0.8.2",
"dependencies": [
@@ -525,6 +935,10 @@
"io.arrow-kt:arrow-annotations:0.8.2",
"org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.20"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/arrow-kt/arrow-core/0.8.2/arrow-core-0.8.2.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/arrow-kt/arrow-core/0.8.2/arrow-core-0.8.2.jar",
@@ -535,10 +949,42 @@
"sha256": "75f4819d01de37b82de4523468ca9bde84583a566d6364ef93dbdc060e07d418",
"url": "https://jcenter.bintray.com/io/arrow-kt/arrow-core/0.8.2/arrow-core-0.8.2.jar"
},
+ {
+ "coord": "io.arrow-kt:arrow-core:jar:sources:0.8.2",
+ "dependencies": [
+ "org.jetbrains:annotations:jar:sources:13.0",
+ "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.3.20",
+ "io.arrow-kt:arrow-annotations:jar:sources:0.8.2",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:sources:1.3.20",
+ "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.3.20",
+ "io.kindedj:kindedj:jar:sources:1.1.0"
+ ],
+ "directDependencies": [
+ "io.arrow-kt:arrow-annotations:jar:sources:0.8.2",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:sources:1.3.20"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/arrow-kt/arrow-core/0.8.2/arrow-core-0.8.2-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/arrow-kt/arrow-core/0.8.2/arrow-core-0.8.2-sources.jar",
+ "https://maven.google.com/io/arrow-kt/arrow-core/0.8.2/arrow-core-0.8.2-sources.jar",
+ "https://repo1.maven.org/maven2/io/arrow-kt/arrow-core/0.8.2/arrow-core-0.8.2-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/arrow-kt/arrow-core/0.8.2/arrow-core-0.8.2-sources.jar"
+ ],
+ "sha256": "0e0a826156a8bc031c5ab7bc0ae6737669cc6ac120f4f4d6dc164b9ede57319f",
+ "url": "https://jcenter.bintray.com/io/arrow-kt/arrow-core/0.8.2/arrow-core-0.8.2-sources.jar"
+ },
{
"coord": "io.github.classgraph:classgraph:4.6.18",
"dependencies": [],
"directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/github/classgraph/classgraph/4.6.18/classgraph-4.6.18.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/github/classgraph/classgraph/4.6.18/classgraph-4.6.18.jar",
@@ -549,10 +995,586 @@
"sha256": "baa3fbcb3808ce83ccfb2546cfd6d75845b72436385f851ac90c102b8e0ecb8a",
"url": "https://jcenter.bintray.com/io/github/classgraph/classgraph/4.6.18/classgraph-4.6.18.jar"
},
+ {
+ "coord": "io.github.classgraph:classgraph:jar:sources:4.6.18",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/github/classgraph/classgraph/4.6.18/classgraph-4.6.18-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/github/classgraph/classgraph/4.6.18/classgraph-4.6.18-sources.jar",
+ "https://maven.google.com/io/github/classgraph/classgraph/4.6.18/classgraph-4.6.18-sources.jar",
+ "https://repo1.maven.org/maven2/io/github/classgraph/classgraph/4.6.18/classgraph-4.6.18-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/github/classgraph/classgraph/4.6.18/classgraph-4.6.18-sources.jar"
+ ],
+ "sha256": "60d5401711ba0bcc6ea2ee2176711f0b4940125cdea2686c3677107828552251",
+ "url": "https://jcenter.bintray.com/io/github/classgraph/classgraph/4.6.18/classgraph-4.6.18-sources.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-api:1.26.0",
+ "dependencies": [
+ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
+ "com.google.guava:guava:28.1-android",
+ "org.codehaus.mojo:animal-sniffer-annotations:1.18",
+ "com.google.j2objc:j2objc-annotations:1.3",
+ "com.google.errorprone:error_prone_annotations:2.3.3",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "io.grpc:grpc-context:1.26.0",
+ "com.google.guava:failureaccess:1.0.1",
+ "org.checkerframework:checker-compat-qual:2.5.5"
+ ],
+ "directDependencies": [
+ "com.google.guava:guava:28.1-android",
+ "org.codehaus.mojo:animal-sniffer-annotations:1.18",
+ "com.google.errorprone:error_prone_annotations:2.3.3",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "io.grpc:grpc-context:1.26.0"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-api/1.26.0/grpc-api-1.26.0.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/grpc/grpc-api/1.26.0/grpc-api-1.26.0.jar",
+ "https://maven.google.com/io/grpc/grpc-api/1.26.0/grpc-api-1.26.0.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-api/1.26.0/grpc-api-1.26.0.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-api/1.26.0/grpc-api-1.26.0.jar"
+ ],
+ "sha256": "cd585bb053defe7721a0b78e8f3e23f0d7d6fb947c9941c53a1c859b0c52ea13",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-api/1.26.0/grpc-api-1.26.0.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-api:jar:sources:1.26.0",
+ "dependencies": [
+ "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "io.grpc:grpc-context:jar:sources:1.26.0",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
+ "org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
+ "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
+ "com.google.guava:guava:jar:sources:28.1-android",
+ "com.google.guava:failureaccess:jar:sources:1.0.1"
+ ],
+ "directDependencies": [
+ "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "io.grpc:grpc-context:jar:sources:1.26.0",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
+ "com.google.guava:guava:jar:sources:28.1-android"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-api/1.26.0/grpc-api-1.26.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/grpc/grpc-api/1.26.0/grpc-api-1.26.0-sources.jar",
+ "https://maven.google.com/io/grpc/grpc-api/1.26.0/grpc-api-1.26.0-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-api/1.26.0/grpc-api-1.26.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-api/1.26.0/grpc-api-1.26.0-sources.jar"
+ ],
+ "sha256": "c5499550d3111015be2136ed55ff915482bf37620b6ebdb236d549952096d3c5",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-api/1.26.0/grpc-api-1.26.0-sources.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-auth:1.26.0",
+ "dependencies": [
+ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
+ "com.google.guava:guava:28.1-android",
+ "org.codehaus.mojo:animal-sniffer-annotations:1.18",
+ "com.google.j2objc:j2objc-annotations:1.3",
+ "com.google.errorprone:error_prone_annotations:2.3.3",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "io.grpc:grpc-context:1.26.0",
+ "com.google.guava:failureaccess:1.0.1",
+ "com.google.auth:google-auth-library-credentials:0.18.0",
+ "io.grpc:grpc-api:1.26.0",
+ "org.checkerframework:checker-compat-qual:2.5.5"
+ ],
+ "directDependencies": [
+ "com.google.auth:google-auth-library-credentials:0.18.0",
+ "io.grpc:grpc-api:1.26.0"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-auth/1.26.0/grpc-auth-1.26.0.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/grpc/grpc-auth/1.26.0/grpc-auth-1.26.0.jar",
+ "https://maven.google.com/io/grpc/grpc-auth/1.26.0/grpc-auth-1.26.0.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-auth/1.26.0/grpc-auth-1.26.0.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-auth/1.26.0/grpc-auth-1.26.0.jar"
+ ],
+ "sha256": "d35024306a6e72364d5170a1a4da4d82e87ddb6271bba80a7c749780b85be86f",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-auth/1.26.0/grpc-auth-1.26.0.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-auth:jar:sources:1.26.0",
+ "dependencies": [
+ "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "io.grpc:grpc-context:jar:sources:1.26.0",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
+ "org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
+ "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
+ "io.grpc:grpc-api:jar:sources:1.26.0",
+ "com.google.guava:guava:jar:sources:28.1-android",
+ "com.google.guava:failureaccess:jar:sources:1.0.1",
+ "com.google.auth:google-auth-library-credentials:jar:sources:0.18.0"
+ ],
+ "directDependencies": [
+ "com.google.auth:google-auth-library-credentials:jar:sources:0.18.0",
+ "io.grpc:grpc-api:jar:sources:1.26.0"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-auth/1.26.0/grpc-auth-1.26.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/grpc/grpc-auth/1.26.0/grpc-auth-1.26.0-sources.jar",
+ "https://maven.google.com/io/grpc/grpc-auth/1.26.0/grpc-auth-1.26.0-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-auth/1.26.0/grpc-auth-1.26.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-auth/1.26.0/grpc-auth-1.26.0-sources.jar"
+ ],
+ "sha256": "b1c9b2bd3ee3c9b81a4d2324d797b684701ef1249bbccbd80f9879bd2720338e",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-auth/1.26.0/grpc-auth-1.26.0-sources.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-context:1.26.0",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-context/1.26.0/grpc-context-1.26.0.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/grpc/grpc-context/1.26.0/grpc-context-1.26.0.jar",
+ "https://maven.google.com/io/grpc/grpc-context/1.26.0/grpc-context-1.26.0.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-context/1.26.0/grpc-context-1.26.0.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-context/1.26.0/grpc-context-1.26.0.jar"
+ ],
+ "sha256": "16388315b48a3aee21e0530ae7a31441288226dd0878e7abdca2e09aa8a60404",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-context/1.26.0/grpc-context-1.26.0.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-context:jar:sources:1.26.0",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-context/1.26.0/grpc-context-1.26.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/grpc/grpc-context/1.26.0/grpc-context-1.26.0-sources.jar",
+ "https://maven.google.com/io/grpc/grpc-context/1.26.0/grpc-context-1.26.0-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-context/1.26.0/grpc-context-1.26.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-context/1.26.0/grpc-context-1.26.0-sources.jar"
+ ],
+ "sha256": "14d6440ce2236bcfe89ad87f868e7299caad7754b5e5ca57e1b31bff16e53388",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-context/1.26.0/grpc-context-1.26.0-sources.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-core:1.26.0",
+ "dependencies": [
+ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
+ "com.google.guava:guava:28.1-android",
+ "org.codehaus.mojo:animal-sniffer-annotations:1.18",
+ "com.google.j2objc:j2objc-annotations:1.3",
+ "com.google.errorprone:error_prone_annotations:2.3.3",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "com.google.android:annotations:4.1.1.4",
+ "io.grpc:grpc-context:1.26.0",
+ "io.opencensus:opencensus-api:0.24.0",
+ "com.google.code.gson:gson:2.8.6",
+ "com.google.guava:failureaccess:1.0.1",
+ "io.opencensus:opencensus-contrib-grpc-metrics:0.24.0",
+ "io.grpc:grpc-api:1.26.0",
+ "io.perfmark:perfmark-api:0.19.0",
+ "org.checkerframework:checker-compat-qual:2.5.5"
+ ],
+ "directDependencies": [
+ "com.google.android:annotations:4.1.1.4",
+ "io.opencensus:opencensus-api:0.24.0",
+ "com.google.code.gson:gson:2.8.6",
+ "io.opencensus:opencensus-contrib-grpc-metrics:0.24.0",
+ "io.grpc:grpc-api:1.26.0",
+ "io.perfmark:perfmark-api:0.19.0"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-core/1.26.0/grpc-core-1.26.0.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/grpc/grpc-core/1.26.0/grpc-core-1.26.0.jar",
+ "https://maven.google.com/io/grpc/grpc-core/1.26.0/grpc-core-1.26.0.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-core/1.26.0/grpc-core-1.26.0.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-core/1.26.0/grpc-core-1.26.0.jar"
+ ],
+ "sha256": "7e4f83e4e8d963c0556bafaea9faf562aab8861f3e5644e53e294c85edef6a2d",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-core/1.26.0/grpc-core-1.26.0.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-core:jar:sources:1.26.0",
+ "dependencies": [
+ "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.android:annotations:jar:sources:4.1.1.4",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "io.perfmark:perfmark-api:jar:sources:0.19.0",
+ "io.opencensus:opencensus-contrib-grpc-metrics:jar:sources:0.24.0",
+ "io.grpc:grpc-context:jar:sources:1.26.0",
+ "io.opencensus:opencensus-api:jar:sources:0.24.0",
+ "com.google.code.gson:gson:jar:sources:2.8.6",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
+ "org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
+ "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
+ "io.grpc:grpc-api:jar:sources:1.26.0",
+ "com.google.guava:guava:jar:sources:28.1-android",
+ "com.google.guava:failureaccess:jar:sources:1.0.1"
+ ],
+ "directDependencies": [
+ "com.google.android:annotations:jar:sources:4.1.1.4",
+ "io.perfmark:perfmark-api:jar:sources:0.19.0",
+ "io.opencensus:opencensus-contrib-grpc-metrics:jar:sources:0.24.0",
+ "io.opencensus:opencensus-api:jar:sources:0.24.0",
+ "com.google.code.gson:gson:jar:sources:2.8.6",
+ "io.grpc:grpc-api:jar:sources:1.26.0"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-core/1.26.0/grpc-core-1.26.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/grpc/grpc-core/1.26.0/grpc-core-1.26.0-sources.jar",
+ "https://maven.google.com/io/grpc/grpc-core/1.26.0/grpc-core-1.26.0-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-core/1.26.0/grpc-core-1.26.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-core/1.26.0/grpc-core-1.26.0-sources.jar"
+ ],
+ "sha256": "ed5e720dd039885752de82fa20f8861fd68cec22c8597e299894dbd8c0388d99",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-core/1.26.0/grpc-core-1.26.0-sources.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-netty:1.26.0",
+ "dependencies": [
+ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
+ "io.netty:netty-handler-proxy:4.1.45.Final",
+ "com.google.guava:guava:28.1-android",
+ "org.codehaus.mojo:animal-sniffer-annotations:1.18",
+ "com.google.j2objc:j2objc-annotations:1.3",
+ "com.google.errorprone:error_prone_annotations:2.3.3",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "com.google.android:annotations:4.1.1.4",
+ "io.grpc:grpc-context:1.26.0",
+ "io.netty:netty-codec-socks:4.1.45.Final",
+ "io.opencensus:opencensus-api:0.24.0",
+ "com.google.code.gson:gson:2.8.6",
+ "io.netty:netty-codec:4.1.45.Final",
+ "io.netty:netty-codec-http:4.1.45.Final",
+ "io.netty:netty-transport:4.1.45.Final",
+ "com.google.guava:failureaccess:1.0.1",
+ "io.opencensus:opencensus-contrib-grpc-metrics:0.24.0",
+ "io.netty:netty-common:4.1.45.Final",
+ "io.netty:netty-resolver:4.1.45.Final",
+ "io.netty:netty-codec-http2:4.1.42.Final",
+ "io.grpc:grpc-core:1.26.0",
+ "io.grpc:grpc-api:1.26.0",
+ "io.perfmark:perfmark-api:0.19.0",
+ "io.netty:netty-buffer:4.1.45.Final",
+ "io.netty:netty-handler:4.1.45.Final",
+ "org.checkerframework:checker-compat-qual:2.5.5"
+ ],
+ "directDependencies": [
+ "io.grpc:grpc-core:1.26.0",
+ "io.netty:netty-codec-http2:4.1.42.Final",
+ "io.netty:netty-handler-proxy:4.1.45.Final"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-netty/1.26.0/grpc-netty-1.26.0.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/grpc/grpc-netty/1.26.0/grpc-netty-1.26.0.jar",
+ "https://maven.google.com/io/grpc/grpc-netty/1.26.0/grpc-netty-1.26.0.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-netty/1.26.0/grpc-netty-1.26.0.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-netty/1.26.0/grpc-netty-1.26.0.jar"
+ ],
+ "sha256": "8149699b8f4a81f9709ece2b35210c187551da1cb5131efc7227b68822c10049",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-netty/1.26.0/grpc-netty-1.26.0.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-netty:jar:sources:1.26.0",
+ "dependencies": [
+ "io.netty:netty-codec-http:jar:sources:4.1.45.Final",
+ "io.netty:netty-transport:jar:sources:4.1.45.Final",
+ "io.netty:netty-codec-http2:jar:sources:4.1.42.Final",
+ "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.android:annotations:jar:sources:4.1.1.4",
+ "io.netty:netty-codec:jar:sources:4.1.45.Final",
+ "io.netty:netty-buffer:jar:sources:4.1.45.Final",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "io.perfmark:perfmark-api:jar:sources:0.19.0",
+ "io.netty:netty-handler-proxy:jar:sources:4.1.45.Final",
+ "io.opencensus:opencensus-contrib-grpc-metrics:jar:sources:0.24.0",
+ "io.grpc:grpc-context:jar:sources:1.26.0",
+ "io.opencensus:opencensus-api:jar:sources:0.24.0",
+ "io.netty:netty-handler:jar:sources:4.1.45.Final",
+ "com.google.code.gson:gson:jar:sources:2.8.6",
+ "io.netty:netty-codec-socks:jar:sources:4.1.45.Final",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
+ "org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
+ "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
+ "io.grpc:grpc-api:jar:sources:1.26.0",
+ "io.grpc:grpc-core:jar:sources:1.26.0",
+ "com.google.guava:guava:jar:sources:28.1-android",
+ "io.netty:netty-common:jar:sources:4.1.45.Final",
+ "com.google.guava:failureaccess:jar:sources:1.0.1",
+ "io.netty:netty-resolver:jar:sources:4.1.45.Final"
+ ],
+ "directDependencies": [
+ "io.grpc:grpc-core:jar:sources:1.26.0",
+ "io.netty:netty-codec-http2:jar:sources:4.1.42.Final",
+ "io.netty:netty-handler-proxy:jar:sources:4.1.45.Final"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-netty/1.26.0/grpc-netty-1.26.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/grpc/grpc-netty/1.26.0/grpc-netty-1.26.0-sources.jar",
+ "https://maven.google.com/io/grpc/grpc-netty/1.26.0/grpc-netty-1.26.0-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-netty/1.26.0/grpc-netty-1.26.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-netty/1.26.0/grpc-netty-1.26.0-sources.jar"
+ ],
+ "sha256": "f3bce95c67c06f8e22aa3ed068834d455d0b21df21a95caf4ffe04c586ac24d9",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-netty/1.26.0/grpc-netty-1.26.0-sources.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-protobuf-lite:1.26.0",
+ "dependencies": [
+ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
+ "com.google.guava:guava:28.1-android",
+ "org.codehaus.mojo:animal-sniffer-annotations:1.18",
+ "com.google.j2objc:j2objc-annotations:1.3",
+ "com.google.errorprone:error_prone_annotations:2.3.3",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "io.grpc:grpc-context:1.26.0",
+ "com.google.guava:failureaccess:1.0.1",
+ "io.grpc:grpc-api:1.26.0",
+ "org.checkerframework:checker-compat-qual:2.5.5"
+ ],
+ "directDependencies": [
+ "com.google.guava:guava:28.1-android",
+ "io.grpc:grpc-api:1.26.0"
+ ],
+ "exclusions": [
+ "com.google.protobuf:protobuf-javalite",
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-protobuf-lite/1.26.0/grpc-protobuf-lite-1.26.0.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/grpc/grpc-protobuf-lite/1.26.0/grpc-protobuf-lite-1.26.0.jar",
+ "https://maven.google.com/io/grpc/grpc-protobuf-lite/1.26.0/grpc-protobuf-lite-1.26.0.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-protobuf-lite/1.26.0/grpc-protobuf-lite-1.26.0.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-protobuf-lite/1.26.0/grpc-protobuf-lite-1.26.0.jar"
+ ],
+ "sha256": "195ce913891e9522dbf00059fe72ea8ffeb0e1ad8328dd8197ef5c96d50655ec",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-protobuf-lite/1.26.0/grpc-protobuf-lite-1.26.0.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-protobuf-lite:jar:sources:1.26.0",
+ "dependencies": [
+ "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "io.grpc:grpc-context:jar:sources:1.26.0",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
+ "org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
+ "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
+ "io.grpc:grpc-api:jar:sources:1.26.0",
+ "com.google.guava:guava:jar:sources:28.1-android",
+ "com.google.guava:failureaccess:jar:sources:1.0.1"
+ ],
+ "directDependencies": [
+ "com.google.guava:guava:jar:sources:28.1-android",
+ "io.grpc:grpc-api:jar:sources:1.26.0"
+ ],
+ "exclusions": [
+ "com.google.protobuf:protobuf-javalite",
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-protobuf-lite/1.26.0/grpc-protobuf-lite-1.26.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/grpc/grpc-protobuf-lite/1.26.0/grpc-protobuf-lite-1.26.0-sources.jar",
+ "https://maven.google.com/io/grpc/grpc-protobuf-lite/1.26.0/grpc-protobuf-lite-1.26.0-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-protobuf-lite/1.26.0/grpc-protobuf-lite-1.26.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-protobuf-lite/1.26.0/grpc-protobuf-lite-1.26.0-sources.jar"
+ ],
+ "sha256": "9d948923266521bb62e6a6e297b1ad3d18add8a3af0f75bf511cb4210aa9c9cb",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-protobuf-lite/1.26.0/grpc-protobuf-lite-1.26.0-sources.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-protobuf:1.26.0",
+ "dependencies": [
+ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
+ "com.google.guava:guava:28.1-android",
+ "org.codehaus.mojo:animal-sniffer-annotations:1.18",
+ "com.google.j2objc:j2objc-annotations:1.3",
+ "com.google.errorprone:error_prone_annotations:2.3.3",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "io.grpc:grpc-context:1.26.0",
+ "com.google.protobuf:protobuf-java:3.11.4",
+ "com.google.api.grpc:proto-google-common-protos:1.12.0",
+ "com.google.guava:failureaccess:1.0.1",
+ "io.grpc:grpc-api:1.26.0",
+ "io.grpc:grpc-protobuf-lite:1.26.0",
+ "org.checkerframework:checker-compat-qual:2.5.5"
+ ],
+ "directDependencies": [
+ "com.google.guava:guava:28.1-android",
+ "com.google.protobuf:protobuf-java:3.11.4",
+ "com.google.api.grpc:proto-google-common-protos:1.12.0",
+ "io.grpc:grpc-api:1.26.0",
+ "io.grpc:grpc-protobuf-lite:1.26.0"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-protobuf/1.26.0/grpc-protobuf-1.26.0.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/grpc/grpc-protobuf/1.26.0/grpc-protobuf-1.26.0.jar",
+ "https://maven.google.com/io/grpc/grpc-protobuf/1.26.0/grpc-protobuf-1.26.0.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-protobuf/1.26.0/grpc-protobuf-1.26.0.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-protobuf/1.26.0/grpc-protobuf-1.26.0.jar"
+ ],
+ "sha256": "e8bf12fe69d51247b079817e82446b8d36f6ddc5fdd22bc30ef711e442e05c71",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-protobuf/1.26.0/grpc-protobuf-1.26.0.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-protobuf:jar:sources:1.26.0",
+ "dependencies": [
+ "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "io.grpc:grpc-protobuf-lite:jar:sources:1.26.0",
+ "com.google.protobuf:protobuf-java:jar:sources:3.11.4",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "io.grpc:grpc-context:jar:sources:1.26.0",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
+ "com.google.api.grpc:proto-google-common-protos:jar:sources:1.12.0",
+ "org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
+ "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
+ "io.grpc:grpc-api:jar:sources:1.26.0",
+ "com.google.guava:guava:jar:sources:28.1-android",
+ "com.google.guava:failureaccess:jar:sources:1.0.1"
+ ],
+ "directDependencies": [
+ "io.grpc:grpc-protobuf-lite:jar:sources:1.26.0",
+ "com.google.protobuf:protobuf-java:jar:sources:3.11.4",
+ "com.google.api.grpc:proto-google-common-protos:jar:sources:1.12.0",
+ "io.grpc:grpc-api:jar:sources:1.26.0",
+ "com.google.guava:guava:jar:sources:28.1-android"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-protobuf/1.26.0/grpc-protobuf-1.26.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/grpc/grpc-protobuf/1.26.0/grpc-protobuf-1.26.0-sources.jar",
+ "https://maven.google.com/io/grpc/grpc-protobuf/1.26.0/grpc-protobuf-1.26.0-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-protobuf/1.26.0/grpc-protobuf-1.26.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-protobuf/1.26.0/grpc-protobuf-1.26.0-sources.jar"
+ ],
+ "sha256": "f6c42b0b933be42251d3ae75c776621cd789a6cffe2b76fa97966e98f10b69b6",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-protobuf/1.26.0/grpc-protobuf-1.26.0-sources.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-stub:1.26.0",
+ "dependencies": [
+ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
+ "com.google.guava:guava:28.1-android",
+ "org.codehaus.mojo:animal-sniffer-annotations:1.18",
+ "com.google.j2objc:j2objc-annotations:1.3",
+ "com.google.errorprone:error_prone_annotations:2.3.3",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "io.grpc:grpc-context:1.26.0",
+ "com.google.guava:failureaccess:1.0.1",
+ "io.grpc:grpc-api:1.26.0",
+ "org.checkerframework:checker-compat-qual:2.5.5"
+ ],
+ "directDependencies": [
+ "io.grpc:grpc-api:1.26.0"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-stub/1.26.0/grpc-stub-1.26.0.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/grpc/grpc-stub/1.26.0/grpc-stub-1.26.0.jar",
+ "https://maven.google.com/io/grpc/grpc-stub/1.26.0/grpc-stub-1.26.0.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-stub/1.26.0/grpc-stub-1.26.0.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-stub/1.26.0/grpc-stub-1.26.0.jar"
+ ],
+ "sha256": "b67cbb0a7e1a91e91c5dfb9fc3a0f889119f9132766d1f406f9df4c7c5411eb3",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-stub/1.26.0/grpc-stub-1.26.0.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-stub:jar:sources:1.26.0",
+ "dependencies": [
+ "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "io.grpc:grpc-context:jar:sources:1.26.0",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
+ "org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
+ "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
+ "io.grpc:grpc-api:jar:sources:1.26.0",
+ "com.google.guava:guava:jar:sources:28.1-android",
+ "com.google.guava:failureaccess:jar:sources:1.0.1"
+ ],
+ "directDependencies": [
+ "io.grpc:grpc-api:jar:sources:1.26.0"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-stub/1.26.0/grpc-stub-1.26.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/grpc/grpc-stub/1.26.0/grpc-stub-1.26.0-sources.jar",
+ "https://maven.google.com/io/grpc/grpc-stub/1.26.0/grpc-stub-1.26.0-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-stub/1.26.0/grpc-stub-1.26.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-stub/1.26.0/grpc-stub-1.26.0-sources.jar"
+ ],
+ "sha256": "b37ce9c9020c0cdd30f2d8f1c9d32d31a957488ffe205fab55d3edf438f9f56a",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-stub/1.26.0/grpc-stub-1.26.0-sources.jar"
+ },
{
"coord": "io.kindedj:kindedj:1.1.0",
"dependencies": [],
"directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/kindedj/kindedj/1.1.0/kindedj-1.1.0.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/kindedj/kindedj/1.1.0/kindedj-1.1.0.jar",
@@ -563,6 +1585,24 @@
"sha256": "c8786c94de34869f087d28b52777374cbb349d827673044c56c63678b448f3f8",
"url": "https://jcenter.bintray.com/io/kindedj/kindedj/1.1.0/kindedj-1.1.0.jar"
},
+ {
+ "coord": "io.kindedj:kindedj:jar:sources:1.1.0",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/kindedj/kindedj/1.1.0/kindedj-1.1.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/kindedj/kindedj/1.1.0/kindedj-1.1.0-sources.jar",
+ "https://maven.google.com/io/kindedj/kindedj/1.1.0/kindedj-1.1.0-sources.jar",
+ "https://repo1.maven.org/maven2/io/kindedj/kindedj/1.1.0/kindedj-1.1.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/kindedj/kindedj/1.1.0/kindedj-1.1.0-sources.jar"
+ ],
+ "sha256": "d2c5784e857f9c4538cc37c1ca8ed55c9411eec50d5bb7eb7613f96fba38085f",
+ "url": "https://jcenter.bintray.com/io/kindedj/kindedj/1.1.0/kindedj-1.1.0-sources.jar"
+ },
{
"coord": "io.kotlintest:kotlintest-assertions:3.2.1",
"dependencies": [
@@ -580,6 +1620,10 @@
"org.jetbrains.kotlin:kotlin-reflect:1.3.20",
"org.jetbrains.kotlin:kotlin-stdlib:1.3.20"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/kotlintest/kotlintest-assertions/3.2.1/kotlintest-assertions-3.2.1.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/kotlintest/kotlintest-assertions/3.2.1/kotlintest-assertions-3.2.1.jar",
@@ -590,6 +1634,37 @@
"sha256": "61027acae04abcec8c1cacec425a8ae6d6e2f4f7282ae00fdd12b0d3a10d3ce3",
"url": "https://jcenter.bintray.com/io/kotlintest/kotlintest-assertions/3.2.1/kotlintest-assertions-3.2.1.jar"
},
+ {
+ "coord": "io.kotlintest:kotlintest-assertions:jar:sources:3.2.1",
+ "dependencies": [
+ "com.github.wumpz:diffutils:jar:sources:2.2",
+ "org.jetbrains:annotations:jar:sources:13.0",
+ "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.3.20",
+ "com.univocity:univocity-parsers:jar:sources:2.7.6",
+ "org.jetbrains.kotlin:kotlin-reflect:jar:sources:1.3.20",
+ "org.eclipse.jgit:org.eclipse.jgit:jar:sources:4.4.1.201607150455-r",
+ "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.3.20"
+ ],
+ "directDependencies": [
+ "com.github.wumpz:diffutils:jar:sources:2.2",
+ "com.univocity:univocity-parsers:jar:sources:2.7.6",
+ "org.jetbrains.kotlin:kotlin-reflect:jar:sources:1.3.20",
+ "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.3.20"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/kotlintest/kotlintest-assertions/3.2.1/kotlintest-assertions-3.2.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/kotlintest/kotlintest-assertions/3.2.1/kotlintest-assertions-3.2.1-sources.jar",
+ "https://maven.google.com/io/kotlintest/kotlintest-assertions/3.2.1/kotlintest-assertions-3.2.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/kotlintest/kotlintest-assertions/3.2.1/kotlintest-assertions-3.2.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/kotlintest/kotlintest-assertions/3.2.1/kotlintest-assertions-3.2.1-sources.jar"
+ ],
+ "sha256": "8389f529913114651f9f8ac772f03fd9a4a4e26db70365b79dda716d54133127",
+ "url": "https://jcenter.bintray.com/io/kotlintest/kotlintest-assertions/3.2.1/kotlintest-assertions-3.2.1-sources.jar"
+ },
{
"coord": "io.kotlintest:kotlintest-core:3.2.1",
"dependencies": [
@@ -607,6 +1682,10 @@
"org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.0",
"org.slf4j:slf4j-api:1.7.26"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/kotlintest/kotlintest-core/3.2.1/kotlintest-core-3.2.1.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/kotlintest/kotlintest-core/3.2.1/kotlintest-core-3.2.1.jar",
@@ -617,6 +1696,37 @@
"sha256": "d52cfd0379d5a14e9899220ae6362fd6d4abb84eeddd7d4c9585ea1dc09610bb",
"url": "https://jcenter.bintray.com/io/kotlintest/kotlintest-core/3.2.1/kotlintest-core-3.2.1.jar"
},
+ {
+ "coord": "io.kotlintest:kotlintest-core:jar:sources:3.2.1",
+ "dependencies": [
+ "org.jetbrains:annotations:jar:sources:13.0",
+ "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.3.20",
+ "org.jetbrains.kotlin:kotlin-reflect:jar:sources:1.3.20",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core:jar:sources:1.1.0",
+ "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.3.20",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:jar:sources:1.1.0"
+ ],
+ "directDependencies": [
+ "org.jetbrains.kotlin:kotlin-reflect:jar:sources:1.3.20",
+ "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.3.20",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core:jar:sources:1.1.0",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/kotlintest/kotlintest-core/3.2.1/kotlintest-core-3.2.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/kotlintest/kotlintest-core/3.2.1/kotlintest-core-3.2.1-sources.jar",
+ "https://maven.google.com/io/kotlintest/kotlintest-core/3.2.1/kotlintest-core-3.2.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/kotlintest/kotlintest-core/3.2.1/kotlintest-core-3.2.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/kotlintest/kotlintest-core/3.2.1/kotlintest-core-3.2.1-sources.jar"
+ ],
+ "sha256": "5d4e40761bc458796371efe5cd12050e9b5a58e737e80b1ded6cc47c4efc092d",
+ "url": "https://jcenter.bintray.com/io/kotlintest/kotlintest-core/3.2.1/kotlintest-core-3.2.1-sources.jar"
+ },
{
"coord": "io.kotlintest:kotlintest-runner-junit5:3.2.1",
"dependencies": [
@@ -654,6 +1764,10 @@
"org.junit.platform:junit-platform-engine:1.3.2",
"org.junit.platform:junit-platform-suite-api:1.3.2"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/kotlintest/kotlintest-runner-junit5/3.2.1/kotlintest-runner-junit5-3.2.1.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/kotlintest/kotlintest-runner-junit5/3.2.1/kotlintest-runner-junit5-3.2.1.jar",
@@ -661,8 +1775,59 @@
"https://repo1.maven.org/maven2/io/kotlintest/kotlintest-runner-junit5/3.2.1/kotlintest-runner-junit5-3.2.1.jar",
"https://dl.bintray.com/micronaut/core-releases-local/io/kotlintest/kotlintest-runner-junit5/3.2.1/kotlintest-runner-junit5-3.2.1.jar"
],
- "sha256": "f1ecd492cbf3b50bf045caa44760f18c9e740889644eb4bcbc01bf670c94dd3b",
- "url": "https://jcenter.bintray.com/io/kotlintest/kotlintest-runner-junit5/3.2.1/kotlintest-runner-junit5-3.2.1.jar"
+ "sha256": "f1ecd492cbf3b50bf045caa44760f18c9e740889644eb4bcbc01bf670c94dd3b",
+ "url": "https://jcenter.bintray.com/io/kotlintest/kotlintest-runner-junit5/3.2.1/kotlintest-runner-junit5-3.2.1.jar"
+ },
+ {
+ "coord": "io.kotlintest:kotlintest-runner-junit5:jar:sources:3.2.1",
+ "dependencies": [
+ "com.github.wumpz:diffutils:jar:sources:2.2",
+ "org.jetbrains:annotations:jar:sources:13.0",
+ "io.kotlintest:kotlintest-assertions:jar:sources:3.2.1",
+ "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.3.20",
+ "org.junit.platform:junit-platform-engine:jar:sources:1.3.2",
+ "com.univocity:univocity-parsers:jar:sources:2.7.6",
+ "org.jetbrains.kotlin:kotlin-reflect:jar:sources:1.3.20",
+ "io.arrow-kt:arrow-annotations:jar:sources:0.8.2",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "org.junit.platform:junit-platform-commons:jar:sources:1.3.2",
+ "io.kotlintest:kotlintest-core:jar:sources:3.2.1",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core:jar:sources:1.1.0",
+ "io.github.classgraph:classgraph:jar:sources:4.6.18",
+ "org.junit.platform:junit-platform-suite-api:jar:sources:1.3.2",
+ "org.eclipse.jgit:org.eclipse.jgit:jar:sources:4.4.1.201607150455-r",
+ "org.apiguardian:apiguardian-api:jar:sources:1.0.0",
+ "org.junit.platform:junit-platform-launcher:jar:sources:1.3.2",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:sources:1.3.20",
+ "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.3.20",
+ "io.arrow-kt:arrow-core:jar:sources:0.8.2",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:jar:sources:1.1.0",
+ "io.kotlintest:kotlintest-runner-jvm:jar:sources:3.2.1",
+ "org.opentest4j:opentest4j:jar:sources:1.1.1",
+ "io.kindedj:kindedj:jar:sources:1.1.0"
+ ],
+ "directDependencies": [
+ "io.kotlintest:kotlintest-assertions:jar:sources:3.2.1",
+ "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.3.20",
+ "org.junit.platform:junit-platform-engine:jar:sources:1.3.2",
+ "io.kotlintest:kotlintest-core:jar:sources:3.2.1",
+ "org.junit.platform:junit-platform-suite-api:jar:sources:1.3.2",
+ "org.junit.platform:junit-platform-launcher:jar:sources:1.3.2",
+ "io.kotlintest:kotlintest-runner-jvm:jar:sources:3.2.1"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/kotlintest/kotlintest-runner-junit5/3.2.1/kotlintest-runner-junit5-3.2.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/kotlintest/kotlintest-runner-junit5/3.2.1/kotlintest-runner-junit5-3.2.1-sources.jar",
+ "https://maven.google.com/io/kotlintest/kotlintest-runner-junit5/3.2.1/kotlintest-runner-junit5-3.2.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/kotlintest/kotlintest-runner-junit5/3.2.1/kotlintest-runner-junit5-3.2.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/kotlintest/kotlintest-runner-junit5/3.2.1/kotlintest-runner-junit5-3.2.1-sources.jar"
+ ],
+ "sha256": "987bd9bdec85cfeb32bbd33bcdd496cc4f55c1467fe7b200362850397775354f",
+ "url": "https://jcenter.bintray.com/io/kotlintest/kotlintest-runner-junit5/3.2.1/kotlintest-runner-junit5-3.2.1-sources.jar"
},
{
"coord": "io.kotlintest:kotlintest-runner-jvm:3.2.1",
@@ -689,6 +1854,10 @@
"org.jetbrains.kotlin:kotlin-stdlib:1.3.20",
"io.arrow-kt:arrow-core:0.8.2"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/kotlintest/kotlintest-runner-jvm/3.2.1/kotlintest-runner-jvm-3.2.1.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/kotlintest/kotlintest-runner-jvm/3.2.1/kotlintest-runner-jvm-3.2.1.jar",
@@ -699,6 +1868,45 @@
"sha256": "e693988b1df96bc1b59c65ec3278bcdf07c203c7751d33be4753a2bf44128f39",
"url": "https://jcenter.bintray.com/io/kotlintest/kotlintest-runner-jvm/3.2.1/kotlintest-runner-jvm-3.2.1.jar"
},
+ {
+ "coord": "io.kotlintest:kotlintest-runner-jvm:jar:sources:3.2.1",
+ "dependencies": [
+ "org.jetbrains:annotations:jar:sources:13.0",
+ "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.3.20",
+ "org.jetbrains.kotlin:kotlin-reflect:jar:sources:1.3.20",
+ "io.arrow-kt:arrow-annotations:jar:sources:0.8.2",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "io.kotlintest:kotlintest-core:jar:sources:3.2.1",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core:jar:sources:1.1.0",
+ "io.github.classgraph:classgraph:jar:sources:4.6.18",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:sources:1.3.20",
+ "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.3.20",
+ "io.arrow-kt:arrow-core:jar:sources:0.8.2",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:jar:sources:1.1.0",
+ "io.kindedj:kindedj:jar:sources:1.1.0"
+ ],
+ "directDependencies": [
+ "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.3.20",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "io.kotlintest:kotlintest-core:jar:sources:3.2.1",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core:jar:sources:1.1.0",
+ "io.github.classgraph:classgraph:jar:sources:4.6.18",
+ "io.arrow-kt:arrow-core:jar:sources:0.8.2"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/kotlintest/kotlintest-runner-jvm/3.2.1/kotlintest-runner-jvm-3.2.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/kotlintest/kotlintest-runner-jvm/3.2.1/kotlintest-runner-jvm-3.2.1-sources.jar",
+ "https://maven.google.com/io/kotlintest/kotlintest-runner-jvm/3.2.1/kotlintest-runner-jvm-3.2.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/kotlintest/kotlintest-runner-jvm/3.2.1/kotlintest-runner-jvm-3.2.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/kotlintest/kotlintest-runner-jvm/3.2.1/kotlintest-runner-jvm-3.2.1-sources.jar"
+ ],
+ "sha256": "79d3db9bd1b5f62f1f06a89bbe6519d8ea04fccee09a272a4c07434a7d252977",
+ "url": "https://jcenter.bintray.com/io/kotlintest/kotlintest-runner-jvm/3.2.1/kotlintest-runner-jvm-3.2.1-sources.jar"
+ },
{
"coord": "io.lettuce:lettuce-core:5.1.7.RELEASE",
"dependencies": [
@@ -717,6 +1925,10 @@
"io.netty:netty-transport:4.1.45.Final",
"io.projectreactor:reactor-core:3.2.8.RELEASE"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/lettuce/lettuce-core/5.1.7.RELEASE/lettuce-core-5.1.7.RELEASE.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/lettuce/lettuce-core/5.1.7.RELEASE/lettuce-core-5.1.7.RELEASE.jar",
@@ -727,6 +1939,38 @@
"sha256": "9e118d8a1e4c0e92e7da2fe6ad956d7cc88666a2a4aceef8a757262c3b1c229e",
"url": "https://jcenter.bintray.com/io/lettuce/lettuce-core/5.1.7.RELEASE/lettuce-core-5.1.7.RELEASE.jar"
},
+ {
+ "coord": "io.lettuce:lettuce-core:jar:sources:5.1.7.RELEASE",
+ "dependencies": [
+ "io.netty:netty-transport:jar:sources:4.1.45.Final",
+ "io.netty:netty-codec:jar:sources:4.1.45.Final",
+ "io.netty:netty-buffer:jar:sources:4.1.45.Final",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "io.netty:netty-handler:jar:sources:4.1.45.Final",
+ "io.netty:netty-common:jar:sources:4.1.45.Final",
+ "io.netty:netty-resolver:jar:sources:4.1.45.Final",
+ "io.projectreactor:reactor-core:jar:sources:3.2.8.RELEASE"
+ ],
+ "directDependencies": [
+ "io.netty:netty-common:jar:sources:4.1.45.Final",
+ "io.netty:netty-handler:jar:sources:4.1.45.Final",
+ "io.netty:netty-transport:jar:sources:4.1.45.Final",
+ "io.projectreactor:reactor-core:jar:sources:3.2.8.RELEASE"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/lettuce/lettuce-core/5.1.7.RELEASE/lettuce-core-5.1.7.RELEASE-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/lettuce/lettuce-core/5.1.7.RELEASE/lettuce-core-5.1.7.RELEASE-sources.jar",
+ "https://maven.google.com/io/lettuce/lettuce-core/5.1.7.RELEASE/lettuce-core-5.1.7.RELEASE-sources.jar",
+ "https://repo1.maven.org/maven2/io/lettuce/lettuce-core/5.1.7.RELEASE/lettuce-core-5.1.7.RELEASE-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/lettuce/lettuce-core/5.1.7.RELEASE/lettuce-core-5.1.7.RELEASE-sources.jar"
+ ],
+ "sha256": "87668585edf28445aa821d3e91a99f7011712fa9d4fcde5c1ce2c07629a98c34",
+ "url": "https://jcenter.bintray.com/io/lettuce/lettuce-core/5.1.7.RELEASE/lettuce-core-5.1.7.RELEASE-sources.jar"
+ },
{
"coord": "io.micronaut.configuration:micronaut-redis-lettuce:1.2.0",
"dependencies": [
@@ -761,6 +2005,10 @@
"io.lettuce:lettuce-core:5.1.7.RELEASE",
"io.micronaut:micronaut-runtime:1.3.1"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/micronaut/configuration/micronaut-redis-lettuce/1.2.0/micronaut-redis-lettuce-1.2.0.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/micronaut/configuration/micronaut-redis-lettuce/1.2.0/micronaut-redis-lettuce-1.2.0.jar",
@@ -771,6 +2019,378 @@
"sha256": "7ca0ad437de4abf85be04ee21c9da2deda47961ef9e0a50d6887e2fc05dd2da8",
"url": "https://jcenter.bintray.com/io/micronaut/configuration/micronaut-redis-lettuce/1.2.0/micronaut-redis-lettuce-1.2.0.jar"
},
+ {
+ "coord": "io.micronaut.configuration:micronaut-redis-lettuce:jar:sources:1.2.0",
+ "dependencies": [
+ "io.netty:netty-transport:jar:sources:4.1.45.Final",
+ "javax.validation:validation-api:jar:sources:2.0.1.Final",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
+ "io.netty:netty-codec:jar:sources:4.1.45.Final",
+ "io.netty:netty-buffer:jar:sources:4.1.45.Final",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "io.netty:netty-handler:jar:sources:4.1.45.Final",
+ "io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.lettuce:lettuce-core:jar:sources:5.1.7.RELEASE",
+ "io.netty:netty-common:jar:sources:4.1.45.Final",
+ "io.netty:netty-resolver:jar:sources:4.1.45.Final",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "io.projectreactor:reactor-core:jar:sources:3.2.8.RELEASE",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2"
+ ],
+ "directDependencies": [
+ "io.lettuce:lettuce-core:jar:sources:5.1.7.RELEASE",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/configuration/micronaut-redis-lettuce/1.2.0/micronaut-redis-lettuce-1.2.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/configuration/micronaut-redis-lettuce/1.2.0/micronaut-redis-lettuce-1.2.0-sources.jar",
+ "https://maven.google.com/io/micronaut/configuration/micronaut-redis-lettuce/1.2.0/micronaut-redis-lettuce-1.2.0-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/configuration/micronaut-redis-lettuce/1.2.0/micronaut-redis-lettuce-1.2.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/configuration/micronaut-redis-lettuce/1.2.0/micronaut-redis-lettuce-1.2.0-sources.jar"
+ ],
+ "sha256": "a816fb9e5f79ce331c0dde83c821dc0bb394b94af5f27c45190f7c1866e18bf7",
+ "url": "https://jcenter.bintray.com/io/micronaut/configuration/micronaut-redis-lettuce/1.2.0/micronaut-redis-lettuce-1.2.0-sources.jar"
+ },
+ {
+ "coord": "io.micronaut.grpc:micronaut-grpc-annotation:1.1.1",
+ "dependencies": [
+ "org.reactivestreams:reactive-streams:1.0.3",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "org.slf4j:slf4j-api:1.7.26",
+ "org.yaml:snakeyaml:1.24",
+ "io.micronaut:micronaut-core:1.3.1",
+ "io.micronaut:micronaut-inject:1.3.1",
+ "javax.annotation:javax.annotation-api:1.3.2",
+ "javax.inject:javax.inject:1"
+ ],
+ "directDependencies": [
+ "io.micronaut:micronaut-inject:1.3.1"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/grpc/micronaut-grpc-annotation/1.1.1/micronaut-grpc-annotation-1.1.1.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/grpc/micronaut-grpc-annotation/1.1.1/micronaut-grpc-annotation-1.1.1.jar",
+ "https://maven.google.com/io/micronaut/grpc/micronaut-grpc-annotation/1.1.1/micronaut-grpc-annotation-1.1.1.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/grpc/micronaut-grpc-annotation/1.1.1/micronaut-grpc-annotation-1.1.1.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/grpc/micronaut-grpc-annotation/1.1.1/micronaut-grpc-annotation-1.1.1.jar"
+ ],
+ "sha256": "41eb02465c10fcf0b775c65a751d48b98e5e814986379f8a266fd0dfb2cd6251",
+ "url": "https://jcenter.bintray.com/io/micronaut/grpc/micronaut-grpc-annotation/1.1.1/micronaut-grpc-annotation-1.1.1.jar"
+ },
+ {
+ "coord": "io.micronaut.grpc:micronaut-grpc-annotation:jar:sources:1.1.1",
+ "dependencies": [
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2"
+ ],
+ "directDependencies": [
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/grpc/micronaut-grpc-annotation/1.1.1/micronaut-grpc-annotation-1.1.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/grpc/micronaut-grpc-annotation/1.1.1/micronaut-grpc-annotation-1.1.1-sources.jar",
+ "https://maven.google.com/io/micronaut/grpc/micronaut-grpc-annotation/1.1.1/micronaut-grpc-annotation-1.1.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/grpc/micronaut-grpc-annotation/1.1.1/micronaut-grpc-annotation-1.1.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/grpc/micronaut-grpc-annotation/1.1.1/micronaut-grpc-annotation-1.1.1-sources.jar"
+ ],
+ "sha256": "b355db7be8364e66c5fdec4116b06fe46d9c9fa052c4efa74c10469574def877",
+ "url": "https://jcenter.bintray.com/io/micronaut/grpc/micronaut-grpc-annotation/1.1.1/micronaut-grpc-annotation-1.1.1-sources.jar"
+ },
+ {
+ "coord": "io.micronaut.grpc:micronaut-grpc-runtime:1.1.1",
+ "dependencies": [
+ "org.reactivestreams:reactive-streams:1.0.3",
+ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
+ "io.netty:netty-handler-proxy:4.1.45.Final",
+ "io.grpc:grpc-stub:1.26.0",
+ "com.google.guava:guava:28.1-android",
+ "org.codehaus.mojo:animal-sniffer-annotations:1.18",
+ "com.google.j2objc:j2objc-annotations:1.3",
+ "com.google.errorprone:error_prone_annotations:2.3.3",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "com.google.android:annotations:4.1.1.4",
+ "io.grpc:grpc-context:1.26.0",
+ "org.slf4j:slf4j-api:1.7.26",
+ "io.netty:netty-codec-socks:4.1.45.Final",
+ "com.google.protobuf:protobuf-java:3.11.4",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.1",
+ "io.opencensus:opencensus-api:0.24.0",
+ "io.grpc:grpc-protobuf:1.26.0",
+ "com.google.code.gson:gson:2.8.6",
+ "com.google.api.grpc:proto-google-common-protos:1.12.0",
+ "io.micronaut:micronaut-aop:1.3.1",
+ "io.reactivex.rxjava2:rxjava:2.2.10",
+ "io.micronaut:micronaut-http:1.3.1",
+ "org.yaml:snakeyaml:1.24",
+ "com.fasterxml.jackson.core:jackson-core:2.10.1",
+ "io.grpc:grpc-netty:1.26.0",
+ "io.micronaut:micronaut-core:1.3.1",
+ "io.netty:netty-codec:4.1.45.Final",
+ "com.fasterxml.jackson.core:jackson-annotations:2.10.1",
+ "io.micronaut.grpc:micronaut-grpc-annotation:1.1.1",
+ "io.micronaut:micronaut-inject:1.3.1",
+ "io.netty:netty-codec-http:4.1.45.Final",
+ "javax.annotation:javax.annotation-api:1.3.2",
+ "io.netty:netty-transport:4.1.45.Final",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.10.1",
+ "com.google.guava:failureaccess:1.0.1",
+ "io.opencensus:opencensus-contrib-grpc-metrics:0.24.0",
+ "io.netty:netty-common:4.1.45.Final",
+ "io.netty:netty-resolver:4.1.45.Final",
+ "javax.inject:javax.inject:1",
+ "io.netty:netty-codec-http2:4.1.42.Final",
+ "com.fasterxml.jackson.core:jackson-databind:2.10.1",
+ "io.grpc:grpc-core:1.26.0",
+ "io.grpc:grpc-api:1.26.0",
+ "io.perfmark:perfmark-api:0.19.0",
+ "io.netty:netty-buffer:4.1.45.Final",
+ "javax.validation:validation-api:2.0.1.Final",
+ "io.netty:netty-handler:4.1.45.Final",
+ "io.micronaut:micronaut-runtime:1.3.1",
+ "io.grpc:grpc-protobuf-lite:1.26.0",
+ "org.checkerframework:checker-compat-qual:2.5.5"
+ ],
+ "directDependencies": [
+ "io.grpc:grpc-stub:1.26.0",
+ "io.grpc:grpc-protobuf:1.26.0",
+ "io.grpc:grpc-netty:1.26.0",
+ "io.micronaut.grpc:micronaut-grpc-annotation:1.1.1",
+ "io.micronaut:micronaut-inject:1.3.1",
+ "io.micronaut:micronaut-runtime:1.3.1"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/grpc/micronaut-grpc-runtime/1.1.1/micronaut-grpc-runtime-1.1.1.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/grpc/micronaut-grpc-runtime/1.1.1/micronaut-grpc-runtime-1.1.1.jar",
+ "https://maven.google.com/io/micronaut/grpc/micronaut-grpc-runtime/1.1.1/micronaut-grpc-runtime-1.1.1.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/grpc/micronaut-grpc-runtime/1.1.1/micronaut-grpc-runtime-1.1.1.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/grpc/micronaut-grpc-runtime/1.1.1/micronaut-grpc-runtime-1.1.1.jar"
+ ],
+ "sha256": "3c2cf0d185290029dae265882988fdadef934b6118d410ae0ebad9343c184f26",
+ "url": "https://jcenter.bintray.com/io/micronaut/grpc/micronaut-grpc-runtime/1.1.1/micronaut-grpc-runtime-1.1.1.jar"
+ },
+ {
+ "coord": "io.micronaut.grpc:micronaut-grpc-runtime:jar:sources:1.1.1",
+ "dependencies": [
+ "io.micronaut.grpc:micronaut-grpc-annotation:jar:sources:1.1.1",
+ "io.netty:netty-codec-http:jar:sources:4.1.45.Final",
+ "io.netty:netty-transport:jar:sources:4.1.45.Final",
+ "io.netty:netty-codec-http2:jar:sources:4.1.42.Final",
+ "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18",
+ "javax.validation:validation-api:jar:sources:2.0.1.Final",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
+ "io.grpc:grpc-protobuf-lite:jar:sources:1.26.0",
+ "com.google.protobuf:protobuf-java:jar:sources:3.11.4",
+ "com.google.android:annotations:jar:sources:4.1.1.4",
+ "io.netty:netty-codec:jar:sources:4.1.45.Final",
+ "io.grpc:grpc-protobuf:jar:sources:1.26.0",
+ "io.netty:netty-buffer:jar:sources:4.1.45.Final",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "io.perfmark:perfmark-api:jar:sources:0.19.0",
+ "io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "io.netty:netty-handler-proxy:jar:sources:4.1.45.Final",
+ "io.opencensus:opencensus-contrib-grpc-metrics:jar:sources:0.24.0",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "io.grpc:grpc-context:jar:sources:1.26.0",
+ "javax.inject:javax.inject:jar:sources:1",
+ "io.grpc:grpc-stub:jar:sources:1.26.0",
+ "io.opencensus:opencensus-api:jar:sources:0.24.0",
+ "io.netty:netty-handler:jar:sources:4.1.45.Final",
+ "io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
+ "com.google.code.gson:gson:jar:sources:2.8.6",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
+ "io.netty:netty-codec-socks:jar:sources:4.1.45.Final",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
+ "com.google.api.grpc:proto-google-common-protos:jar:sources:1.12.0",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
+ "org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
+ "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.grpc:grpc-api:jar:sources:1.26.0",
+ "io.grpc:grpc-core:jar:sources:1.26.0",
+ "com.google.guava:guava:jar:sources:28.1-android",
+ "io.netty:netty-common:jar:sources:4.1.45.Final",
+ "com.google.guava:failureaccess:jar:sources:1.0.1",
+ "io.netty:netty-resolver:jar:sources:4.1.45.Final",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2",
+ "io.grpc:grpc-netty:jar:sources:1.26.0"
+ ],
+ "directDependencies": [
+ "io.micronaut.grpc:micronaut-grpc-annotation:jar:sources:1.1.1",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "io.grpc:grpc-protobuf:jar:sources:1.26.0",
+ "io.grpc:grpc-stub:jar:sources:1.26.0",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "io.grpc:grpc-netty:jar:sources:1.26.0"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/grpc/micronaut-grpc-runtime/1.1.1/micronaut-grpc-runtime-1.1.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/grpc/micronaut-grpc-runtime/1.1.1/micronaut-grpc-runtime-1.1.1-sources.jar",
+ "https://maven.google.com/io/micronaut/grpc/micronaut-grpc-runtime/1.1.1/micronaut-grpc-runtime-1.1.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/grpc/micronaut-grpc-runtime/1.1.1/micronaut-grpc-runtime-1.1.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/grpc/micronaut-grpc-runtime/1.1.1/micronaut-grpc-runtime-1.1.1-sources.jar"
+ ],
+ "sha256": "3b93c87c43e3bbf0d061ebcf69e8234db2b4f4361095b33942e386caac4ce862",
+ "url": "https://jcenter.bintray.com/io/micronaut/grpc/micronaut-grpc-runtime/1.1.1/micronaut-grpc-runtime-1.1.1-sources.jar"
+ },
+ {
+ "coord": "io.micronaut.grpc:micronaut-protobuff-support:1.1.1",
+ "dependencies": [
+ "org.reactivestreams:reactive-streams:1.0.3",
+ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
+ "com.google.guava:guava:28.1-android",
+ "org.codehaus.mojo:animal-sniffer-annotations:1.18",
+ "com.google.j2objc:j2objc-annotations:1.3",
+ "com.google.errorprone:error_prone_annotations:2.3.3",
+ "io.micronaut:micronaut-buffer-netty:1.3.1",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "org.slf4j:slf4j-api:1.7.26",
+ "io.micronaut:micronaut-http-netty:1.3.1",
+ "com.google.protobuf:protobuf-java:3.11.4",
+ "com.google.code.gson:gson:2.8.6",
+ "io.micronaut:micronaut-aop:1.3.1",
+ "io.reactivex.rxjava2:rxjava:2.2.10",
+ "com.google.protobuf:protobuf-java-util:3.11.1",
+ "io.micronaut:micronaut-http:1.3.1",
+ "org.yaml:snakeyaml:1.24",
+ "io.micronaut:micronaut-websocket:1.3.1",
+ "io.micronaut:micronaut-core:1.3.1",
+ "io.netty:netty-codec:4.1.45.Final",
+ "io.micronaut:micronaut-inject:1.3.1",
+ "io.netty:netty-codec-http:4.1.45.Final",
+ "javax.annotation:javax.annotation-api:1.3.2",
+ "io.netty:netty-transport:4.1.45.Final",
+ "com.google.guava:failureaccess:1.0.1",
+ "io.netty:netty-common:4.1.45.Final",
+ "io.netty:netty-resolver:4.1.45.Final",
+ "javax.inject:javax.inject:1",
+ "io.netty:netty-buffer:4.1.45.Final",
+ "io.netty:netty-handler:4.1.45.Final",
+ "org.checkerframework:checker-compat-qual:2.5.5"
+ ],
+ "directDependencies": [
+ "io.micronaut:micronaut-http-netty:1.3.1",
+ "com.google.protobuf:protobuf-java:3.11.4",
+ "com.google.protobuf:protobuf-java-util:3.11.1",
+ "io.micronaut:micronaut-http:1.3.1",
+ "io.micronaut:micronaut-inject:1.3.1",
+ "javax.annotation:javax.annotation-api:1.3.2"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/grpc/micronaut-protobuff-support/1.1.1/micronaut-protobuff-support-1.1.1.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/grpc/micronaut-protobuff-support/1.1.1/micronaut-protobuff-support-1.1.1.jar",
+ "https://maven.google.com/io/micronaut/grpc/micronaut-protobuff-support/1.1.1/micronaut-protobuff-support-1.1.1.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/grpc/micronaut-protobuff-support/1.1.1/micronaut-protobuff-support-1.1.1.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/grpc/micronaut-protobuff-support/1.1.1/micronaut-protobuff-support-1.1.1.jar"
+ ],
+ "sha256": "e968f8281bd2ec6846cab5c49bfe21615251019ea6d2b168cb43a9f30757040a",
+ "url": "https://jcenter.bintray.com/io/micronaut/grpc/micronaut-protobuff-support/1.1.1/micronaut-protobuff-support-1.1.1.jar"
+ },
+ {
+ "coord": "io.micronaut.grpc:micronaut-protobuff-support:jar:sources:1.1.1",
+ "dependencies": [
+ "io.netty:netty-codec-http:jar:sources:4.1.45.Final",
+ "io.netty:netty-transport:jar:sources:4.1.45.Final",
+ "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.protobuf:protobuf-java:jar:sources:3.11.4",
+ "io.netty:netty-codec:jar:sources:4.1.45.Final",
+ "io.netty:netty-buffer:jar:sources:4.1.45.Final",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "com.google.protobuf:protobuf-java-util:jar:sources:3.11.1",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "io.netty:netty-handler:jar:sources:4.1.45.Final",
+ "io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
+ "com.google.code.gson:gson:jar:sources:2.8.6",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
+ "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-http-netty:jar:sources:1.3.1",
+ "com.google.guava:guava:jar:sources:28.1-android",
+ "io.netty:netty-common:jar:sources:4.1.45.Final",
+ "com.google.guava:failureaccess:jar:sources:1.0.1",
+ "io.netty:netty-resolver:jar:sources:4.1.45.Final",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "io.micronaut:micronaut-buffer-netty:jar:sources:1.3.1",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2",
+ "io.micronaut:micronaut-websocket:jar:sources:1.3.1"
+ ],
+ "directDependencies": [
+ "com.google.protobuf:protobuf-java:jar:sources:3.11.4",
+ "com.google.protobuf:protobuf-java-util:jar:sources:3.11.1",
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-http-netty:jar:sources:1.3.1",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/grpc/micronaut-protobuff-support/1.1.1/micronaut-protobuff-support-1.1.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/grpc/micronaut-protobuff-support/1.1.1/micronaut-protobuff-support-1.1.1-sources.jar",
+ "https://maven.google.com/io/micronaut/grpc/micronaut-protobuff-support/1.1.1/micronaut-protobuff-support-1.1.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/grpc/micronaut-protobuff-support/1.1.1/micronaut-protobuff-support-1.1.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/grpc/micronaut-protobuff-support/1.1.1/micronaut-protobuff-support-1.1.1-sources.jar"
+ ],
+ "sha256": "13d3e51db7e33fb8c8f534282a8222768fd03d53e2d5e085464f93d1d6a118eb",
+ "url": "https://jcenter.bintray.com/io/micronaut/grpc/micronaut-protobuff-support/1.1.1/micronaut-protobuff-support-1.1.1-sources.jar"
+ },
{
"coord": "io.micronaut.test:micronaut-test-core:1.1.2",
"dependencies": [
@@ -797,6 +2417,10 @@
"io.micronaut:micronaut-inject:1.3.1",
"io.micronaut:micronaut-runtime:1.3.1"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/micronaut/test/micronaut-test-core/1.1.2/micronaut-test-core-1.1.2.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/micronaut/test/micronaut-test-core/1.1.2/micronaut-test-core-1.1.2.jar",
@@ -807,6 +2431,46 @@
"sha256": "75839e1db044d8cbac47626371c3e30d3f247238c93a78ed864945c01c851cae",
"url": "https://jcenter.bintray.com/io/micronaut/test/micronaut-test-core/1.1.2/micronaut-test-core-1.1.2.jar"
},
+ {
+ "coord": "io.micronaut.test:micronaut-test-core:jar:sources:1.1.2",
+ "dependencies": [
+ "javax.validation:validation-api:jar:sources:2.0.1.Final",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2"
+ ],
+ "directDependencies": [
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/test/micronaut-test-core/1.1.2/micronaut-test-core-1.1.2-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/test/micronaut-test-core/1.1.2/micronaut-test-core-1.1.2-sources.jar",
+ "https://maven.google.com/io/micronaut/test/micronaut-test-core/1.1.2/micronaut-test-core-1.1.2-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/test/micronaut-test-core/1.1.2/micronaut-test-core-1.1.2-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/test/micronaut-test-core/1.1.2/micronaut-test-core-1.1.2-sources.jar"
+ ],
+ "sha256": "b506578ea16186bd6528613b54d2e122c3735bf7e17ef5e83fd2ed433e7f9992",
+ "url": "https://jcenter.bintray.com/io/micronaut/test/micronaut-test-core/1.1.2/micronaut-test-core-1.1.2-sources.jar"
+ },
{
"coord": "io.micronaut.test:micronaut-test-kotlintest:1.1.2",
"dependencies": [
@@ -863,6 +2527,10 @@
"io.kotlintest:kotlintest-runner-junit5:3.2.1",
"io.micronaut:micronaut-runtime:1.3.1"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/micronaut/test/micronaut-test-kotlintest/1.1.2/micronaut-test-kotlintest-1.1.2.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/micronaut/test/micronaut-test-kotlintest/1.1.2/micronaut-test-kotlintest-1.1.2.jar",
@@ -873,6 +2541,76 @@
"sha256": "32b05b9cf635b08272b585a21917c986ed06afe044c68367ed7dc654baf3a7e3",
"url": "https://jcenter.bintray.com/io/micronaut/test/micronaut-test-kotlintest/1.1.2/micronaut-test-kotlintest-1.1.2.jar"
},
+ {
+ "coord": "io.micronaut.test:micronaut-test-kotlintest:jar:sources:1.1.2",
+ "dependencies": [
+ "com.github.wumpz:diffutils:jar:sources:2.2",
+ "javax.validation:validation-api:jar:sources:2.0.1.Final",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
+ "org.jetbrains:annotations:jar:sources:13.0",
+ "io.kotlintest:kotlintest-assertions:jar:sources:3.2.1",
+ "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.3.20",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "org.junit.platform:junit-platform-engine:jar:sources:1.3.2",
+ "io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "com.univocity:univocity-parsers:jar:sources:2.7.6",
+ "org.jetbrains.kotlin:kotlin-reflect:jar:sources:1.3.20",
+ "io.arrow-kt:arrow-annotations:jar:sources:0.8.2",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8:jar:sources:1.3.20",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "org.junit.platform:junit-platform-commons:jar:sources:1.3.2",
+ "io.kotlintest:kotlintest-core:jar:sources:3.2.1",
+ "io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core:jar:sources:1.1.0",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
+ "io.github.classgraph:classgraph:jar:sources:4.6.18",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "org.junit.platform:junit-platform-suite-api:jar:sources:1.3.2",
+ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
+ "org.eclipse.jgit:org.eclipse.jgit:jar:sources:4.4.1.201607150455-r",
+ "org.apiguardian:apiguardian-api:jar:sources:1.0.0",
+ "org.junit.platform:junit-platform-launcher:jar:sources:1.3.2",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:sources:1.3.20",
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.3.20",
+ "io.arrow-kt:arrow-core:jar:sources:0.8.2",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:jar:sources:1.1.0",
+ "io.kotlintest:kotlintest-runner-jvm:jar:sources:3.2.1",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2",
+ "io.micronaut.test:micronaut-test-core:jar:sources:1.1.2",
+ "io.kotlintest:kotlintest-runner-junit5:jar:sources:3.2.1",
+ "org.opentest4j:opentest4j:jar:sources:1.1.1",
+ "io.kindedj:kindedj:jar:sources:1.1.0"
+ ],
+ "directDependencies": [
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "org.jetbrains.kotlin:kotlin-reflect:jar:sources:1.3.20",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8:jar:sources:1.3.20",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "io.micronaut.test:micronaut-test-core:jar:sources:1.1.2",
+ "io.kotlintest:kotlintest-runner-junit5:jar:sources:3.2.1"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/test/micronaut-test-kotlintest/1.1.2/micronaut-test-kotlintest-1.1.2-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/test/micronaut-test-kotlintest/1.1.2/micronaut-test-kotlintest-1.1.2-sources.jar",
+ "https://maven.google.com/io/micronaut/test/micronaut-test-kotlintest/1.1.2/micronaut-test-kotlintest-1.1.2-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/test/micronaut-test-kotlintest/1.1.2/micronaut-test-kotlintest-1.1.2-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/test/micronaut-test-kotlintest/1.1.2/micronaut-test-kotlintest-1.1.2-sources.jar"
+ ],
+ "sha256": "168712a4a3033436883ddf99cb5b4455be9ba4c808db1f63059e19b517f1efc2",
+ "url": "https://jcenter.bintray.com/io/micronaut/test/micronaut-test-kotlintest/1.1.2/micronaut-test-kotlintest-1.1.2-sources.jar"
+ },
{
"coord": "io.micronaut:micronaut-aop:1.3.1",
"dependencies": [
@@ -890,6 +2628,10 @@
"io.micronaut:micronaut-inject:1.3.1",
"org.slf4j:slf4j-api:1.7.26"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-aop/1.3.1/micronaut-aop-1.3.1.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/micronaut/micronaut-aop/1.3.1/micronaut-aop-1.3.1.jar",
@@ -900,6 +2642,37 @@
"sha256": "e1b11374880c0683c21e9ba3d9001040526b6e533d2abf437888810e0774fb74",
"url": "https://jcenter.bintray.com/io/micronaut/micronaut-aop/1.3.1/micronaut-aop-1.3.1.jar"
},
+ {
+ "coord": "io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "dependencies": [
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2"
+ ],
+ "directDependencies": [
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-aop/1.3.1/micronaut-aop-1.3.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/micronaut-aop/1.3.1/micronaut-aop-1.3.1-sources.jar",
+ "https://maven.google.com/io/micronaut/micronaut-aop/1.3.1/micronaut-aop-1.3.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/micronaut-aop/1.3.1/micronaut-aop-1.3.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/micronaut-aop/1.3.1/micronaut-aop-1.3.1-sources.jar"
+ ],
+ "sha256": "e7ab938e1159ff7355dc8663bdfd81261c3ab39a9304b65bfb65e5f740be915b",
+ "url": "https://jcenter.bintray.com/io/micronaut/micronaut-aop/1.3.1/micronaut-aop-1.3.1-sources.jar"
+ },
{
"coord": "io.micronaut:micronaut-buffer-netty:1.3.1",
"dependencies": [
@@ -920,6 +2693,10 @@
"io.netty:netty-buffer:4.1.45.Final",
"org.slf4j:slf4j-api:1.7.26"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-buffer-netty/1.3.1/micronaut-buffer-netty-1.3.1.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/micronaut/micronaut-buffer-netty/1.3.1/micronaut-buffer-netty-1.3.1.jar",
@@ -930,6 +2707,40 @@
"sha256": "f0224f49f243240ed6d049fff63de30354a6147e7cfe3c4bb0a0f1f7fd5dfc77",
"url": "https://jcenter.bintray.com/io/micronaut/micronaut-buffer-netty/1.3.1/micronaut-buffer-netty-1.3.1.jar"
},
+ {
+ "coord": "io.micronaut:micronaut-buffer-netty:jar:sources:1.3.1",
+ "dependencies": [
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "io.netty:netty-buffer:jar:sources:4.1.45.Final",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "io.netty:netty-common:jar:sources:4.1.45.Final",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2"
+ ],
+ "directDependencies": [
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "io.netty:netty-buffer:jar:sources:4.1.45.Final",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-buffer-netty/1.3.1/micronaut-buffer-netty-1.3.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/micronaut-buffer-netty/1.3.1/micronaut-buffer-netty-1.3.1-sources.jar",
+ "https://maven.google.com/io/micronaut/micronaut-buffer-netty/1.3.1/micronaut-buffer-netty-1.3.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/micronaut-buffer-netty/1.3.1/micronaut-buffer-netty-1.3.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/micronaut-buffer-netty/1.3.1/micronaut-buffer-netty-1.3.1-sources.jar"
+ ],
+ "sha256": "0734429266c6f960ec86a1474b82c775e275c79bf195c83d665dfb17b4bf5014",
+ "url": "https://jcenter.bintray.com/io/micronaut/micronaut-buffer-netty/1.3.1/micronaut-buffer-netty-1.3.1-sources.jar"
+ },
{
"coord": "io.micronaut:micronaut-core:1.3.1",
"dependencies": [
@@ -942,6 +2753,10 @@
"org.reactivestreams:reactive-streams:1.0.3",
"org.slf4j:slf4j-api:1.7.26"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-core/1.3.1/micronaut-core-1.3.1.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/micronaut/micronaut-core/1.3.1/micronaut-core-1.3.1.jar",
@@ -952,6 +2767,32 @@
"sha256": "1db5468f27cb108e944e510adc3cf260a130e724395f40c9d4f3ca65c3f6c335",
"url": "https://jcenter.bintray.com/io/micronaut/micronaut-core/1.3.1/micronaut-core-1.3.1.jar"
},
+ {
+ "coord": "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "dependencies": [
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3"
+ ],
+ "directDependencies": [
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-core/1.3.1/micronaut-core-1.3.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/micronaut-core/1.3.1/micronaut-core-1.3.1-sources.jar",
+ "https://maven.google.com/io/micronaut/micronaut-core/1.3.1/micronaut-core-1.3.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/micronaut-core/1.3.1/micronaut-core-1.3.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/micronaut-core/1.3.1/micronaut-core-1.3.1-sources.jar"
+ ],
+ "sha256": "2c390d08bc77efa76e1a95bc8eeef3e134551bf83b756ce1d318ca4ae9888aa8",
+ "url": "https://jcenter.bintray.com/io/micronaut/micronaut-core/1.3.1/micronaut-core-1.3.1-sources.jar"
+ },
{
"coord": "io.micronaut:micronaut-graal:1.3.1",
"dependencies": [
@@ -972,6 +2813,10 @@
"io.micronaut:micronaut-inject:1.3.1",
"org.slf4j:slf4j-api:1.7.26"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-graal/1.3.1/micronaut-graal-1.3.1.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/micronaut/micronaut-graal/1.3.1/micronaut-graal-1.3.1.jar",
@@ -982,6 +2827,40 @@
"sha256": "251dd8ffa47deb3b9f8d67c9bcccd67e64ec0c47021c928dae5504e952e2c600",
"url": "https://jcenter.bintray.com/io/micronaut/micronaut-graal/1.3.1/micronaut-graal-1.3.1.jar"
},
+ {
+ "coord": "io.micronaut:micronaut-graal:jar:sources:1.3.1",
+ "dependencies": [
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2"
+ ],
+ "directDependencies": [
+ "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-graal/1.3.1/micronaut-graal-1.3.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/micronaut-graal/1.3.1/micronaut-graal-1.3.1-sources.jar",
+ "https://maven.google.com/io/micronaut/micronaut-graal/1.3.1/micronaut-graal-1.3.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/micronaut-graal/1.3.1/micronaut-graal-1.3.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/micronaut-graal/1.3.1/micronaut-graal-1.3.1-sources.jar"
+ ],
+ "sha256": "00408e2ef043d692b25e68ac07052c117bb6d377cafc082cc4ddb9430b933db7",
+ "url": "https://jcenter.bintray.com/io/micronaut/micronaut-graal/1.3.1/micronaut-graal-1.3.1-sources.jar"
+ },
{
"coord": "io.micronaut:micronaut-http-client:1.3.1",
"dependencies": [
@@ -1024,6 +2903,10 @@
"io.micronaut:micronaut-websocket:1.3.1",
"io.micronaut:micronaut-runtime:1.3.1"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-http-client/1.3.1/micronaut-http-client-1.3.1.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/micronaut/micronaut-http-client/1.3.1/micronaut-http-client-1.3.1.jar",
@@ -1034,6 +2917,62 @@
"sha256": "a9dfda3094dabc79d7e46ebdccbaf72bb854312226448188f25d34bf7dc403fe",
"url": "https://jcenter.bintray.com/io/micronaut/micronaut-http-client/1.3.1/micronaut-http-client-1.3.1.jar"
},
+ {
+ "coord": "io.micronaut:micronaut-http-client:jar:sources:1.3.1",
+ "dependencies": [
+ "io.netty:netty-codec-http:jar:sources:4.1.45.Final",
+ "io.netty:netty-transport:jar:sources:4.1.45.Final",
+ "javax.validation:validation-api:jar:sources:2.0.1.Final",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
+ "io.netty:netty-codec:jar:sources:4.1.45.Final",
+ "io.netty:netty-buffer:jar:sources:4.1.45.Final",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "io.netty:netty-handler-proxy:jar:sources:4.1.45.Final",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "io.netty:netty-handler:jar:sources:4.1.45.Final",
+ "io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
+ "io.netty:netty-codec-socks:jar:sources:4.1.45.Final",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-http-netty:jar:sources:1.3.1",
+ "io.netty:netty-common:jar:sources:4.1.45.Final",
+ "io.netty:netty-resolver:jar:sources:4.1.45.Final",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "io.micronaut:micronaut-buffer-netty:jar:sources:1.3.1",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2",
+ "io.micronaut:micronaut-websocket:jar:sources:1.3.1"
+ ],
+ "directDependencies": [
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "io.netty:netty-handler-proxy:jar:sources:4.1.45.Final",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
+ "io.micronaut:micronaut-http-netty:jar:sources:1.3.1",
+ "io.micronaut:micronaut-websocket:jar:sources:1.3.1"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-http-client/1.3.1/micronaut-http-client-1.3.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/micronaut-http-client/1.3.1/micronaut-http-client-1.3.1-sources.jar",
+ "https://maven.google.com/io/micronaut/micronaut-http-client/1.3.1/micronaut-http-client-1.3.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/micronaut-http-client/1.3.1/micronaut-http-client-1.3.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/micronaut-http-client/1.3.1/micronaut-http-client-1.3.1-sources.jar"
+ ],
+ "sha256": "fdae83df245a9ab0f623a34f5cca786d2083b9129e6465c4a06fcd94a0829d14",
+ "url": "https://jcenter.bintray.com/io/micronaut/micronaut-http-client/1.3.1/micronaut-http-client-1.3.1-sources.jar"
+ },
{
"coord": "io.micronaut:micronaut-http-netty:1.3.1",
"dependencies": [
@@ -1067,6 +3006,10 @@
"io.netty:netty-codec-http:4.1.45.Final",
"io.netty:netty-handler:4.1.45.Final"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-http-netty/1.3.1/micronaut-http-netty-1.3.1.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/micronaut/micronaut-http-netty/1.3.1/micronaut-http-netty-1.3.1.jar",
@@ -1077,6 +3020,53 @@
"sha256": "0668ff47981ccd216f2cb36b913f1bfc08c5558b8671b941a0f4b770eace0631",
"url": "https://jcenter.bintray.com/io/micronaut/micronaut-http-netty/1.3.1/micronaut-http-netty-1.3.1.jar"
},
+ {
+ "coord": "io.micronaut:micronaut-http-netty:jar:sources:1.3.1",
+ "dependencies": [
+ "io.netty:netty-codec-http:jar:sources:4.1.45.Final",
+ "io.netty:netty-transport:jar:sources:4.1.45.Final",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "io.netty:netty-codec:jar:sources:4.1.45.Final",
+ "io.netty:netty-buffer:jar:sources:4.1.45.Final",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "io.netty:netty-handler:jar:sources:4.1.45.Final",
+ "io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.netty:netty-common:jar:sources:4.1.45.Final",
+ "io.netty:netty-resolver:jar:sources:4.1.45.Final",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "io.micronaut:micronaut-buffer-netty:jar:sources:1.3.1",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2",
+ "io.micronaut:micronaut-websocket:jar:sources:1.3.1"
+ ],
+ "directDependencies": [
+ "io.netty:netty-codec-http:jar:sources:4.1.45.Final",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "io.netty:netty-handler:jar:sources:4.1.45.Final",
+ "io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-buffer-netty:jar:sources:1.3.1",
+ "io.micronaut:micronaut-websocket:jar:sources:1.3.1"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-http-netty/1.3.1/micronaut-http-netty-1.3.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/micronaut-http-netty/1.3.1/micronaut-http-netty-1.3.1-sources.jar",
+ "https://maven.google.com/io/micronaut/micronaut-http-netty/1.3.1/micronaut-http-netty-1.3.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/micronaut-http-netty/1.3.1/micronaut-http-netty-1.3.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/micronaut-http-netty/1.3.1/micronaut-http-netty-1.3.1-sources.jar"
+ ],
+ "sha256": "939e1add28cebd0d0f71212fe128230c863a1e91facb91212dc218fd1cdf8546",
+ "url": "https://jcenter.bintray.com/io/micronaut/micronaut-http-netty/1.3.1/micronaut-http-netty-1.3.1-sources.jar"
+ },
{
"coord": "io.micronaut:micronaut-http-server-netty:1.3.1",
"dependencies": [
@@ -1118,6 +3108,10 @@
"io.micronaut:micronaut-core:1.3.1",
"io.netty:netty-codec-http:4.1.45.Final"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-http-server-netty/1.3.1/micronaut-http-server-netty-1.3.1.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/micronaut/micronaut-http-server-netty/1.3.1/micronaut-http-server-netty-1.3.1.jar",
@@ -1128,6 +3122,61 @@
"sha256": "49f0f008cbbc3f10b09e697841b47e7eacb02170fa7fadd980afc508753d11f3",
"url": "https://jcenter.bintray.com/io/micronaut/micronaut-http-server-netty/1.3.1/micronaut-http-server-netty-1.3.1.jar"
},
+ {
+ "coord": "io.micronaut:micronaut-http-server-netty:jar:sources:1.3.1",
+ "dependencies": [
+ "io.netty:netty-codec-http:jar:sources:4.1.45.Final",
+ "io.netty:netty-transport:jar:sources:4.1.45.Final",
+ "javax.validation:validation-api:jar:sources:2.0.1.Final",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
+ "io.netty:netty-codec:jar:sources:4.1.45.Final",
+ "io.netty:netty-buffer:jar:sources:4.1.45.Final",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "io.micronaut:micronaut-http-server:jar:sources:1.3.1",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "io.netty:netty-handler:jar:sources:4.1.45.Final",
+ "io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-http-netty:jar:sources:1.3.1",
+ "io.netty:netty-common:jar:sources:4.1.45.Final",
+ "io.netty:netty-resolver:jar:sources:4.1.45.Final",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "io.micronaut:micronaut-router:jar:sources:1.3.1",
+ "io.micronaut:micronaut-buffer-netty:jar:sources:1.3.1",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2",
+ "io.micronaut:micronaut-websocket:jar:sources:1.3.1"
+ ],
+ "directDependencies": [
+ "io.netty:netty-codec-http:jar:sources:4.1.45.Final",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-http-server:jar:sources:1.3.1",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "io.micronaut:micronaut-http-netty:jar:sources:1.3.1"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-http-server-netty/1.3.1/micronaut-http-server-netty-1.3.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/micronaut-http-server-netty/1.3.1/micronaut-http-server-netty-1.3.1-sources.jar",
+ "https://maven.google.com/io/micronaut/micronaut-http-server-netty/1.3.1/micronaut-http-server-netty-1.3.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/micronaut-http-server-netty/1.3.1/micronaut-http-server-netty-1.3.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/micronaut-http-server-netty/1.3.1/micronaut-http-server-netty-1.3.1-sources.jar"
+ ],
+ "sha256": "2bd8319bb0b0bac91b71576ac78d9001a9ab978eee4d4d213b02af4ebe260938",
+ "url": "https://jcenter.bintray.com/io/micronaut/micronaut-http-server-netty/1.3.1/micronaut-http-server-netty-1.3.1-sources.jar"
+ },
{
"coord": "io.micronaut:micronaut-http-server:1.3.1",
"dependencies": [
@@ -1158,6 +3207,10 @@
"io.micronaut:micronaut-websocket:1.3.1",
"org.slf4j:slf4j-api:1.7.26"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-http-server/1.3.1/micronaut-http-server-1.3.1.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/micronaut/micronaut-http-server/1.3.1/micronaut-http-server-1.3.1.jar",
@@ -1168,6 +3221,50 @@
"sha256": "ac5f074d4e8fa4c355111cc31e67a580cf940aae5c384ed4464b0aa5b523123c",
"url": "https://jcenter.bintray.com/io/micronaut/micronaut-http-server/1.3.1/micronaut-http-server-1.3.1.jar"
},
+ {
+ "coord": "io.micronaut:micronaut-http-server:jar:sources:1.3.1",
+ "dependencies": [
+ "javax.validation:validation-api:jar:sources:2.0.1.Final",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "io.micronaut:micronaut-router:jar:sources:1.3.1",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2",
+ "io.micronaut:micronaut-websocket:jar:sources:1.3.1"
+ ],
+ "directDependencies": [
+ "io.micronaut:micronaut-router:jar:sources:1.3.1",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "io.micronaut:micronaut-websocket:jar:sources:1.3.1",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-http-server/1.3.1/micronaut-http-server-1.3.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/micronaut-http-server/1.3.1/micronaut-http-server-1.3.1-sources.jar",
+ "https://maven.google.com/io/micronaut/micronaut-http-server/1.3.1/micronaut-http-server-1.3.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/micronaut-http-server/1.3.1/micronaut-http-server-1.3.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/micronaut-http-server/1.3.1/micronaut-http-server-1.3.1-sources.jar"
+ ],
+ "sha256": "720dd0ab3ff5c8e00bce7d9fddfcb961a0bca366559b03e6a93400bfda325292",
+ "url": "https://jcenter.bintray.com/io/micronaut/micronaut-http-server/1.3.1/micronaut-http-server-1.3.1-sources.jar"
+ },
{
"coord": "io.micronaut:micronaut-http:1.3.1",
"dependencies": [
@@ -1184,6 +3281,10 @@
"io.micronaut:micronaut-inject:1.3.1",
"org.slf4j:slf4j-api:1.7.26"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-http/1.3.1/micronaut-http-1.3.1.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/micronaut/micronaut-http/1.3.1/micronaut-http-1.3.1.jar",
@@ -1194,6 +3295,36 @@
"sha256": "4cfeb327901568de96d0f2030aefdfb8d5fe58f3d58f84e1f224005675902096",
"url": "https://jcenter.bintray.com/io/micronaut/micronaut-http/1.3.1/micronaut-http-1.3.1.jar"
},
+ {
+ "coord": "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "dependencies": [
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2"
+ ],
+ "directDependencies": [
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-http/1.3.1/micronaut-http-1.3.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/micronaut-http/1.3.1/micronaut-http-1.3.1-sources.jar",
+ "https://maven.google.com/io/micronaut/micronaut-http/1.3.1/micronaut-http-1.3.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/micronaut-http/1.3.1/micronaut-http-1.3.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/micronaut-http/1.3.1/micronaut-http-1.3.1-sources.jar"
+ ],
+ "sha256": "00c0ab3f9d3f48dd13ea41efadf423d4f6d23fefd5af62c09dd14c7e74f71dac",
+ "url": "https://jcenter.bintray.com/io/micronaut/micronaut-http/1.3.1/micronaut-http-1.3.1-sources.jar"
+ },
{
"coord": "io.micronaut:micronaut-inject-java:1.3.1",
"dependencies": [
@@ -1212,6 +3343,10 @@
"io.micronaut:micronaut-inject:1.3.1",
"org.slf4j:slf4j-api:1.7.26"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-inject-java/1.3.1/micronaut-inject-java-1.3.1.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/micronaut/micronaut-inject-java/1.3.1/micronaut-inject-java-1.3.1.jar",
@@ -1222,6 +3357,38 @@
"sha256": "0d9e35824fd495434fe7986c43b642df77d779688f332d9458cec6464dc10dfa",
"url": "https://jcenter.bintray.com/io/micronaut/micronaut-inject-java/1.3.1/micronaut-inject-java-1.3.1.jar"
},
+ {
+ "coord": "io.micronaut:micronaut-inject-java:jar:sources:1.3.1",
+ "dependencies": [
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2"
+ ],
+ "directDependencies": [
+ "io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-inject-java/1.3.1/micronaut-inject-java-1.3.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/micronaut-inject-java/1.3.1/micronaut-inject-java-1.3.1-sources.jar",
+ "https://maven.google.com/io/micronaut/micronaut-inject-java/1.3.1/micronaut-inject-java-1.3.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/micronaut-inject-java/1.3.1/micronaut-inject-java-1.3.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/micronaut-inject-java/1.3.1/micronaut-inject-java-1.3.1-sources.jar"
+ ],
+ "sha256": "bdf7686fd64cc82db3ab08e5a30ee4cc33b797adb11329177993a9e3a4b0b1bb",
+ "url": "https://jcenter.bintray.com/io/micronaut/micronaut-inject-java/1.3.1/micronaut-inject-java-1.3.1-sources.jar"
+ },
{
"coord": "io.micronaut:micronaut-inject:1.3.1",
"dependencies": [
@@ -1240,6 +3407,10 @@
"javax.annotation:javax.annotation-api:1.3.2",
"javax.inject:javax.inject:1"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-inject/1.3.1/micronaut-inject-1.3.1.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/micronaut/micronaut-inject/1.3.1/micronaut-inject-1.3.1.jar",
@@ -1250,6 +3421,38 @@
"sha256": "81a19602f908f83a9c4a440722ccc95b0a041563405028c63b62cfbc79f14f26",
"url": "https://jcenter.bintray.com/io/micronaut/micronaut-inject/1.3.1/micronaut-inject-1.3.1.jar"
},
+ {
+ "coord": "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "dependencies": [
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2"
+ ],
+ "directDependencies": [
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-inject/1.3.1/micronaut-inject-1.3.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/micronaut-inject/1.3.1/micronaut-inject-1.3.1-sources.jar",
+ "https://maven.google.com/io/micronaut/micronaut-inject/1.3.1/micronaut-inject-1.3.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/micronaut-inject/1.3.1/micronaut-inject-1.3.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/micronaut-inject/1.3.1/micronaut-inject-1.3.1-sources.jar"
+ ],
+ "sha256": "11e83eafbaef326fe7b37138cdfea318a09eb21c101476e8f9c83d8fd28ae31d",
+ "url": "https://jcenter.bintray.com/io/micronaut/micronaut-inject/1.3.1/micronaut-inject-1.3.1-sources.jar"
+ },
{
"coord": "io.micronaut:micronaut-management:1.3.0",
"dependencies": [
@@ -1278,6 +3481,10 @@
"io.micronaut:micronaut-runtime:1.3.1",
"org.slf4j:slf4j-api:1.7.26"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-management/1.3.0/micronaut-management-1.3.0.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/micronaut/micronaut-management/1.3.0/micronaut-management-1.3.0.jar",
@@ -1288,6 +3495,48 @@
"sha256": "96b3daf77522e499cc2bb7a2509d8642bc6d32dd22e48a6f1ad5fd51bb44a9bd",
"url": "https://jcenter.bintray.com/io/micronaut/micronaut-management/1.3.0/micronaut-management-1.3.0.jar"
},
+ {
+ "coord": "io.micronaut:micronaut-management:jar:sources:1.3.0",
+ "dependencies": [
+ "javax.validation:validation-api:jar:sources:2.0.1.Final",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "io.micronaut:micronaut-router:jar:sources:1.3.1",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2"
+ ],
+ "directDependencies": [
+ "io.micronaut:micronaut-router:jar:sources:1.3.1",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-management/1.3.0/micronaut-management-1.3.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/micronaut-management/1.3.0/micronaut-management-1.3.0-sources.jar",
+ "https://maven.google.com/io/micronaut/micronaut-management/1.3.0/micronaut-management-1.3.0-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/micronaut-management/1.3.0/micronaut-management-1.3.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/micronaut-management/1.3.0/micronaut-management-1.3.0-sources.jar"
+ ],
+ "sha256": "6f2e2de9a2214756307bc1e1a8378c3f0011f351c86107eba4c4c7ebb9fb29cf",
+ "url": "https://jcenter.bintray.com/io/micronaut/micronaut-management/1.3.0/micronaut-management-1.3.0-sources.jar"
+ },
{
"coord": "io.micronaut:micronaut-multitenancy:1.3.1",
"dependencies": [
@@ -1319,6 +3568,10 @@
"io.micronaut:micronaut-runtime:1.3.1",
"org.slf4j:slf4j-api:1.7.26"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-multitenancy/1.3.1/micronaut-multitenancy-1.3.1.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/micronaut/micronaut-multitenancy/1.3.1/micronaut-multitenancy-1.3.1.jar",
@@ -1329,6 +3582,51 @@
"sha256": "def8c54333143123817980fa1fc8e174edbbc97acc2a79106bd304ec630ac761",
"url": "https://jcenter.bintray.com/io/micronaut/micronaut-multitenancy/1.3.1/micronaut-multitenancy-1.3.1.jar"
},
+ {
+ "coord": "io.micronaut:micronaut-multitenancy:jar:sources:1.3.1",
+ "dependencies": [
+ "javax.validation:validation-api:jar:sources:2.0.1.Final",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "io.micronaut:micronaut-http-server:jar:sources:1.3.1",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "io.micronaut:micronaut-router:jar:sources:1.3.1",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2",
+ "io.micronaut:micronaut-websocket:jar:sources:1.3.1"
+ ],
+ "directDependencies": [
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-http-server:jar:sources:1.3.1",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-multitenancy/1.3.1/micronaut-multitenancy-1.3.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/micronaut-multitenancy/1.3.1/micronaut-multitenancy-1.3.1-sources.jar",
+ "https://maven.google.com/io/micronaut/micronaut-multitenancy/1.3.1/micronaut-multitenancy-1.3.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/micronaut-multitenancy/1.3.1/micronaut-multitenancy-1.3.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/micronaut-multitenancy/1.3.1/micronaut-multitenancy-1.3.1-sources.jar"
+ ],
+ "sha256": "b840de0ca6128e77965f15acb75dc58224a72ede03eaf1557418d41f8dd6f418",
+ "url": "https://jcenter.bintray.com/io/micronaut/micronaut-multitenancy/1.3.1/micronaut-multitenancy-1.3.1-sources.jar"
+ },
{
"coord": "io.micronaut:micronaut-router:1.3.1",
"dependencies": [
@@ -1347,6 +3645,10 @@
"io.micronaut:micronaut-inject:1.3.1",
"org.slf4j:slf4j-api:1.7.26"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-router/1.3.1/micronaut-router-1.3.1.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/micronaut/micronaut-router/1.3.1/micronaut-router-1.3.1.jar",
@@ -1357,6 +3659,38 @@
"sha256": "0620dd1a213f9460d2d792abeacbfe4d83f6f87ce65743a3fb90586906bcbd49",
"url": "https://jcenter.bintray.com/io/micronaut/micronaut-router/1.3.1/micronaut-router-1.3.1.jar"
},
+ {
+ "coord": "io.micronaut:micronaut-router:jar:sources:1.3.1",
+ "dependencies": [
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2"
+ ],
+ "directDependencies": [
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-router/1.3.1/micronaut-router-1.3.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/micronaut-router/1.3.1/micronaut-router-1.3.1-sources.jar",
+ "https://maven.google.com/io/micronaut/micronaut-router/1.3.1/micronaut-router-1.3.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/micronaut-router/1.3.1/micronaut-router-1.3.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/micronaut-router/1.3.1/micronaut-router-1.3.1-sources.jar"
+ ],
+ "sha256": "9bdef61e712b2bf97c4504ba32fa8337fe51a9458c170887eb563e37fd1a6add",
+ "url": "https://jcenter.bintray.com/io/micronaut/micronaut-router/1.3.1/micronaut-router-1.3.1-sources.jar"
+ },
{
"coord": "io.micronaut:micronaut-runtime:1.3.1",
"dependencies": [
@@ -1389,6 +3723,10 @@
"com.fasterxml.jackson.core:jackson-databind:2.10.1",
"javax.validation:validation-api:2.0.1.Final"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-runtime/1.3.1/micronaut-runtime-1.3.1.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/micronaut/micronaut-runtime/1.3.1/micronaut-runtime-1.3.1.jar",
@@ -1399,6 +3737,52 @@
"sha256": "c6bcf268706fcf4fc6ab432d734c86a6cd63e10b1a504b060534e473f780fd10",
"url": "https://jcenter.bintray.com/io/micronaut/micronaut-runtime/1.3.1/micronaut-runtime-1.3.1.jar"
},
+ {
+ "coord": "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "dependencies": [
+ "javax.validation:validation-api:jar:sources:2.0.1.Final",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2"
+ ],
+ "directDependencies": [
+ "javax.validation:validation-api:jar:sources:2.0.1.Final",
+ "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
+ "io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-runtime/1.3.1/micronaut-runtime-1.3.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/micronaut-runtime/1.3.1/micronaut-runtime-1.3.1-sources.jar",
+ "https://maven.google.com/io/micronaut/micronaut-runtime/1.3.1/micronaut-runtime-1.3.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/micronaut-runtime/1.3.1/micronaut-runtime-1.3.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/micronaut-runtime/1.3.1/micronaut-runtime-1.3.1-sources.jar"
+ ],
+ "sha256": "0d21e666e836a24a58f5ac89593012063728a975a925fb2c1782a4b07f652ac2",
+ "url": "https://jcenter.bintray.com/io/micronaut/micronaut-runtime/1.3.1/micronaut-runtime-1.3.1-sources.jar"
+ },
{
"coord": "io.micronaut:micronaut-security:1.3.0",
"dependencies": [
@@ -1434,6 +3818,10 @@
"io.micronaut:micronaut-inject:1.3.1",
"io.micronaut:micronaut-runtime:1.3.1"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-security/1.3.0/micronaut-security-1.3.0.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/micronaut/micronaut-security/1.3.0/micronaut-security-1.3.0.jar",
@@ -1444,6 +3832,55 @@
"sha256": "a3e777cbdd8591145aa786889ca258140b3af45e43de90d63178251b1cb45a3b",
"url": "https://jcenter.bintray.com/io/micronaut/micronaut-security/1.3.0/micronaut-security-1.3.0.jar"
},
+ {
+ "coord": "io.micronaut:micronaut-security:jar:sources:1.3.0",
+ "dependencies": [
+ "io.micronaut:micronaut-validation:jar:sources:1.3.1",
+ "javax.validation:validation-api:jar:sources:2.0.1.Final",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "io.micronaut:micronaut-http-server:jar:sources:1.3.1",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "io.micronaut:micronaut-management:jar:sources:1.3.0",
+ "io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "io.micronaut:micronaut-router:jar:sources:1.3.1",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2",
+ "io.micronaut:micronaut-websocket:jar:sources:1.3.1"
+ ],
+ "directDependencies": [
+ "io.micronaut:micronaut-validation:jar:sources:1.3.1",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "io.micronaut:micronaut-http-server:jar:sources:1.3.1",
+ "io.micronaut:micronaut-management:jar:sources:1.3.0",
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-security/1.3.0/micronaut-security-1.3.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/micronaut-security/1.3.0/micronaut-security-1.3.0-sources.jar",
+ "https://maven.google.com/io/micronaut/micronaut-security/1.3.0/micronaut-security-1.3.0-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/micronaut-security/1.3.0/micronaut-security-1.3.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/micronaut-security/1.3.0/micronaut-security-1.3.0-sources.jar"
+ ],
+ "sha256": "6befd4baa4d0e86d9e43216b03fb03bb701fa0232fb2ea04ba87020018bc36c9",
+ "url": "https://jcenter.bintray.com/io/micronaut/micronaut-security/1.3.0/micronaut-security-1.3.0-sources.jar"
+ },
{
"coord": "io.micronaut:micronaut-session:1.3.1",
"dependencies": [
@@ -1471,6 +3908,10 @@
"io.micronaut:micronaut-runtime:1.3.1",
"org.slf4j:slf4j-api:1.7.26"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-session/1.3.1/micronaut-session-1.3.1.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/micronaut/micronaut-session/1.3.1/micronaut-session-1.3.1.jar",
@@ -1481,6 +3922,47 @@
"sha256": "d94f981fa3aeb23b6fec4f40bd960390f607a40d0621b8a1df3bd661f1407191",
"url": "https://jcenter.bintray.com/io/micronaut/micronaut-session/1.3.1/micronaut-session-1.3.1.jar"
},
+ {
+ "coord": "io.micronaut:micronaut-session:jar:sources:1.3.1",
+ "dependencies": [
+ "javax.validation:validation-api:jar:sources:2.0.1.Final",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2"
+ ],
+ "directDependencies": [
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-session/1.3.1/micronaut-session-1.3.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/micronaut-session/1.3.1/micronaut-session-1.3.1-sources.jar",
+ "https://maven.google.com/io/micronaut/micronaut-session/1.3.1/micronaut-session-1.3.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/micronaut-session/1.3.1/micronaut-session-1.3.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/micronaut-session/1.3.1/micronaut-session-1.3.1-sources.jar"
+ ],
+ "sha256": "7780be2f6ca9574e64c0e65a3c65e0c4ae3bf9d672a2c5bf66006662e7488d82",
+ "url": "https://jcenter.bintray.com/io/micronaut/micronaut-session/1.3.1/micronaut-session-1.3.1-sources.jar"
+ },
{
"coord": "io.micronaut:micronaut-tracing:1.3.1",
"dependencies": [
@@ -1527,6 +4009,10 @@
"io.opentracing:opentracing-util:0.33.0",
"io.micronaut:micronaut-runtime:1.3.1"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-tracing/1.3.1/micronaut-tracing-1.3.1.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/micronaut/micronaut-tracing/1.3.1/micronaut-tracing-1.3.1.jar",
@@ -1537,6 +4023,66 @@
"sha256": "ba138e0ee625a79cd75711b0816c82f6a5d960e6e1e784d434055d98a6bbeb95",
"url": "https://jcenter.bintray.com/io/micronaut/micronaut-tracing/1.3.1/micronaut-tracing-1.3.1.jar"
},
+ {
+ "coord": "io.micronaut:micronaut-tracing:jar:sources:1.3.1",
+ "dependencies": [
+ "io.netty:netty-codec-http:jar:sources:4.1.45.Final",
+ "io.netty:netty-transport:jar:sources:4.1.45.Final",
+ "javax.validation:validation-api:jar:sources:2.0.1.Final",
+ "io.micronaut:micronaut-http-client:jar:sources:1.3.1",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
+ "io.netty:netty-codec:jar:sources:4.1.45.Final",
+ "io.netty:netty-buffer:jar:sources:4.1.45.Final",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "io.opentracing:opentracing-noop:jar:sources:0.33.0",
+ "io.netty:netty-handler-proxy:jar:sources:4.1.45.Final",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "io.netty:netty-handler:jar:sources:4.1.45.Final",
+ "io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
+ "io.netty:netty-codec-socks:jar:sources:4.1.45.Final",
+ "io.opentracing:opentracing-api:jar:sources:0.33.0",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "io.opentracing:opentracing-util:jar:sources:0.33.0",
+ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-http-netty:jar:sources:1.3.1",
+ "io.netty:netty-common:jar:sources:4.1.45.Final",
+ "io.netty:netty-resolver:jar:sources:4.1.45.Final",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "io.micronaut:micronaut-buffer-netty:jar:sources:1.3.1",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2",
+ "io.micronaut:micronaut-websocket:jar:sources:1.3.1"
+ ],
+ "directDependencies": [
+ "io.micronaut:micronaut-http-client:jar:sources:1.3.1",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "io.opentracing:opentracing-api:jar:sources:0.33.0",
+ "io.opentracing:opentracing-util:jar:sources:0.33.0"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-tracing/1.3.1/micronaut-tracing-1.3.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/micronaut-tracing/1.3.1/micronaut-tracing-1.3.1-sources.jar",
+ "https://maven.google.com/io/micronaut/micronaut-tracing/1.3.1/micronaut-tracing-1.3.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/micronaut-tracing/1.3.1/micronaut-tracing-1.3.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/micronaut-tracing/1.3.1/micronaut-tracing-1.3.1-sources.jar"
+ ],
+ "sha256": "4625577a8d459ce6aaff793e014c14d9ef4f5fe2a0413ebabfe107222a8aeeee",
+ "url": "https://jcenter.bintray.com/io/micronaut/micronaut-tracing/1.3.1/micronaut-tracing-1.3.1-sources.jar"
+ },
{
"coord": "io.micronaut:micronaut-validation:1.3.1",
"dependencies": [
@@ -1557,6 +4103,10 @@
"javax.validation:validation-api:2.0.1.Final",
"org.slf4j:slf4j-api:1.7.26"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-validation/1.3.1/micronaut-validation-1.3.1.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/micronaut/micronaut-validation/1.3.1/micronaut-validation-1.3.1.jar",
@@ -1567,6 +4117,40 @@
"sha256": "5884865230cc81886702ca87a3e8286205061dd4ce1318eb064067e753230f0f",
"url": "https://jcenter.bintray.com/io/micronaut/micronaut-validation/1.3.1/micronaut-validation-1.3.1.jar"
},
+ {
+ "coord": "io.micronaut:micronaut-validation:jar:sources:1.3.1",
+ "dependencies": [
+ "javax.validation:validation-api:jar:sources:2.0.1.Final",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2"
+ ],
+ "directDependencies": [
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "javax.validation:validation-api:jar:sources:2.0.1.Final",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-validation/1.3.1/micronaut-validation-1.3.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/micronaut-validation/1.3.1/micronaut-validation-1.3.1-sources.jar",
+ "https://maven.google.com/io/micronaut/micronaut-validation/1.3.1/micronaut-validation-1.3.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/micronaut-validation/1.3.1/micronaut-validation-1.3.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/micronaut-validation/1.3.1/micronaut-validation-1.3.1-sources.jar"
+ ],
+ "sha256": "2abbc6e53bd23cd1180657ea9ed9f61ed7495ebed72528a4a20c2884385c6114",
+ "url": "https://jcenter.bintray.com/io/micronaut/micronaut-validation/1.3.1/micronaut-validation-1.3.1-sources.jar"
+ },
{
"coord": "io.micronaut:micronaut-views-core:1.3.1",
"dependencies": [
@@ -1597,6 +4181,10 @@
"io.micronaut:micronaut-http-server:1.3.1",
"io.micronaut:micronaut-runtime:1.3.1"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-views-core/1.3.1/micronaut-views-core-1.3.1.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/micronaut/micronaut-views-core/1.3.1/micronaut-views-core-1.3.1.jar",
@@ -1607,6 +4195,50 @@
"sha256": "49eecad81e88e5861559f6316d8a61c8e8bf0bac2136c0694a997a64a2d46683",
"url": "https://jcenter.bintray.com/io/micronaut/micronaut-views-core/1.3.1/micronaut-views-core-1.3.1.jar"
},
+ {
+ "coord": "io.micronaut:micronaut-views-core:jar:sources:1.3.1",
+ "dependencies": [
+ "javax.validation:validation-api:jar:sources:2.0.1.Final",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "io.micronaut:micronaut-http-server:jar:sources:1.3.1",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "io.micronaut:micronaut-router:jar:sources:1.3.1",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2",
+ "io.micronaut:micronaut-websocket:jar:sources:1.3.1"
+ ],
+ "directDependencies": [
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-http-server:jar:sources:1.3.1",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-views-core/1.3.1/micronaut-views-core-1.3.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/micronaut-views-core/1.3.1/micronaut-views-core-1.3.1-sources.jar",
+ "https://maven.google.com/io/micronaut/micronaut-views-core/1.3.1/micronaut-views-core-1.3.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/micronaut-views-core/1.3.1/micronaut-views-core-1.3.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/micronaut-views-core/1.3.1/micronaut-views-core-1.3.1-sources.jar"
+ ],
+ "sha256": "6b5bbbe93510f69e25eac9e0b094a53071b2fd19681f499fec79b784f2d06619",
+ "url": "https://jcenter.bintray.com/io/micronaut/micronaut-views-core/1.3.1/micronaut-views-core-1.3.1-sources.jar"
+ },
{
"coord": "io.micronaut:micronaut-views-freemarker:1.3.1",
"dependencies": [
@@ -1640,7 +4272,9 @@
"io.micronaut:micronaut-views-core:1.3.1"
],
"exclusions": [
- "org.freemarker:freemarker"
+ "org.freemarker:freemarker",
+ "com.google.common.html.types:types",
+ "com.google.template:soy"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-views-freemarker/1.3.1/micronaut-views-freemarker-1.3.1.jar",
"mirror_urls": [
@@ -1652,6 +4286,53 @@
"sha256": "308e603a83532582af9de5693d7f4c1d1e9fb2d3abd67646b3e1593b89721799",
"url": "https://jcenter.bintray.com/io/micronaut/micronaut-views-freemarker/1.3.1/micronaut-views-freemarker-1.3.1.jar"
},
+ {
+ "coord": "io.micronaut:micronaut-views-freemarker:jar:sources:1.3.1",
+ "dependencies": [
+ "javax.validation:validation-api:jar:sources:2.0.1.Final",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "io.micronaut:micronaut-http-server:jar:sources:1.3.1",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
+ "io.micronaut:micronaut-views-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "io.micronaut:micronaut-router:jar:sources:1.3.1",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2",
+ "io.micronaut:micronaut-websocket:jar:sources:1.3.1"
+ ],
+ "directDependencies": [
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-http-server:jar:sources:1.3.1",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "io.micronaut:micronaut-views-core:jar:sources:1.3.1"
+ ],
+ "exclusions": [
+ "org.freemarker:freemarker",
+ "com.google.common.html.types:types",
+ "com.google.template:soy"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-views-freemarker/1.3.1/micronaut-views-freemarker-1.3.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/micronaut-views-freemarker/1.3.1/micronaut-views-freemarker-1.3.1-sources.jar",
+ "https://maven.google.com/io/micronaut/micronaut-views-freemarker/1.3.1/micronaut-views-freemarker-1.3.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/micronaut-views-freemarker/1.3.1/micronaut-views-freemarker-1.3.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/micronaut-views-freemarker/1.3.1/micronaut-views-freemarker-1.3.1-sources.jar"
+ ],
+ "sha256": "383f6cd44a3f79c87216ade3fcec9feee43c61e8e731e9e54f078095a8f1741c",
+ "url": "https://jcenter.bintray.com/io/micronaut/micronaut-views-freemarker/1.3.1/micronaut-views-freemarker-1.3.1-sources.jar"
+ },
{
"coord": "io.micronaut:micronaut-views-handlebars:1.3.1",
"dependencies": [
@@ -1685,7 +4366,9 @@
"io.micronaut:micronaut-views-core:1.3.1"
],
"exclusions": [
- "com.github.jknack:handlebars"
+ "com.github.jknack:handlebars",
+ "com.google.common.html.types:types",
+ "com.google.template:soy"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-views-handlebars/1.3.1/micronaut-views-handlebars-1.3.1.jar",
"mirror_urls": [
@@ -1697,6 +4380,53 @@
"sha256": "e06ea590ad8e4c3941b9be2ccd0c66e004729763f6c3125e6df89fd7d05357c5",
"url": "https://jcenter.bintray.com/io/micronaut/micronaut-views-handlebars/1.3.1/micronaut-views-handlebars-1.3.1.jar"
},
+ {
+ "coord": "io.micronaut:micronaut-views-handlebars:jar:sources:1.3.1",
+ "dependencies": [
+ "javax.validation:validation-api:jar:sources:2.0.1.Final",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "io.micronaut:micronaut-http-server:jar:sources:1.3.1",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
+ "io.micronaut:micronaut-views-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "io.micronaut:micronaut-router:jar:sources:1.3.1",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2",
+ "io.micronaut:micronaut-websocket:jar:sources:1.3.1"
+ ],
+ "directDependencies": [
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-http-server:jar:sources:1.3.1",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "io.micronaut:micronaut-views-core:jar:sources:1.3.1"
+ ],
+ "exclusions": [
+ "com.github.jknack:handlebars",
+ "com.google.common.html.types:types",
+ "com.google.template:soy"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-views-handlebars/1.3.1/micronaut-views-handlebars-1.3.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/micronaut-views-handlebars/1.3.1/micronaut-views-handlebars-1.3.1-sources.jar",
+ "https://maven.google.com/io/micronaut/micronaut-views-handlebars/1.3.1/micronaut-views-handlebars-1.3.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/micronaut-views-handlebars/1.3.1/micronaut-views-handlebars-1.3.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/micronaut-views-handlebars/1.3.1/micronaut-views-handlebars-1.3.1-sources.jar"
+ ],
+ "sha256": "4d2209b940329bf13334a81ec66453a718acd34b498bb58fc86e637e2217ae5f",
+ "url": "https://jcenter.bintray.com/io/micronaut/micronaut-views-handlebars/1.3.1/micronaut-views-handlebars-1.3.1-sources.jar"
+ },
{
"coord": "io.micronaut:micronaut-views-soy:1.3.1",
"dependencies": [
@@ -1730,7 +4460,8 @@
"io.micronaut:micronaut-views-core:1.3.1"
],
"exclusions": [
- "com.google.template:soy"
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-views-soy/1.3.1/micronaut-views-soy-1.3.1.jar",
"mirror_urls": [
@@ -1742,6 +4473,52 @@
"sha256": "9b11a156cda98c270c83316a4392a389effe4d23b3ed8810a03a2752dae26f80",
"url": "https://jcenter.bintray.com/io/micronaut/micronaut-views-soy/1.3.1/micronaut-views-soy-1.3.1.jar"
},
+ {
+ "coord": "io.micronaut:micronaut-views-soy:jar:sources:1.3.1",
+ "dependencies": [
+ "javax.validation:validation-api:jar:sources:2.0.1.Final",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "io.micronaut:micronaut-http-server:jar:sources:1.3.1",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
+ "io.micronaut:micronaut-views-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "io.micronaut:micronaut-router:jar:sources:1.3.1",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2",
+ "io.micronaut:micronaut-websocket:jar:sources:1.3.1"
+ ],
+ "directDependencies": [
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-http-server:jar:sources:1.3.1",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "io.micronaut:micronaut-views-core:jar:sources:1.3.1"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-views-soy/1.3.1/micronaut-views-soy-1.3.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/micronaut-views-soy/1.3.1/micronaut-views-soy-1.3.1-sources.jar",
+ "https://maven.google.com/io/micronaut/micronaut-views-soy/1.3.1/micronaut-views-soy-1.3.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/micronaut-views-soy/1.3.1/micronaut-views-soy-1.3.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/micronaut-views-soy/1.3.1/micronaut-views-soy-1.3.1-sources.jar"
+ ],
+ "sha256": "0ab576b2232c754b8faaf0cd45ea9526e69e2b79cdf7e9b46523b1dc92f9134f",
+ "url": "https://jcenter.bintray.com/io/micronaut/micronaut-views-soy/1.3.1/micronaut-views-soy-1.3.1-sources.jar"
+ },
{
"coord": "io.micronaut:micronaut-views-thymeleaf:1.3.1",
"dependencies": [
@@ -1776,7 +4553,9 @@
"io.micronaut:micronaut-runtime:1.3.1"
],
"exclusions": [
- "org.thymeleaf:thymeleaf"
+ "org.thymeleaf:thymeleaf",
+ "com.google.common.html.types:types",
+ "com.google.template:soy"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-views-thymeleaf/1.3.1/micronaut-views-thymeleaf-1.3.1.jar",
"mirror_urls": [
@@ -1788,6 +4567,54 @@
"sha256": "3e9269c413bb198490b683352404f87e999d43139b48cc39d7f2b27f93f9da09",
"url": "https://jcenter.bintray.com/io/micronaut/micronaut-views-thymeleaf/1.3.1/micronaut-views-thymeleaf-1.3.1.jar"
},
+ {
+ "coord": "io.micronaut:micronaut-views-thymeleaf:jar:sources:1.3.1",
+ "dependencies": [
+ "javax.validation:validation-api:jar:sources:2.0.1.Final",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "io.micronaut:micronaut-http-server:jar:sources:1.3.1",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
+ "io.micronaut:micronaut-views-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "io.micronaut:micronaut-router:jar:sources:1.3.1",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2",
+ "io.micronaut:micronaut-websocket:jar:sources:1.3.1"
+ ],
+ "directDependencies": [
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "io.micronaut:micronaut-http-server:jar:sources:1.3.1",
+ "io.micronaut:micronaut-views-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1"
+ ],
+ "exclusions": [
+ "org.thymeleaf:thymeleaf",
+ "com.google.common.html.types:types",
+ "com.google.template:soy"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-views-thymeleaf/1.3.1/micronaut-views-thymeleaf-1.3.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/micronaut-views-thymeleaf/1.3.1/micronaut-views-thymeleaf-1.3.1-sources.jar",
+ "https://maven.google.com/io/micronaut/micronaut-views-thymeleaf/1.3.1/micronaut-views-thymeleaf-1.3.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/micronaut-views-thymeleaf/1.3.1/micronaut-views-thymeleaf-1.3.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/micronaut-views-thymeleaf/1.3.1/micronaut-views-thymeleaf-1.3.1-sources.jar"
+ ],
+ "sha256": "c6d07a77296f23ae5e7e4452adeae3253fee56ad3d7e5b0df3b5dbf1be60d81f",
+ "url": "https://jcenter.bintray.com/io/micronaut/micronaut-views-thymeleaf/1.3.1/micronaut-views-thymeleaf-1.3.1-sources.jar"
+ },
{
"coord": "io.micronaut:micronaut-views-velocity:1.3.1",
"dependencies": [
@@ -1821,7 +4648,9 @@
"io.micronaut:micronaut-views-core:1.3.1"
],
"exclusions": [
- "org.apache.velocity:velocity-engine-core"
+ "org.apache.velocity:velocity-engine-core",
+ "com.google.common.html.types:types",
+ "com.google.template:soy"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-views-velocity/1.3.1/micronaut-views-velocity-1.3.1.jar",
"mirror_urls": [
@@ -1833,6 +4662,53 @@
"sha256": "b410cd0c1eca32c920990e4a16d4371f56104ddca2aa05e33922bec76c3ca7a2",
"url": "https://jcenter.bintray.com/io/micronaut/micronaut-views-velocity/1.3.1/micronaut-views-velocity-1.3.1.jar"
},
+ {
+ "coord": "io.micronaut:micronaut-views-velocity:jar:sources:1.3.1",
+ "dependencies": [
+ "javax.validation:validation-api:jar:sources:2.0.1.Final",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "io.micronaut:micronaut-http-server:jar:sources:1.3.1",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
+ "io.micronaut:micronaut-views-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "io.micronaut:micronaut-router:jar:sources:1.3.1",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2",
+ "io.micronaut:micronaut-websocket:jar:sources:1.3.1"
+ ],
+ "directDependencies": [
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-http-server:jar:sources:1.3.1",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "io.micronaut:micronaut-views-core:jar:sources:1.3.1"
+ ],
+ "exclusions": [
+ "org.apache.velocity:velocity-engine-core",
+ "com.google.common.html.types:types",
+ "com.google.template:soy"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-views-velocity/1.3.1/micronaut-views-velocity-1.3.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/micronaut-views-velocity/1.3.1/micronaut-views-velocity-1.3.1-sources.jar",
+ "https://maven.google.com/io/micronaut/micronaut-views-velocity/1.3.1/micronaut-views-velocity-1.3.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/micronaut-views-velocity/1.3.1/micronaut-views-velocity-1.3.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/micronaut-views-velocity/1.3.1/micronaut-views-velocity-1.3.1-sources.jar"
+ ],
+ "sha256": "be9ebf584b4c3086114ba6acb46f69a9f4361a5ae181255ca4734ff1a8bae557",
+ "url": "https://jcenter.bintray.com/io/micronaut/micronaut-views-velocity/1.3.1/micronaut-views-velocity-1.3.1-sources.jar"
+ },
{
"coord": "io.micronaut:micronaut-views:1.3.1",
"dependencies": [
@@ -1872,15 +4748,72 @@
"io.micronaut:micronaut-views-core:1.3.1",
"io.micronaut:micronaut-views-handlebars:1.3.1"
],
- "file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-views/1.3.1/micronaut-views-1.3.1.jar",
+ "exclusions": [
+ "com.google.common.html.types:types",
+ "com.google.template:soy"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-views/1.3.1/micronaut-views-1.3.1.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/micronaut-views/1.3.1/micronaut-views-1.3.1.jar",
+ "https://maven.google.com/io/micronaut/micronaut-views/1.3.1/micronaut-views-1.3.1.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/micronaut-views/1.3.1/micronaut-views-1.3.1.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/micronaut-views/1.3.1/micronaut-views-1.3.1.jar"
+ ],
+ "sha256": "abdc49d2aae7180129168abe7d9f5d9d6aa3cbca9d04da67fed6184befe4af80",
+ "url": "https://jcenter.bintray.com/io/micronaut/micronaut-views/1.3.1/micronaut-views-1.3.1.jar"
+ },
+ {
+ "coord": "io.micronaut:micronaut-views:jar:sources:1.3.1",
+ "dependencies": [
+ "javax.validation:validation-api:jar:sources:2.0.1.Final",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "io.micronaut:micronaut-runtime:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
+ "io.micronaut:micronaut-views-thymeleaf:jar:sources:1.3.1",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "io.micronaut:micronaut-http-server:jar:sources:1.3.1",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "io.micronaut:micronaut-views-velocity:jar:sources:1.3.1",
+ "io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
+ "io.micronaut:micronaut-views-handlebars:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
+ "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
+ "io.micronaut:micronaut-views-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "io.micronaut:micronaut-views-soy:jar:sources:1.3.1",
+ "io.micronaut:micronaut-router:jar:sources:1.3.1",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2",
+ "io.micronaut:micronaut-views-freemarker:jar:sources:1.3.1",
+ "io.micronaut:micronaut-websocket:jar:sources:1.3.1"
+ ],
+ "directDependencies": [
+ "io.micronaut:micronaut-views-thymeleaf:jar:sources:1.3.1",
+ "io.micronaut:micronaut-views-velocity:jar:sources:1.3.1",
+ "io.micronaut:micronaut-views-handlebars:jar:sources:1.3.1",
+ "io.micronaut:micronaut-views-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-views-soy:jar:sources:1.3.1",
+ "io.micronaut:micronaut-views-freemarker:jar:sources:1.3.1"
+ ],
+ "exclusions": [
+ "com.google.common.html.types:types",
+ "com.google.template:soy"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-views/1.3.1/micronaut-views-1.3.1-sources.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/io/micronaut/micronaut-views/1.3.1/micronaut-views-1.3.1.jar",
- "https://maven.google.com/io/micronaut/micronaut-views/1.3.1/micronaut-views-1.3.1.jar",
- "https://repo1.maven.org/maven2/io/micronaut/micronaut-views/1.3.1/micronaut-views-1.3.1.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/micronaut-views/1.3.1/micronaut-views-1.3.1.jar"
+ "https://jcenter.bintray.com/io/micronaut/micronaut-views/1.3.1/micronaut-views-1.3.1-sources.jar",
+ "https://maven.google.com/io/micronaut/micronaut-views/1.3.1/micronaut-views-1.3.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/micronaut-views/1.3.1/micronaut-views-1.3.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/micronaut-views/1.3.1/micronaut-views-1.3.1-sources.jar"
],
- "sha256": "abdc49d2aae7180129168abe7d9f5d9d6aa3cbca9d04da67fed6184befe4af80",
- "url": "https://jcenter.bintray.com/io/micronaut/micronaut-views/1.3.1/micronaut-views-1.3.1.jar"
+ "sha256": "32773b752a6d57edc9629bfe7bc674817b810995a473587fd707a1bc8f5064b3",
+ "url": "https://jcenter.bintray.com/io/micronaut/micronaut-views/1.3.1/micronaut-views-1.3.1-sources.jar"
},
{
"coord": "io.micronaut:micronaut-websocket:1.3.1",
@@ -1904,6 +4837,10 @@
"io.micronaut:micronaut-http:1.3.1",
"io.micronaut:micronaut-inject:1.3.1"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-websocket/1.3.1/micronaut-websocket-1.3.1.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/micronaut/micronaut-websocket/1.3.1/micronaut-websocket-1.3.1.jar",
@@ -1914,6 +4851,42 @@
"sha256": "939ec9e15a2c8df39ff75427ff6fafd2c38dfe674383251f0cfec50f8e4f614f",
"url": "https://jcenter.bintray.com/io/micronaut/micronaut-websocket/1.3.1/micronaut-websocket-1.3.1.jar"
},
+ {
+ "coord": "io.micronaut:micronaut-websocket:jar:sources:1.3.1",
+ "dependencies": [
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "javax.inject:javax.inject:jar:sources:1",
+ "io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
+ "org.yaml:snakeyaml:jar:sources:1.24",
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2"
+ ],
+ "directDependencies": [
+ "io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
+ "io.micronaut:micronaut-http:jar:sources:1.3.1",
+ "io.micronaut:micronaut-inject:jar:sources:1.3.1"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-websocket/1.3.1/micronaut-websocket-1.3.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/micronaut/micronaut-websocket/1.3.1/micronaut-websocket-1.3.1-sources.jar",
+ "https://maven.google.com/io/micronaut/micronaut-websocket/1.3.1/micronaut-websocket-1.3.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/micronaut/micronaut-websocket/1.3.1/micronaut-websocket-1.3.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/micronaut/micronaut-websocket/1.3.1/micronaut-websocket-1.3.1-sources.jar"
+ ],
+ "sha256": "60c8b75981316688e22b07e64388a0e018b90db601b88408c45ec74f7531171d",
+ "url": "https://jcenter.bintray.com/io/micronaut/micronaut-websocket/1.3.1/micronaut-websocket-1.3.1-sources.jar"
+ },
{
"coord": "io.netty:netty-buffer:4.1.45.Final",
"dependencies": [
@@ -1922,6 +4895,10 @@
"directDependencies": [
"io.netty:netty-common:4.1.45.Final"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/netty/netty-buffer/4.1.45.Final/netty-buffer-4.1.45.Final.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/netty/netty-buffer/4.1.45.Final/netty-buffer-4.1.45.Final.jar",
@@ -1932,6 +4909,64 @@
"sha256": "8437b43e03c272093066837567e1b89019ef291f06f5ace1051017981d98d59f",
"url": "https://jcenter.bintray.com/io/netty/netty-buffer/4.1.45.Final/netty-buffer-4.1.45.Final.jar"
},
+ {
+ "coord": "io.netty:netty-buffer:jar:sources:4.1.45.Final",
+ "dependencies": [
+ "io.netty:netty-common:jar:sources:4.1.45.Final"
+ ],
+ "directDependencies": [
+ "io.netty:netty-common:jar:sources:4.1.45.Final"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/netty/netty-buffer/4.1.45.Final/netty-buffer-4.1.45.Final-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/netty/netty-buffer/4.1.45.Final/netty-buffer-4.1.45.Final-sources.jar",
+ "https://maven.google.com/io/netty/netty-buffer/4.1.45.Final/netty-buffer-4.1.45.Final-sources.jar",
+ "https://repo1.maven.org/maven2/io/netty/netty-buffer/4.1.45.Final/netty-buffer-4.1.45.Final-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/netty/netty-buffer/4.1.45.Final/netty-buffer-4.1.45.Final-sources.jar"
+ ],
+ "sha256": "2d320d4867fbe99c059d14396858e5538b5afc68765eddc0b860b86023b5d06f",
+ "url": "https://jcenter.bintray.com/io/netty/netty-buffer/4.1.45.Final/netty-buffer-4.1.45.Final-sources.jar"
+ },
+ {
+ "coord": "io.netty:netty-codec-http2:4.1.42.Final",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar",
+ "https://maven.google.com/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar",
+ "https://repo1.maven.org/maven2/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar"
+ ],
+ "sha256": "8bac9625eb68635396eb0c13c9cc0b22bde7c83d0cd2dae3fe9b6f9cf929e372",
+ "url": "https://jcenter.bintray.com/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar"
+ },
+ {
+ "coord": "io.netty:netty-codec-http2:jar:sources:4.1.42.Final",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final-sources.jar",
+ "https://maven.google.com/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final-sources.jar",
+ "https://repo1.maven.org/maven2/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final-sources.jar"
+ ],
+ "sha256": "fdc2ad0f50802d8e4b5f5d09deab49a49eea8c031ce77d09b5a398a1daa1abfc",
+ "url": "https://jcenter.bintray.com/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final-sources.jar"
+ },
{
"coord": "io.netty:netty-codec-http:4.1.45.Final",
"dependencies": [
@@ -1949,6 +4984,10 @@
"io.netty:netty-buffer:4.1.45.Final",
"io.netty:netty-handler:4.1.45.Final"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/netty/netty-codec-http/4.1.45.Final/netty-codec-http-4.1.45.Final.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/netty/netty-codec-http/4.1.45.Final/netty-codec-http-4.1.45.Final.jar",
@@ -1959,6 +4998,37 @@
"sha256": "db8d8bf478bd3ad723c3d23fdf1cbf62ab9d419a8636e17add3f82f51f8e0bc1",
"url": "https://jcenter.bintray.com/io/netty/netty-codec-http/4.1.45.Final/netty-codec-http-4.1.45.Final.jar"
},
+ {
+ "coord": "io.netty:netty-codec-http:jar:sources:4.1.45.Final",
+ "dependencies": [
+ "io.netty:netty-transport:jar:sources:4.1.45.Final",
+ "io.netty:netty-codec:jar:sources:4.1.45.Final",
+ "io.netty:netty-buffer:jar:sources:4.1.45.Final",
+ "io.netty:netty-handler:jar:sources:4.1.45.Final",
+ "io.netty:netty-common:jar:sources:4.1.45.Final",
+ "io.netty:netty-resolver:jar:sources:4.1.45.Final"
+ ],
+ "directDependencies": [
+ "io.netty:netty-transport:jar:sources:4.1.45.Final",
+ "io.netty:netty-codec:jar:sources:4.1.45.Final",
+ "io.netty:netty-buffer:jar:sources:4.1.45.Final",
+ "io.netty:netty-handler:jar:sources:4.1.45.Final",
+ "io.netty:netty-common:jar:sources:4.1.45.Final"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/netty/netty-codec-http/4.1.45.Final/netty-codec-http-4.1.45.Final-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/netty/netty-codec-http/4.1.45.Final/netty-codec-http-4.1.45.Final-sources.jar",
+ "https://maven.google.com/io/netty/netty-codec-http/4.1.45.Final/netty-codec-http-4.1.45.Final-sources.jar",
+ "https://repo1.maven.org/maven2/io/netty/netty-codec-http/4.1.45.Final/netty-codec-http-4.1.45.Final-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/netty/netty-codec-http/4.1.45.Final/netty-codec-http-4.1.45.Final-sources.jar"
+ ],
+ "sha256": "63f36b84424585dd308f3f3bebadab04996c750ec6bed0fb2e880e0923bdaf5a",
+ "url": "https://jcenter.bintray.com/io/netty/netty-codec-http/4.1.45.Final/netty-codec-http-4.1.45.Final-sources.jar"
+ },
{
"coord": "io.netty:netty-codec-socks:4.1.45.Final",
"dependencies": [
@@ -1974,6 +5044,10 @@
"io.netty:netty-common:4.1.45.Final",
"io.netty:netty-transport:4.1.45.Final"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/netty/netty-codec-socks/4.1.45.Final/netty-codec-socks-4.1.45.Final.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/netty/netty-codec-socks/4.1.45.Final/netty-codec-socks-4.1.45.Final.jar",
@@ -1984,6 +5058,35 @@
"sha256": "f5aa6197d3df9009bbb889ada2b1ae09b23559ebe748030478652c05a5977a25",
"url": "https://jcenter.bintray.com/io/netty/netty-codec-socks/4.1.45.Final/netty-codec-socks-4.1.45.Final.jar"
},
+ {
+ "coord": "io.netty:netty-codec-socks:jar:sources:4.1.45.Final",
+ "dependencies": [
+ "io.netty:netty-transport:jar:sources:4.1.45.Final",
+ "io.netty:netty-codec:jar:sources:4.1.45.Final",
+ "io.netty:netty-buffer:jar:sources:4.1.45.Final",
+ "io.netty:netty-common:jar:sources:4.1.45.Final",
+ "io.netty:netty-resolver:jar:sources:4.1.45.Final"
+ ],
+ "directDependencies": [
+ "io.netty:netty-buffer:jar:sources:4.1.45.Final",
+ "io.netty:netty-codec:jar:sources:4.1.45.Final",
+ "io.netty:netty-common:jar:sources:4.1.45.Final",
+ "io.netty:netty-transport:jar:sources:4.1.45.Final"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/netty/netty-codec-socks/4.1.45.Final/netty-codec-socks-4.1.45.Final-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/netty/netty-codec-socks/4.1.45.Final/netty-codec-socks-4.1.45.Final-sources.jar",
+ "https://maven.google.com/io/netty/netty-codec-socks/4.1.45.Final/netty-codec-socks-4.1.45.Final-sources.jar",
+ "https://repo1.maven.org/maven2/io/netty/netty-codec-socks/4.1.45.Final/netty-codec-socks-4.1.45.Final-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/netty/netty-codec-socks/4.1.45.Final/netty-codec-socks-4.1.45.Final-sources.jar"
+ ],
+ "sha256": "efa680916739a248d1df43636d5a2718342f6e3d793006e29dc3ed1500c9b0af",
+ "url": "https://jcenter.bintray.com/io/netty/netty-codec-socks/4.1.45.Final/netty-codec-socks-4.1.45.Final-sources.jar"
+ },
{
"coord": "io.netty:netty-codec:4.1.45.Final",
"dependencies": [
@@ -1997,6 +5100,10 @@
"io.netty:netty-common:4.1.45.Final",
"io.netty:netty-transport:4.1.45.Final"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/netty/netty-codec/4.1.45.Final/netty-codec-4.1.45.Final.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/netty/netty-codec/4.1.45.Final/netty-codec-4.1.45.Final.jar",
@@ -2007,10 +5114,41 @@
"sha256": "47e211ad8c4c2b809b6e04541d6c8e3893dea63918dabe93fa5cf63914ffc9cc",
"url": "https://jcenter.bintray.com/io/netty/netty-codec/4.1.45.Final/netty-codec-4.1.45.Final.jar"
},
+ {
+ "coord": "io.netty:netty-codec:jar:sources:4.1.45.Final",
+ "dependencies": [
+ "io.netty:netty-common:jar:sources:4.1.45.Final",
+ "io.netty:netty-transport:jar:sources:4.1.45.Final",
+ "io.netty:netty-buffer:jar:sources:4.1.45.Final",
+ "io.netty:netty-resolver:jar:sources:4.1.45.Final"
+ ],
+ "directDependencies": [
+ "io.netty:netty-buffer:jar:sources:4.1.45.Final",
+ "io.netty:netty-common:jar:sources:4.1.45.Final",
+ "io.netty:netty-transport:jar:sources:4.1.45.Final"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/netty/netty-codec/4.1.45.Final/netty-codec-4.1.45.Final-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/netty/netty-codec/4.1.45.Final/netty-codec-4.1.45.Final-sources.jar",
+ "https://maven.google.com/io/netty/netty-codec/4.1.45.Final/netty-codec-4.1.45.Final-sources.jar",
+ "https://repo1.maven.org/maven2/io/netty/netty-codec/4.1.45.Final/netty-codec-4.1.45.Final-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/netty/netty-codec/4.1.45.Final/netty-codec-4.1.45.Final-sources.jar"
+ ],
+ "sha256": "92137cece0efce77ab91062653deefa1a2ad69d6f7975f6eef312cb2630def96",
+ "url": "https://jcenter.bintray.com/io/netty/netty-codec/4.1.45.Final/netty-codec-4.1.45.Final-sources.jar"
+ },
{
"coord": "io.netty:netty-common:4.1.45.Final",
"dependencies": [],
"directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/netty/netty-common/4.1.45.Final/netty-common-4.1.45.Final.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/netty/netty-common/4.1.45.Final/netty-common-4.1.45.Final.jar",
@@ -2021,105 +5159,396 @@
"sha256": "6f3c61684cf8c0f09df7ebb5a19df29d5d9fc175ce68ae237993b91366ccc43e",
"url": "https://jcenter.bintray.com/io/netty/netty-common/4.1.45.Final/netty-common-4.1.45.Final.jar"
},
+ {
+ "coord": "io.netty:netty-common:jar:sources:4.1.45.Final",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/netty/netty-common/4.1.45.Final/netty-common-4.1.45.Final-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/netty/netty-common/4.1.45.Final/netty-common-4.1.45.Final-sources.jar",
+ "https://maven.google.com/io/netty/netty-common/4.1.45.Final/netty-common-4.1.45.Final-sources.jar",
+ "https://repo1.maven.org/maven2/io/netty/netty-common/4.1.45.Final/netty-common-4.1.45.Final-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/netty/netty-common/4.1.45.Final/netty-common-4.1.45.Final-sources.jar"
+ ],
+ "sha256": "0a0d876535cb5020b011bb8f31e4e07784eb63db21b197ea187fb2df7a4b0f45",
+ "url": "https://jcenter.bintray.com/io/netty/netty-common/4.1.45.Final/netty-common-4.1.45.Final-sources.jar"
+ },
{
"coord": "io.netty:netty-handler-proxy:4.1.45.Final",
"dependencies": [
- "io.netty:netty-codec-socks:4.1.45.Final",
- "io.netty:netty-codec:4.1.45.Final",
- "io.netty:netty-codec-http:4.1.45.Final",
- "io.netty:netty-transport:4.1.45.Final",
- "io.netty:netty-common:4.1.45.Final",
- "io.netty:netty-resolver:4.1.45.Final",
- "io.netty:netty-buffer:4.1.45.Final",
- "io.netty:netty-handler:4.1.45.Final"
+ "io.netty:netty-codec-socks:4.1.45.Final",
+ "io.netty:netty-codec:4.1.45.Final",
+ "io.netty:netty-codec-http:4.1.45.Final",
+ "io.netty:netty-transport:4.1.45.Final",
+ "io.netty:netty-common:4.1.45.Final",
+ "io.netty:netty-resolver:4.1.45.Final",
+ "io.netty:netty-buffer:4.1.45.Final",
+ "io.netty:netty-handler:4.1.45.Final"
+ ],
+ "directDependencies": [
+ "io.netty:netty-codec-socks:4.1.45.Final",
+ "io.netty:netty-codec:4.1.45.Final",
+ "io.netty:netty-codec-http:4.1.45.Final",
+ "io.netty:netty-transport:4.1.45.Final",
+ "io.netty:netty-common:4.1.45.Final",
+ "io.netty:netty-buffer:4.1.45.Final"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/netty/netty-handler-proxy/4.1.45.Final/netty-handler-proxy-4.1.45.Final.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/netty/netty-handler-proxy/4.1.45.Final/netty-handler-proxy-4.1.45.Final.jar",
+ "https://maven.google.com/io/netty/netty-handler-proxy/4.1.45.Final/netty-handler-proxy-4.1.45.Final.jar",
+ "https://repo1.maven.org/maven2/io/netty/netty-handler-proxy/4.1.45.Final/netty-handler-proxy-4.1.45.Final.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/netty/netty-handler-proxy/4.1.45.Final/netty-handler-proxy-4.1.45.Final.jar"
+ ],
+ "sha256": "410fc065171e26bb9a24ed5f7f88b3200e641cb65605ec11bc9c7625da28429a",
+ "url": "https://jcenter.bintray.com/io/netty/netty-handler-proxy/4.1.45.Final/netty-handler-proxy-4.1.45.Final.jar"
+ },
+ {
+ "coord": "io.netty:netty-handler-proxy:jar:sources:4.1.45.Final",
+ "dependencies": [
+ "io.netty:netty-codec-http:jar:sources:4.1.45.Final",
+ "io.netty:netty-transport:jar:sources:4.1.45.Final",
+ "io.netty:netty-codec:jar:sources:4.1.45.Final",
+ "io.netty:netty-buffer:jar:sources:4.1.45.Final",
+ "io.netty:netty-handler:jar:sources:4.1.45.Final",
+ "io.netty:netty-codec-socks:jar:sources:4.1.45.Final",
+ "io.netty:netty-common:jar:sources:4.1.45.Final",
+ "io.netty:netty-resolver:jar:sources:4.1.45.Final"
+ ],
+ "directDependencies": [
+ "io.netty:netty-codec-http:jar:sources:4.1.45.Final",
+ "io.netty:netty-transport:jar:sources:4.1.45.Final",
+ "io.netty:netty-codec:jar:sources:4.1.45.Final",
+ "io.netty:netty-buffer:jar:sources:4.1.45.Final",
+ "io.netty:netty-codec-socks:jar:sources:4.1.45.Final",
+ "io.netty:netty-common:jar:sources:4.1.45.Final"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/netty/netty-handler-proxy/4.1.45.Final/netty-handler-proxy-4.1.45.Final-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/netty/netty-handler-proxy/4.1.45.Final/netty-handler-proxy-4.1.45.Final-sources.jar",
+ "https://maven.google.com/io/netty/netty-handler-proxy/4.1.45.Final/netty-handler-proxy-4.1.45.Final-sources.jar",
+ "https://repo1.maven.org/maven2/io/netty/netty-handler-proxy/4.1.45.Final/netty-handler-proxy-4.1.45.Final-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/netty/netty-handler-proxy/4.1.45.Final/netty-handler-proxy-4.1.45.Final-sources.jar"
+ ],
+ "sha256": "5e23325a6121b1116e52070ea8af9e98e5566c6afca67cec1ddd049daa00358b",
+ "url": "https://jcenter.bintray.com/io/netty/netty-handler-proxy/4.1.45.Final/netty-handler-proxy-4.1.45.Final-sources.jar"
+ },
+ {
+ "coord": "io.netty:netty-handler:4.1.45.Final",
+ "dependencies": [
+ "io.netty:netty-codec:4.1.45.Final",
+ "io.netty:netty-transport:4.1.45.Final",
+ "io.netty:netty-common:4.1.45.Final",
+ "io.netty:netty-resolver:4.1.45.Final",
+ "io.netty:netty-buffer:4.1.45.Final"
+ ],
+ "directDependencies": [
+ "io.netty:netty-buffer:4.1.45.Final",
+ "io.netty:netty-codec:4.1.45.Final",
+ "io.netty:netty-common:4.1.45.Final",
+ "io.netty:netty-transport:4.1.45.Final"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/netty/netty-handler/4.1.45.Final/netty-handler-4.1.45.Final.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/netty/netty-handler/4.1.45.Final/netty-handler-4.1.45.Final.jar",
+ "https://maven.google.com/io/netty/netty-handler/4.1.45.Final/netty-handler-4.1.45.Final.jar",
+ "https://repo1.maven.org/maven2/io/netty/netty-handler/4.1.45.Final/netty-handler-4.1.45.Final.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/netty/netty-handler/4.1.45.Final/netty-handler-4.1.45.Final.jar"
+ ],
+ "sha256": "2ad6785ba22fb522dba8128a0599b3f5ee47c210dddb8d8ec678f7765ac406f0",
+ "url": "https://jcenter.bintray.com/io/netty/netty-handler/4.1.45.Final/netty-handler-4.1.45.Final.jar"
+ },
+ {
+ "coord": "io.netty:netty-handler:jar:sources:4.1.45.Final",
+ "dependencies": [
+ "io.netty:netty-transport:jar:sources:4.1.45.Final",
+ "io.netty:netty-codec:jar:sources:4.1.45.Final",
+ "io.netty:netty-buffer:jar:sources:4.1.45.Final",
+ "io.netty:netty-common:jar:sources:4.1.45.Final",
+ "io.netty:netty-resolver:jar:sources:4.1.45.Final"
+ ],
+ "directDependencies": [
+ "io.netty:netty-buffer:jar:sources:4.1.45.Final",
+ "io.netty:netty-codec:jar:sources:4.1.45.Final",
+ "io.netty:netty-common:jar:sources:4.1.45.Final",
+ "io.netty:netty-transport:jar:sources:4.1.45.Final"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/netty/netty-handler/4.1.45.Final/netty-handler-4.1.45.Final-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/netty/netty-handler/4.1.45.Final/netty-handler-4.1.45.Final-sources.jar",
+ "https://maven.google.com/io/netty/netty-handler/4.1.45.Final/netty-handler-4.1.45.Final-sources.jar",
+ "https://repo1.maven.org/maven2/io/netty/netty-handler/4.1.45.Final/netty-handler-4.1.45.Final-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/netty/netty-handler/4.1.45.Final/netty-handler-4.1.45.Final-sources.jar"
+ ],
+ "sha256": "862458d125708006c2ac28abf9e53f3c1db96ec1004a593deeeab1032f3e7ad1",
+ "url": "https://jcenter.bintray.com/io/netty/netty-handler/4.1.45.Final/netty-handler-4.1.45.Final-sources.jar"
+ },
+ {
+ "coord": "io.netty:netty-resolver:4.1.45.Final",
+ "dependencies": [
+ "io.netty:netty-common:4.1.45.Final"
+ ],
+ "directDependencies": [
+ "io.netty:netty-common:4.1.45.Final"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/netty/netty-resolver/4.1.45.Final/netty-resolver-4.1.45.Final.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/netty/netty-resolver/4.1.45.Final/netty-resolver-4.1.45.Final.jar",
+ "https://maven.google.com/io/netty/netty-resolver/4.1.45.Final/netty-resolver-4.1.45.Final.jar",
+ "https://repo1.maven.org/maven2/io/netty/netty-resolver/4.1.45.Final/netty-resolver-4.1.45.Final.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/netty/netty-resolver/4.1.45.Final/netty-resolver-4.1.45.Final.jar"
+ ],
+ "sha256": "1d762ecfa9da9241db339b611fad0529491bb0c3098c16e9c80d64f04d80323c",
+ "url": "https://jcenter.bintray.com/io/netty/netty-resolver/4.1.45.Final/netty-resolver-4.1.45.Final.jar"
+ },
+ {
+ "coord": "io.netty:netty-resolver:jar:sources:4.1.45.Final",
+ "dependencies": [
+ "io.netty:netty-common:jar:sources:4.1.45.Final"
+ ],
+ "directDependencies": [
+ "io.netty:netty-common:jar:sources:4.1.45.Final"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/netty/netty-resolver/4.1.45.Final/netty-resolver-4.1.45.Final-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/netty/netty-resolver/4.1.45.Final/netty-resolver-4.1.45.Final-sources.jar",
+ "https://maven.google.com/io/netty/netty-resolver/4.1.45.Final/netty-resolver-4.1.45.Final-sources.jar",
+ "https://repo1.maven.org/maven2/io/netty/netty-resolver/4.1.45.Final/netty-resolver-4.1.45.Final-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/netty/netty-resolver/4.1.45.Final/netty-resolver-4.1.45.Final-sources.jar"
+ ],
+ "sha256": "edb6495748e5466a4b944bb13991f37bfc0534929c5b3cd3c80ead7f3a4cbc8e",
+ "url": "https://jcenter.bintray.com/io/netty/netty-resolver/4.1.45.Final/netty-resolver-4.1.45.Final-sources.jar"
+ },
+ {
+ "coord": "io.netty:netty-transport:4.1.45.Final",
+ "dependencies": [
+ "io.netty:netty-buffer:4.1.45.Final",
+ "io.netty:netty-common:4.1.45.Final",
+ "io.netty:netty-resolver:4.1.45.Final"
+ ],
+ "directDependencies": [
+ "io.netty:netty-buffer:4.1.45.Final",
+ "io.netty:netty-common:4.1.45.Final",
+ "io.netty:netty-resolver:4.1.45.Final"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/netty/netty-transport/4.1.45.Final/netty-transport-4.1.45.Final.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/netty/netty-transport/4.1.45.Final/netty-transport-4.1.45.Final.jar",
+ "https://maven.google.com/io/netty/netty-transport/4.1.45.Final/netty-transport-4.1.45.Final.jar",
+ "https://repo1.maven.org/maven2/io/netty/netty-transport/4.1.45.Final/netty-transport-4.1.45.Final.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/netty/netty-transport/4.1.45.Final/netty-transport-4.1.45.Final.jar"
+ ],
+ "sha256": "ca38fc85e9e18c4921d9ce92830445efad05d0fb3e8dd6ba3536e0843cdf723b",
+ "url": "https://jcenter.bintray.com/io/netty/netty-transport/4.1.45.Final/netty-transport-4.1.45.Final.jar"
+ },
+ {
+ "coord": "io.netty:netty-transport:jar:sources:4.1.45.Final",
+ "dependencies": [
+ "io.netty:netty-common:jar:sources:4.1.45.Final",
+ "io.netty:netty-buffer:jar:sources:4.1.45.Final",
+ "io.netty:netty-resolver:jar:sources:4.1.45.Final"
+ ],
+ "directDependencies": [
+ "io.netty:netty-buffer:jar:sources:4.1.45.Final",
+ "io.netty:netty-common:jar:sources:4.1.45.Final",
+ "io.netty:netty-resolver:jar:sources:4.1.45.Final"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/netty/netty-transport/4.1.45.Final/netty-transport-4.1.45.Final-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/netty/netty-transport/4.1.45.Final/netty-transport-4.1.45.Final-sources.jar",
+ "https://maven.google.com/io/netty/netty-transport/4.1.45.Final/netty-transport-4.1.45.Final-sources.jar",
+ "https://repo1.maven.org/maven2/io/netty/netty-transport/4.1.45.Final/netty-transport-4.1.45.Final-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/netty/netty-transport/4.1.45.Final/netty-transport-4.1.45.Final-sources.jar"
+ ],
+ "sha256": "3afd9051b16f2f7ee1ce54e6e0ca3f735ab6547aa299aa4b18b331f6ea224ecf",
+ "url": "https://jcenter.bintray.com/io/netty/netty-transport/4.1.45.Final/netty-transport-4.1.45.Final-sources.jar"
+ },
+ {
+ "coord": "io.opencensus:opencensus-api:0.24.0",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "com.google.code.findbugs:jsr305",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/opencensus/opencensus-api/0.24.0/opencensus-api-0.24.0.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/opencensus/opencensus-api/0.24.0/opencensus-api-0.24.0.jar",
+ "https://maven.google.com/io/opencensus/opencensus-api/0.24.0/opencensus-api-0.24.0.jar",
+ "https://repo1.maven.org/maven2/io/opencensus/opencensus-api/0.24.0/opencensus-api-0.24.0.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/opencensus/opencensus-api/0.24.0/opencensus-api-0.24.0.jar"
+ ],
+ "sha256": "f561b1cc2673844288e596ddf5bb6596868a8472fd2cb8993953fc5c034b2352",
+ "url": "https://jcenter.bintray.com/io/opencensus/opencensus-api/0.24.0/opencensus-api-0.24.0.jar"
+ },
+ {
+ "coord": "io.opencensus:opencensus-api:jar:sources:0.24.0",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "com.google.code.findbugs:jsr305",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/opencensus/opencensus-api/0.24.0/opencensus-api-0.24.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/opencensus/opencensus-api/0.24.0/opencensus-api-0.24.0-sources.jar",
+ "https://maven.google.com/io/opencensus/opencensus-api/0.24.0/opencensus-api-0.24.0-sources.jar",
+ "https://repo1.maven.org/maven2/io/opencensus/opencensus-api/0.24.0/opencensus-api-0.24.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/opencensus/opencensus-api/0.24.0/opencensus-api-0.24.0-sources.jar"
+ ],
+ "sha256": "01693c455b3748a494813ae612e1766c9e804d56561b759d8399270865427bf6",
+ "url": "https://jcenter.bintray.com/io/opencensus/opencensus-api/0.24.0/opencensus-api-0.24.0-sources.jar"
+ },
+ {
+ "coord": "io.opencensus:opencensus-contrib-grpc-metrics:0.24.0",
+ "dependencies": [
+ "io.opencensus:opencensus-api:0.24.0"
],
"directDependencies": [
- "io.netty:netty-codec-socks:4.1.45.Final",
- "io.netty:netty-codec:4.1.45.Final",
- "io.netty:netty-codec-http:4.1.45.Final",
- "io.netty:netty-transport:4.1.45.Final",
- "io.netty:netty-common:4.1.45.Final",
- "io.netty:netty-buffer:4.1.45.Final"
+ "io.opencensus:opencensus-api:0.24.0"
],
- "file": "v1/https/jcenter.bintray.com/io/netty/netty-handler-proxy/4.1.45.Final/netty-handler-proxy-4.1.45.Final.jar",
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "com.google.code.findbugs:jsr305",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/opencensus/opencensus-contrib-grpc-metrics/0.24.0/opencensus-contrib-grpc-metrics-0.24.0.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/io/netty/netty-handler-proxy/4.1.45.Final/netty-handler-proxy-4.1.45.Final.jar",
- "https://maven.google.com/io/netty/netty-handler-proxy/4.1.45.Final/netty-handler-proxy-4.1.45.Final.jar",
- "https://repo1.maven.org/maven2/io/netty/netty-handler-proxy/4.1.45.Final/netty-handler-proxy-4.1.45.Final.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/io/netty/netty-handler-proxy/4.1.45.Final/netty-handler-proxy-4.1.45.Final.jar"
+ "https://jcenter.bintray.com/io/opencensus/opencensus-contrib-grpc-metrics/0.24.0/opencensus-contrib-grpc-metrics-0.24.0.jar",
+ "https://maven.google.com/io/opencensus/opencensus-contrib-grpc-metrics/0.24.0/opencensus-contrib-grpc-metrics-0.24.0.jar",
+ "https://repo1.maven.org/maven2/io/opencensus/opencensus-contrib-grpc-metrics/0.24.0/opencensus-contrib-grpc-metrics-0.24.0.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/opencensus/opencensus-contrib-grpc-metrics/0.24.0/opencensus-contrib-grpc-metrics-0.24.0.jar"
],
- "sha256": "410fc065171e26bb9a24ed5f7f88b3200e641cb65605ec11bc9c7625da28429a",
- "url": "https://jcenter.bintray.com/io/netty/netty-handler-proxy/4.1.45.Final/netty-handler-proxy-4.1.45.Final.jar"
+ "sha256": "875582e093f11950ad3f4a50b5fee33a008023f7d1e47820a1bef05d23b9ed42",
+ "url": "https://jcenter.bintray.com/io/opencensus/opencensus-contrib-grpc-metrics/0.24.0/opencensus-contrib-grpc-metrics-0.24.0.jar"
},
{
- "coord": "io.netty:netty-handler:4.1.45.Final",
+ "coord": "io.opencensus:opencensus-contrib-grpc-metrics:jar:sources:0.24.0",
"dependencies": [
- "io.netty:netty-codec:4.1.45.Final",
- "io.netty:netty-transport:4.1.45.Final",
- "io.netty:netty-common:4.1.45.Final",
- "io.netty:netty-resolver:4.1.45.Final",
- "io.netty:netty-buffer:4.1.45.Final"
+ "io.opencensus:opencensus-api:jar:sources:0.24.0"
],
"directDependencies": [
- "io.netty:netty-buffer:4.1.45.Final",
- "io.netty:netty-codec:4.1.45.Final",
- "io.netty:netty-common:4.1.45.Final",
- "io.netty:netty-transport:4.1.45.Final"
+ "io.opencensus:opencensus-api:jar:sources:0.24.0"
],
- "file": "v1/https/jcenter.bintray.com/io/netty/netty-handler/4.1.45.Final/netty-handler-4.1.45.Final.jar",
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "com.google.code.findbugs:jsr305",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/opencensus/opencensus-contrib-grpc-metrics/0.24.0/opencensus-contrib-grpc-metrics-0.24.0-sources.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/io/netty/netty-handler/4.1.45.Final/netty-handler-4.1.45.Final.jar",
- "https://maven.google.com/io/netty/netty-handler/4.1.45.Final/netty-handler-4.1.45.Final.jar",
- "https://repo1.maven.org/maven2/io/netty/netty-handler/4.1.45.Final/netty-handler-4.1.45.Final.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/io/netty/netty-handler/4.1.45.Final/netty-handler-4.1.45.Final.jar"
+ "https://jcenter.bintray.com/io/opencensus/opencensus-contrib-grpc-metrics/0.24.0/opencensus-contrib-grpc-metrics-0.24.0-sources.jar",
+ "https://maven.google.com/io/opencensus/opencensus-contrib-grpc-metrics/0.24.0/opencensus-contrib-grpc-metrics-0.24.0-sources.jar",
+ "https://repo1.maven.org/maven2/io/opencensus/opencensus-contrib-grpc-metrics/0.24.0/opencensus-contrib-grpc-metrics-0.24.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/opencensus/opencensus-contrib-grpc-metrics/0.24.0/opencensus-contrib-grpc-metrics-0.24.0-sources.jar"
],
- "sha256": "2ad6785ba22fb522dba8128a0599b3f5ee47c210dddb8d8ec678f7765ac406f0",
- "url": "https://jcenter.bintray.com/io/netty/netty-handler/4.1.45.Final/netty-handler-4.1.45.Final.jar"
+ "sha256": "48c84a321af149c35a95b0d433a49c78e21674e10568fbc529675de0ee46fa96",
+ "url": "https://jcenter.bintray.com/io/opencensus/opencensus-contrib-grpc-metrics/0.24.0/opencensus-contrib-grpc-metrics-0.24.0-sources.jar"
},
{
- "coord": "io.netty:netty-resolver:4.1.45.Final",
+ "coord": "io.opentracing.contrib:opentracing-grpc:0.2.1",
"dependencies": [
- "io.netty:netty-common:4.1.45.Final"
+ "io.opentracing:opentracing-util:0.33.0",
+ "io.opentracing:opentracing-noop:0.33.0",
+ "io.opentracing:opentracing-api:0.33.0"
],
"directDependencies": [
- "io.netty:netty-common:4.1.45.Final"
+ "io.opentracing:opentracing-api:0.33.0",
+ "io.opentracing:opentracing-util:0.33.0"
],
- "file": "v1/https/jcenter.bintray.com/io/netty/netty-resolver/4.1.45.Final/netty-resolver-4.1.45.Final.jar",
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/opentracing/contrib/opentracing-grpc/0.2.1/opentracing-grpc-0.2.1.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/io/netty/netty-resolver/4.1.45.Final/netty-resolver-4.1.45.Final.jar",
- "https://maven.google.com/io/netty/netty-resolver/4.1.45.Final/netty-resolver-4.1.45.Final.jar",
- "https://repo1.maven.org/maven2/io/netty/netty-resolver/4.1.45.Final/netty-resolver-4.1.45.Final.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/io/netty/netty-resolver/4.1.45.Final/netty-resolver-4.1.45.Final.jar"
+ "https://jcenter.bintray.com/io/opentracing/contrib/opentracing-grpc/0.2.1/opentracing-grpc-0.2.1.jar",
+ "https://maven.google.com/io/opentracing/contrib/opentracing-grpc/0.2.1/opentracing-grpc-0.2.1.jar",
+ "https://repo1.maven.org/maven2/io/opentracing/contrib/opentracing-grpc/0.2.1/opentracing-grpc-0.2.1.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/opentracing/contrib/opentracing-grpc/0.2.1/opentracing-grpc-0.2.1.jar"
],
- "sha256": "1d762ecfa9da9241db339b611fad0529491bb0c3098c16e9c80d64f04d80323c",
- "url": "https://jcenter.bintray.com/io/netty/netty-resolver/4.1.45.Final/netty-resolver-4.1.45.Final.jar"
+ "sha256": "4dc7fdbfcbb76892b92fc5c6f8f12f551833ae03e868463469787d34b54a3df2",
+ "url": "https://jcenter.bintray.com/io/opentracing/contrib/opentracing-grpc/0.2.1/opentracing-grpc-0.2.1.jar"
},
{
- "coord": "io.netty:netty-transport:4.1.45.Final",
+ "coord": "io.opentracing.contrib:opentracing-grpc:jar:sources:0.2.1",
"dependencies": [
- "io.netty:netty-buffer:4.1.45.Final",
- "io.netty:netty-common:4.1.45.Final",
- "io.netty:netty-resolver:4.1.45.Final"
+ "io.opentracing:opentracing-util:jar:sources:0.33.0",
+ "io.opentracing:opentracing-api:jar:sources:0.33.0",
+ "io.opentracing:opentracing-noop:jar:sources:0.33.0"
],
"directDependencies": [
- "io.netty:netty-buffer:4.1.45.Final",
- "io.netty:netty-common:4.1.45.Final",
- "io.netty:netty-resolver:4.1.45.Final"
+ "io.opentracing:opentracing-api:jar:sources:0.33.0",
+ "io.opentracing:opentracing-util:jar:sources:0.33.0"
],
- "file": "v1/https/jcenter.bintray.com/io/netty/netty-transport/4.1.45.Final/netty-transport-4.1.45.Final.jar",
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/opentracing/contrib/opentracing-grpc/0.2.1/opentracing-grpc-0.2.1-sources.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/io/netty/netty-transport/4.1.45.Final/netty-transport-4.1.45.Final.jar",
- "https://maven.google.com/io/netty/netty-transport/4.1.45.Final/netty-transport-4.1.45.Final.jar",
- "https://repo1.maven.org/maven2/io/netty/netty-transport/4.1.45.Final/netty-transport-4.1.45.Final.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/io/netty/netty-transport/4.1.45.Final/netty-transport-4.1.45.Final.jar"
+ "https://jcenter.bintray.com/io/opentracing/contrib/opentracing-grpc/0.2.1/opentracing-grpc-0.2.1-sources.jar",
+ "https://maven.google.com/io/opentracing/contrib/opentracing-grpc/0.2.1/opentracing-grpc-0.2.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/opentracing/contrib/opentracing-grpc/0.2.1/opentracing-grpc-0.2.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/opentracing/contrib/opentracing-grpc/0.2.1/opentracing-grpc-0.2.1-sources.jar"
],
- "sha256": "ca38fc85e9e18c4921d9ce92830445efad05d0fb3e8dd6ba3536e0843cdf723b",
- "url": "https://jcenter.bintray.com/io/netty/netty-transport/4.1.45.Final/netty-transport-4.1.45.Final.jar"
+ "sha256": "72be4798894d247703363bf831da339689cf6620d49d4df6c3bc270835c35c97",
+ "url": "https://jcenter.bintray.com/io/opentracing/contrib/opentracing-grpc/0.2.1/opentracing-grpc-0.2.1-sources.jar"
},
{
"coord": "io.opentracing:opentracing-api:0.33.0",
"dependencies": [],
"directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/opentracing/opentracing-api/0.33.0/opentracing-api-0.33.0.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/opentracing/opentracing-api/0.33.0/opentracing-api-0.33.0.jar",
@@ -2130,6 +5559,24 @@
"sha256": "4534541b8e9f41a17bcdf1d09affe45b98c13574db6e529a93a58264b9472c7c",
"url": "https://jcenter.bintray.com/io/opentracing/opentracing-api/0.33.0/opentracing-api-0.33.0.jar"
},
+ {
+ "coord": "io.opentracing:opentracing-api:jar:sources:0.33.0",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/opentracing/opentracing-api/0.33.0/opentracing-api-0.33.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/opentracing/opentracing-api/0.33.0/opentracing-api-0.33.0-sources.jar",
+ "https://maven.google.com/io/opentracing/opentracing-api/0.33.0/opentracing-api-0.33.0-sources.jar",
+ "https://repo1.maven.org/maven2/io/opentracing/opentracing-api/0.33.0/opentracing-api-0.33.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/opentracing/opentracing-api/0.33.0/opentracing-api-0.33.0-sources.jar"
+ ],
+ "sha256": "fcecb13dc6a852079886de440fd1d24c9bc19e862f653b207cba17e3b4050961",
+ "url": "https://jcenter.bintray.com/io/opentracing/opentracing-api/0.33.0/opentracing-api-0.33.0-sources.jar"
+ },
{
"coord": "io.opentracing:opentracing-noop:0.33.0",
"dependencies": [
@@ -2138,6 +5585,10 @@
"directDependencies": [
"io.opentracing:opentracing-api:0.33.0"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/opentracing/opentracing-noop/0.33.0/opentracing-noop-0.33.0.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/opentracing/opentracing-noop/0.33.0/opentracing-noop-0.33.0.jar",
@@ -2148,6 +5599,28 @@
"sha256": "8529f91e10047b2b94cb21b50086a3d3913fa4da43594eddbd9ecf5917efe040",
"url": "https://jcenter.bintray.com/io/opentracing/opentracing-noop/0.33.0/opentracing-noop-0.33.0.jar"
},
+ {
+ "coord": "io.opentracing:opentracing-noop:jar:sources:0.33.0",
+ "dependencies": [
+ "io.opentracing:opentracing-api:jar:sources:0.33.0"
+ ],
+ "directDependencies": [
+ "io.opentracing:opentracing-api:jar:sources:0.33.0"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/opentracing/opentracing-noop/0.33.0/opentracing-noop-0.33.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/opentracing/opentracing-noop/0.33.0/opentracing-noop-0.33.0-sources.jar",
+ "https://maven.google.com/io/opentracing/opentracing-noop/0.33.0/opentracing-noop-0.33.0-sources.jar",
+ "https://repo1.maven.org/maven2/io/opentracing/opentracing-noop/0.33.0/opentracing-noop-0.33.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/opentracing/opentracing-noop/0.33.0/opentracing-noop-0.33.0-sources.jar"
+ ],
+ "sha256": "f92d87a877b4466a7e7913d3d8bb74902af0630924d6963609fca813e36dc505",
+ "url": "https://jcenter.bintray.com/io/opentracing/opentracing-noop/0.33.0/opentracing-noop-0.33.0-sources.jar"
+ },
{
"coord": "io.opentracing:opentracing-util:0.33.0",
"dependencies": [
@@ -2158,6 +5631,10 @@
"io.opentracing:opentracing-api:0.33.0",
"io.opentracing:opentracing-noop:0.33.0"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/opentracing/opentracing-util/0.33.0/opentracing-util-0.33.0.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/opentracing/opentracing-util/0.33.0/opentracing-util-0.33.0.jar",
@@ -2168,6 +5645,78 @@
"sha256": "22c5dfbb9b0e2f08f7371bf3d68372c7604c804d3129499b43f37a8877c4379e",
"url": "https://jcenter.bintray.com/io/opentracing/opentracing-util/0.33.0/opentracing-util-0.33.0.jar"
},
+ {
+ "coord": "io.opentracing:opentracing-util:jar:sources:0.33.0",
+ "dependencies": [
+ "io.opentracing:opentracing-api:jar:sources:0.33.0",
+ "io.opentracing:opentracing-noop:jar:sources:0.33.0"
+ ],
+ "directDependencies": [
+ "io.opentracing:opentracing-api:jar:sources:0.33.0",
+ "io.opentracing:opentracing-noop:jar:sources:0.33.0"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/opentracing/opentracing-util/0.33.0/opentracing-util-0.33.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/opentracing/opentracing-util/0.33.0/opentracing-util-0.33.0-sources.jar",
+ "https://maven.google.com/io/opentracing/opentracing-util/0.33.0/opentracing-util-0.33.0-sources.jar",
+ "https://repo1.maven.org/maven2/io/opentracing/opentracing-util/0.33.0/opentracing-util-0.33.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/opentracing/opentracing-util/0.33.0/opentracing-util-0.33.0-sources.jar"
+ ],
+ "sha256": "020f8456bd1c6569c68352562e88cb7af27877a9a9b277c62f36b63237434888",
+ "url": "https://jcenter.bintray.com/io/opentracing/opentracing-util/0.33.0/opentracing-util-0.33.0-sources.jar"
+ },
+ {
+ "coord": "io.perfmark:perfmark-api:0.19.0",
+ "dependencies": [
+ "com.google.errorprone:error_prone_annotations:2.3.3",
+ "com.google.code.findbugs:jsr305:3.0.2"
+ ],
+ "directDependencies": [
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "com.google.errorprone:error_prone_annotations:2.3.3"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar",
+ "https://maven.google.com/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar",
+ "https://repo1.maven.org/maven2/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar"
+ ],
+ "sha256": "b734ba2149712409a44eabdb799f64768578fee0defe1418bb108fe32ea43e1a",
+ "url": "https://jcenter.bintray.com/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar"
+ },
+ {
+ "coord": "io.perfmark:perfmark-api:jar:sources:0.19.0",
+ "dependencies": [
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3"
+ ],
+ "directDependencies": [
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0-sources.jar",
+ "https://maven.google.com/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0-sources.jar",
+ "https://repo1.maven.org/maven2/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0-sources.jar"
+ ],
+ "sha256": "05cfbdd34e6fc1f10181c755cec67cf1ee517dfee615e25d1007a8aabd569dba",
+ "url": "https://jcenter.bintray.com/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0-sources.jar"
+ },
{
"coord": "io.projectreactor:reactor-core:3.2.8.RELEASE",
"dependencies": [
@@ -2176,6 +5725,10 @@
"directDependencies": [
"org.reactivestreams:reactive-streams:1.0.3"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/projectreactor/reactor-core/3.2.8.RELEASE/reactor-core-3.2.8.RELEASE.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/projectreactor/reactor-core/3.2.8.RELEASE/reactor-core-3.2.8.RELEASE.jar",
@@ -2186,6 +5739,28 @@
"sha256": "38557e1eb43fab75979a0daf442485a01fcc52d268f44ac67663ac243bfcfcf0",
"url": "https://jcenter.bintray.com/io/projectreactor/reactor-core/3.2.8.RELEASE/reactor-core-3.2.8.RELEASE.jar"
},
+ {
+ "coord": "io.projectreactor:reactor-core:jar:sources:3.2.8.RELEASE",
+ "dependencies": [
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3"
+ ],
+ "directDependencies": [
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/projectreactor/reactor-core/3.2.8.RELEASE/reactor-core-3.2.8.RELEASE-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/projectreactor/reactor-core/3.2.8.RELEASE/reactor-core-3.2.8.RELEASE-sources.jar",
+ "https://maven.google.com/io/projectreactor/reactor-core/3.2.8.RELEASE/reactor-core-3.2.8.RELEASE-sources.jar",
+ "https://repo1.maven.org/maven2/io/projectreactor/reactor-core/3.2.8.RELEASE/reactor-core-3.2.8.RELEASE-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/projectreactor/reactor-core/3.2.8.RELEASE/reactor-core-3.2.8.RELEASE-sources.jar"
+ ],
+ "sha256": "eeb7364216bec3a141b6ccd65a75787818128c72caa5cef9a9ca52575eb2ee29",
+ "url": "https://jcenter.bintray.com/io/projectreactor/reactor-core/3.2.8.RELEASE/reactor-core-3.2.8.RELEASE-sources.jar"
+ },
{
"coord": "io.reactivex.rxjava2:rxjava:2.2.10",
"dependencies": [
@@ -2194,6 +5769,10 @@
"directDependencies": [
"org.reactivestreams:reactive-streams:1.0.3"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/io/reactivex/rxjava2/rxjava/2.2.10/rxjava-2.2.10.jar",
"mirror_urls": [
"https://jcenter.bintray.com/io/reactivex/rxjava2/rxjava/2.2.10/rxjava-2.2.10.jar",
@@ -2204,10 +5783,36 @@
"sha256": "21b5cac673a156cd8d6cf9efe15ff267b6353eeb129678aa4b39542683ba0dc2",
"url": "https://jcenter.bintray.com/io/reactivex/rxjava2/rxjava/2.2.10/rxjava-2.2.10.jar"
},
+ {
+ "coord": "io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
+ "dependencies": [
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3"
+ ],
+ "directDependencies": [
+ "org.reactivestreams:reactive-streams:jar:sources:1.0.3"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/reactivex/rxjava2/rxjava/2.2.10/rxjava-2.2.10-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/reactivex/rxjava2/rxjava/2.2.10/rxjava-2.2.10-sources.jar",
+ "https://maven.google.com/io/reactivex/rxjava2/rxjava/2.2.10/rxjava-2.2.10-sources.jar",
+ "https://repo1.maven.org/maven2/io/reactivex/rxjava2/rxjava/2.2.10/rxjava-2.2.10-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/reactivex/rxjava2/rxjava/2.2.10/rxjava-2.2.10-sources.jar"
+ ],
+ "sha256": "e40b3a9de037af1cfaaeb4e43a62e9e73472c45fcb1ec53ba116b0891ba90008",
+ "url": "https://jcenter.bintray.com/io/reactivex/rxjava2/rxjava/2.2.10/rxjava-2.2.10-sources.jar"
+ },
{
"coord": "javax.annotation:javax.annotation-api:1.3.2",
"dependencies": [],
"directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar",
"mirror_urls": [
"https://jcenter.bintray.com/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar",
@@ -2219,29 +5824,31 @@
"url": "https://jcenter.bintray.com/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar"
},
{
- "coord": "javax.annotation:jsr250-api:1.0",
+ "coord": "javax.annotation:javax.annotation-api:jar:sources:1.3.2",
"dependencies": [],
"directDependencies": [],
"exclusions": [
- "com.google.errorprone:error_prone_annotations",
- "com.google.guava:guava-testlib",
- "com.google.guava:guava",
- "com.google.protobuf:protobuf-java"
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
],
- "file": "v1/https/jcenter.bintray.com/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar",
+ "file": "v1/https/jcenter.bintray.com/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2-sources.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar",
- "https://maven.google.com/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar",
- "https://repo1.maven.org/maven2/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar"
+ "https://jcenter.bintray.com/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2-sources.jar",
+ "https://maven.google.com/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2-sources.jar",
+ "https://repo1.maven.org/maven2/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2-sources.jar"
],
- "sha256": "a1a922d0d9b6d183ed3800dfac01d1e1eb159f0e8c6f94736931c1def54a941f",
- "url": "https://jcenter.bintray.com/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar"
+ "sha256": "128971e52e0d84a66e3b6e049dab8ad7b2c58b7e1ad37fa2debd3d40c2947b95",
+ "url": "https://jcenter.bintray.com/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2-sources.jar"
},
{
"coord": "javax.inject:javax.inject:1",
"dependencies": [],
"directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/javax/inject/javax.inject/1/javax.inject-1.jar",
"mirror_urls": [
"https://jcenter.bintray.com/javax/inject/javax.inject/1/javax.inject-1.jar",
@@ -2252,10 +5859,32 @@
"sha256": "91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff",
"url": "https://jcenter.bintray.com/javax/inject/javax.inject/1/javax.inject-1.jar"
},
+ {
+ "coord": "javax.inject:javax.inject:jar:sources:1",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/javax/inject/javax.inject/1/javax.inject-1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/javax/inject/javax.inject/1/javax.inject-1-sources.jar",
+ "https://maven.google.com/javax/inject/javax.inject/1/javax.inject-1-sources.jar",
+ "https://repo1.maven.org/maven2/javax/inject/javax.inject/1/javax.inject-1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/javax/inject/javax.inject/1/javax.inject-1-sources.jar"
+ ],
+ "sha256": "c4b87ee2911c139c3daf498a781967f1eb2e75bc1a8529a2e7b328a15d0e433e",
+ "url": "https://jcenter.bintray.com/javax/inject/javax.inject/1/javax.inject-1-sources.jar"
+ },
{
"coord": "javax.validation:validation-api:2.0.1.Final",
"dependencies": [],
"directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/javax/validation/validation-api/2.0.1.Final/validation-api-2.0.1.Final.jar",
"mirror_urls": [
"https://jcenter.bintray.com/javax/validation/validation-api/2.0.1.Final/validation-api-2.0.1.Final.jar",
@@ -2266,10 +5895,32 @@
"sha256": "9873b46df1833c9ee8f5bc1ff6853375115dadd8897bcb5a0dffb5848835ee6c",
"url": "https://jcenter.bintray.com/javax/validation/validation-api/2.0.1.Final/validation-api-2.0.1.Final.jar"
},
+ {
+ "coord": "javax.validation:validation-api:jar:sources:2.0.1.Final",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/javax/validation/validation-api/2.0.1.Final/validation-api-2.0.1.Final-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/javax/validation/validation-api/2.0.1.Final/validation-api-2.0.1.Final-sources.jar",
+ "https://maven.google.com/javax/validation/validation-api/2.0.1.Final/validation-api-2.0.1.Final-sources.jar",
+ "https://repo1.maven.org/maven2/javax/validation/validation-api/2.0.1.Final/validation-api-2.0.1.Final-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/javax/validation/validation-api/2.0.1.Final/validation-api-2.0.1.Final-sources.jar"
+ ],
+ "sha256": "78fc8207d394c91e329be90fc051e98180bd2a35c14e0df73f66a653c7aea19f",
+ "url": "https://jcenter.bintray.com/javax/validation/validation-api/2.0.1.Final/validation-api-2.0.1.Final-sources.jar"
+ },
{
"coord": "net.bytebuddy:byte-buddy:1.8.15",
"dependencies": [],
"directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/net/bytebuddy/byte-buddy/1.8.15/byte-buddy-1.8.15.jar",
"mirror_urls": [
"https://jcenter.bintray.com/net/bytebuddy/byte-buddy/1.8.15/byte-buddy-1.8.15.jar",
@@ -2280,10 +5931,32 @@
"sha256": "af32e420b1252c1eedef6232bd46fadafc02e0c609e086efd57a64781107a039",
"url": "https://jcenter.bintray.com/net/bytebuddy/byte-buddy/1.8.15/byte-buddy-1.8.15.jar"
},
+ {
+ "coord": "net.bytebuddy:byte-buddy:jar:sources:1.8.15",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/net/bytebuddy/byte-buddy/1.8.15/byte-buddy-1.8.15-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/net/bytebuddy/byte-buddy/1.8.15/byte-buddy-1.8.15-sources.jar",
+ "https://maven.google.com/net/bytebuddy/byte-buddy/1.8.15/byte-buddy-1.8.15-sources.jar",
+ "https://repo1.maven.org/maven2/net/bytebuddy/byte-buddy/1.8.15/byte-buddy-1.8.15-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/net/bytebuddy/byte-buddy/1.8.15/byte-buddy-1.8.15-sources.jar"
+ ],
+ "sha256": "c18794f50d1dfc8fb57bfd886b566b05697da396022bcd63b5463a454d33c899",
+ "url": "https://jcenter.bintray.com/net/bytebuddy/byte-buddy/1.8.15/byte-buddy-1.8.15-sources.jar"
+ },
{
"coord": "org.apache.commons:commons-exec:1.3",
"dependencies": [],
"directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/org/apache/commons/commons-exec/1.3/commons-exec-1.3.jar",
"mirror_urls": [
"https://jcenter.bintray.com/org/apache/commons/commons-exec/1.3/commons-exec-1.3.jar",
@@ -2294,10 +5967,32 @@
"sha256": "cb49812dc1bfb0ea4f20f398bcae1a88c6406e213e67f7524fb10d4f8ad9347b",
"url": "https://jcenter.bintray.com/org/apache/commons/commons-exec/1.3/commons-exec-1.3.jar"
},
+ {
+ "coord": "org.apache.commons:commons-exec:jar:sources:1.3",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/apache/commons/commons-exec/1.3/commons-exec-1.3-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/apache/commons/commons-exec/1.3/commons-exec-1.3-sources.jar",
+ "https://maven.google.com/org/apache/commons/commons-exec/1.3/commons-exec-1.3-sources.jar",
+ "https://repo1.maven.org/maven2/org/apache/commons/commons-exec/1.3/commons-exec-1.3-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/apache/commons/commons-exec/1.3/commons-exec-1.3-sources.jar"
+ ],
+ "sha256": "c121d8e70010092bafc56f358e7259ac484653db595aafea1e67a040f51aea66",
+ "url": "https://jcenter.bintray.com/org/apache/commons/commons-exec/1.3/commons-exec-1.3-sources.jar"
+ },
{
"coord": "org.apiguardian:apiguardian-api:1.0.0",
"dependencies": [],
"directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/org/apiguardian/apiguardian-api/1.0.0/apiguardian-api-1.0.0.jar",
"mirror_urls": [
"https://jcenter.bintray.com/org/apiguardian/apiguardian-api/1.0.0/apiguardian-api-1.0.0.jar",
@@ -2309,40 +6004,142 @@
"url": "https://jcenter.bintray.com/org/apiguardian/apiguardian-api/1.0.0/apiguardian-api-1.0.0.jar"
},
{
- "coord": "org.checkerframework:checker-qual:2.10.0",
+ "coord": "org.apiguardian:apiguardian-api:jar:sources:1.0.0",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/apiguardian/apiguardian-api/1.0.0/apiguardian-api-1.0.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/apiguardian/apiguardian-api/1.0.0/apiguardian-api-1.0.0-sources.jar",
+ "https://maven.google.com/org/apiguardian/apiguardian-api/1.0.0/apiguardian-api-1.0.0-sources.jar",
+ "https://repo1.maven.org/maven2/org/apiguardian/apiguardian-api/1.0.0/apiguardian-api-1.0.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/apiguardian/apiguardian-api/1.0.0/apiguardian-api-1.0.0-sources.jar"
+ ],
+ "sha256": "793b50c98fa62e6eec08cc8fa4364b95d4815c1b17ef17e5e9e59c457e54ce2e",
+ "url": "https://jcenter.bintray.com/org/apiguardian/apiguardian-api/1.0.0/apiguardian-api-1.0.0-sources.jar"
+ },
+ {
+ "coord": "org.checkerframework:checker-compat-qual:2.5.5",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar",
+ "https://maven.google.com/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar",
+ "https://repo1.maven.org/maven2/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar"
+ ],
+ "sha256": "11d134b245e9cacc474514d2d66b5b8618f8039a1465cdc55bbc0b34e0008b7a",
+ "url": "https://jcenter.bintray.com/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar"
+ },
+ {
+ "coord": "org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5-sources.jar",
+ "https://maven.google.com/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5-sources.jar",
+ "https://repo1.maven.org/maven2/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5-sources.jar"
+ ],
+ "sha256": "7c63a4a46b2ef903f941aeac63da87dd345be3243b472796aa945fa715bf3ca9",
+ "url": "https://jcenter.bintray.com/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5-sources.jar"
+ },
+ {
+ "coord": "org.codehaus.mojo:animal-sniffer-annotations:1.18",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/codehaus/mojo/animal-sniffer-annotations/1.18/animal-sniffer-annotations-1.18.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/codehaus/mojo/animal-sniffer-annotations/1.18/animal-sniffer-annotations-1.18.jar",
+ "https://maven.google.com/org/codehaus/mojo/animal-sniffer-annotations/1.18/animal-sniffer-annotations-1.18.jar",
+ "https://repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.18/animal-sniffer-annotations-1.18.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/codehaus/mojo/animal-sniffer-annotations/1.18/animal-sniffer-annotations-1.18.jar"
+ ],
+ "sha256": "47f05852b48ee9baefef80fa3d8cea60efa4753c0013121dd7fe5eef2e5c729d",
+ "url": "https://jcenter.bintray.com/org/codehaus/mojo/animal-sniffer-annotations/1.18/animal-sniffer-annotations-1.18.jar"
+ },
+ {
+ "coord": "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/codehaus/mojo/animal-sniffer-annotations/1.18/animal-sniffer-annotations-1.18-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/codehaus/mojo/animal-sniffer-annotations/1.18/animal-sniffer-annotations-1.18-sources.jar",
+ "https://maven.google.com/org/codehaus/mojo/animal-sniffer-annotations/1.18/animal-sniffer-annotations-1.18-sources.jar",
+ "https://repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.18/animal-sniffer-annotations-1.18-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/codehaus/mojo/animal-sniffer-annotations/1.18/animal-sniffer-annotations-1.18-sources.jar"
+ ],
+ "sha256": "ee078a91bf7136ee1961abd612b54d1cd9877352b960a7e1e7e3e4c17ceafcf1",
+ "url": "https://jcenter.bintray.com/org/codehaus/mojo/animal-sniffer-annotations/1.18/animal-sniffer-annotations-1.18-sources.jar"
+ },
+ {
+ "coord": "org.eclipse.jgit:org.eclipse.jgit:4.4.1.201607150455-r",
"dependencies": [],
"directDependencies": [],
- "file": "v1/https/jcenter.bintray.com/org/checkerframework/checker-qual/2.10.0/checker-qual-2.10.0.jar",
+ "exclusions": [
+ "com.google.template:soy",
+ "com.jcraft:jsch",
+ "commons-logging:commons-logging",
+ "commons-codec:commons-codec",
+ "com.googlecode.javaewah:JavaEWAH",
+ "org.slf4j:slf4j-api",
+ "com.google.common.html.types:types",
+ "org.apache.httpcomponents:httpclient"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/eclipse/jgit/org.eclipse.jgit/4.4.1.201607150455-r/org.eclipse.jgit-4.4.1.201607150455-r.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/org/checkerframework/checker-qual/2.10.0/checker-qual-2.10.0.jar",
- "https://maven.google.com/org/checkerframework/checker-qual/2.10.0/checker-qual-2.10.0.jar",
- "https://repo1.maven.org/maven2/org/checkerframework/checker-qual/2.10.0/checker-qual-2.10.0.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/org/checkerframework/checker-qual/2.10.0/checker-qual-2.10.0.jar"
+ "https://jcenter.bintray.com/org/eclipse/jgit/org.eclipse.jgit/4.4.1.201607150455-r/org.eclipse.jgit-4.4.1.201607150455-r.jar",
+ "https://maven.google.com/org/eclipse/jgit/org.eclipse.jgit/4.4.1.201607150455-r/org.eclipse.jgit-4.4.1.201607150455-r.jar",
+ "https://repo1.maven.org/maven2/org/eclipse/jgit/org.eclipse.jgit/4.4.1.201607150455-r/org.eclipse.jgit-4.4.1.201607150455-r.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/eclipse/jgit/org.eclipse.jgit/4.4.1.201607150455-r/org.eclipse.jgit-4.4.1.201607150455-r.jar"
],
- "sha256": "d261fde25d590f6b69db7721d469ac1b0a19a17ccaaaa751c31f0d8b8260b894",
- "url": "https://jcenter.bintray.com/org/checkerframework/checker-qual/2.10.0/checker-qual-2.10.0.jar"
+ "sha256": "0b2447b324e86351e35e08e091436194a846d469d79e97644398533c73d01fe0",
+ "url": "https://jcenter.bintray.com/org/eclipse/jgit/org.eclipse.jgit/4.4.1.201607150455-r/org.eclipse.jgit-4.4.1.201607150455-r.jar"
},
{
- "coord": "org.eclipse.jgit:org.eclipse.jgit:4.4.1.201607150455-r",
+ "coord": "org.eclipse.jgit:org.eclipse.jgit:jar:sources:4.4.1.201607150455-r",
"dependencies": [],
"directDependencies": [],
"exclusions": [
+ "com.google.template:soy",
"com.jcraft:jsch",
"commons-logging:commons-logging",
"commons-codec:commons-codec",
"com.googlecode.javaewah:JavaEWAH",
"org.slf4j:slf4j-api",
+ "com.google.common.html.types:types",
"org.apache.httpcomponents:httpclient"
],
- "file": "v1/https/jcenter.bintray.com/org/eclipse/jgit/org.eclipse.jgit/4.4.1.201607150455-r/org.eclipse.jgit-4.4.1.201607150455-r.jar",
+ "file": "v1/https/jcenter.bintray.com/org/eclipse/jgit/org.eclipse.jgit/4.4.1.201607150455-r/org.eclipse.jgit-4.4.1.201607150455-r-sources.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/org/eclipse/jgit/org.eclipse.jgit/4.4.1.201607150455-r/org.eclipse.jgit-4.4.1.201607150455-r.jar",
- "https://maven.google.com/org/eclipse/jgit/org.eclipse.jgit/4.4.1.201607150455-r/org.eclipse.jgit-4.4.1.201607150455-r.jar",
- "https://repo1.maven.org/maven2/org/eclipse/jgit/org.eclipse.jgit/4.4.1.201607150455-r/org.eclipse.jgit-4.4.1.201607150455-r.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/org/eclipse/jgit/org.eclipse.jgit/4.4.1.201607150455-r/org.eclipse.jgit-4.4.1.201607150455-r.jar"
+ "https://jcenter.bintray.com/org/eclipse/jgit/org.eclipse.jgit/4.4.1.201607150455-r/org.eclipse.jgit-4.4.1.201607150455-r-sources.jar",
+ "https://maven.google.com/org/eclipse/jgit/org.eclipse.jgit/4.4.1.201607150455-r/org.eclipse.jgit-4.4.1.201607150455-r-sources.jar",
+ "https://repo1.maven.org/maven2/org/eclipse/jgit/org.eclipse.jgit/4.4.1.201607150455-r/org.eclipse.jgit-4.4.1.201607150455-r-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/eclipse/jgit/org.eclipse.jgit/4.4.1.201607150455-r/org.eclipse.jgit-4.4.1.201607150455-r-sources.jar"
],
- "sha256": "0b2447b324e86351e35e08e091436194a846d469d79e97644398533c73d01fe0",
- "url": "https://jcenter.bintray.com/org/eclipse/jgit/org.eclipse.jgit/4.4.1.201607150455-r/org.eclipse.jgit-4.4.1.201607150455-r.jar"
+ "sha256": "c9ad79998548090d580bf8f659d7e6cbdc54676a7f3174a9f819cdede5e5eb34",
+ "url": "https://jcenter.bintray.com/org/eclipse/jgit/org.eclipse.jgit/4.4.1.201607150455-r/org.eclipse.jgit-4.4.1.201607150455-r-sources.jar"
},
{
"coord": "org.jetbrains.kotlin:kotlin-reflect:1.3.20",
@@ -2354,6 +6151,10 @@
"directDependencies": [
"org.jetbrains.kotlin:kotlin-stdlib:1.3.20"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.3.20/kotlin-reflect-1.3.20.jar",
"mirror_urls": [
"https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.3.20/kotlin-reflect-1.3.20.jar",
@@ -2364,10 +6165,38 @@
"sha256": "ee1a926ed658e7de0e6df0242cd574b3b4e08e64fe7a68278226c6f2d3373238",
"url": "https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.3.20/kotlin-reflect-1.3.20.jar"
},
+ {
+ "coord": "org.jetbrains.kotlin:kotlin-reflect:jar:sources:1.3.20",
+ "dependencies": [
+ "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.3.20",
+ "org.jetbrains:annotations:jar:sources:13.0",
+ "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.3.20"
+ ],
+ "directDependencies": [
+ "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.3.20"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.3.20/kotlin-reflect-1.3.20-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.3.20/kotlin-reflect-1.3.20-sources.jar",
+ "https://maven.google.com/org/jetbrains/kotlin/kotlin-reflect/1.3.20/kotlin-reflect-1.3.20-sources.jar",
+ "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.3.20/kotlin-reflect-1.3.20-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/jetbrains/kotlin/kotlin-reflect/1.3.20/kotlin-reflect-1.3.20-sources.jar"
+ ],
+ "sha256": "28a8746fe08afde8e0ac2c561359c99f07b6d1aa4471266ecce1a28538447156",
+ "url": "https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.3.20/kotlin-reflect-1.3.20-sources.jar"
+ },
{
"coord": "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.20",
"dependencies": [],
"directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.20/kotlin-stdlib-common-1.3.20.jar",
"mirror_urls": [
"https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.20/kotlin-stdlib-common-1.3.20.jar",
@@ -2378,6 +6207,24 @@
"sha256": "06bdd8aeda347ef6ef3e4e9d88a01254ccdb70784b697495f6a421fd663ab649",
"url": "https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.20/kotlin-stdlib-common-1.3.20.jar"
},
+ {
+ "coord": "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.3.20",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.20/kotlin-stdlib-common-1.3.20-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.20/kotlin-stdlib-common-1.3.20-sources.jar",
+ "https://maven.google.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.20/kotlin-stdlib-common-1.3.20-sources.jar",
+ "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.20/kotlin-stdlib-common-1.3.20-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.20/kotlin-stdlib-common-1.3.20-sources.jar"
+ ],
+ "sha256": "186e6977750701be15fd16a92b9a349f1af90dc9ae80d566bb384f9e2326d78b",
+ "url": "https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.20/kotlin-stdlib-common-1.3.20-sources.jar"
+ },
{
"coord": "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.20",
"dependencies": [
@@ -2388,6 +6235,10 @@
"directDependencies": [
"org.jetbrains.kotlin:kotlin-stdlib:1.3.20"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.20/kotlin-stdlib-jdk7-1.3.20.jar",
"mirror_urls": [
"https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.20/kotlin-stdlib-jdk7-1.3.20.jar",
@@ -2398,6 +6249,30 @@
"sha256": "fd2af70bdd2bc024fb03cbed633ca143872ca36a6a16e218cc67c890b79fb31d",
"url": "https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.20/kotlin-stdlib-jdk7-1.3.20.jar"
},
+ {
+ "coord": "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:sources:1.3.20",
+ "dependencies": [
+ "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.3.20",
+ "org.jetbrains:annotations:jar:sources:13.0",
+ "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.3.20"
+ ],
+ "directDependencies": [
+ "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.3.20"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.20/kotlin-stdlib-jdk7-1.3.20-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.20/kotlin-stdlib-jdk7-1.3.20-sources.jar",
+ "https://maven.google.com/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.20/kotlin-stdlib-jdk7-1.3.20-sources.jar",
+ "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.20/kotlin-stdlib-jdk7-1.3.20-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.20/kotlin-stdlib-jdk7-1.3.20-sources.jar"
+ ],
+ "sha256": "e9c6f98f583b93dbc16124b7e603f30d2df640d093efa08c3bc770c8d6efc2d4",
+ "url": "https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.20/kotlin-stdlib-jdk7-1.3.20-sources.jar"
+ },
{
"coord": "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.20",
"dependencies": [
@@ -2410,6 +6285,10 @@
"org.jetbrains.kotlin:kotlin-stdlib:1.3.20",
"org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.20"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.20/kotlin-stdlib-jdk8-1.3.20.jar",
"mirror_urls": [
"https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.20/kotlin-stdlib-jdk8-1.3.20.jar",
@@ -2420,6 +6299,32 @@
"sha256": "6c0831e7e3acaa390bf22f79d81f32f212dc8fde19807a354a4ee4f668a0c478",
"url": "https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.20/kotlin-stdlib-jdk8-1.3.20.jar"
},
+ {
+ "coord": "org.jetbrains.kotlin:kotlin-stdlib-jdk8:jar:sources:1.3.20",
+ "dependencies": [
+ "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.3.20",
+ "org.jetbrains:annotations:jar:sources:13.0",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:sources:1.3.20",
+ "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.3.20"
+ ],
+ "directDependencies": [
+ "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.3.20",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:sources:1.3.20"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.20/kotlin-stdlib-jdk8-1.3.20-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.20/kotlin-stdlib-jdk8-1.3.20-sources.jar",
+ "https://maven.google.com/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.20/kotlin-stdlib-jdk8-1.3.20-sources.jar",
+ "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.20/kotlin-stdlib-jdk8-1.3.20-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.20/kotlin-stdlib-jdk8-1.3.20-sources.jar"
+ ],
+ "sha256": "26ce0a837aaa2f0e42a5837b9c4d4f5f51cb1ab56575c35fce20853a3244dbd4",
+ "url": "https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.20/kotlin-stdlib-jdk8-1.3.20-sources.jar"
+ },
{
"coord": "org.jetbrains.kotlin:kotlin-stdlib:1.3.20",
"dependencies": [
@@ -2430,6 +6335,10 @@
"org.jetbrains:annotations:13.0",
"org.jetbrains.kotlin:kotlin-stdlib-common:1.3.20"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.20/kotlin-stdlib-1.3.20.jar",
"mirror_urls": [
"https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.20/kotlin-stdlib-1.3.20.jar",
@@ -2440,6 +6349,30 @@
"sha256": "601f910da968fb3da8ead7b64ed6bf5c9710d83cea37e4a631847e7d688e3361",
"url": "https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.20/kotlin-stdlib-1.3.20.jar"
},
+ {
+ "coord": "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.3.20",
+ "dependencies": [
+ "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.3.20",
+ "org.jetbrains:annotations:jar:sources:13.0"
+ ],
+ "directDependencies": [
+ "org.jetbrains:annotations:jar:sources:13.0",
+ "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.3.20"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.20/kotlin-stdlib-1.3.20-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.20/kotlin-stdlib-1.3.20-sources.jar",
+ "https://maven.google.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.20/kotlin-stdlib-1.3.20-sources.jar",
+ "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.20/kotlin-stdlib-1.3.20-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/jetbrains/kotlin/kotlin-stdlib/1.3.20/kotlin-stdlib-1.3.20-sources.jar"
+ ],
+ "sha256": "49170a707d6143938d20efdeed9cabb8bc82eef6267f0c19974f098357fcb2dd",
+ "url": "https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.20/kotlin-stdlib-1.3.20-sources.jar"
+ },
{
"coord": "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:1.1.0",
"dependencies": [
@@ -2448,6 +6381,10 @@
"directDependencies": [
"org.jetbrains.kotlin:kotlin-stdlib-common:1.3.20"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/org/jetbrains/kotlinx/kotlinx-coroutines-core-common/1.1.0/kotlinx-coroutines-core-common-1.1.0.jar",
"mirror_urls": [
"https://jcenter.bintray.com/org/jetbrains/kotlinx/kotlinx-coroutines-core-common/1.1.0/kotlinx-coroutines-core-common-1.1.0.jar",
@@ -2458,6 +6395,28 @@
"sha256": "07ba070fc23238b2d075174abe354f6f168a060d1b489a9d91e5503d05c9cd7f",
"url": "https://jcenter.bintray.com/org/jetbrains/kotlinx/kotlinx-coroutines-core-common/1.1.0/kotlinx-coroutines-core-common-1.1.0.jar"
},
+ {
+ "coord": "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:jar:sources:1.1.0",
+ "dependencies": [
+ "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.3.20"
+ ],
+ "directDependencies": [
+ "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.3.20"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/jetbrains/kotlinx/kotlinx-coroutines-core-common/1.1.0/kotlinx-coroutines-core-common-1.1.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/jetbrains/kotlinx/kotlinx-coroutines-core-common/1.1.0/kotlinx-coroutines-core-common-1.1.0-sources.jar",
+ "https://maven.google.com/org/jetbrains/kotlinx/kotlinx-coroutines-core-common/1.1.0/kotlinx-coroutines-core-common-1.1.0-sources.jar",
+ "https://repo1.maven.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-core-common/1.1.0/kotlinx-coroutines-core-common-1.1.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/jetbrains/kotlinx/kotlinx-coroutines-core-common/1.1.0/kotlinx-coroutines-core-common-1.1.0-sources.jar"
+ ],
+ "sha256": "3ecad04bf00c5e6ae195bd96e6cf298bea152d2d1757307ee633d861aa60d50b",
+ "url": "https://jcenter.bintray.com/org/jetbrains/kotlinx/kotlinx-coroutines-core-common/1.1.0/kotlinx-coroutines-core-common-1.1.0-sources.jar"
+ },
{
"coord": "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.0",
"dependencies": [
@@ -2470,6 +6429,10 @@
"org.jetbrains.kotlin:kotlin-stdlib:1.3.20",
"org.jetbrains.kotlinx:kotlinx-coroutines-core-common:1.1.0"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/org/jetbrains/kotlinx/kotlinx-coroutines-core/1.1.0/kotlinx-coroutines-core-1.1.0.jar",
"mirror_urls": [
"https://jcenter.bintray.com/org/jetbrains/kotlinx/kotlinx-coroutines-core/1.1.0/kotlinx-coroutines-core-1.1.0.jar",
@@ -2480,10 +6443,40 @@
"sha256": "020861ae1d5479c1cb1439a56be7d384401c58fddf53b91011fbf5959a318ba3",
"url": "https://jcenter.bintray.com/org/jetbrains/kotlinx/kotlinx-coroutines-core/1.1.0/kotlinx-coroutines-core-1.1.0.jar"
},
+ {
+ "coord": "org.jetbrains.kotlinx:kotlinx-coroutines-core:jar:sources:1.1.0",
+ "dependencies": [
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:jar:sources:1.1.0",
+ "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.3.20",
+ "org.jetbrains:annotations:jar:sources:13.0",
+ "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.3.20"
+ ],
+ "directDependencies": [
+ "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.3.20",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:jar:sources:1.1.0"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/jetbrains/kotlinx/kotlinx-coroutines-core/1.1.0/kotlinx-coroutines-core-1.1.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/jetbrains/kotlinx/kotlinx-coroutines-core/1.1.0/kotlinx-coroutines-core-1.1.0-sources.jar",
+ "https://maven.google.com/org/jetbrains/kotlinx/kotlinx-coroutines-core/1.1.0/kotlinx-coroutines-core-1.1.0-sources.jar",
+ "https://repo1.maven.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-core/1.1.0/kotlinx-coroutines-core-1.1.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/jetbrains/kotlinx/kotlinx-coroutines-core/1.1.0/kotlinx-coroutines-core-1.1.0-sources.jar"
+ ],
+ "sha256": "4baf9cd142173b3c93c311a37d9561f859d72c862c4667a03fbfd2e65046fe52",
+ "url": "https://jcenter.bintray.com/org/jetbrains/kotlinx/kotlinx-coroutines-core/1.1.0/kotlinx-coroutines-core-1.1.0-sources.jar"
+ },
{
"coord": "org.jetbrains:annotations:13.0",
"dependencies": [],
"directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/org/jetbrains/annotations/13.0/annotations-13.0.jar",
"mirror_urls": [
"https://jcenter.bintray.com/org/jetbrains/annotations/13.0/annotations-13.0.jar",
@@ -2495,18 +6488,22 @@
"url": "https://jcenter.bintray.com/org/jetbrains/annotations/13.0/annotations-13.0.jar"
},
{
- "coord": "org.json:json:20160212",
+ "coord": "org.jetbrains:annotations:jar:sources:13.0",
"dependencies": [],
"directDependencies": [],
- "file": "v1/https/jcenter.bintray.com/org/json/json/20160212/json-20160212.jar",
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/jetbrains/annotations/13.0/annotations-13.0-sources.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/org/json/json/20160212/json-20160212.jar",
- "https://maven.google.com/org/json/json/20160212/json-20160212.jar",
- "https://repo1.maven.org/maven2/org/json/json/20160212/json-20160212.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/org/json/json/20160212/json-20160212.jar"
+ "https://jcenter.bintray.com/org/jetbrains/annotations/13.0/annotations-13.0-sources.jar",
+ "https://maven.google.com/org/jetbrains/annotations/13.0/annotations-13.0-sources.jar",
+ "https://repo1.maven.org/maven2/org/jetbrains/annotations/13.0/annotations-13.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/jetbrains/annotations/13.0/annotations-13.0-sources.jar"
],
- "sha256": "0aaf0e7e286ece88fb60b9ba14dd45c05a48e55618876efb7d1b6f19c25e7a29",
- "url": "https://jcenter.bintray.com/org/json/json/20160212/json-20160212.jar"
+ "sha256": "42a5e144b8e81d50d6913d1007b695e62e614705268d8cf9f13dbdc478c2c68e",
+ "url": "https://jcenter.bintray.com/org/jetbrains/annotations/13.0/annotations-13.0-sources.jar"
},
{
"coord": "org.junit.platform:junit-platform-commons:1.3.2",
@@ -2516,6 +6513,10 @@
"directDependencies": [
"org.apiguardian:apiguardian-api:1.0.0"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/org/junit/platform/junit-platform-commons/1.3.2/junit-platform-commons-1.3.2.jar",
"mirror_urls": [
"https://jcenter.bintray.com/org/junit/platform/junit-platform-commons/1.3.2/junit-platform-commons-1.3.2.jar",
@@ -2526,6 +6527,28 @@
"sha256": "34e2a20df030c377741f8dcdb2e94c82d3af3d554ac3d5e6c8053a320b4ae51a",
"url": "https://jcenter.bintray.com/org/junit/platform/junit-platform-commons/1.3.2/junit-platform-commons-1.3.2.jar"
},
+ {
+ "coord": "org.junit.platform:junit-platform-commons:jar:sources:1.3.2",
+ "dependencies": [
+ "org.apiguardian:apiguardian-api:jar:sources:1.0.0"
+ ],
+ "directDependencies": [
+ "org.apiguardian:apiguardian-api:jar:sources:1.0.0"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/junit/platform/junit-platform-commons/1.3.2/junit-platform-commons-1.3.2-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/junit/platform/junit-platform-commons/1.3.2/junit-platform-commons-1.3.2-sources.jar",
+ "https://maven.google.com/org/junit/platform/junit-platform-commons/1.3.2/junit-platform-commons-1.3.2-sources.jar",
+ "https://repo1.maven.org/maven2/org/junit/platform/junit-platform-commons/1.3.2/junit-platform-commons-1.3.2-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/junit/platform/junit-platform-commons/1.3.2/junit-platform-commons-1.3.2-sources.jar"
+ ],
+ "sha256": "736ac52545d849319d69ea066e2ca09410230e3ddf94a37dc8ffa870b4c8fbd0",
+ "url": "https://jcenter.bintray.com/org/junit/platform/junit-platform-commons/1.3.2/junit-platform-commons-1.3.2-sources.jar"
+ },
{
"coord": "org.junit.platform:junit-platform-engine:1.3.2",
"dependencies": [
@@ -2538,6 +6561,10 @@
"org.junit.platform:junit-platform-commons:1.3.2",
"org.opentest4j:opentest4j:1.1.1"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/org/junit/platform/junit-platform-engine/1.3.2/junit-platform-engine-1.3.2.jar",
"mirror_urls": [
"https://jcenter.bintray.com/org/junit/platform/junit-platform-engine/1.3.2/junit-platform-engine-1.3.2.jar",
@@ -2548,6 +6575,32 @@
"sha256": "0d7575d6f7a589c19ddad90d44325f24ee6f2254765f728bc9cbb9428a294e85",
"url": "https://jcenter.bintray.com/org/junit/platform/junit-platform-engine/1.3.2/junit-platform-engine-1.3.2.jar"
},
+ {
+ "coord": "org.junit.platform:junit-platform-engine:jar:sources:1.3.2",
+ "dependencies": [
+ "org.apiguardian:apiguardian-api:jar:sources:1.0.0",
+ "org.opentest4j:opentest4j:jar:sources:1.1.1",
+ "org.junit.platform:junit-platform-commons:jar:sources:1.3.2"
+ ],
+ "directDependencies": [
+ "org.apiguardian:apiguardian-api:jar:sources:1.0.0",
+ "org.junit.platform:junit-platform-commons:jar:sources:1.3.2",
+ "org.opentest4j:opentest4j:jar:sources:1.1.1"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/junit/platform/junit-platform-engine/1.3.2/junit-platform-engine-1.3.2-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/junit/platform/junit-platform-engine/1.3.2/junit-platform-engine-1.3.2-sources.jar",
+ "https://maven.google.com/org/junit/platform/junit-platform-engine/1.3.2/junit-platform-engine-1.3.2-sources.jar",
+ "https://repo1.maven.org/maven2/org/junit/platform/junit-platform-engine/1.3.2/junit-platform-engine-1.3.2-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/junit/platform/junit-platform-engine/1.3.2/junit-platform-engine-1.3.2-sources.jar"
+ ],
+ "sha256": "b8e90692714987b429dfe5a637302394095daca88fec6d76a81c4156e045baa6",
+ "url": "https://jcenter.bintray.com/org/junit/platform/junit-platform-engine/1.3.2/junit-platform-engine-1.3.2-sources.jar"
+ },
{
"coord": "org.junit.platform:junit-platform-launcher:1.3.2",
"dependencies": [
@@ -2560,6 +6613,10 @@
"org.apiguardian:apiguardian-api:1.0.0",
"org.junit.platform:junit-platform-engine:1.3.2"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/org/junit/platform/junit-platform-launcher/1.3.2/junit-platform-launcher-1.3.2.jar",
"mirror_urls": [
"https://jcenter.bintray.com/org/junit/platform/junit-platform-launcher/1.3.2/junit-platform-launcher-1.3.2.jar",
@@ -2570,6 +6627,32 @@
"sha256": "797a863f256602ca349b8e70f9ff2460e20aafbd57b75627f5ac82beb927085a",
"url": "https://jcenter.bintray.com/org/junit/platform/junit-platform-launcher/1.3.2/junit-platform-launcher-1.3.2.jar"
},
+ {
+ "coord": "org.junit.platform:junit-platform-launcher:jar:sources:1.3.2",
+ "dependencies": [
+ "org.junit.platform:junit-platform-engine:jar:sources:1.3.2",
+ "org.apiguardian:apiguardian-api:jar:sources:1.0.0",
+ "org.opentest4j:opentest4j:jar:sources:1.1.1",
+ "org.junit.platform:junit-platform-commons:jar:sources:1.3.2"
+ ],
+ "directDependencies": [
+ "org.apiguardian:apiguardian-api:jar:sources:1.0.0",
+ "org.junit.platform:junit-platform-engine:jar:sources:1.3.2"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/junit/platform/junit-platform-launcher/1.3.2/junit-platform-launcher-1.3.2-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/junit/platform/junit-platform-launcher/1.3.2/junit-platform-launcher-1.3.2-sources.jar",
+ "https://maven.google.com/org/junit/platform/junit-platform-launcher/1.3.2/junit-platform-launcher-1.3.2-sources.jar",
+ "https://repo1.maven.org/maven2/org/junit/platform/junit-platform-launcher/1.3.2/junit-platform-launcher-1.3.2-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/junit/platform/junit-platform-launcher/1.3.2/junit-platform-launcher-1.3.2-sources.jar"
+ ],
+ "sha256": "a139dc2ac08ef7640664f941b85b4bae00c4ce91072786c4fa8de922e5c482ea",
+ "url": "https://jcenter.bintray.com/org/junit/platform/junit-platform-launcher/1.3.2/junit-platform-launcher-1.3.2-sources.jar"
+ },
{
"coord": "org.junit.platform:junit-platform-suite-api:1.3.2",
"dependencies": [
@@ -2580,6 +6663,10 @@
"org.apiguardian:apiguardian-api:1.0.0",
"org.junit.platform:junit-platform-commons:1.3.2"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/org/junit/platform/junit-platform-suite-api/1.3.2/junit-platform-suite-api-1.3.2.jar",
"mirror_urls": [
"https://jcenter.bintray.com/org/junit/platform/junit-platform-suite-api/1.3.2/junit-platform-suite-api-1.3.2.jar",
@@ -2591,104 +6678,73 @@
"url": "https://jcenter.bintray.com/org/junit/platform/junit-platform-suite-api/1.3.2/junit-platform-suite-api-1.3.2.jar"
},
{
- "coord": "org.opentest4j:opentest4j:1.1.1",
- "dependencies": [],
- "directDependencies": [],
- "file": "v1/https/jcenter.bintray.com/org/opentest4j/opentest4j/1.1.1/opentest4j-1.1.1.jar",
- "mirror_urls": [
- "https://jcenter.bintray.com/org/opentest4j/opentest4j/1.1.1/opentest4j-1.1.1.jar",
- "https://maven.google.com/org/opentest4j/opentest4j/1.1.1/opentest4j-1.1.1.jar",
- "https://repo1.maven.org/maven2/org/opentest4j/opentest4j/1.1.1/opentest4j-1.1.1.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/org/opentest4j/opentest4j/1.1.1/opentest4j-1.1.1.jar"
- ],
- "sha256": "f106351abd941110226745ed103c85863b3f04e9fa82ddea1084639ae0c5336c",
- "url": "https://jcenter.bintray.com/org/opentest4j/opentest4j/1.1.1/opentest4j-1.1.1.jar"
- },
- {
- "coord": "org.ow2.asm:asm-analysis:7.0",
+ "coord": "org.junit.platform:junit-platform-suite-api:jar:sources:1.3.2",
"dependencies": [
- "org.ow2.asm:asm-tree:7.0",
- "org.ow2.asm:asm:7.0"
+ "org.apiguardian:apiguardian-api:jar:sources:1.0.0",
+ "org.junit.platform:junit-platform-commons:jar:sources:1.3.2"
],
"directDependencies": [
- "org.ow2.asm:asm-tree:7.0"
- ],
- "file": "v1/https/jcenter.bintray.com/org/ow2/asm/asm-analysis/7.0/asm-analysis-7.0.jar",
- "mirror_urls": [
- "https://jcenter.bintray.com/org/ow2/asm/asm-analysis/7.0/asm-analysis-7.0.jar",
- "https://maven.google.com/org/ow2/asm/asm-analysis/7.0/asm-analysis-7.0.jar",
- "https://repo1.maven.org/maven2/org/ow2/asm/asm-analysis/7.0/asm-analysis-7.0.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/org/ow2/asm/asm-analysis/7.0/asm-analysis-7.0.jar"
- ],
- "sha256": "e981f8f650c4d900bb033650b18e122fa6b161eadd5f88978d08751f72ee8474",
- "url": "https://jcenter.bintray.com/org/ow2/asm/asm-analysis/7.0/asm-analysis-7.0.jar"
- },
- {
- "coord": "org.ow2.asm:asm-commons:7.0",
- "dependencies": [
- "org.ow2.asm:asm-analysis:7.0",
- "org.ow2.asm:asm-tree:7.0",
- "org.ow2.asm:asm:7.0"
+ "org.apiguardian:apiguardian-api:jar:sources:1.0.0",
+ "org.junit.platform:junit-platform-commons:jar:sources:1.3.2"
],
- "directDependencies": [
- "org.ow2.asm:asm:7.0",
- "org.ow2.asm:asm-analysis:7.0",
- "org.ow2.asm:asm-tree:7.0"
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
],
- "file": "v1/https/jcenter.bintray.com/org/ow2/asm/asm-commons/7.0/asm-commons-7.0.jar",
+ "file": "v1/https/jcenter.bintray.com/org/junit/platform/junit-platform-suite-api/1.3.2/junit-platform-suite-api-1.3.2-sources.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/org/ow2/asm/asm-commons/7.0/asm-commons-7.0.jar",
- "https://maven.google.com/org/ow2/asm/asm-commons/7.0/asm-commons-7.0.jar",
- "https://repo1.maven.org/maven2/org/ow2/asm/asm-commons/7.0/asm-commons-7.0.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/org/ow2/asm/asm-commons/7.0/asm-commons-7.0.jar"
+ "https://jcenter.bintray.com/org/junit/platform/junit-platform-suite-api/1.3.2/junit-platform-suite-api-1.3.2-sources.jar",
+ "https://maven.google.com/org/junit/platform/junit-platform-suite-api/1.3.2/junit-platform-suite-api-1.3.2-sources.jar",
+ "https://repo1.maven.org/maven2/org/junit/platform/junit-platform-suite-api/1.3.2/junit-platform-suite-api-1.3.2-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/junit/platform/junit-platform-suite-api/1.3.2/junit-platform-suite-api-1.3.2-sources.jar"
],
- "sha256": "fed348ef05958e3e846a3ac074a12af5f7936ef3d21ce44a62c4fa08a771927d",
- "url": "https://jcenter.bintray.com/org/ow2/asm/asm-commons/7.0/asm-commons-7.0.jar"
+ "sha256": "c87f72b7d107fb1a170cbc696888e46d29602ad1a690134017e7dcaf087a8af6",
+ "url": "https://jcenter.bintray.com/org/junit/platform/junit-platform-suite-api/1.3.2/junit-platform-suite-api-1.3.2-sources.jar"
},
{
- "coord": "org.ow2.asm:asm-tree:7.0",
- "dependencies": [
- "org.ow2.asm:asm:7.0"
- ],
- "directDependencies": [
- "org.ow2.asm:asm:7.0"
+ "coord": "org.opentest4j:opentest4j:1.1.1",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
],
- "file": "v1/https/jcenter.bintray.com/org/ow2/asm/asm-tree/7.0/asm-tree-7.0.jar",
+ "file": "v1/https/jcenter.bintray.com/org/opentest4j/opentest4j/1.1.1/opentest4j-1.1.1.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/org/ow2/asm/asm-tree/7.0/asm-tree-7.0.jar",
- "https://maven.google.com/org/ow2/asm/asm-tree/7.0/asm-tree-7.0.jar",
- "https://repo1.maven.org/maven2/org/ow2/asm/asm-tree/7.0/asm-tree-7.0.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/org/ow2/asm/asm-tree/7.0/asm-tree-7.0.jar"
+ "https://jcenter.bintray.com/org/opentest4j/opentest4j/1.1.1/opentest4j-1.1.1.jar",
+ "https://maven.google.com/org/opentest4j/opentest4j/1.1.1/opentest4j-1.1.1.jar",
+ "https://repo1.maven.org/maven2/org/opentest4j/opentest4j/1.1.1/opentest4j-1.1.1.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/opentest4j/opentest4j/1.1.1/opentest4j-1.1.1.jar"
],
- "sha256": "cfd7a0874f9de36a999c127feeadfbfe6e04d4a71ee954d7af3d853f0be48a6c",
- "url": "https://jcenter.bintray.com/org/ow2/asm/asm-tree/7.0/asm-tree-7.0.jar"
+ "sha256": "f106351abd941110226745ed103c85863b3f04e9fa82ddea1084639ae0c5336c",
+ "url": "https://jcenter.bintray.com/org/opentest4j/opentest4j/1.1.1/opentest4j-1.1.1.jar"
},
{
- "coord": "org.ow2.asm:asm-util:7.0",
- "dependencies": [
- "org.ow2.asm:asm-analysis:7.0",
- "org.ow2.asm:asm-tree:7.0",
- "org.ow2.asm:asm:7.0"
- ],
- "directDependencies": [
- "org.ow2.asm:asm:7.0",
- "org.ow2.asm:asm-analysis:7.0",
- "org.ow2.asm:asm-tree:7.0"
+ "coord": "org.opentest4j:opentest4j:jar:sources:1.1.1",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
],
- "file": "v1/https/jcenter.bintray.com/org/ow2/asm/asm-util/7.0/asm-util-7.0.jar",
+ "file": "v1/https/jcenter.bintray.com/org/opentest4j/opentest4j/1.1.1/opentest4j-1.1.1-sources.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/org/ow2/asm/asm-util/7.0/asm-util-7.0.jar",
- "https://maven.google.com/org/ow2/asm/asm-util/7.0/asm-util-7.0.jar",
- "https://repo1.maven.org/maven2/org/ow2/asm/asm-util/7.0/asm-util-7.0.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/org/ow2/asm/asm-util/7.0/asm-util-7.0.jar"
+ "https://jcenter.bintray.com/org/opentest4j/opentest4j/1.1.1/opentest4j-1.1.1-sources.jar",
+ "https://maven.google.com/org/opentest4j/opentest4j/1.1.1/opentest4j-1.1.1-sources.jar",
+ "https://repo1.maven.org/maven2/org/opentest4j/opentest4j/1.1.1/opentest4j-1.1.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/opentest4j/opentest4j/1.1.1/opentest4j-1.1.1-sources.jar"
],
- "sha256": "75fbbca440ef463f41c2b0ab1a80abe67e910ac486da60a7863cbcb5bae7e145",
- "url": "https://jcenter.bintray.com/org/ow2/asm/asm-util/7.0/asm-util-7.0.jar"
+ "sha256": "4808ddcb3a88de1210bef0a9c49645a36a61edeac65545f1560a6ad8081e8dd4",
+ "url": "https://jcenter.bintray.com/org/opentest4j/opentest4j/1.1.1/opentest4j-1.1.1-sources.jar"
},
{
"coord": "org.ow2.asm:asm:7.0",
"dependencies": [],
"directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/org/ow2/asm/asm/7.0/asm-7.0.jar",
"mirror_urls": [
"https://jcenter.bintray.com/org/ow2/asm/asm/7.0/asm-7.0.jar",
@@ -2699,10 +6755,32 @@
"sha256": "b88ef66468b3c978ad0c97fd6e90979e56155b4ac69089ba7a44e9aa7ffe9acf",
"url": "https://jcenter.bintray.com/org/ow2/asm/asm/7.0/asm-7.0.jar"
},
+ {
+ "coord": "org.ow2.asm:asm:jar:sources:7.0",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/ow2/asm/asm/7.0/asm-7.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/ow2/asm/asm/7.0/asm-7.0-sources.jar",
+ "https://maven.google.com/org/ow2/asm/asm/7.0/asm-7.0-sources.jar",
+ "https://repo1.maven.org/maven2/org/ow2/asm/asm/7.0/asm-7.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/ow2/asm/asm/7.0/asm-7.0-sources.jar"
+ ],
+ "sha256": "51a538468a788fa543e80e6bccbe05d2a738fa0da553b710a1fd8ed574504982",
+ "url": "https://jcenter.bintray.com/org/ow2/asm/asm/7.0/asm-7.0-sources.jar"
+ },
{
"coord": "org.reactivestreams:reactive-streams:1.0.3",
"dependencies": [],
"directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar",
"mirror_urls": [
"https://jcenter.bintray.com/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar",
@@ -2713,10 +6791,32 @@
"sha256": "1dee0481072d19c929b623e155e14d2f6085dc011529a0a0dbefc84cf571d865",
"url": "https://jcenter.bintray.com/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar"
},
+ {
+ "coord": "org.reactivestreams:reactive-streams:jar:sources:1.0.3",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3-sources.jar",
+ "https://maven.google.com/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3-sources.jar",
+ "https://repo1.maven.org/maven2/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3-sources.jar"
+ ],
+ "sha256": "d5b4070a22c9b1ca5b9b5aa668466bcca391dbe5d5fe8311c300765c1621feba",
+ "url": "https://jcenter.bintray.com/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3-sources.jar"
+ },
{
"coord": "org.seleniumhq.selenium:selenium-api:3.141.59",
"dependencies": [],
"directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/org/seleniumhq/selenium/selenium-api/3.141.59/selenium-api-3.141.59.jar",
"mirror_urls": [
"https://jcenter.bintray.com/org/seleniumhq/selenium/selenium-api/3.141.59/selenium-api-3.141.59.jar",
@@ -2727,30 +6827,53 @@
"sha256": "8bfd5a736eccfc08866301ffc9b7f529e55976355c5799bed8392486df64dee5",
"url": "https://jcenter.bintray.com/org/seleniumhq/selenium/selenium-api/3.141.59/selenium-api-3.141.59.jar"
},
+ {
+ "coord": "org.seleniumhq.selenium:selenium-api:jar:sources:3.141.59",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/seleniumhq/selenium/selenium-api/3.141.59/selenium-api-3.141.59-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/seleniumhq/selenium/selenium-api/3.141.59/selenium-api-3.141.59-sources.jar",
+ "https://maven.google.com/org/seleniumhq/selenium/selenium-api/3.141.59/selenium-api-3.141.59-sources.jar",
+ "https://repo1.maven.org/maven2/org/seleniumhq/selenium/selenium-api/3.141.59/selenium-api-3.141.59-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/seleniumhq/selenium/selenium-api/3.141.59/selenium-api-3.141.59-sources.jar"
+ ],
+ "sha256": "91e6c542fbb9b78082a149c8fb012dd439a18b36e69ff25d12279a0392d4c541",
+ "url": "https://jcenter.bintray.com/org/seleniumhq/selenium/selenium-api/3.141.59/selenium-api-3.141.59-sources.jar"
+ },
{
"coord": "org.seleniumhq.selenium:selenium-remote-driver:3.141.59",
"dependencies": [
"com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
+ "com.google.guava:guava:28.1-android",
"com.squareup.okio:okio:1.14.0",
+ "org.codehaus.mojo:animal-sniffer-annotations:1.18",
"com.google.j2objc:j2objc-annotations:1.3",
+ "com.google.errorprone:error_prone_annotations:2.3.3",
"com.google.code.findbugs:jsr305:3.0.2",
"org.seleniumhq.selenium:selenium-api:3.141.59",
- "com.google.errorprone:error_prone_annotations:2.3.4",
- "com.google.guava:guava:28.2-jre",
- "org.checkerframework:checker-qual:2.10.0",
"com.squareup.okhttp3:okhttp:3.11.0",
"com.google.guava:failureaccess:1.0.1",
"net.bytebuddy:byte-buddy:1.8.15",
- "org.apache.commons:commons-exec:1.3"
+ "org.apache.commons:commons-exec:1.3",
+ "org.checkerframework:checker-compat-qual:2.5.5"
],
"directDependencies": [
+ "com.google.guava:guava:28.1-android",
"com.squareup.okio:okio:1.14.0",
"org.seleniumhq.selenium:selenium-api:3.141.59",
- "com.google.guava:guava:28.2-jre",
"com.squareup.okhttp3:okhttp:3.11.0",
"net.bytebuddy:byte-buddy:1.8.15",
"org.apache.commons:commons-exec:1.3"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/org/seleniumhq/selenium/selenium-remote-driver/3.141.59/selenium-remote-driver-3.141.59.jar",
"mirror_urls": [
"https://jcenter.bintray.com/org/seleniumhq/selenium/selenium-remote-driver/3.141.59/selenium-remote-driver-3.141.59.jar",
@@ -2761,10 +6884,53 @@
"sha256": "9829fe57adf36743d785d0c2e7db504ba3ba0a3aacac652b8867cc854d2dfc45",
"url": "https://jcenter.bintray.com/org/seleniumhq/selenium/selenium-remote-driver/3.141.59/selenium-remote-driver-3.141.59.jar"
},
+ {
+ "coord": "org.seleniumhq.selenium:selenium-remote-driver:jar:sources:3.141.59",
+ "dependencies": [
+ "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "org.seleniumhq.selenium:selenium-api:jar:sources:3.141.59",
+ "net.bytebuddy:byte-buddy:jar:sources:1.8.15",
+ "org.apache.commons:commons-exec:jar:sources:1.3",
+ "com.squareup.okhttp3:okhttp:jar:sources:3.11.0",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
+ "org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
+ "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
+ "com.google.guava:guava:jar:sources:28.1-android",
+ "com.google.guava:failureaccess:jar:sources:1.0.1",
+ "com.squareup.okio:okio:jar:sources:1.14.0"
+ ],
+ "directDependencies": [
+ "org.seleniumhq.selenium:selenium-api:jar:sources:3.141.59",
+ "net.bytebuddy:byte-buddy:jar:sources:1.8.15",
+ "org.apache.commons:commons-exec:jar:sources:1.3",
+ "com.squareup.okhttp3:okhttp:jar:sources:3.11.0",
+ "com.google.guava:guava:jar:sources:28.1-android",
+ "com.squareup.okio:okio:jar:sources:1.14.0"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/seleniumhq/selenium/selenium-remote-driver/3.141.59/selenium-remote-driver-3.141.59-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/seleniumhq/selenium/selenium-remote-driver/3.141.59/selenium-remote-driver-3.141.59-sources.jar",
+ "https://maven.google.com/org/seleniumhq/selenium/selenium-remote-driver/3.141.59/selenium-remote-driver-3.141.59-sources.jar",
+ "https://repo1.maven.org/maven2/org/seleniumhq/selenium/selenium-remote-driver/3.141.59/selenium-remote-driver-3.141.59-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/seleniumhq/selenium/selenium-remote-driver/3.141.59/selenium-remote-driver-3.141.59-sources.jar"
+ ],
+ "sha256": "aad98064715728567784c00915692b3075c0c1aad80ca14518340868c8296597",
+ "url": "https://jcenter.bintray.com/org/seleniumhq/selenium/selenium-remote-driver/3.141.59/selenium-remote-driver-3.141.59-sources.jar"
+ },
{
"coord": "org.slf4j:slf4j-api:1.7.26",
"dependencies": [],
"directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/org/slf4j/slf4j-api/1.7.26/slf4j-api-1.7.26.jar",
"mirror_urls": [
"https://jcenter.bintray.com/org/slf4j/slf4j-api/1.7.26/slf4j-api-1.7.26.jar",
@@ -2775,6 +6941,24 @@
"sha256": "6d9e5b86cfd1dd44c676899285b5bb4fa0d371cf583e8164f9c8a0366553242b",
"url": "https://jcenter.bintray.com/org/slf4j/slf4j-api/1.7.26/slf4j-api-1.7.26.jar"
},
+ {
+ "coord": "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/slf4j/slf4j-api/1.7.26/slf4j-api-1.7.26-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/slf4j/slf4j-api/1.7.26/slf4j-api-1.7.26-sources.jar",
+ "https://maven.google.com/org/slf4j/slf4j-api/1.7.26/slf4j-api-1.7.26-sources.jar",
+ "https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.26/slf4j-api-1.7.26-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/slf4j/slf4j-api/1.7.26/slf4j-api-1.7.26-sources.jar"
+ ],
+ "sha256": "9e25ad98a324e6685752fd01fbbd0588ceec5df564e53c49486946a2d19dc482",
+ "url": "https://jcenter.bintray.com/org/slf4j/slf4j-api/1.7.26/slf4j-api-1.7.26-sources.jar"
+ },
{
"coord": "org.slf4j:slf4j-jdk14:1.7.26",
"dependencies": [
@@ -2783,6 +6967,10 @@
"directDependencies": [
"org.slf4j:slf4j-api:1.7.26"
],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/org/slf4j/slf4j-jdk14/1.7.26/slf4j-jdk14-1.7.26.jar",
"mirror_urls": [
"https://jcenter.bintray.com/org/slf4j/slf4j-jdk14/1.7.26/slf4j-jdk14-1.7.26.jar",
@@ -2793,10 +6981,36 @@
"sha256": "eaecf0184b014c9c6831cde91b0f405207a3578156aa4efe0d8f140b445ecd78",
"url": "https://jcenter.bintray.com/org/slf4j/slf4j-jdk14/1.7.26/slf4j-jdk14-1.7.26.jar"
},
+ {
+ "coord": "org.slf4j:slf4j-jdk14:jar:sources:1.7.26",
+ "dependencies": [
+ "org.slf4j:slf4j-api:jar:sources:1.7.26"
+ ],
+ "directDependencies": [
+ "org.slf4j:slf4j-api:jar:sources:1.7.26"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/slf4j/slf4j-jdk14/1.7.26/slf4j-jdk14-1.7.26-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/slf4j/slf4j-jdk14/1.7.26/slf4j-jdk14-1.7.26-sources.jar",
+ "https://maven.google.com/org/slf4j/slf4j-jdk14/1.7.26/slf4j-jdk14-1.7.26-sources.jar",
+ "https://repo1.maven.org/maven2/org/slf4j/slf4j-jdk14/1.7.26/slf4j-jdk14-1.7.26-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/slf4j/slf4j-jdk14/1.7.26/slf4j-jdk14-1.7.26-sources.jar"
+ ],
+ "sha256": "ba5565b6d633b56d72d0e72250eb316fbffb24912fd696548847b90ab16537e2",
+ "url": "https://jcenter.bintray.com/org/slf4j/slf4j-jdk14/1.7.26/slf4j-jdk14-1.7.26-sources.jar"
+ },
{
"coord": "org.yaml:snakeyaml:1.24",
"dependencies": [],
"directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
"file": "v1/https/jcenter.bintray.com/org/yaml/snakeyaml/1.24/snakeyaml-1.24.jar",
"mirror_urls": [
"https://jcenter.bintray.com/org/yaml/snakeyaml/1.24/snakeyaml-1.24.jar",
@@ -2806,6 +7020,34 @@
],
"sha256": "d3f7f09989d5b0ce5c4791818ef937ee7663f1e359c2ef2d312f938aad0763da",
"url": "https://jcenter.bintray.com/org/yaml/snakeyaml/1.24/snakeyaml-1.24.jar"
+ },
+ {
+ "coord": "org.yaml:snakeyaml:jar:sources:1.24",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/yaml/snakeyaml/1.24/snakeyaml-1.24-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/yaml/snakeyaml/1.24/snakeyaml-1.24-sources.jar",
+ "https://maven.google.com/org/yaml/snakeyaml/1.24/snakeyaml-1.24-sources.jar",
+ "https://repo1.maven.org/maven2/org/yaml/snakeyaml/1.24/snakeyaml-1.24-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/yaml/snakeyaml/1.24/snakeyaml-1.24-sources.jar"
+ ],
+ "sha256": "2ca4a62e017fb92f4ddd57692a71dfe2be23a2482bf0bd8b6821a08506fe04fe",
+ "url": "https://jcenter.bintray.com/org/yaml/snakeyaml/1.24/snakeyaml-1.24-sources.jar"
+ },
+ {
+ "coord": "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": null
}
],
"version": "0.1.0"
diff --git a/samples/todolist/.bazelrc b/samples/todolist/.bazelrc
new file mode 100644
index 000000000..8fef3639b
--- /dev/null
+++ b/samples/todolist/.bazelrc
@@ -0,0 +1,82 @@
+
+##
+# Base Settings
+##
+
+common --experimental_allow_incremental_repository_updates
+
+build --watchfs
+build --symlink_prefix=dist/
+build --nolegacy_external_runfiles
+build --disk_cache=~/.cache/bazel-disk-cache
+build --incompatible_strict_action_env
+build --javacopt="-source 8 -target 8 -encoding UTF-8"
+build --strict_java_deps=strict
+build --use_ijars
+build --interface_shared_objects
+build --java_toolchain=@bazel_tools//tools/jdk:toolchain_java11
+build --host_java_toolchain=@bazel_tools//tools/jdk:toolchain_java11
+
+run --incompatible_strict_action_env
+
+build:ci --spawn_strategy=local
+build:ci --javabase=//defs/toolchain/java:java_runtime
+
+build:release --compilation_mode=opt
+
+build:dev --compilation_mode=dbg
+build:dev --spawn_strategy=local
+build:dev --strategy=J2cl=worker
+build:dev --strategy=Closure=worker
+build:dev --strategy=TypeScriptCompile=worker
+build:dev --experimental_persistent_javac
+
+run:dev --define=VERBOSE_LOGS=1 -- --node_options=--inspect-brk
+
+query --output=label_kind
+
+# This .bazelrc file contains all of the flags required for the provided
+# toolchain with Remote Build Execution.
+# Note your WORKSPACE must contain an rbe_autoconfig target with
+# name="rbe_default" to use these flags as-is.
+build:remote --jobs=5
+
+# Platform flags:
+# The toolchain container used for execution is defined in the target indicated
+# by "extra_execution_platforms", "host_platform" and "platforms".
+# More about platforms: https://docs.bazel.build/versions/master/platforms.html
+build:remote --extra_toolchains=@rbe_default//config:cc-toolchain
+build:remote --extra_execution_platforms=@rbe_default//config:platform
+build:remote --host_platform=@rbe_default//config:platform
+build:remote --platforms=@rbe_default//config:platform
+build:remote --host_javabase=@rbe_default//java:jdk
+build:remote --javabase=@rbe_default//java:jdk
+build:remote --host_java_toolchain=@bazel_tools//tools/jdk:toolchain_hostjdk8
+build:remote --java_toolchain=@bazel_tools//tools/jdk:toolchain_hostjdk8
+build:remote --crosstool_top=@rbe_default//cc:toolchain
+build:remote --action_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1
+build:remote --spawn_strategy=remote
+
+# Starting with Bazel 0.27.0 strategies do not need to be explicitly
+# defined. See https://github.com/bazelbuild/bazel/issues/7480
+build:remote --define=EXECUTOR=remote
+
+# Enable remote execution so actions are performed on the remote systems.
+build:remote --remote_executor=grpcs://remotebuildexecution.googleapis.com
+
+# Enforce stricter environment rules, which eliminates some non-hermetic
+# behavior and therefore improves both the remote cache hit rate and the
+# correctness and repeatability of the build.
+build:remote --incompatible_strict_action_env=true
+
+# Set a higher timeout value, just in case.
+build:remote --remote_timeout=3600
+
+# Enable authentication. This will pick up application default credentials by
+# default. You can use --google_credentials=some_file.json to use a service
+# account credential instead.
+build:remote --google_default_credentials=true
+
+try-import %workspace%/.bazelrc.user
+
+
diff --git a/samples/todolist/.bazelversion b/samples/todolist/.bazelversion
new file mode 100644
index 000000000..3e3c2f1e5
--- /dev/null
+++ b/samples/todolist/.bazelversion
@@ -0,0 +1 @@
+2.1.1
diff --git a/samples/todolist/BUILD.bazel b/samples/todolist/BUILD.bazel
new file mode 100644
index 000000000..67cb1e21d
--- /dev/null
+++ b/samples/todolist/BUILD.bazel
@@ -0,0 +1,3 @@
+package(
+ default_visibility = ["//visibility:public"],
+)
diff --git a/samples/todolist/WORKSPACE b/samples/todolist/WORKSPACE
new file mode 100644
index 000000000..040b1e428
--- /dev/null
+++ b/samples/todolist/WORKSPACE
@@ -0,0 +1,80 @@
+
+## Sample Workspace
+workspace(
+ name = "todolist",
+ managed_directories = {"@npm": ["node_modules"]})
+
+
+## NodeJS Bootstrap
+load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
+http_archive(
+ name = "build_bazel_rules_nodejs",
+ sha256 = "591d2945b09ecc89fde53e56dd54cfac93322df3bc9d4747cb897ce67ba8cdbf",
+ urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/1.2.0/rules_nodejs-1.2.0.tar.gz"],
+)
+
+load("@build_bazel_rules_nodejs//:index.bzl",
+ "node_repositories",
+ "yarn_install")
+
+node_repositories(
+ package_json = ["//:package.json"],
+ node_version = "10.13.0",
+ yarn_version = "1.12.1")
+
+yarn_install(
+ name = "npm",
+ package_json = "//:package.json",
+ yarn_lock = "//:yarn.lock")
+
+load("@npm//:install_bazel_dependencies.bzl",
+ "install_bazel_dependencies")
+
+install_bazel_dependencies()
+
+## Gust Bootstrap
+load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
+git_repository(
+ name = "gust",
+ remote = "git@github.com:sgammon/gust.git",
+ commit = "cf40b14f84e716ee6fdbe01a780ed611d1102a2e",
+ shallow_since = "1580619116 -0800",
+)
+
+load("@gust//defs:build.bzl", "install_dependencies")
+install_dependencies()
+
+## Kotlin
+load("@io_bazel_rules_kotlin//kotlin:kotlin.bzl", "kotlin_repositories", "kt_register_toolchains")
+kotlin_repositories()
+register_toolchains("@gust//defs/toolchain/kt:kotlin_toolchain")
+
+## Python
+load("@rules_python//python:repositories.bzl", "py_repositories")
+py_repositories()
+
+load("@rules_python//python:pip.bzl", "pip_repositories")
+pip_repositories()
+
+load("@rules_python//python:pip.bzl", pip_import = "pip3_import")
+
+pip_import(
+ name = "py",
+ requirements = "@gust//defs/toolchain/python:requirements_base.txt")
+
+pip_import(
+ name = "werkzeug",
+ requirements = "@gust//defs/toolchain/python:requirements_werkzeug.txt")
+
+load("@gust//defs/toolchain/python:repos.bzl", "gust_python_repositories")
+gust_python_repositories()
+
+## Java
+load("@gust//defs/toolchain/java:repos.bzl", "gust_java_repositories")
+gust_java_repositories()
+
+load("@maven//:defs.bzl", "pinned_maven_install")
+pinned_maven_install()
+
+load("@gust//defs:workspace.bzl", "setup_workspace")
+setup_workspace()
diff --git a/samples/todolist/package.json b/samples/todolist/package.json
new file mode 100644
index 000000000..902803f8e
--- /dev/null
+++ b/samples/todolist/package.json
@@ -0,0 +1,8 @@
+{
+ "name": "@elide/sample-todolist",
+ "version": "1.0.0",
+ "devDependencies": {
+ "@bazel/bazel": "latest",
+ "@bazel/typescript": "latest"
+ }
+}
diff --git a/samples/todolist/src/BUILD.bazel b/samples/todolist/src/BUILD.bazel
new file mode 100644
index 000000000..e198431cf
--- /dev/null
+++ b/samples/todolist/src/BUILD.bazel
@@ -0,0 +1,106 @@
+package(
+ default_visibility = ["//visibility:public"],
+)
+
+load(
+ "@gust//defs/toolchain:schema.bzl",
+ "service",
+)
+
+load(
+ "@gust//defs/toolchain:templates.bzl",
+ "ssr_library",
+)
+
+load(
+ "@gust//defs/toolchain:backend.bzl",
+ "micronaut_library",
+ "micronaut_service",
+ "micronaut_controller",
+ "micronaut_application",
+)
+
+
+exports_files([
+ "api.yml",
+ "application.yml",
+ "logback.xml",
+ "reflection.json",
+])
+
+service(
+ name = "todolist_proto",
+ srcs = ["todolist.proto"],
+ deps = [
+ "//gust/page:media_proto",
+ "@proto_common//:type_month",
+ "@proto_common//:type_latlng",
+ "@proto_common//:type_timeofday",
+ "@proto_common//:rpc_status",
+ "@proto_common//:rpc_error_details",
+ "@proto_common//google/api:annotations_proto",
+ "@proto_common//google/api:client_proto",
+ "@proto_common//google/api:field_behavior",
+ "@com_google_protobuf//:any_proto",
+ "@com_google_protobuf//:empty_proto",
+ "@com_google_protobuf//:timestamp_proto",
+ "@com_google_protobuf//:field_mask_proto",
+ ]
+)
+
+ssr_library(
+ name = "home_soy",
+ srcs = ["home.soy"],
+ proto_deps = [":todolist_proto"],
+)
+
+micronaut_library(
+ name = "TodolistInterceptor",
+ srcs = ["server/TodolistInterceptor.kt"],
+)
+
+micronaut_library(
+ name = "TodolistLogic",
+ srcs = ["server/TodolistLogic.kt"],
+ proto_deps = [":todolist_proto"],
+)
+
+micronaut_service(
+ name = "TasksService",
+ srcs = ["server/TasksService.kt"],
+ services = [":todolist_proto"],
+ deps = [
+ ":TodolistLogic",
+ ":TodolistInterceptor",
+ ],
+)
+
+micronaut_controller(
+ name = "HomeController",
+ srcs = ["server/HomeController.kt"],
+ templates = [":home_soy"],
+ proto_deps = [":todolist_proto"],
+ deps = [":TodolistLogic"],
+)
+
+micronaut_application(
+ # -- App Info -- #
+ name = "TodolistServer",
+ config = ":application.yml",
+ logging_config = ":logback.xml",
+
+ # -- Controllers -- #
+ controllers = [
+ ":HomeController",
+ ],
+
+ services = [
+ ":TasksService",
+ ],
+
+ # -- Publishing / Images -- #
+ native = False,
+ repository = "elide-tools/sample/todolist/jvm",
+ native_repository = "elide-tools/sample/todolist/native",
+ reflection_configuration = ":reflection.json",
+)
diff --git a/samples/todolist/src/api.yml b/samples/todolist/src/api.yml
new file mode 100644
index 000000000..43eee0321
--- /dev/null
+++ b/samples/todolist/src/api.yml
@@ -0,0 +1,324 @@
+type: google.api.Service
+config_version: 3
+
+name: todolist.elide.tools
+title: Todolist API
+
+apis:
+ - name: todolist.Tasks
+
+authentication:
+ providers:
+ - id: firebase
+ jwks_uri: https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system.gserviceaccount.com
+ issuer: https://securetoken.google.com/elide-tools
+
+ rules:
+ - selector: todolist.Tasks.*
+ requirements:
+ - provider_id: firebase
+
+endpoints:
+ - name: todolist.elide.tools
+ target: todolist.elide.tools
+ allow_cors: false
+
+system_parameters:
+ rules:
+ - selector: "*"
+ parameters:
+ - name: api_key
+ url_query_parameter: key
+ - name: api_key
+ http_header: X-API-Key
+ - name: trace
+ http_header: X-API-Trace-ID
+
+project_properties:
+ properties:
+ - name: ENABLE_ATTACHMENTS
+ type: BOOL
+ description: Allows file attachments on Todolist tasks.
+ - name: MAX_ATTACHMENT_SIZE
+ type: INT64
+ description: Maximum size of TodoTask file attachments.
+
+context:
+ rules:
+ - selector: "*"
+ requested:
+ - google.rpc.context.ProjectContext
+ - google.rpc.context.OriginContext
+
+enums:
+ - todolist.TodolistError
+
+metrics:
+ - name: "class-a-ops"
+ display_name: "Todolist Operations: Class A"
+ description: "Generic read-only operations executed against the Todolist API."
+ value_type: INT64
+ metric_kind: DELTA
+
+ - name: "class-b-ops"
+ display_name: "Todolist Operations: Class B"
+ description: "Generic write or query operations executed against the Todolist API."
+ value_type: INT64
+ metric_kind: DELTA
+
+ - name: "class-c-ops"
+ display_name: "Todolist Operations: Class C"
+ description: "Heavy write, file, or delete operations executed against the Todolist API."
+ value_type: INT64
+ metric_kind: DELTA
+
+ - name: "tasks-created"
+ display_name: "Todolist Tasks: Created"
+ description: "Measures the rate at which new Todolist tasks are created."
+ value_type: INT64
+ metric_kind: DELTA
+
+ - name: "tasks-created"
+ display_name: "Todolist Tasks: Completed"
+ description: "Measures the rate at which Todolist tasks are completed."
+ value_type: INT64
+ metric_kind: DELTA
+
+ - name: "files-uploaded"
+ display_name: "Todolist Files: Uploads"
+ description: "Counts the number of files uploaded within a given timeperiod."
+ value_type: INT64
+ metric_kind: DELTA
+
+quota:
+ limits:
+ ## Project-level Quotas
+ - name: "project-class-a-ops"
+ metric: "class-a-ops"
+ unit: "1/min/{project}"
+ display_name: "Project Quota: Todolist Class A Ops"
+ description: "Project-based quota for Class A (Read-Only) operations."
+ values:
+ STANDARD: 240
+ - name: "project-class-b-ops"
+ metric: "class-b-ops"
+ unit: "1/min/{project}"
+ display_name: "Project Quota: Todolist Class B Ops"
+ description: "Project-based quota for Class B (Write/Query) operations."
+ values:
+ STANDARD: 120
+ - name: "project-class-c-ops"
+ metric: "class-c-ops"
+ unit: "1/min/{project}"
+ display_name: "Project Quota: Todolist Class C Ops"
+ description: "Project-based quota for Class C (Heavy) operations."
+ values:
+ STANDARD: 60
+ - name: "project-tasks-created"
+ metric: "tasks-created"
+ unit: "1/min/{project}"
+ display_name: "Project Quota: Tasks Created/Minute"
+ description: "Project-based quota for tasks-created-per-minute."
+ values:
+ STANDARD: 60
+ - name: "project-tasks-completed"
+ metric: "tasks-completed"
+ unit: "1/min/{project}"
+ display_name: "Project Quota: Tasks Completed/Minute"
+ description: "Project-based quota for tasks-completed-per-minute."
+ values:
+ STANDARD: 60
+ - name: "project-files-uploaded"
+ metric: "files-uploaded"
+ unit: "1/min/{project}"
+ display_name: "Project Quota: Files Uploaded/Minute"
+ description: "Project-based quota for files-uploaded-per-minute."
+ values:
+ STANDARD: 30
+
+ ## User-level Quotas
+ - name: "user-tasks-created"
+ metric: "tasks-created"
+ unit: "1/sec/{user}"
+ display_name: "User Quota: Tasks Created/Minute"
+ description: "User-based quota for tasks-created-per-second."
+ values:
+ STANDARD: 5
+ - name: "user-tasks-completed"
+ metric: "tasks-completed"
+ unit: "1/sec/{user}"
+ display_name: "User Quota: Tasks Completed/Minute"
+ description: "User-based quota for tasks-completed-per-second."
+ values:
+ HIGH: 5
+ STANDARD: 3
+ LOW: 1
+ - name: "user-files-uploaded"
+ metric: "files-uploaded"
+ unit: "1/sec/{user}"
+ display_name: "User Quota: Files Uploaded/Minute"
+ description: "User-based quota for files-uploaded-per-second."
+ values:
+ HIGH: 3
+ STANDARD: 1
+
+ metric_rules:
+ - selector: todolist.Tasks.Health
+ metric_costs:
+ class-a-ops: 1
+ - selector: todolist.Tasks.CreateTask
+ metric_costs:
+ class-b-ops: 1
+ tasks-created: 1
+ - selector: todolist.Tasks.UpdateTask
+ metric_costs:
+ class-b-ops: 1
+ - selector: todolist.Tasks.FetchTask
+ metric_costs:
+ class-a-ops: 1
+ - selector: todolist.Tasks.CheckOffTask
+ metric_costs:
+ class-b-ops: 1
+ tasks-completed: 1
+ - selector: todolist.Tasks.DeleteTask
+ metric_costs:
+ class-b-ops: 1
+ - selector: todolist.Tasks.AttachFile
+ metric_costs:
+ class-b-ops: 1
+ class-c-ops: 1
+ files-uploaded: 1
+ - selector: todolist.Tasks.DeleteFile
+ metric_costs:
+ class-b-ops: 1
+ class-c-ops: 1
+ - selector: todolist.Tasks.ListTasks
+ metric_costs:
+ class-a-ops: 1
+ class-b-ops: 1
+ - selector: todolist.Tasks.ClearCompleted
+ metric_costs:
+ class-a-ops: 1
+ class-b-ops: 1
+
+usage:
+ rules:
+ - selector: "todolist.Tasks.*"
+ allow_unregistered_calls: false
+
+documentation:
+ summary: >
+ Provides an API for interfacing with the Todolist application on behalf of a registered user. Allows management of a
+ user's Todolist, execution of the task lifecycle, and management of attached files.
+
+ pages:
+ - name: Overview
+ content: >
+ # Cloud API
+
+ ## Overview
+ Coming soon.
+
+ subpages:
+ - name: Getting Started
+ content: >
+ ## Cloud API: Getting Started
+ Coming soon.
+
+ rules:
+ - selector: todolist.Tasks.Health
+ description: >
+ Check the health of the Tasks API. If systems are running smoothly, an empty successful response will be
+ returned. If not, the request will fail with some enumerated error case describing why the system isn't ready.
+
+ - selector: todolist.Tasks.CreateTask
+ description: >
+ Create a new task for the currently-logged-in user, on their Todolist. If the client frontend nominates a unique
+ ID for the task, the system guarantees idempotency, and the frontend may retry with the same token if transient
+ errors are encountered which prevent the write operation from succeeding.
+
+ Once the write operation completes, a reference is provided in response which describes:
+ - *Key*: Provisioned key for the task record, which may differ from the nominated ID in some cases.
+ - *Version*: Revision timestamp, describing the written version of this record.
+
+ - selector: todolist.Tasks.UpdateTask
+ description: >
+ Updates an existing task in the currently-logged-in user's Todolist. If the specified task cannot be found or is
+ already archived, the request is rejected with a `CONFLICT`-style error. Alternatively, if the task is found and
+ eligible for a write, but is already more up-to-date than the write offered (via a client-nominated `version`),
+ the write is rejected for a `FAILED_PRECONDITION`-style error.
+
+ During client-driven submission of a task update, the record `version` should match the base version of the task
+ being mutated. If this base `version` does not match, the write will be rejected, and the client is urged to re-
+ fetch the record and try again.
+
+ Certain fields on tasks are not accessible for write via this method. Namely, this would include attached files,
+ the current `status` of the task, and task timestamps. Task status may be updated with `CheckOffTask`, and files
+ may be attached via `AttachFile`.
+
+ - selector: todolist.Tasks.FetchTask
+ description: >
+ Retrieves payload data for an individual Todolist task, referenced by the task's unique key. If the task cannot
+ be found or has been tombstoned for deletion, this method will fail with `HTTP 404`/`NOT_FOUND`. Tasks not owned
+ by the current user are not visible during the transaction, so, fetching a task not owned by the currently-
+ logged-in user will also yield an `HTTP 404`/`NOT_FOUND`.
+
+ - selector: todolist.Tasks.CheckOffTask
+ description: >
+ Update an existing task into the `COMPLETED` state. This transitions the task to the completed tasks list in the
+ UI, and removes any notifications regarding the due-date/deadline for the task. This transition must be
+ performed in this method, rather than `UpdateTask`.
+
+ - selector: todolist.Tasks.DeleteTask
+ description: >
+ Permanently delete a task entirely from a user's task list. This removes the task from disk, including any
+ associated content, index entries, or attached files in storage. Obviously, invoke this method with caution.
+
+ - selector: todolist.Tasks.AttachFile
+ description: >
+ Attach an uploaded file to an existing Todolist task. The file must exist in GCS, having already been uploaded
+ by the frontend. Once this method completes, a record will have been created attached to the subject task, which
+ points to the file previously uploaded.
+
+ - selector: todolist.Tasks.FetchFile
+ description: >
+ Retrieve an existing file attachment listed under a specified Todolist task, both of which owned by the
+ currently-logged-in user. If the subject task, or the file attachment, cannot be found, a `HTTP 404`/`NOT_FOUND`
+ error is returned.
+
+ This method simply returns metadata about the file in question. That metadata may include a signed serving URL,
+ which enables the client with an endpoint to download the file securely, if needed/desired.
+
+ - selector: todolist.Tasks.DeleteFile
+ description: >
+ Un-attach and delete an uploaded file, which is currently attached to an existing Todolist task. After this
+ method completes, the file is permanently gone, including the record which pointed to it. Obviously, invoke this
+ method with caution, only after confirming the user's intent.
+
+ - selector: todolist.Tasks.ListTasks
+ description: >
+ List tasks on a the currently-logged-in user's Todolist, optionally applying query parameters to filter, sort,
+ or otherwise adjust the tasks returned. If a *query limit* is left unspecified, it defaults to `50`, limiting
+ the number of records returned. If more records match the query than the returned amount, in *any* case, the
+ system will indicate as such using the metadata fields for the list response.
+
+ For instance, if the user has a total of `75` tasks, and a query is submitted with `limit=50` or no limit
+ specified at all, the server will:
+ - Return the first `50` results, as the "first page," so-to-speak
+ - Indicate that there are a total of `2` pages (de-facto limiting the total results to `100`)
+ - Indicate that there are a total of `75` tasks
+
+ Since the client is on page 1 when it submits this query, it knows that there remain `1` pages, containing `25`
+ tasks. These metrics and calculated values can thusly be used in the UI to indicate the range of records on the
+ user's Todolist.
+
+ - selector: todolist.Tasks.ClearCompleted
+ description: >
+ Query the currently-logged-in user's Todolist for any completed tasks, and move any tasks we find into the final
+ `ARCHIVED` state. This should also adjust the UI to remove completed tasks from the active view, and hide them
+ behind a *Completed Tasks* listing.
+
+ After tasks are completed and cleared, they subsequently cease to show up in any regular listings of a user's
+ Todolist, unless the invoking code specifically asks to include archived tasks. Some period after being
+ completed (*7 days* at the time of this writing), `ARCHIVED` tasks are deleted, along with any associated
+ content or attached files.
diff --git a/samples/todolist/src/application.yml b/samples/todolist/src/application.yml
new file mode 100644
index 000000000..7e6b68bb3
--- /dev/null
+++ b/samples/todolist/src/application.yml
@@ -0,0 +1,130 @@
+
+micronaut:
+ application:
+ name: Todolist
+
+ server:
+ maxRequestSize: 10MB
+ host: 0.0.0.0
+ port: 8080
+ cors:
+ enabled: false
+ netty:
+ maxHeaderSize: 500KB
+ chunked-supported: true
+ use-native-transport: true
+ compression-level: 2
+ compression-threshold: 2048
+ parent:
+ threads: 4
+ worker:
+ threads: 4
+ epoll:
+ options:
+ tcpFastopen: 128
+ tcpQuickack: true
+ childOptions:
+ soKeepalive: true
+
+ session:
+ enabled: true
+ http:
+ cookie: true
+ header: false
+ redis:
+ enabled: true
+ cookie: true
+ header: true
+ namespace: 'todolist:sessions'
+ write-mode: BACKGROUND
+ enable-keyspace-events: true
+ valueSerializer: io.micronaut.jackson.serialize.JacksonObjectSerializer
+
+ security:
+ enabled: true
+ session:
+ enabled: true
+ login-success-target-url: /app
+ login-failure-target-url: /login
+ unauthorized-target-url: /login
+ logout-target-url: /logout
+ legacy-rejection-handler: false
+ endpoints:
+ login:
+ enabled: true
+ path: /login/go
+ logout:
+ enabled: true
+ get-allowed: true
+ path: /logout
+
+ views:
+ soy:
+ enabled: true
+ engine: sauce
+ renaming: false
+
+ csp:
+ enabled: true
+ generateNonce: true
+ reportOnly: true
+ policyDirectives: "default-src 'https: 'self' data: 'nonce-{#nonceValue}';"
+
+ executors:
+ io:
+ type: fixed
+ nThreads: 12
+
+ config-client:
+ enabled: true
+
+grpc:
+ server:
+ port: 8443
+ keep-alive-time: 1h
+
+ client:
+ plaintext: true
+ max-retry-attempts: 10
+
+graphql:
+ enabled: true
+ path: /v1/graph
+ graphiql:
+ enabled: false
+ version: 0.13.2
+ path: /_/graphiql
+ page-title: "Dashboard - GraphiQL"
+
+kubernetes:
+ client:
+ discovery:
+ enabled: true
+ config-maps:
+ enabled: true
+ secrets:
+ enabled: true
+
+redis:
+ uri: redis://fcache
+ caches:
+ todolist:
+ expire-after-access: 4h
+
+endpoints:
+ beans:
+ enabled: true
+ sensitive: false
+ info:
+ enabled: true
+ sensitive: false
+
+tracing:
+ zipkin:
+ enabled: true
+ sampler: probability=1.0
+
+gcp:
+ project-id: elide-tools
+ tracing:
+ enabled: true
diff --git a/samples/todolist/src/home.soy b/samples/todolist/src/home.soy
new file mode 100644
index 000000000..3ce40406a
--- /dev/null
+++ b/samples/todolist/src/home.soy
@@ -0,0 +1,20 @@
+
+{namespace todolist.home}
+
+
+/**
+ * Render the homepage for Todolist. There are a few modes to the homepage, depending on the user's authentication
+ * state. If they are logged-in when they visit the page, we render their current list of tasks - if not, we render a
+ * toy sample that is usable anonymously.
+ *
+ * The client-side app handles re-hydration and state transitions from anonymous-to-logged-in, and vice-versa. This
+ */
+{template .page}
+ {@param? name: string} /** Name to say hello to for our simple salutation. Defaults to 'World'. */
+
+ {call gust.page.wrap}
+ {param content kind="html"}
+ Hello, {$name ?: "World"}!
+ {/param}
+ {/call}
+{/template}
diff --git a/samples/todolist/src/logback.xml b/samples/todolist/src/logback.xml
new file mode 100644
index 000000000..8b01dfb54
--- /dev/null
+++ b/samples/todolist/src/logback.xml
@@ -0,0 +1,13 @@
+
+
+
+ true
+
+ %cyan(%d{HH:mm:ss.SSS}) %gray([%thread]) %highlight(%-5level) %magenta(%logger{36}) - %msg%n
+
+
+
+
+
+
+
diff --git a/samples/todolist/src/reflection.json b/samples/todolist/src/reflection.json
new file mode 100644
index 000000000..973bc6a4e
--- /dev/null
+++ b/samples/todolist/src/reflection.json
@@ -0,0 +1,38 @@
+[
+ {
+ "name" : "com.google.template.soy.jbcsrc.gen.todolist.home.page",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true,
+ "allDeclaredClasses" : true,
+ "allPublicClasses" : true
+ },
+ {
+ "name" : "com.google.template.soy.jbcsrc.gen.todolist.home.page$Factory",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true,
+ "allDeclaredClasses" : true,
+ "allPublicClasses" : true
+ },
+ {
+ "name" : "com.google.template.soy.jbcsrc.gen.gust.page.wrap",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true,
+ "allDeclaredClasses" : true,
+ "allPublicClasses" : true
+ },
+ {
+ "name" : "com.google.template.soy.jbcsrc.gen.gust.page.wrap$Factory",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true,
+ "allDeclaredClasses" : true,
+ "allPublicClasses" : true
+ }
+]
\ No newline at end of file
diff --git a/samples/todolist/src/server/HomeController.kt b/samples/todolist/src/server/HomeController.kt
new file mode 100644
index 000000000..85b29c67c
--- /dev/null
+++ b/samples/todolist/src/server/HomeController.kt
@@ -0,0 +1,44 @@
+package server
+
+import com.google.common.collect.ImmutableMap
+import tools.elide.page.Context
+import io.micronaut.http.HttpResponse
+import io.micronaut.http.annotation.Controller
+import io.micronaut.http.annotation.Get
+import io.micronaut.http.annotation.QueryValue
+import io.micronaut.security.annotation.Secured
+import io.micronaut.views.View
+
+
+/**
+ * Todolist homepage controller - responsible for serving the homepage, with a little preview of the app, with the
+ * ability to use it (anonymously / ephemerally). It also offers the ability to sign in and persist one's tasks. The
+ * homepage UI is defined in Soy, and styled in SASS.
+ */
+@Controller
+@Secured("isAnonymous()")
+class HomeController {
+ /**
+ * `/` (`HTTP GET`): Handler for the root homepage for Todolist - i.e. `/`. Serves the preview page if the user isn't
+ * logged in, or the regular app page & container if they are.
+ *
+ * The content for this page depends conditionally on the user's login status. If they aren't logged in, we render a
+ * page with a sign-in button and a little toy copy of Todolist. The toy copy is identical to the real one, but it
+ * offers no persistence of tasks beyond the current browser session.
+ *
+ * If the user opts to make use of the anonymous/toy version, and then later chooses to sign in, their previous tasks
+ * are preserved, along with their user ID (using anonymous user upgrade via Firebase). This flow happens via the
+ * client-side app, so we don't need to worry about it here. Similarly, if the user hits the homepage without being
+ * logged in, and then logs in, that flow is also handled by the re-hydrated CSR frontend.
+ */
+ @Get("/")
+ @View("todolist.home.page")
+ fun home(@QueryValue("name", defaultValue = "World") name: String): HttpResponse> {
+ return HttpResponse.ok(ImmutableMap.of(
+ "name", name,
+ "context", Context.newBuilder()
+ .setStyles(Context.Styles.newBuilder())
+ .setScripts(Context.Scripts.newBuilder())
+ .build()))
+ }
+}
diff --git a/samples/todolist/src/server/TasksService.kt b/samples/todolist/src/server/TasksService.kt
new file mode 100644
index 000000000..b1c98df03
--- /dev/null
+++ b/samples/todolist/src/server/TasksService.kt
@@ -0,0 +1,48 @@
+package server
+
+import com.google.protobuf.Empty
+import io.grpc.stub.StreamObserver
+import io.micronaut.grpc.annotation.GrpcService
+import tools.elide.samples.todolist.schema.TasksGrpc
+import javax.inject.Singleton
+
+
+/**
+ * Defines the server-side implementation of the [TasksGrpc] service. This API service supports all backend-enabled
+ * functionality related to the Todolist app, including (1) management of user tasks, (2) task attachment upload and
+ * management, and (3) task lifecycle (i.e. completion, clearing, and so on).
+ *
+ * Although the API is designed with the frontend application's general access pattern in mind, there are a number of
+ * alternate ways to consume this service (listed exhaustively below, including the general case):
+ *
+ * - **Direct access**. When build an implementation of a Todolist client app, the API may be accessed directly via
+ * *gRPC* or *REST*. In REST access contexts, the API supports exchanging JSON.
+ *
+ * - **Cross-origin access**. Currently, CORS-based access is disabled on the API, because it is mostly usable in one of
+ * the other two access methodologies listed. It may be enabled in `api.yml`.
+ *
+ * - **GraphQL endpoint**. Through Micronaut, there is support for Rejoiner-based GraphQL access, both for data reads
+ * and writes. This endpoint makes use of the same schemas as *Direct access* circumstances, just translated to edges
+ * in the GraphQL schema available at the endpoint.
+ */
+@Singleton
+@GrpcService
+class TasksService: TasksGrpc.TasksImplBase() {
+ /**
+ * Implements the `Health` service method, which simply checks the health of the Tasks API itself, and reports back
+ * whether there are any known issues, or that the service is working as intended. Transient issues with database
+ * connections and backend services may cause this endpoint to report bad health. This way, routing is transparent
+ * around issues with deep-backend layers when operating Todolist in a multi-homed fashion.
+ *
+ * This method is unary, so we are expected to prepare one (and only one) response and then send it. If the service
+ * is not working correctly, we yield an error and explain why (instead of a regular response).
+ *
+ * This method can generally be invoked via `HTTP GET` at the endpoint `/v1/health`.
+ *
+ * @param request Empty protocol message, indicating a request for system health.
+ * @param observer Observer for responses or errors which should be relayed back to the invoking client.
+ */
+ override fun health(request: Empty, observer: StreamObserver) {
+ TODO("not yet implemented")
+ }
+}
diff --git a/samples/todolist/src/server/TodolistInterceptor.kt b/samples/todolist/src/server/TodolistInterceptor.kt
new file mode 100644
index 000000000..9b56ad074
--- /dev/null
+++ b/samples/todolist/src/server/TodolistInterceptor.kt
@@ -0,0 +1,50 @@
+package server
+
+import io.grpc.*
+import javax.annotation.concurrent.Immutable
+import javax.inject.Singleton
+
+
+/**
+ * Intercepts server-side calls to the [TasksService], and performs steps to authenticate the calls before allowing them
+ * to proceed. If a given call does not meet the requirements for authentication/authorization, it is rejected with a
+ * `403 Forbidden`/`PERMISSION_DENIED` status. If the call is missing authentication credentials entirely, it is
+ * rejected with `403 Forbidden`/`AUTHORIZATION_REQUIRED`.
+ *
+ * Meeting the following requirements constitute valid authentication for use of the Tasks API:
+ * - **API key.** The frontend application invoking the service call must affix an API key, which is valid and un-
+ * revoked, and passes any associated validation (for instance, referrer restrictions, for web app keys, and so on).
+ *
+ * - **Authorization token.** The frontend application invoking the service call must affix an `Authorization` header,
+ * which specifies a `Bearer` token containing a valid, un-expired, and un-revoked Firebase authorization JWT. To
+ * learn more about Firebase Auth, see [here](https://firebase.google.com/docs/auth). To learn more about *JSON Web
+ * Tokens*, head over to [jwt.io](https://jwt.io/).
+ */
+@Singleton
+@Immutable
+class TodolistInterceptor: ServerInterceptor {
+ /**
+ * Performs the interception of RPC traffic through the [TasksService], enforces authentication requirements like API
+ * key presence and validity, and loads the active user through any affixed `Authorization` header. If *any* of the
+ * described steps fail, the request is rejected. How it is rejected is based on the circumstances, but generally the
+ * HTTP status failure code is always `403`.
+ *
+ * If the interceptor is able to load authentication and authorization credentials are properly validate them, it then
+ * prepares the loaded values for downstream use by attaching them to the active gRPC context (see [io.grpc.Context]).
+ * Keys for injected context items are exposed statically on this class, so that downstream actors may easily
+ * reference them.
+ *
+ * @param call Server-side call being intercepted in this interceptor invocation.
+ * @param metadata Metadata for the call, which roughly equates to the request's HTTP headers.
+ * @param handler Tip of the handler chain for this call, which we should pass the call to, in order to continue RPC
+ * processing. This invokes the service method, any associated logic, etc., and hopefully completes the call.
+ * @return Listener, which wraps the provided server [call] and [metadata], and eventually dispatches [handler] if
+ * auth details are processed and applied successfully.
+ */
+ override fun interceptCall(call: ServerCall,
+ metadata: Metadata,
+ handler: ServerCallHandler):
+ ServerCall.Listener {
+ TODO("not yet implemented")
+ }
+}
diff --git a/samples/todolist/src/server/TodolistLogic.kt b/samples/todolist/src/server/TodolistLogic.kt
new file mode 100644
index 000000000..6324c63c9
--- /dev/null
+++ b/samples/todolist/src/server/TodolistLogic.kt
@@ -0,0 +1,22 @@
+package server
+
+import javax.inject.Singleton
+
+
+/**
+ * Defines application logic for the Todolist app. This logic is exposed via gRPC services (like [TasksService]), or,
+ * alternatively, made use of directly via dependency injection in server-side controllers (i.e. [HomeController]). The
+ * task lifecycle is defined and implemented within this logic, so it is safe for external callers (i.e. services or
+ * controllers) to make assumptions about the data they are handed.
+ *
+ * In this manner, validation logic in the Todolist app is centralized here. Some aspects of the logic contained herein
+ * are packaged separately to allow sharing that logic with the frontend, which must perform a subset of the tasks
+ * incumbent on the server (for instance, basic validation of data before submission to the service, which is performed
+ * in duplicate on the server-side).
+ *
+ * Methods in this implementation logic may only be executed by authenticated/authorized users. Anonymous interactions
+ * with the Todolist app do not persist beyond the user's local browser memory.
+ */
+@Singleton
+class TodolistLogic {
+}
diff --git a/samples/todolist/src/todolist.proto b/samples/todolist/src/todolist.proto
new file mode 100644
index 000000000..1723a8b74
--- /dev/null
+++ b/samples/todolist/src/todolist.proto
@@ -0,0 +1,659 @@
+/**
+ * Defines the Todolist app from front to back, including the data objects supported by the application, API, field, and
+ * object documentation, and the surface of the API which supports the frontend. These objects are code-generated into
+ * whatever language needed to facilitate frontend or backend logic, data storage, events/analytics, and so on.
+ *
+ * Behavior of the framework's data engine can be controlled via the `core/Datamodel` import, which enables annotations
+ * on the Protobuf message objects. This allows us to designate certain objects for storage or API use, or certain
+ * fields as hidden/internal, and so on. From start to finish, if there is an app-related data model of some kind that
+ * is made use of in this little sample, it's in this file.
+ */
+syntax = "proto3";
+
+package todolist;
+
+option optimize_for = SPEED;
+option cc_enable_arenas = true;
+option java_multiple_files = true;
+option java_string_check_utf8 = true;
+option java_outer_classname = "TodolistApp";
+option php_namespace = "ElideSamples";
+option php_class_prefix = "TDL";
+option swift_prefix = "Todolist";
+option objc_class_prefix = "TDL";
+option ruby_package = "Elide::Samples::Todolist::Schema";
+option java_package = "tools.elide.samples.todolist.schema";
+option csharp_namespace = "Elide.Samples.Todolist.Schema";
+option go_package = "github.com/elide-tools/elide/samples/todolist/schema;todolist";
+
+import "google/type/month.proto";
+import "google/type/latlng.proto";
+import "google/type/timeofday.proto";
+
+import "google/api/client.proto";
+import "google/api/annotations.proto";
+import "google/api/field_behavior.proto";
+
+import "google/protobuf/empty.proto";
+import "google/protobuf/timestamp.proto";
+import "google/protobuf/field_mask.proto";
+
+import "webutil/html/types/html.proto";
+
+import "gust/page/media.proto";
+import "gust/api/services.proto";
+import "gust/core/datamodel.proto";
+
+
+// Defines the priority levels that a task in the task-list can take on. These are essentially arbitrary, and it is
+// entirely up to the user which is selected for each task. Each level is described via docs for its own enumerated
+// priority tier.
+enum TaskPriority {
+ // Normal task priority. Shows the task's priority in blue, or with only one exclamation point (in icon-based UIs).
+ NORMAL = 0;
+
+ // Elevated, or higher-than-normal task priority. Shows the task's priority in yellow, or with two exclamation points.
+ ELEVATED = 1;
+
+ // Critical, or highest task priority. Shows the task's priority in red, or with three exclamation points.
+ CRITICAL = 2;
+}
+
+
+// Defines the available statuses for a given Todolist task. Newly-created tasks start in the `ELIGIBLE` status, and
+// stay there until the task is completed. At that time, the task is switched to `COMPLETED`, but it still remains
+// visible in the user's task list until they fully clear it by "clearing completed," which marks it as `ARCHIVED`.
+enum TaskStatus {
+ // The task is eligible for completion, or for regular display in Todolist.
+ ELIGIBLE = 0;
+
+ // The task has been completed, but should still show for regular display.
+ COMPLETED = 1;
+
+ // The task has been archived, meaning it was completed and cleared.
+ ARCHIVED = 2;
+}
+
+
+// Describes a file attached to this task. These attached files are stored in Google Cloud Storage, and identified
+// uniquely by their public object URL. The mime type is used for icons/light-box type sniffing (i.e. for images).
+message TaskAttachment {
+ option (core.role) = OBJECT;
+
+ // Unique ID provisioned to identify this specific file, globally.
+ string id = 1 [
+ (core.field).type = ID,
+ (core.field).summary = "Globally-unique file ID.",
+ (google.api.field_behavior) = REQUIRED,
+ (google.api.field_behavior) = IMMUTABLE
+ ];
+
+ // Private URL to the attachment file, stored on GCS.
+ string url = 2 [
+ (core.field).summary = "Private URL for the attachment file.",
+ (google.api.field_behavior) = REQUIRED,
+ (google.api.field_behavior) = IMMUTABLE
+ ];
+
+ // Original filename for the attached file asset.
+ string file_name = 3 [
+ (core.field).summary = "Original uploaded name of the attached file.",
+ (google.api.field_behavior) = REQUIRED,
+ (google.api.field_behavior) = IMMUTABLE
+ ];
+
+ // Specifies the kind of media constituted by this file attachment.
+ page.MediaType kind = 4 [
+ (core.field).summary = "Specifies, in broad terms, the type of media constituted by this attachment.",
+ (google.api.field_behavior) = REQUIRED,
+ (google.api.field_behavior) = IMMUTABLE
+ ];
+
+ // Specifies metadata about the media constituted by this file attachment, in each case specific to the kind of media
+ // attached (represented in `kind`). Major types of structured media are `IMAGE`, `VIDEO`, `AUDIO`, and `DOCUMENT`.
+ oneof media {
+ // Specifies structured information specifically related to an image attached to a Todolist task.
+ page.MediaAsset.Image image = 30 [
+ (core.field).summary = "Specifies info related to image media, if applicable.",
+ (google.api.field_behavior) = OPTIONAL,
+ (google.api.field_behavior) = IMMUTABLE
+ ];
+
+ // Specifies structured information specifically related to a video attached to a Todolist task.
+ page.MediaAsset.Video video = 40 [
+ (core.field).summary = "Specifies info related to video media, if applicable.",
+ (google.api.field_behavior) = OPTIONAL,
+ (google.api.field_behavior) = IMMUTABLE
+ ];
+
+ // Specifies structured information specifically related to some digital document attached to a Todolist task.
+ page.MediaAsset.Document document = 50 [
+ (core.field).summary = "Specifies info related to an attached document, if applicable.",
+ (google.api.field_behavior) = OPTIONAL,
+ (google.api.field_behavior) = IMMUTABLE
+ ];
+ }
+
+ // Specifies the meta-generation for a given object. This is used by GCS to track file metadata changes.
+ uint32 metageneration = 6 [
+ (core.field).summary = "Metadata version for the attached file.",
+ (google.api.field_behavior) = REQUIRED,
+ (google.api.field_behavior) = IMMUTABLE
+ ];
+
+ // Specifies the proper generation for a given object. This is used by GCS to track file version changes.
+ uint64 generation = 7 [
+ (core.field).summary = "Data version for the attached file.",
+ (google.api.field_behavior) = REQUIRED,
+ (google.api.field_behavior) = IMMUTABLE
+ ];
+
+ // Private URL to the attachment file, stored on GCS.
+ webutil.html.types.TrustedResourceUrlProto serving_url = 8 [
+ (core.field).summary = "Private URL for the attachment file.",
+ (google.api.field_behavior) = OUTPUT_ONLY
+ ];
+
+ // MIME type of the file stored as this task attachment.
+ string mime = 9 [
+ (core.field).summary = "MIME type of the attachment file.",
+ (google.api.field_behavior) = OUTPUT_ONLY
+ ];
+
+ // Byte-size of the file, as reported by GCS.
+ uint32 size = 10 [
+ (core.field).summary = "Size of the file, in bytes, as reported by GCS.",
+ (google.api.field_behavior) = OUTPUT_ONLY
+ ];
+
+ // MD5 hash of the file's contents, as reported by GCS after upload.
+ string md5 = 11 [
+ (core.field).summary = "MD5 fingerprint of the file's data.",
+ (google.api.field_behavior) = OUTPUT_ONLY
+ ];
+}
+
+
+// Defines the structure of a task, which can exist on a user's task list in Todolist. This structure is used to store
+// the object in underlying data stores, to render a depiction of the object on the server, to emit the object over a
+// service in either binary or JSON, and/or to render or understand the object on the frontend. That is to say, anytime
+// a to-do task a referenced, it effectively derives from this central definition.
+message TodoTask {
+ option (core.role) = OBJECT;
+
+ // Content type of the embedded description content in the task. If `MARKDOWN` is selected, the rendering agent
+ // (either on the frontend or backend) should render the content into HTML, otherwise, it's fine to use plain text.
+ enum ContentType {
+ // Regular, plain text content.
+ PLAINTEXT = 0;
+
+ // Markdown-based content.
+ MARKDOWN = 1;
+ }
+
+ // Describes description content associated with a Todolist task. This description content can be in any format
+ // specifies in `ContentType`, but must be encoded in Base64 before storing in `payload`.
+ message TaskContent {
+ // Type of content assigned to this content block.
+ ContentType type = 1 [
+ (core.field).summary = "Type of content assigned to this block.",
+ (google.api.field_behavior) = REQUIRED
+ ];
+
+ // Base64-encoded payload of content.
+ bytes payload = 2 [
+ (core.field).summary = "Base64-encoded content value.",
+ (google.api.field_behavior) = REQUIRED
+ ];
+ }
+
+ // Describes, if applicable, the deadline associated with a given Todolist task. Deadlines are always optional, and
+ // can be specified as a day (with a day-level boundary), or as a specific time on a specified day.
+ message TaskDeadline {
+ // Full four-digit Gregorian Calendar year in which the task is due.
+ uint32 year = 1 [
+ (core.field).summary = "Four-digit year in which the task is due.",
+ (google.api.field_behavior) = REQUIRED
+ ];
+
+ // Calendar month in which the task is due.
+ google.type.Month month = 2 [
+ (core.field).summary = "Calendar month in which the task is due.",
+ (google.api.field_behavior) = REQUIRED
+ ];
+
+ // Day of the month in which the task is due.
+ uint32 day = 3 [
+ (core.field).summary = "Day of the month on which the task is due.",
+ (google.api.field_behavior) = REQUIRED
+ ];
+
+ // Describes the specificity of the task deadline.
+ oneof specificity {
+ // The task is due at the specified day's boundary.
+ bool day_boundary = 4 [
+ (core.field).summary = "Flag indicating a day-boundary. If no `time` is provided, this is set to `true`.",
+ (google.api.field_behavior) = OUTPUT_ONLY
+ ];
+
+ // The task is due at a specific time on the specified day.
+ google.type.TimeOfDay time = 5 [
+ (core.field).summary = "Time-of-day at which this task is due.",
+ (google.api.field_behavior) = OPTIONAL
+ ];
+ }
+ }
+
+ // ID assigned to the task, by the storage engine, when it is first written. Generally, the client is able to nominate
+ // a value to be used as the ID when creating a task, but does not have final authority about the ID used for the
+ // record. In other cases, the server or storage engine generates the key ID when the record is first written.
+ TaskKey task_key = 1 [
+ (core.field).type = KEY,
+ (core.field).summary = "Key defining the identity of this individual Todolist task."
+ ];
+
+ // Display title for the task.
+ string title = 2 [
+ (core.field).summary = "Display title for the task.",
+ (google.api.field_behavior) = REQUIRED
+ ];
+
+ // Priority level selected for this task.
+ TaskPriority priority = 3 [
+ (core.field).summary = "Priority level for the task.",
+ (google.api.field_behavior) = OPTIONAL
+ ];
+
+ // Current status of this individual task.
+ TaskStatus status = 4 [
+ (core.field).summary = "Current status of the task.",
+ (google.api.field_behavior) = OUTPUT_ONLY
+ ];
+
+ // Describes any deadline associated with this task.
+ TaskDeadline deadline = 5 [
+ (core.field).summary = "Deadline associated with the task.",
+ (google.api.field_behavior) = OPTIONAL
+ ];
+
+ // Content attached to this task.
+ TaskContent content = 6 [
+ (core.field).summary = "Task content body.",
+ (google.api.field_behavior) = OPTIONAL
+ ];
+
+ // Location associated with this task, if any.
+ google.type.LatLng location = 7 [
+ (core.field).summary = "Associated task location, if any.",
+ (google.api.field_behavior) = OPTIONAL
+ ];
+
+ // File attachments linked to this task.
+ repeated TaskAttachment attachment = 8 [
+ (core.collection).mode = COLLECTION,
+ (core.collection).path = "attachments",
+ (core.field).summary = "Task file attachments, if any.",
+ (google.api.field_behavior) = OUTPUT_ONLY
+ ];
+
+ // Timestamp indicating when this record was last modified. Because of the flag set on this field, the framework will
+ // automatically update this value each time the record is saved.
+ google.protobuf.Timestamp modified = 98 [
+ (core.field).stamp_update = true,
+ (core.field).summary = "Timestamp indicating when this task was last modified.",
+ (google.api.field_behavior) = OUTPUT_ONLY
+ ];
+
+ // Timestamp indicating when this record was originally created. Because of the flag set on this field, the framework
+ // will automatically set this value when the record is first created.
+ google.protobuf.Timestamp created = 99 [
+ (core.field).stamp_create = true,
+ (core.field).summary = "Timestamp indicating when this task was originally created.",
+ (google.api.field_behavior) = OUTPUT_ONLY
+ ];
+}
+
+
+// References an individual task owned by the current user, by its key/id. This message is re-usable over the API, in
+// particular when fetching or otherwise referencing existing tasks. The `id` for a given task is generally assigned by
+// the server when the record is created. Task `version` values change with each update, and are usually set to a
+// monotonically increasing value, such as a timestamp.
+message TaskKey {
+ // ID of the task being referenced. This ID is generated by the underlying data engine when the task record is first
+ // created, or by the server via some custom algorithm.
+ string id = 1 [
+ (core.field).type = ID,
+ (core.field).summary = "Unique ID generated for a given individual Todolist task.",
+ (google.api.field_behavior) = IMMUTABLE
+ ];
+
+ // Specific version of the task being referenced, as applicable. Each time a task is edited, a new "revision" is
+ // created, addressed by the timestamp at which it was written. The timestamp (`version`/`revision`) should be treated
+ // as an opaque, monotonically-increasing value meant for comparison purposes only.
+ uint32 version = 2 [(core.field).summary = "Version number for a given Todolist task payload."];
+
+ // Specifies an optional parent task which owns this task. If specified, the task is a sub-task living under the
+ // referenced parent.
+ TaskKey parent = 3 [
+ (core.field).type = PARENT,
+ (core.field).summary = "Specifies the key of the parent for this task, if any.",
+ (google.api.field_behavior) = IMMUTABLE
+ ];
+}
+
+
+// Specifies a generic container which holds a list of individual tasks owned by the current user, optionally with some
+// metadata describing tasks that weren't listed (i.e. in the case of paging-enabled queries where there are remaining
+// records not included in this response). When operating in keys-only mode, each `TodoTask` item is referenced only by
+// its ID, rather than with a full payload of data. In this operating mode, invoking code must fetch the payload data
+// for the task if it does not already have it on-hand.
+message TaskList {
+ option (core.role) = WIRE;
+
+ // Specifies a set of `TodoTask` payloads that matched the provided query. The structure of this payload is defined by
+ // its single repeated property, `task` (see below).
+ message TaskPayloads {
+ // Specifies the set of task payloads constituent to this `TaskList`. Each task should be enclosed with its key,
+ // since there is no method that produces a task list pre-write. Each task payload is specified with every field
+ // available, unless invoking code provided a mask of fields to return.
+ repeated TodoTask task = 1;
+ }
+
+ // Specifies a set of keys, each of which matched the provided query, and each of which reference an existing
+ // `TodoTask` record, for which a payload may be fetched at the frontend's discretion.
+ message TaskReferences {
+ // Specifies a set of keys, constituent to this `TaskList`, each of which reference an existing `TodoTask`, that
+ // collectively constitute a response to some query for a list of tasks. Each key present matched the query, and can
+ // further be fetched for payload data via the `FetchTask` method, if needed.
+ repeated TaskKey task_key = 1;
+ }
+
+ // Defines metadata regarding a given list of TodoTask records or keys. The properties enclosed in this record supply
+ // ancillary metadata which may be useful for UI purposes or follow-up query calculations.
+ message ListMetadata {
+ // Number of pages which exist, at the provided page limit. This counts the full number of pages, regardless of
+ // which page the user/frontend is currently on.
+ uint32 pages = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
+
+ // Total count of all records that match the provided query. This accounts for uneven result counts vs. page limits
+ // and is usable as a "n of Y" value.
+ uint32 total = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
+
+ // Opaque cursor value to resume this query, if supported by the underlying engine. Supplying this value during
+ // follow-up query submission allows the engine to continue seeking where it left off.
+ string cursor = 3 [(google.api.field_behavior) = OUTPUT_ONLY];
+ }
+
+ // Ancillary metadata describing various values (like the total count of records), attached to the `TaskList` payload
+ // specified. Applies to both keys-only and payload queries.
+ ListMetadata meta = 1;
+
+ // Specifies the list of tasks, either as a list of full payloads (via `TaskPayloads`), or a list of keys, each of
+ // which reference an existing and matching `TodoTask` record.
+ oneof tasklist {
+ // When *not* operating in `keys_only` mode, this property holds a list of matching `TaskPayloads` records, for the
+ // query provided by invoking code. Each task should carry with it a valid and unique `TaskKey`.
+ TaskPayloads tasks = 10;
+
+ // When `keys_only` mode is *active*, this property holds a list of matching `TaskReference` records, each of which
+ // match the query provided by invoking code. Each task key is known to exist at this stage, but fetching payload
+ // data for it is up to the client/frontend.
+ TaskReferences keys = 11;
+ }
+}
+
+
+// Specifies properties or modifiers related to an operation to list tasks for the currently-logged-in user. Query
+// options include the standard offset/limit/cursor properties, and also a mode called `keys_only`, wherein any matching
+// records are returned as keys instead of full payloads. Alternatively, the user may specify `projection` as a field
+// mask of payload values to fetch and return. In this mode, values are fetched directly from indexes, rather than
+// reading the payload from disk.
+message TaskListQuery {
+ option (core.role) = WIRE;
+
+ // Applies a limit to the number of records returned by a given `TaskList` query. If a limit is applied, and the count
+ // of matching records exceeds the limit, the system will begin to page results (i.e. it will affix properties that
+ // indicate the total number of pages, etc). The maximum (and default) limit is `100`.
+ uint32 limit = 1 [(google.api.field_behavior) = OPTIONAL];
+
+ // Applies an offset to the beginning of any resulting records returned by a given `TaskList` query. If an offset is
+ // applied, a corresponding amount of records are skipped before composing and returning the result set to invoking
+ // code. The maximum offset is `1000`.
+ uint32 offset = 2 [(google.api.field_behavior) = OPTIONAL];
+
+ // Informs the `TaskList` logic that we are resuming a query submitted previously. If supported by the engine, the
+ // system may continue to seek on that existing result-set.
+ string cursor = 3 [(google.api.field_behavior) = OPTIONAL];
+
+ // Requests that only a specified set of fields be returned in matching `TodoTask` payloads. Fields not mentioned in
+ // this structure, if present, are elided before returning the payload to the frontend. Has no effect when operating
+ // in `keys_only` mode. With a payload projection, values are fetched directly from indexes, alleviating the need to
+ // read data from disk. Making use of this technique may accelerate non-keys-only queries by a significant margin.
+ google.protobuf.FieldMask projection = 4 [(google.api.field_behavior) = OPTIONAL];
+}
+
+
+// Specifies an RPC/API request to attach an uploaded file to an existing `TodoTask` record. The client frontend is
+// expected to complete the upload to GCS, then dispatch the method constituted by this request structure, to complete
+// the file attachment process.
+message AttachFileRequest {
+ option (core.role) = WIRE;
+
+ // Specifies the TodoTask which owns the referenced `TaskAttachment`.
+ TaskKey task_key = 1 [(google.api.field_behavior) = REQUIRED];
+
+ // Specifies the ID of the file attachment being referenced, under `task_key`.
+ string file_id = 2 [(google.api.field_behavior) = REQUIRED];
+
+ // Specifies the meta-generation for a given object. This is used by GCS to track file metadata changes.
+ uint32 metageneration = 7 [(google.api.field_behavior) = REQUIRED];
+
+ // Specifies the proper generation for a given object. This is used by GCS to track file version changes.
+ uint64 generation = 8 [(google.api.field_behavior) = REQUIRED];
+}
+
+
+// References a file attachment under a specific TodoTask, owned by the currently-logged-in user. Includes a specific
+// reference t
+message AttachedFileReference {
+ option (core.role) = WIRE;
+
+ // Specifies the TodoTask which owns the referenced `TaskAttachment`.
+ TaskKey task_key = 1 [
+ (google.api.field_behavior) = REQUIRED,
+ (google.api.field_behavior) = IMMUTABLE
+ ];
+
+ // Specifies the ID of the file attachment being referenced, under `task_key`.
+ string file_id = 2 [
+ (google.api.field_behavior) = REQUIRED,
+ (google.api.field_behavior) = IMMUTABLE
+ ];
+
+ // Specifies the meta-generation for a given object. This is used by GCS to track file metadata changes.
+ uint32 metageneration = 7 [(google.api.field_behavior) = IMMUTABLE];
+
+ // Specifies the proper generation for a given object. This is used by GCS to track file version changes.
+ uint64 generation = 8 [(google.api.field_behavior) = IMMUTABLE];
+}
+
+
+// Describes known error states, that may occur when interacting with the Tasks API. These errors are specific to the
+// nature of the logic at hand and semantically extend the meaning of whatever RPC status is given to a response.
+enum TodolistError {
+ option (core.enum_role) = ERRORS;
+
+ // The error state was not specified, or could not be recognized.
+ UNSPECIFIED_ERROR = 0;
+
+ // The submitted `TodoTask` record was found to be invalid for some reason. Details are specified in the additional
+ // error metadata and error message.
+ TASK_INVALID = 1;
+
+ // The submitted `TodoTask` record could not be completed, or could not be updated, either because the task or version
+ // specified already exists, or because a competing/more up-to-date change already occurred.
+ TASK_CONFLICT = 2;
+
+ // The system could not locate a `TodoTask` record matching the provided `TodoKey`.
+ TASK_NOT_FOUND = 3;
+
+ // The provided `TodoKey` was found to be invalid, either because it had a missing or malformed ID, or because the
+ // system expected a version to be specified and none was provided.
+ TASK_KEY_INVALID = 4;
+}
+
+
+// Describes the main `Tasks` service, which is responsible for enabling a user with the ability to manage their tasks
+// in the Todolist frontend application. The service allows creation of new tasks, editing of existing tasks, checking-
+// off of tasks as they are completed, and clearing completed tasks.
+//
+// ### API Invocation
+// Two styles of API are provided as part of this service:
+// - **REST/RPC**: You can dispatch the API with REST-ful JSON or gRPC. In this dispatch style, all operations are unary
+// and function with strong consistency (as long as the underlying data store makes such guarantees for transactions).
+// - **Streaming**: Where supported, the client may also use the long-form streaming method, which has the advantage of
+// supporting server-generated task/task-list change events. In this mode, each front-end "session" subscribes to the
+// proper spot in Firestore server-side, and exchanges both updates and changes as needed on a duplex basis until the
+// session closes.
+//
+// ### Authentication
+// Firstly, the frontend client must obtain and affix a valid and un-expired/un-revoked API key, duly authorized to use
+// the API being exposed. Secondly, the client must obtain a user authorization token, via the normal Firebase means.
+// These values must be attached to each unary API request, or the beginning of a streaming session, as described below:
+//
+// #### Affixing the API key
+// The API key identifies the application which is originating API traffic. It is generally restricted by referrer (when
+// used in a web context), or IP address (for servers), or by Android/iOS bundle ID. You can learn more about how Google
+// works with API keys [here](https://cloud.google.com/docs/authentication/api-keys).
+//
+// How you affix the API key depends on your invocation style:
+// - **REST/RPC**: You may use one or both of the following options:
+// - **`X-API-Key` Header**: Specify the key, verbatim, in the header `X-API-Key`.
+// - **`key` Parameter**: Specify the key, verbatim, in the query parameter `key`.
+// - **gRPC**: Affix the API key as a string metadata entry, at the name `x-api-key`.
+//
+// #### Affixing the auth token
+// The *authorization token* identifies the end-user who is using the Todolist application to the API, and contains a
+// cryptographic payload which enables access to their data, on their behalf. It is a JWT but must be treated as an
+// opaque value, and can be obtained via normal means using [Firebase Auth](https://firebase.google.com/docs/auth).
+//
+// After obtaining a token, or checking that one on-hand is not expired, it is affixed depending on your desired API
+// invocation style:
+// - **REST/RPC**: Attach the token in the `Authorization` header, prefixed with the type token `Bearer`, and separated
+// by a single space.
+// - **gRPC**: Attach the token in a string metadata entry called `authorization`, prefixed with the type token `Bearer`
+// and separated by a single space.
+//
+// #### Token expiration & renewal
+// By default, authorization tokens expire in a maximum of *1 (one) wall-clock hour*, so, it is imperative in the front-
+// end client that the expiration be checked before use, or that code is written to react to *403 Forbidden* responses
+// as a result of expired authorization tokens. API keys do not expire.
+//
+// To renew a token, use the methods defined in Firebase Auth for the platform you're on. All platforms allow some form
+// of token refresh/renewal.
+//
+// ### Streaming vs. Polling
+// To accomplish the real-time nature of the Todolist app, this API supports a streaming interface (described above).
+// When using the streaming interface, changes occur and propagate essentially in realtime. When and where the streaming
+// interface is not supported or desired, the end-user can opt for polling. In this case, it is recommended to check for
+// new tasks or task changes every *5 seconds*, using the `Changelog` method.
+service Tasks {
+ option (google.api.default_host) = "todolist.elide.tools";
+
+ // Execute a simple health check against the `Tasks` service. Perform any local logic needed to ensure the service is
+ // up and ready to receive traffic. If the service is not ready, a regular protocol error will be returned - if it is,
+ // the result is an empty successful response.
+ rpc Health(google.protobuf.Empty) returns (google.protobuf.Empty) {
+ option (google.api.http).get = "/v1/health";
+ }
+
+ // Create a new task on the currently-logged-in user's task list. This method operates in an idempotent manner if (and
+ // only if) the client nominates an ID to use for the task object. Otherwise, there is no way for the backend to
+ // distinguish one generic task list entry from another.
+ rpc CreateTask(TodoTask) returns (TaskKey) {
+ option (google.api.http) = {
+ post: "/v1/tasks"
+ body: "*"
+ };
+ }
+
+ // Update an existing task, referenced by its globally-unique ID. This method is always idempotent, based on the value
+ // of the `modified` timestamp (therefore, this value must change every time the record is modified, otherwise, the
+ // backend may identify it as a different record version).
+ rpc UpdateTask(TodoTask) returns (TaskKey) {
+ option (google.api.http) = {
+ put: "/v1/tasks/{task_key.id}"
+ body: "*"
+ };
+ }
+
+ // Retrieve an existing task, known to exist, by its globally-unique ID. This method returns the payload data for the
+ // referenced task if it can be found, or `404` if it cannot be found.
+ rpc FetchTask(TaskKey) returns (TodoTask) {
+ option (google.api.http) = {
+ get: "/v1/tasks/{id}"
+ };
+ }
+
+ // "Check off" an existing task owned by the currently-logged-in user, and referenced by its globally-unique ID. This
+ // performs a regular update to check the task off, and then responds to the frontend so it may account for any UI
+ // changes that must subsequently occur.
+ rpc CheckOffTask(TaskKey) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put: "/v1/tasks/{id}/complete"
+ body: "*"
+ };
+ }
+
+ // Permanently delete a single task from a user's task list. As opposed to "completing" them, this method entirely
+ // removes the task from the user's list, and deletes the underlying data from disk. As such, the data lost in this
+ // operation is un-recoverable, and so executing this method should be done with care.
+ rpc DeleteTask(TaskKey) returns (google.protobuf.Empty) {
+ option (google.api.http).get = "/v1/tasks/{id}";
+ }
+
+ // After a file has been uploaded by the user, from the frontend, it may be attached to a specific Todolist task via
+ // this method. Files may only be attached to a maximum of one (1) task, and their lifecycle follows that task. For
+ // instance, fully deleting a task will also fully delete any files attached to it.
+ rpc AttachFile(AttachFileRequest) returns (AttachedFileReference) {
+ option (google.api.http) = {
+ post: "/v1/tasks/{task_key.id}/files"
+ body: "*"
+ };
+ }
+
+ // Fetch an individual file attachment, which exists on a Todolist task owned by the currently-logged-in user. If the
+ // specified file attachment cannot be found, an `HTTP 404`/`NOT_FOUND` is returned. Likewise, if the attachment is
+ // linked to a task not owned by the current user, an `HTTP 404`/`NOT_FOUND` is returned.
+ //
+ // This method only returns metadata for the requested file: to acquire the actual file data, the client must request
+ // such data directly from GCS, via the references enclosed in the `TaskAttachment` response. Serving URLs provided by
+ // the system are generally signed so that they may only be served to authorized users.
+ rpc FetchFile(AttachedFileReference) returns (TaskAttachment) {
+ option (google.api.http).get = "/v1/tasks/{task_key.id}/files/{file_id}";
+ }
+
+ // Delete an existing attached file, on an existing Todolist task. This removes the metadata record that links the
+ // task to the file, and also permanently deletes the file on disk. As such, this method should be run with care,
+ // after confirming intent with the user in the Todolist app UI.
+ rpc DeleteFile(AttachedFileReference) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete: "/v1/tasks/{task_key.id}/files/{file_id}"
+ };
+ }
+
+ // List all tasks on the currently-logged-in user's task list. If no query details are provided, tasks are listed in
+ // the order in which they should be displayed, otherwise, tasks are listed according to the sort/ordering directives
+ // in the query, or, if none are present, the default order is by key (lexicographically). Because keys increase
+ // monotonically, this should essentially yield the same order as task-creation (ascending).
+ rpc ListTasks(TaskListQuery) returns (TaskList) {
+ option (google.api.http).get = "/v1/tasks";
+ }
+
+ // Gather any completed tasks on the current user's task list, and mark each one as archived, so that it no longer
+ // shows up in their task list by default. In an "archived" state, a task can still be visible, but only if the
+ // requested list indicates it wishes to receive archived task data.
+ rpc ClearCompleted(google.protobuf.Empty) returns (TaskList) {
+ option (google.api.http).put = "/v1/tasks/clear";
+ }
+}
diff --git a/vendor/google/safe-html-types b/vendor/google/safe-html-types
new file mode 160000
index 000000000..850773545
--- /dev/null
+++ b/vendor/google/safe-html-types
@@ -0,0 +1 @@
+Subproject commit 8507735457ea41a37dfa027fb176d49d5783c4ba
From 343d995be4aa100b33d6c5c818b768234013cd5a Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sun, 23 Feb 2020 11:01:38 -0800
Subject: [PATCH 002/103] Add simple tests for Soy renaming maps
---
java/gust/Core.java | 2 +-
javatests/gust/backend/TemplateProviderTest.java | 14 ++++++++++++++
2 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/java/gust/Core.java b/java/gust/Core.java
index 05a86f42f..d4dbd6d53 100644
--- a/java/gust/Core.java
+++ b/java/gust/Core.java
@@ -12,7 +12,7 @@
*/
@JsType
@SuppressWarnings("WeakerAccess")
-public class Core {
+public final class Core {
private Core() { /* Disallow instantiation. */ }
/** Version of the framework. Injected at build time. */
diff --git a/javatests/gust/backend/TemplateProviderTest.java b/javatests/gust/backend/TemplateProviderTest.java
index af8d5c884..0a831e582 100644
--- a/javatests/gust/backend/TemplateProviderTest.java
+++ b/javatests/gust/backend/TemplateProviderTest.java
@@ -28,4 +28,18 @@ public final class TemplateProviderTest {
assertNotNull("`TemplateProvider.provideCompiledTemplates` should never return `null`",
provider.provideCompiledTemplates());
}
+
+ /** Ensure that, by default, {@link TemplateProvider#idRenamingMap()} is null . */
+ @Test public void soyRenamingIDDefaultNull() {
+ final TemplateProvider provider = new TemplateProvider();
+ assertNull("`TemplateProvider.idRenamingMap()` should return `null` by default",
+ provider.idRenamingMap());
+ }
+
+ /** Ensure that, by default, {@link TemplateProvider#cssRenamingMap()} is null . */
+ @Test public void soyRenamingClassDefaultNull() {
+ final TemplateProvider provider = new TemplateProvider();
+ assertNull("`TemplateProvider.cssRenamingMap()` should return `null` by default",
+ provider.cssRenamingMap());
+ }
}
From 3060c279e497541cf9a19390987a1f548eeea72b Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sun, 23 Feb 2020 11:02:16 -0800
Subject: [PATCH 003/103] Cleanup cloudbuild targets
---
cloudbuild.yaml | 3 ---
1 file changed, 3 deletions(-)
diff --git a/cloudbuild.yaml b/cloudbuild.yaml
index 2d9524193..2b3fd026d 100644
--- a/cloudbuild.yaml
+++ b/cloudbuild.yaml
@@ -8,9 +8,6 @@ steps:
- --remote_instance_name=projects/bloom-sandbox/instances/default_instance
- --
- //gust/...
- - //js/...
- - //java/...
- - //style/...
timeout: 30m
options:
From ae16d56d651a390276aad2350843ba4efe52824d Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sun, 23 Feb 2020 11:12:38 -0800
Subject: [PATCH 004/103] Switch tests off in GCB
---
cloudbuild.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cloudbuild.yaml b/cloudbuild.yaml
index 2b3fd026d..9580f9c11 100644
--- a/cloudbuild.yaml
+++ b/cloudbuild.yaml
@@ -3,7 +3,7 @@ steps:
- name: 'l.gcr.io/google/bazel'
args:
- --bazelrc=.bazelrc
- - test
+ - build
- --config=remote
- --remote_instance_name=projects/bloom-sandbox/instances/default_instance
- --
From d0d3041d322617ce72ee584a212ed9b762afd7e0 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sun, 23 Feb 2020 12:45:30 -0800
Subject: [PATCH 005/103] Cleanup and testing for existing core.backend logic
---
defs/toolchain/backend.bzl | 2 +
defs/toolchain/java/rules.bzl | 9 +--
java/gust/Core.java | 10 +--
java/gust/backend/Application.java | 44 ++++++++++---
java/gust/backend/TemplateProvider.java | 66 ++++++++++++++++---
javatests/BUILD.bazel | 1 +
javatests/gust/backend/ApplicationTest.java | 17 +++++
javatests/gust/backend/BUILD.bazel | 8 +++
javatests/gust/backend/NoConfigTest.java | 23 +++++++
.../gust/backend/TemplateProviderTest.java | 63 ++++++++++++++++++
samples/soy_ssr/src/BUILD.bazel | 2 +-
samples/todolist/src/BUILD.bazel | 3 +-
12 files changed, 221 insertions(+), 27 deletions(-)
create mode 100644 javatests/gust/backend/NoConfigTest.java
diff --git a/defs/toolchain/backend.bzl b/defs/toolchain/backend.bzl
index 2d20042dd..db1e11eb6 100644
--- a/defs/toolchain/backend.bzl
+++ b/defs/toolchain/backend.bzl
@@ -7,6 +7,7 @@ load(
_micronaut_service = "micronaut_service",
_micronaut_controller = "micronaut_controller",
_micronaut_application = "micronaut_application",
+ _micronaut_interceptor = "micronaut_interceptor",
_micronaut_native_configset = "micronaut_native_configset",
)
@@ -45,6 +46,7 @@ micronaut_library = _micronaut_library
micronaut_service = _micronaut_service
micronaut_controller = _micronaut_controller
micronaut_application = _micronaut_application
+micronaut_interceptor = _micronaut_interceptor
micronaut_native_configset = _micronaut_native_configset
py_test = _py_test
diff --git a/defs/toolchain/java/rules.bzl b/defs/toolchain/java/rules.bzl
index 390156fb8..c37030ded 100644
--- a/defs/toolchain/java/rules.bzl
+++ b/defs/toolchain/java/rules.bzl
@@ -229,7 +229,7 @@ def _micronaut_library(name,
def _micronaut_controller(name,
srcs,
deps = [],
- protos = [],
+ proto_deps = [],
templates = [],
runtime_deps = [],
data = [],
@@ -241,7 +241,7 @@ def _micronaut_controller(name,
_micronaut_library(
name = name,
srcs = srcs,
- proto_deps = protos,
+ proto_deps = proto_deps,
templates = templates,
deps = (deps or []),
runtime_deps = runtime_deps,
@@ -254,7 +254,7 @@ def _micronaut_controller(name,
def _micronaut_service(name,
srcs,
deps = [],
- protos = [],
+ proto_deps = [],
services = [],
templates = [],
runtime_deps = [],
@@ -266,7 +266,7 @@ def _micronaut_service(name,
_micronaut_library(
name = name,
srcs = srcs,
- proto_deps = protos + services,
+ proto_deps = proto_deps + services,
templates = templates,
deps = (deps or []) + [
("%s-%s" % (svc, GRPCJAVA_POSTFIX_))
@@ -484,5 +484,6 @@ jdk_library = _jdk_library
micronaut_library = _micronaut_library
micronaut_service = _micronaut_service
micronaut_controller = _micronaut_controller
+micronaut_interceptor = _micronaut_service
micronaut_application = _micronaut_application
micronaut_native_configset = _micronaut_native_configset
diff --git a/java/gust/Core.java b/java/gust/Core.java
index d4dbd6d53..a607722ca 100644
--- a/java/gust/Core.java
+++ b/java/gust/Core.java
@@ -15,18 +15,18 @@
public final class Core {
private Core() { /* Disallow instantiation. */ }
- /** Version of the framework. Injected at build time. */
- static final String frameworkVersion = System.getProperty("gust.version", "alpha");
-
/** Holds the current runtime engine. */
static final String currentEngine = System.getProperty("gust.engine", "unknown");
- /** Holds the current `debug` flag status. */
- static final Boolean debugMode = Boolean.parseBoolean(System.getProperty("gust.debug", "false"));
+ /** Version of the framework. Injected at build time. */
+ static final String frameworkVersion = System.getProperty("gust.version", "alpha");
/** Holds the current `dev` flag status. */
static final Boolean devMode = Boolean.parseBoolean(System.getProperty("gust.dev", "false"));
+ /** Holds the current `debug` flag status. */
+ static final Boolean debugMode = Boolean.parseBoolean(System.getProperty("gust.debug", "false"));
+
/**
* Retrieve the application version setting, which is applied via the JVM system property gust.version .
* This value also shows up in frontend libraries as gust.version . The default value for this property, if
diff --git a/java/gust/backend/Application.java b/java/gust/backend/Application.java
index c9ecfde9f..2453b5ce0 100644
--- a/java/gust/backend/Application.java
+++ b/java/gust/backend/Application.java
@@ -10,7 +10,9 @@
/**
* Main application class, which bootstraps a backend Gust app via Micronaut, including any configured controllers,
- * services, or assets. This is where execution starts when running on a JVM.
+ * services, or assets. This is where execution starts when running on a JVM. Micronaut uses build-time annotation
+ * processing, and a number of other techniques, to pre-initialize and wire up the app before it ever gets to the
+ * server to be executed at runtime.
*/
@SuppressWarnings("WeakerAccess")
public final class Application {
@@ -44,6 +46,7 @@ public static void loadConfig(@Nonnull String role, @Nonnull String name, @Nulla
try (final InputStream defaultConfigStream = Application.class.getResourceAsStream(alt)) {
if (defaultConfigStream == null)
throw new IOException("Loaded config was `null` (for configuration '" + role + "').");
+ return; // we loaded it at the alternate location: good to go
}
}
throw new IOException("Config stream was `null` when loaded (for configuration '" + role + "').");
@@ -56,20 +59,45 @@ public static void loadConfig(@Nonnull String role, @Nonnull String name, @Nulla
}
/**
- * Main entrypoint into a Gust backend application, powered by Micronaut. This function will pre-load any static stuff
- * that needs to be bootstrapped, and then it initializes the app via Micronaut.
+ * Load main application configs, including the `app` config (usually `application.yml`), containing configuration for
+ * Micronaut, and `logback.xml` which contains configuration for logging. If either config file cannot be loaded, then
+ * an error is thrown which prevents server startup.
*
- * @param args Arguments passed on the command line.
+ * @param exitOnFail Whether to exit the program if a failure occurs.
*/
- public static void main(String[] args) {
+ public static void load(boolean exitOnFail) {
try {
// validate config & start the server
loadConfig("app", rootConfig, defaultConfig);
loadConfig("logging", loggingConfig, defaultLoggingConfig);
- Micronaut.run(Application.class);
} catch (Throwable ex) {
- System.err.println("Uncaught exception: " + ex.getMessage());
- ex.printStackTrace(System.err);
+ reportStartupError(ex, exitOnFail);
+ if (!exitOnFail) throw ex;
}
}
+
+ /**
+ * Report an error that occurred during server startup, which prevented the server from starting. Errors encountered
+ * and reported in this manner are fatal.
+ *
+ * @param err Fatal error that occurred and prevented server startup.
+ * @param exitOnFail Whether to exit the program if a failure occurs.
+ */
+ public static void reportStartupError(@Nonnull Throwable err, boolean exitOnFail) {
+ System.err.println("Uncaught exception: " + err.getMessage());
+ err.printStackTrace(System.err);
+ if (exitOnFail) System.exit(1);
+ else throw new RuntimeException(err);
+ }
+
+ /**
+ * Main entrypoint into a Gust backend application, powered by Micronaut. This function will pre-load any static stuff
+ * that needs to be bootstrapped, and then it initializes the app via Micronaut.
+ *
+ * @param args Arguments passed on the command line.
+ */
+ public static void main(String[] args) {
+ load(true);
+ Micronaut.run(Application.class);
+ }
}
diff --git a/java/gust/backend/TemplateProvider.java b/java/gust/backend/TemplateProvider.java
index e1d091356..e64bc6fc7 100644
--- a/java/gust/backend/TemplateProvider.java
+++ b/java/gust/backend/TemplateProvider.java
@@ -8,25 +8,73 @@
import io.micronaut.views.soy.SoyFileSetProvider;
import io.micronaut.views.soy.SoyNamingMapProvider;
+import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.inject.Singleton;
/** Default Soy template provider. */
@Singleton
-public class TemplateProvider implements SoyFileSetProvider, SoyNamingMapProvider {
- private static final SoySauce compiledTemplates;
+public final class TemplateProvider implements SoyFileSetProvider, SoyNamingMapProvider {
+ /** Default set of templates, detected from the classpath. */
+ private static final @Nonnull SoySauce defaultCompiledTemplates;
+
+ /** Templates explicitly provided by the developer. */
+ private @Nullable SoySauce overrideTemplates = null;
+
+ /** CSS class renaming map to apply during render. */
+ private @Nullable SoyIdRenamingMap idRenamingMap = null;
+
+ /** CSS ID renaming map to apply during render. */
+ private @Nullable SoyCssRenamingMap cssRenamingMap = null;
static {
- compiledTemplates = new SoySauceBuilder().build();
+ defaultCompiledTemplates = new SoySauceBuilder().build();
+ }
+
+ // -- Public API: Installation -- //
+
+ /**
+ * Install a set of compiled templates manually into the local template provider context. These templates will be used
+ * instead of any detected templates on the classpath (via the {@link #defaultCompiledTemplates}).
+ *
+ * @param compiled Compiled templates to install.
+ * @return Template provider, for method chaining.
+ */
+ public TemplateProvider installTemplates(@Nonnull SoySauce compiled) {
+ this.overrideTemplates = compiled;
+ return this;
}
+ /**
+ * Install a Soy-compatible style renaming map for CSS classes, and optionally one for CSS IDs as well. These maps are
+ * installed locally and provided to Soy during template render operations. Any templates rendered subsequent to this
+ * call should have the rewritten styles applied in the DOM, and with any served assets associated with the page.
+ *
+ * If an existing ID rewriting map is mounted, a call to unseat it with `null` will be ignored.
+ *
+ * @param cssMap CSS renaming map to apply during render.
+ * @param idMap Optional ID renaming map to apply during render.
+ * @return Template provider, for method chaining.
+ */
+ public TemplateProvider installRenamingMaps(@Nonnull SoyCssRenamingMap cssMap, @Nullable SoyIdRenamingMap idMap) {
+ this.cssRenamingMap = cssMap;
+ if (this.idRenamingMap == null || idMap != null)
+ this.idRenamingMap = idMap;
+ return this;
+ }
+
+ // -- Public API: Consumption -- //
+
/**
* Provide a Soy file set for the embedded templates.
*
* @return Prepared Soy file set.
+ * @deprecated Soy file sets are slow due to runtime template interpretation. Please use compiled templates via the
+ * {@link SoySauce} class instead. See the see-also listings for this method for more information.
+ * @see #provideCompiledTemplates() to acquire compiled template instances.
*/
- @Nullable @Override public SoyFileSet provideSoyFileSet() {
+ @Deprecated @Nullable @Override public SoyFileSet provideSoyFileSet() {
return null;
}
@@ -35,8 +83,10 @@ public class TemplateProvider implements SoyFileSetProvider, SoyNamingMapProvide
*
* @return Pre-compiled Soy templates.
*/
- @Nullable @Override public SoySauce provideCompiledTemplates() {
- return compiledTemplates;
+ @Nonnull @Override public SoySauce provideCompiledTemplates() {
+ if (overrideTemplates != null)
+ return overrideTemplates;
+ return defaultCompiledTemplates;
}
/**
@@ -45,7 +95,7 @@ public class TemplateProvider implements SoyFileSetProvider, SoyNamingMapProvide
* @return `null`, by default.
*/
@Nullable @Override public SoyCssRenamingMap cssRenamingMap() {
- return null;
+ return cssRenamingMap;
}
/**
@@ -54,6 +104,6 @@ public class TemplateProvider implements SoyFileSetProvider, SoyNamingMapProvide
* @return `null`, by default.
*/
@Nullable @Override public SoyIdRenamingMap idRenamingMap() {
- return null;
+ return idRenamingMap;
}
}
diff --git a/javatests/BUILD.bazel b/javatests/BUILD.bazel
index d45414f8b..25795504d 100644
--- a/javatests/BUILD.bazel
+++ b/javatests/BUILD.bazel
@@ -9,6 +9,7 @@ test_suite(
tests = [
"//javatests/gust:DualStackTest",
"//javatests/gust/backend:ApplicationTest",
+ "//javatests/gust/backend:NoConfigTest",
"//javatests/gust/backend:TemplateProviderTest",
],
)
diff --git a/javatests/gust/backend/ApplicationTest.java b/javatests/gust/backend/ApplicationTest.java
index e82713e4a..bf029144d 100644
--- a/javatests/gust/backend/ApplicationTest.java
+++ b/javatests/gust/backend/ApplicationTest.java
@@ -3,6 +3,8 @@
import gust.backend.Application;
import org.junit.Test;
+import java.io.IOException;
+
/** Test the default Micronaut application runner class. */
public final class ApplicationTest {
@@ -15,4 +17,19 @@ public final class ApplicationTest {
@Test public void testLoadApplicationYamlValid() {
Application.loadConfig("app", Application.rootConfig, Application.defaultConfig);
}
+
+ /** Try running the config-load routine which runs on server startup. It shouldn't fail. */
+ @Test public void testBasicConfigLoad() {
+ Application.load(false);
+ }
+
+ /** Try reporting a fatal error that occurred during startup. This also shouldn't fail. */
+ @Test(expected = RuntimeException.class) public void testBasicReportErrorStderr() {
+ Application.reportStartupError(new IOException("Something happened"), false);
+ }
+
+ /** Test fallback configuration loading. Should not produce an error, even though the first file doesn't exist. */
+ @Test public void testLoadConfigDoesNotExist() {
+ Application.loadConfig("bunk", "some-nonexistent-name.yml", Application.rootConfig);
+ }
}
diff --git a/javatests/gust/backend/BUILD.bazel b/javatests/gust/backend/BUILD.bazel
index 2bd05e9a1..6922264a9 100644
--- a/javatests/gust/backend/BUILD.bazel
+++ b/javatests/gust/backend/BUILD.bazel
@@ -29,3 +29,11 @@ jdk_test(
test_class = "javatests.gust.backend.TemplateProviderTest",
testonly = True,
)
+
+jdk_test(
+ name = "NoConfigTest",
+ srcs = ["NoConfigTest.java"],
+ deps = ["//java/gust/backend:Application"],
+ test_class = "javatests.gust.backend.NoConfigTest",
+ testonly = True,
+)
diff --git a/javatests/gust/backend/NoConfigTest.java b/javatests/gust/backend/NoConfigTest.java
new file mode 100644
index 000000000..e7c5f0137
--- /dev/null
+++ b/javatests/gust/backend/NoConfigTest.java
@@ -0,0 +1,23 @@
+package javatests.gust.backend;
+
+import gust.backend.Application;
+import org.junit.Test;
+
+
+/** Test failure logic when required app configs aren't present. */
+public final class NoConfigTest {
+ /** Test loading the app when no required configs are present at all. This should fail. */
+ @Test(expected = RuntimeException.class) public void testLoadAppNoConfigs() {
+ Application.load(false);
+ }
+
+ /** Test force-loading a specific config that does not exist. */
+ @Test(expected = RuntimeException.class) public void testLoadConfigDoesNotExist() {
+ Application.loadConfig("bunk", "some-nonexistent-name.yml", "hi-i-also-dont-exist.yml");
+ }
+
+ /** Test force-loading a specific config that does not exist, with no fallback. */
+ @Test(expected = RuntimeException.class) public void testLoadConfigDoesNotExistNoFallback() {
+ Application.loadConfig("bunk", "some-nonexistent-name.yml", null);
+ }
+}
diff --git a/javatests/gust/backend/TemplateProviderTest.java b/javatests/gust/backend/TemplateProviderTest.java
index 0a831e582..382edff8f 100644
--- a/javatests/gust/backend/TemplateProviderTest.java
+++ b/javatests/gust/backend/TemplateProviderTest.java
@@ -1,10 +1,18 @@
package javatests.gust.backend;
+import com.google.template.soy.jbcsrc.api.SoySauce;
+import com.google.template.soy.jbcsrc.api.SoySauceBuilder;
+import com.google.template.soy.shared.SoyCssRenamingMap;
+import com.google.template.soy.shared.SoyIdRenamingMap;
import org.junit.Test;
import gust.backend.TemplateProvider;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertNull;
@@ -42,4 +50,59 @@ public final class TemplateProviderTest {
assertNull("`TemplateProvider.cssRenamingMap()` should return `null` by default",
provider.cssRenamingMap());
}
+
+ /** Ensure that, if templates are installed on the provider, it returns those instead of the default set. */
+ @Test public void soyProvideInstalledTemplates() {
+ final TemplateProvider provider = new TemplateProvider();
+ final SoySauce sauce = new SoySauceBuilder().build();
+ provider.installTemplates(sauce);
+
+ final SoySauce other = provider.provideCompiledTemplates();
+ assertSame("`TemplateProvider.provideCompiledTemplates()` should provide installed templates over defaults",
+ sauce,
+ other);
+ }
+
+ /** Ensure that, if renaming maps are installed on the provider, they are properly returned. */
+ @Test public void soyProvideRenamingMaps() {
+ final TemplateProvider provider = new TemplateProvider();
+ final SoyCssRenamingMap cssMap = new SoyCssRenamingMap() {
+ @Nullable @Override
+ public String get(@Nonnull String className) { return null; }
+ };
+
+ provider.installRenamingMaps(cssMap, null);
+
+ final SoyCssRenamingMap other = provider.cssRenamingMap();
+ assertSame("`TemplateProvider.cssRenamingMap()` should provide installed renaming map, if any",
+ cssMap,
+ other);
+
+ final SoyIdRenamingMap idOther = provider.idRenamingMap();
+ assertNull("`TemplateProvider.idRenamingMap()` should not mash state with `cssRenamingMap()`",
+ idOther);
+
+ final SoyIdRenamingMap idMap = new SoyIdRenamingMap() {
+ @Nullable @Override
+ public String get(@Nonnull String idName) { return null; }
+ };
+
+ provider.installRenamingMaps(cssMap, idMap);
+
+ final SoyIdRenamingMap idOther2 = provider.idRenamingMap();
+ assertSame("`TemplateProvider.idRenamingMap()` should provide installed renaming map, if any",
+ idMap,
+ idOther2);
+
+ provider.installRenamingMaps(cssMap, null);
+ final SoyCssRenamingMap cssMap2 = provider.cssRenamingMap();
+ final SoyIdRenamingMap idOther3 = provider.idRenamingMap();
+ assertSame("`TemplateProvider.idRenamingMap()` should not allow `null` overwrite",
+ idMap,
+ idOther3);
+
+ assertSame("`TemplateProvider.cssRenamingMap()` should be re-installable",
+ cssMap2,
+ other);
+ }
}
diff --git a/samples/soy_ssr/src/BUILD.bazel b/samples/soy_ssr/src/BUILD.bazel
index 236ac4a09..53e13cd42 100644
--- a/samples/soy_ssr/src/BUILD.bazel
+++ b/samples/soy_ssr/src/BUILD.bazel
@@ -44,7 +44,7 @@ template_library(
micronaut_controller(
name = "SSRKotlinController",
srcs = ["SSRKotlinController.kt"],
- protos = [":context"],
+ proto_deps = [":context"],
templates = [":ssr"],
)
diff --git a/samples/todolist/src/BUILD.bazel b/samples/todolist/src/BUILD.bazel
index e198431cf..4f6fe790a 100644
--- a/samples/todolist/src/BUILD.bazel
+++ b/samples/todolist/src/BUILD.bazel
@@ -18,6 +18,7 @@ load(
"micronaut_service",
"micronaut_controller",
"micronaut_application",
+ "micronaut_interceptor",
)
@@ -54,7 +55,7 @@ ssr_library(
proto_deps = [":todolist_proto"],
)
-micronaut_library(
+micronaut_interceptor(
name = "TodolistInterceptor",
srcs = ["server/TodolistInterceptor.kt"],
)
From 65ca6a082e1fc0b73517bfde74884a4140f85753 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sun, 23 Feb 2020 15:37:23 -0800
Subject: [PATCH 006/103] Fix definitions for JS interop
---
defs/build.bzl | 23 +++++++++++++++--------
1 file changed, 15 insertions(+), 8 deletions(-)
diff --git a/defs/build.bzl b/defs/build.bzl
index b7c0e38d1..fa1e73ee4 100644
--- a/defs/build.bzl
+++ b/defs/build.bzl
@@ -128,7 +128,14 @@ DEPS = {
"type": "github",
"repo": "google/elemental2",
"target": "d328c1e688cc5e7e9eaec5c5d264423878827925",
- "seal": None},
+ "seal": "ac6018af3274fd80d7d185305575474b4dfa1367e2c360e9f3c038f06affd7da"},
+
+ # Google: JS Interop (Base)
+ "com_google_jsinterop_base": {
+ "type": "github",
+ "repo": "google/jsinterop-base",
+ "target": "172a78020d428e46cc86bcaebe946589c07452ae",
+ "seal": "8edf4e4e51cff5c7346f6d43f2b822767ae16f1b65ca4d26b7040111d1f62c48"},
# Google: JS Interop (Generator)
"com_google_jsinterop_generator": {
@@ -137,6 +144,13 @@ DEPS = {
"target": "4d566c621720f47d0b5adb1e03d617c1819d2e87",
"seal": "df4aafb211742493b8bf6a0e176312d56d4a8d92aa8b50568ea2912be9bb615f"},
+ # Google: JS Interop (Annotations)
+ "com_google_jsinterop_annotations_head": {
+ "type": "github",
+ "repo": "google/jsinterop-annotations",
+ "target": "8b6080dd1b0b9f60f4175243ea8038bf7fb8a557",
+ "seal": "51aa1d36cbe736fc98fa53a825eff25c6e0811dc656d23979d837721f72e78cf"},
+
# Google: API (Core)
"com_google_api": {
"type": "github",
@@ -158,13 +172,6 @@ DEPS = {
"target": "f236a6964669a70253ad16fdb9f627834997519e",
"seal": "6256fb60b6749789a40203d32daf217638b0ae5daeca93056b9c1fb048672042"},
- # Google: JS Interop
- "com_google_jsinterop_annotations_head": {
- "type": "github",
- "repo": "google/jsinterop-annotations",
- "target": "8b6080dd1b0b9f60f4175243ea8038bf7fb8a557",
- "seal": "51aa1d36cbe736fc98fa53a825eff25c6e0811dc656d23979d837721f72e78cf"},
-
# BuildStack: Protobuf Rules
"build_stack_rules_proto": {
"type": "github",
From 72c1987f47137baafc6a857d9f06f2da4e22366b Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Wed, 26 Feb 2020 14:53:08 -0800
Subject: [PATCH 007/103] Early `PageContext` logic and example
- Gather proto and other page context into `SoyContextMediator`
- Override Micronaut Views/Views Soy deps
(see micronaut-projects/micronaut-views#34)
- Update Soy lib and jssrc deps
- Fix CSP error specified by default in `application.yml`
- Serve HTML from controller
---
defs/build.bzl | 43 +++-
defs/toolchain/java/repos.bzl | 7 +-
defs/toolchain/java/rules.bzl | 8 +-
java/gust/backend/BUILD.bazel | 6 +
java/gust/backend/PageContext.java | 218 ++++++++++++++++++
maven_install.json | 8 +-
samples/todolist/src/application.yml | 2 +-
samples/todolist/src/server/HomeController.kt | 14 +-
8 files changed, 285 insertions(+), 21 deletions(-)
create mode 100644 java/gust/backend/PageContext.java
diff --git a/defs/build.bzl b/defs/build.bzl
index fa1e73ee4..21b9cbabc 100644
--- a/defs/build.bzl
+++ b/defs/build.bzl
@@ -6,6 +6,11 @@ load(
"git_repository",
)
+load(
+ "//defs/toolchain:deps.bzl",
+ "maven",
+)
+
DEPS = {
# Bazel: Skylib
"bazel_skylib": {
@@ -255,8 +260,8 @@ DEPS = {
"com_google_template_soy": {
"type": "java",
"licenses": ["notice"],
- "targets": ["https://storage.googleapis.com/bloom-software/frontend/soy/soy-lib-b25.jar"],
- "seal": "3222dc45b2ec908d49b595c6476b8b98be354e5c73501db4393bc90aa49313ae",
+ "targets": ["https://storage.googleapis.com/bloom-software/frontend/soy/soy-lib-b27.jar"],
+ "seal": "668dc210f320f45420c3905bb5feda860204c7825e78a5c039a05534b7b88496",
"deps": [
"@args4j",
"@com_google_code_findbugs_jsr305",
@@ -298,8 +303,38 @@ DEPS = {
"type": "archive",
"format": "zip",
"overlay": "@io_bazel_rules_closure//closure/templates:soy_jssrc.BUILD",
- "targets": ["https://storage.googleapis.com/bloom-software/frontend/soy/soy-jssrc-b25.jar"],
- "seal": "f14f8428776fa3388d7c81258ca219f38e7d74d103e7b632f77d6f70ef5d1ed2"},
+ "targets": ["https://storage.googleapis.com/bloom-software/frontend/soy/soy-jssrc-b27.jar"],
+ "seal": "e6b6e9071475cbdef2d2b716d48c4d645632447c46a1ada96d6e82cdc50ee4ad"},
+
+ # Micronaut: Views (Core)
+ "io_micronaut_micronaut_views": {
+ "type": "java",
+ "licenses": ["notice"],
+ "targets": ["https://storage.googleapis.com/bloom-software/micronaut-views-core-1.3.2.BUILD.jar"],
+ "seal": "e896ef7612ecfc9e62f400e4ab994a6868f9ec64206c3eaf16265801a3ca2300",
+ "deps": [
+ maven("io.micronaut:micronaut-runtime"),
+ maven("io.micronaut:micronaut-http-client"),
+ maven("io.micronaut:micronaut-http-server-netty"),
+ maven("io.micronaut:micronaut-security"),
+ ],
+ },
+
+ # Micronaut: Views (Soy)
+ "io_micronaut_micronaut_views_soy": {
+ "type": "java",
+ "licenses": ["notice"],
+ "targets": ["https://storage.googleapis.com/bloom-software/micronaut-views-soy-1.3.2.BUILD.jar"],
+ "seal": "b4f94328ab0416c395eab55d5f8743f49ba66b7b514c5ffb4b3837fb36edc2d1",
+ "deps": [
+ "@com_google_template_soy",
+ "@com_google_common_html_types",
+ maven("io.micronaut:micronaut-runtime"),
+ maven("io.micronaut:micronaut-http"),
+ maven("io.micronaut:micronaut-http-server"),
+ maven("io.micronaut:micronaut-buffer-netty"),
+ ],
+ },
}
diff --git a/defs/toolchain/java/repos.bzl b/defs/toolchain/java/repos.bzl
index b32cf1e5d..e1719f5b5 100644
--- a/defs/toolchain/java/repos.bzl
+++ b/defs/toolchain/java/repos.bzl
@@ -67,9 +67,10 @@ MICRONAUT_BUILD_ARTIFACTS = [
"io.micronaut:micronaut-validation:%s" % MICRONAUT_VERSION,
"io.micronaut:micronaut-http-server:%s" % MICRONAUT_VERSION,
"io.micronaut:micronaut-http-server-netty:%s" % MICRONAUT_VERSION,
+ "io.micronaut:micronaut-buffer-netty:%s" % MICRONAUT_VERSION,
"io.micronaut:micronaut-graal:%s" % MICRONAUT_VERSION,
- "io.micronaut:micronaut-views:%s" % MICRONAUT_VERSION,
- "io.micronaut:micronaut-views-soy:%s" % MICRONAUT_VERSION,
+# "io.micronaut:micronaut-views:%s" % MICRONAUT_VERSION,
+# "io.micronaut:micronaut-views-soy:%s" % MICRONAUT_VERSION,
"io.micronaut:micronaut-router:%s" % MICRONAUT_VERSION,
"io.micronaut:micronaut-session:%s" % MICRONAUT_VERSION,
"io.micronaut:micronaut-tracing:%s" % MICRONAUT_VERSION,
@@ -135,6 +136,8 @@ def _gust_java_deps(micronaut = True):
"com.google.common.html.types:types",
],
override_targets = {
+ "io.micronaut:micronaut-views": "@io_micronaut_micronaut_views",
+ "io.micronaut:micronaut-views-soy": "@io_micronaut_micronaut_views_soy",
"com.google.guava:guava": "@com_google_guava",
"com.google.template:soy": "@com_google_template_soy",
"com.google.common.html.types:types": "@com_google_template_soy",
diff --git a/defs/toolchain/java/rules.bzl b/defs/toolchain/java/rules.bzl
index c37030ded..699470a3f 100644
--- a/defs/toolchain/java/rules.bzl
+++ b/defs/toolchain/java/rules.bzl
@@ -65,6 +65,8 @@ INJECTED_MICRONAUT_DEPS = [
"@com_google_template_soy",
"@com_google_common_html_types",
"@com_google_code_findbugs_jsr305",
+ "@io_micronaut_micronaut_views",
+ "@io_micronaut_micronaut_views_soy",
maven("com.google.protobuf:protobuf-java"),
maven("io.micronaut:micronaut-aop"),
maven("io.micronaut:micronaut-core"),
@@ -102,6 +104,10 @@ INJECTED_MICRONAUT_RUNTIME_DEPS = [
maven("io.micronaut:micronaut-runtime"),
]
+INJECTED_CONTROLLER_DEPS = [
+ "//java/gust/backend:PageContext",
+]
+
def _dedupe_deps(deps):
@@ -243,7 +249,7 @@ def _micronaut_controller(name,
srcs = srcs,
proto_deps = proto_deps,
templates = templates,
- deps = (deps or []),
+ deps = _dedupe_deps((deps or []) + INJECTED_CONTROLLER_DEPS),
runtime_deps = runtime_deps,
data = data,
**kwargs
diff --git a/java/gust/backend/BUILD.bazel b/java/gust/backend/BUILD.bazel
index 3b2455ef4..a40286a2b 100644
--- a/java/gust/backend/BUILD.bazel
+++ b/java/gust/backend/BUILD.bazel
@@ -35,6 +35,12 @@ template_library(
srcs = ["page.soy"],
)
+micronaut_library(
+ name = "PageContext",
+ srcs = ["PageContext.java"],
+ proto_deps = ["//gust/page:page_proto"],
+)
+
micronaut_library(
name = "TemplateProvider",
srcs = ["TemplateProvider.java"],
diff --git a/java/gust/backend/PageContext.java b/java/gust/backend/PageContext.java
new file mode 100644
index 000000000..798452323
--- /dev/null
+++ b/java/gust/backend/PageContext.java
@@ -0,0 +1,218 @@
+package gust.backend;
+
+import com.google.common.collect.ImmutableMap;
+import io.micronaut.views.soy.SoyContext;
+import io.micronaut.views.soy.SoyContextMediator;
+import io.micronaut.views.soy.SoyNamingMapProvider;
+import tools.elide.page.Context;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.Immutable;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Optional;
+
+
+/**
+ * Supplies page context to a Micronaut/Soy render routine, based on the context proto provided/filled out by a given
+ * server-side controller.
+ *
+ * Because this flow occurs in two stages (i.e. building or calculating context, then, subsequently, rendering
+ * context), the logic here is implemented to be entirely immutable, and so this object should be used in a transitory
+ * way to mediate between a single Soy routine and the context attached to it.
+ */
+@Immutable
+@SuppressWarnings("unused")
+public final class PageContext implements SoyContextMediator {
+ /** Name at which proto-context is injected. */
+ private static final String CONTEXT_PROPERTY_NAME = "context";
+
+ /** Raw context. */
+ private final @Nonnull SoyContext rawContext;
+
+ /** Proto-based context. */
+ private final @Nonnull Context protoContext;
+
+ /**
+ * Private constructor for proto-based page context with an option for additional regular @param props, or
+ * additional @inject values, and/or an override naming map provider.
+ *
+ * @param proto Context proto to inject with this render operation.
+ * @param context Map of page context information.
+ * @param injected Additional injected properties to apply.
+ * @param namingMapProvider Style rewrite naming provider to apply/override (if enabled).
+ */
+ private PageContext(@Nullable Context proto,
+ @Nullable Map context,
+ @Nullable Map injected,
+ @Nullable SoyNamingMapProvider namingMapProvider) {
+ this.protoContext = proto != null ? proto : Context.getDefaultInstance();
+ this.rawContext = SoyContext.fromMap(
+ context != null ? context : Collections.emptyMap(),
+ injected != null ? Optional.of(injected) : Optional.empty(),
+ namingMapProvider != null ? Optional.of(namingMapProvider) : Optional.empty());
+ }
+
+ // -- Factories: Maps -- //
+
+ /**
+ * Factory to create a page context object from a regular Java map, of string context properties to values of any
+ * object type. Under the hood, this is processed and converted/wrapped into Soy values.
+ *
+ * @param context Context with which to render a Soy template.
+ * @return Instance of page context, enclosing the provided context.
+ */
+ public static PageContext fromMap(@Nonnull Map context) {
+ return new PageContext(null, context, null, null);
+ }
+
+ /**
+ * Factory to create a page context object from a regular Java map, of string context properties to values of any
+ * object type. Additionally, this interface allows specification of properties declared via @inject . Under
+ * the hood, all context is processed and converted/wrapped into Soy values.
+ *
+ * @param context Context with which to render a Soy template - i.e. regular @param declarations.
+ * @param injected Injected parameters to provide to the render operation - available via @inject .
+ * @return Fabricated page context object.
+ */
+ public static PageContext fromMap(@Nonnull Map context,
+ @Nonnull Map injected) {
+ return new PageContext(null, context, injected, null);
+ }
+
+ /**
+ * Factory to create a page context object from a regular Java map, of string context properties to values of any
+ * object type. Additionally, this interface allows specification of properties declared via @inject , and
+ * also a {@link SoyNamingMapProvider} to override any globally-installed map. Under the hood, all context is
+ * processed and converted/wrapped into Soy values.
+ *
+ * Note that style rewriting must be enabled for the
namingMapProvider override to take effect.
+ *
+ * @param context Context with which to render a Soy template - i.e. regular @param declarations.
+ * @param injected Injected parameters to provide to the render operation - available via @inject .
+ * @param namingMapProvider Override any globally-installed naming map provider.
+ * @return Fabricated page context object.
+ */
+ public static PageContext fromMap(@Nonnull Map context,
+ @Nonnull Map injected,
+ @Nullable SoyNamingMapProvider namingMapProvider) {
+ return new PageContext(null, context, injected, namingMapProvider);
+ }
+
+ // -- Factories: Protos -- //
+
+ /**
+ * Factory to create a page context object from a proto message containing structured data, which is injected into the
+ * render flow at `context`. Templates may opt-in to receive this value via a parameter declaration such as
+ * @inject context: gust.page.Context .
+ *
+ * @param pageContext Protobuf page context.
+ * @return Page context object.
+ */
+ public static @Nonnull PageContext fromProto(@Nonnull Context pageContext) {
+ return new PageContext(pageContext, null, null, null);
+ }
+
+ /**
+ * Factory to create a page context object from a proto message containing structured data, which is injected into the
+ * render flow at `context`. Templates may opt-in to receive this value via a parameter declaration such as
+ * @inject context: gust.page.Context .
+ *
+ * This method offers the additional ability to specify
props , which should correspond with any
+ * @param declarations for the subject template to be rendered.
+ *
+ * @param pageContext Protobuf page context.
+ * @param props Parameters to render the template with.
+ * @return Page context object.
+ */
+ public static @Nonnull PageContext fromProto(@Nonnull Context pageContext,
+ @Nonnull Map props) {
+ return new PageContext(pageContext, props, null, null);
+ }
+
+ /**
+ * Factory to create a page context object from a proto message containing structured data, which is injected into the
+ * render flow at `context`. Templates may opt-in to receive this value via a parameter declaration such as
+ * @inject context: gust.page.Context .
+ *
+ * This method offers the additional ability to specify
props and injected values. Props
+ * should correspond with any @param declarations for the subject template to be rendered. Injected values
+ * are opted-into with @inject , and are overlaid on any existing injected values (may not override
+ * context ).
+ *
+ * @param pageContext Protobuf page context.
+ * @param props Parameters to render the template with.
+ * @param injected Additional injected values (may not contain a value at key context ).
+ * @return Page context object.
+ */
+ public static @Nonnull PageContext fromProto(@Nonnull Context pageContext,
+ @Nonnull Map props,
+ @Nonnull Map injected) {
+ return new PageContext(pageContext, props, injected, null);
+ }
+
+ /**
+ * Factory to create a page context object from a proto message containing structured data, which is injected into the
+ * render flow at `context`. Templates may opt-in to receive this value via a parameter declaration such as
+ * @inject context: gust.page.Context .
+ *
+ * This method offers the additional ability to specify
props and injected values. Props
+ * should correspond with any @param declarations for the subject template to be rendered. Injected values
+ * are opted-into with @inject , and are overlaid on any existing injected values (may not override
+ * context ).
+ *
+ * If desired, an invoking developer may wish to specify a
namingMapProvider . To have any effect, style
+ * renaming must be active in application config. The naming map provider passed here overrides any globally-installed
+ * style renaming map provider.
+ *
+ * @param pageContext Protobuf page context.
+ * @param props Parameters to render the template with.
+ * @param injected Additional injected values (may not contain a value at key context ).
+ * @param namingMapProvider Naming map provider to override any globally-installed provider with, if enabled.
+ * @return Page context object.
+ */
+ public static @Nonnull PageContext fromProto(@Nonnull Context pageContext,
+ @Nonnull Map props,
+ @Nonnull Map injected,
+ @Nonnull SoyNamingMapProvider namingMapProvider) {
+ return new PageContext(pageContext, props, injected, namingMapProvider);
+ }
+
+ // -- Interface: Soy Context Mediation -- //
+
+ /**
+ * Retrieve properties which should be made available via regular, declared `@param` statements.
+ *
+ * @return Map of regular template properties.
+ */
+ @Nonnull @Override
+ public Map getProperties() {
+ return rawContext.getProperties();
+ }
+
+ /**
+ * Retrieve properties and values that should be made available via `@inject`.
+ *
+ * @return Map of injected properties and their values.
+ */
+ @Nonnull @Override
+ public Map getInjectedProperties() {
+ return ImmutableMap
+ .builder()
+ .put(CONTEXT_PROPERTY_NAME, protoContext)
+ .putAll(rawContext.getInjectedProperties())
+ .build();
+ }
+
+ /**
+ * Specify a Soy renaming map which overrides the globally-installed map, if any. Renaming must still be activated via
+ * config, or manually, for the return value of this method to have any effect.
+ *
+ * @return {@link SoyNamingMapProvider} that should be used for this render routine.
+ */
+ @Nonnull @Override
+ public Optional overrideNamingMap() {
+ return rawContext.overrideNamingMap();
+ }
+}
diff --git a/maven_install.json b/maven_install.json
index 1c11e0e99..15454cf3f 100644
--- a/maven_install.json
+++ b/maven_install.json
@@ -4182,8 +4182,8 @@
"io.micronaut:micronaut-runtime:1.3.1"
],
"exclusions": [
- "com.google.template:soy",
- "com.google.common.html.types:types"
+ "com.google.common.html.types:types",
+ "com.google.template:soy"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-views-core/1.3.1/micronaut-views-core-1.3.1.jar",
"mirror_urls": [
@@ -4226,8 +4226,8 @@
"io.micronaut:micronaut-runtime:jar:sources:1.3.1"
],
"exclusions": [
- "com.google.template:soy",
- "com.google.common.html.types:types"
+ "com.google.common.html.types:types",
+ "com.google.template:soy"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-views-core/1.3.1/micronaut-views-core-1.3.1-sources.jar",
"mirror_urls": [
diff --git a/samples/todolist/src/application.yml b/samples/todolist/src/application.yml
index 7e6b68bb3..cdb9f5b3a 100644
--- a/samples/todolist/src/application.yml
+++ b/samples/todolist/src/application.yml
@@ -68,7 +68,7 @@ micronaut:
enabled: true
generateNonce: true
reportOnly: true
- policyDirectives: "default-src 'https: 'self' data: 'nonce-{#nonceValue}';"
+ policyDirectives: "default-src 'self' data: 'nonce-{#nonceValue}';"
executors:
io:
diff --git a/samples/todolist/src/server/HomeController.kt b/samples/todolist/src/server/HomeController.kt
index 85b29c67c..0c2bf3514 100644
--- a/samples/todolist/src/server/HomeController.kt
+++ b/samples/todolist/src/server/HomeController.kt
@@ -1,8 +1,9 @@
package server
import com.google.common.collect.ImmutableMap
-import tools.elide.page.Context
+import gust.backend.PageContext
import io.micronaut.http.HttpResponse
+import io.micronaut.http.MediaType
import io.micronaut.http.annotation.Controller
import io.micronaut.http.annotation.Get
import io.micronaut.http.annotation.QueryValue
@@ -31,14 +32,9 @@ class HomeController {
* client-side app, so we don't need to worry about it here. Similarly, if the user hits the homepage without being
* logged in, and then logs in, that flow is also handled by the re-hydrated CSR frontend.
*/
- @Get("/")
+ @Get("/", produces = [MediaType.TEXT_HTML])
@View("todolist.home.page")
- fun home(@QueryValue("name", defaultValue = "World") name: String): HttpResponse> {
- return HttpResponse.ok(ImmutableMap.of(
- "name", name,
- "context", Context.newBuilder()
- .setStyles(Context.Styles.newBuilder())
- .setScripts(Context.Scripts.newBuilder())
- .build()))
+ fun home(@QueryValue("name", defaultValue = "World") name: String): HttpResponse {
+ return HttpResponse.ok(PageContext.fromMap(ImmutableMap.of("name", name) as Map))
}
}
From 9d4a942ee0d779c06d0bb650e3a96a1dfd3bb738 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Wed, 26 Feb 2020 16:31:44 -0800
Subject: [PATCH 008/103] Refactor Java dependencies and rules
- Add better exclusions for Google coordinates
- Add source dependencies for Protobuf and gRPC
- Upgrade/conform dependency tree to Protobuf/gRPC latest
---
.bazelrc | 93 +----------------------
Makefile | 1 +
WORKSPACE | 15 ++++
defs/build.bzl | 47 ++++++++++--
defs/toolchain/java/repos.bzl | 137 +++++++++++++++++++++++++---------
defs/toolchain/java/rules.bzl | 5 ++
tools/BUILD.bazel | 9 +++
tools/bazel.rc | 97 ++++++++++++++++++++++++
8 files changed, 271 insertions(+), 133 deletions(-)
create mode 100644 tools/BUILD.bazel
create mode 100644 tools/bazel.rc
diff --git a/.bazelrc b/.bazelrc
index 6e142c1c7..32e78e418 100644
--- a/.bazelrc
+++ b/.bazelrc
@@ -1,90 +1,3 @@
-
-##
-# Base Settings
-##
-
-common --experimental_allow_incremental_repository_updates
-
-build --watchfs
-build --symlink_prefix=dist/
-build --nolegacy_external_runfiles
-build --incompatible_strict_action_env
-build --javacopt="-encoding UTF-8"
-build --strict_java_deps=strict
-build --use_ijars
-build --interface_shared_objects
-build --java_toolchain=@bazel_tools//tools/jdk:toolchain_java11
-build --host_java_toolchain=@bazel_tools//tools/jdk:toolchain_java11
-build --workspace_status_command=./tools/bazel_stamp_vars.sh
-build --embed_label=alpha
-build --define project=bloom-sandbox
-
-run --incompatible_strict_action_env
-run --workspace_status_command=./tools/bazel_stamp_vars.sh
-
-build:ci --spawn_strategy=local
-
-build:release --compilation_mode=opt
-
-build:dev --compilation_mode=dbg
-build:dev --spawn_strategy=local
-build:dev --strategy=J2cl=worker
-build:dev --strategy=Closure=worker
-build:dev --strategy=TypeScriptCompile=worker
-build:dev --experimental_persistent_javac
-build:dev --define=jdk=zulu
-build:dev --define=ZULUBASE=/Library/Java/JavaVirtualMachines/zulu-12.jdk/Contents/Home
-build:dev --javabase=//defs/toolchain/java:java_runtime
-build:dev --disk_cache=~/.cache/bazel-disk-cache
-
-query --output=label_kind
-
-# This .bazelrc file contains all of the flags required for the provided
-# toolchain with Remote Build Execution.
-# Note your WORKSPACE must contain an rbe_autoconfig target with
-# name="rbe_default" to use these flags as-is.
-build:remote --jobs=5
-
-# Platform flags:
-# The toolchain container used for execution is defined in the target indicated
-# by "extra_execution_platforms", "host_platform" and "platforms".
-# More about platforms: https://docs.bazel.build/versions/master/platforms.html
-build:remote --extra_toolchains=@rbe_default//config:cc-toolchain
-build:remote --extra_execution_platforms=@rbe_default//config:platform
-build:remote --host_platform=@rbe_default//config:platform
-build:remote --platforms=@rbe_default//config:platform
-build:remote --host_javabase=@rbe_default//java:jdk
-build:remote --javabase=@rbe_default//java:jdk
-build:remote --host_java_toolchain=@bazel_tools//tools/jdk:toolchain_hostjdk8
-build:remote --java_toolchain=@bazel_tools//tools/jdk:toolchain_hostjdk8
-build:remote --crosstool_top=@rbe_default//cc:toolchain
-build:remote --action_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1
-build:remote --spawn_strategy=remote
-
-# Starting with Bazel 0.27.0 strategies do not need to be explicitly
-# defined. See https://github.com/bazelbuild/bazel/issues/7480
-build:remote --define=EXECUTOR=remote
-
-# Enable remote execution so actions are performed on the remote systems.
-build:remote --remote_executor=grpcs://remotebuildexecution.googleapis.com
-
-# Enforce stricter environment rules, which eliminates some non-hermetic
-# behavior and therefore improves both the remote cache hit rate and the
-# correctness and repeatability of the build.
-build:remote --incompatible_strict_action_env=true
-
-# Set a higher timeout value, just in case.
-build:remote --remote_timeout=3600
-
-# Enable authentication. This will pick up application default credentials by
-# default. You can use --google_credentials=some_file.json to use a service
-# account credential instead.
-build:remote --google_default_credentials=true
-
-test --instrumentation_filter=//...
-test --instrument_test_targets
-coverage --instrumentation_filter=//...
-coverage --instrument_test_targets
-
-try-import %workspace%/.bazelrc.user
-
+ # load bazelrc from the legacy location
+# as recommended in https://github.com/bazelbuild/bazel/issues/6319
+import %workspace%/tools/bazel.rc
diff --git a/Makefile b/Makefile
index 6c3a3328f..4e2a228b0 100644
--- a/Makefile
+++ b/Makefile
@@ -227,3 +227,4 @@ release-images: ## Pull, tag, and release Docker images.
.PHONY: build test help samples release-images update-deps devtools
+
diff --git a/WORKSPACE b/WORKSPACE
index d400bcd72..ab7389894 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -165,9 +165,24 @@ stardoc_repositories()
# name = "werkzeug",
# requirements = "//defs/toolchain/python:requirements_werkzeug.txt")
+#pip_import(
+# name = "grpc_python_dependencies",
+# requirements = "@com_github_grpc_grpc//:requirements.bazel.txt")
+
+#load("@grpc_python_dependencies//:requirements.bzl", grpc_pip_install="pip_install")
+#grpc_pip_install()
+
#load("//defs/toolchain/python:repos.bzl", "gust_python_repositories")
#gust_python_repositories()
+## gRPC Core
+load("@com_github_grpc_grpc//bazel:grpc_deps.bzl", "grpc_deps", "grpc_test_only_deps")
+grpc_deps()
+grpc_test_only_deps()
+
+load("@com_github_grpc_grpc//bazel:grpc_extra_deps.bzl", "grpc_extra_deps")
+grpc_extra_deps()
+
## gRPC Java
load("@io_grpc_java//:repositories.bzl", "grpc_java_repositories")
grpc_java_repositories()
diff --git a/defs/build.bzl b/defs/build.bzl
index 21b9cbabc..bf7c91c79 100644
--- a/defs/build.bzl
+++ b/defs/build.bzl
@@ -91,6 +91,20 @@ DEPS = {
"target": "d442b54d22ec60010053bb20c783e87558f3632e",
"seal": "39bd9c3b485d85c37c351edc4930a458412b1178776e4c12f754dadc74a14b65"},
+ # Rules: Apple (iOS/macOS/tvOS)
+ "build_bazel_rules_apple": {
+ "type": "github",
+ "repo": "bazelbuild/rules_apple",
+ "target": "5b47855a8be997c1463a1c0425b9aa08f2ba826f",
+ "seal": "074ec4fee68b37a25e1935e53cf4cd2c9bfa103be39256fa7836473855615436"},
+
+ # Rules: Apple (Swift)
+ "build_bazel_rules_swift": {
+ "type": "github",
+ "repo": "bazelbuild/rules_swift",
+ "target": "ebef63d4fd639785e995b9a2b20622ece100286a",
+ "seal": "ce30e25bed943a9edae90770a5121618a7239d09f8e05bdc1aaa5643f730ad7b"},
+
# Rules: Go
"io_bazel_rules_go": {
"type": "github",
@@ -120,6 +134,13 @@ DEPS = {
"target": "e3ccf5006e17b83f2bab0f9764396dabb337172e",
"seal": "3e9559277c0e990f9043aa7a6fb817fedf0c3fe77b582d386015bd9e4c52b506"},
+ # Google: Protobuf
+ "com_google_protobuf": {
+ "type": "github",
+ "repo": "google/protobuf",
+ "target": "29cd005ce1fe1a8fabf11e325cb13006a6646d59",
+ "seal": "51398b0b97b353c1c226d0ade0bae80c80380e691cba7c1a108918986784a1c7"},
+
# Google: J2CL (Java-to-Closure)
"com_google_j2cl": {
"type": "github",
@@ -216,12 +237,26 @@ DEPS = {
"overlay": "safe_html_types.bzl",
"seal": "2356090e7632f49ea581bb6f8808fa038a7433d433f3e8d7045a36f81fb39d65"},
+ # gRPC: Core
+ "com_github_grpc_grpc": {
+ "type": "github",
+ "repo": "grpc/grpc",
+ "target": "be1715d82f7b32e838565631ab7ad04850bfd4ff",
+ "seal": "ba8f098924ac373c9a8f08a8179f073c4df1c45b9966ae6aaff87b53b7f0e009"},
+
# gRPC: Java
"io_grpc_java": {
"type": "github",
"repo": "grpc/grpc-java",
- "target": "a98db126e265259ea73c2156833cbf872aa86811",
- "seal": "f83e71b2ab65c3c133d6ee6ac968efee21f5cb93a25825b50740538e50905b9b"},
+ "target": "0b4fa21d50578d917f15dad41ca7a7ab2612356b",
+ "seal": "c47132e0dc0977a8434e3fb3b0e97b0f6269c31b3b77042a81d9e834f61cda1b"},
+
+ # Security/TLS: BoringSSL
+ "boringssl": {
+ "type": "github",
+ "repo": "google/boringssl",
+ "target": "1c2769383f027befac5b75b6cedd25daf3bf4dcf",
+ "seal": "a3d4de4f03cb321ef943678d72a045c9a19d26b23d6f4e313f97600c65201a27"},
# Google: Closure Stylesheets
"com_google_closure_stylesheets": {
@@ -260,8 +295,8 @@ DEPS = {
"com_google_template_soy": {
"type": "java",
"licenses": ["notice"],
- "targets": ["https://storage.googleapis.com/bloom-software/frontend/soy/soy-lib-b27.jar"],
- "seal": "668dc210f320f45420c3905bb5feda860204c7825e78a5c039a05534b7b88496",
+ "targets": ["https://storage.googleapis.com/bloom-software/frontend/soy/soy-lib-b28.jar"],
+ "seal": "4c95ff7fc4947273fab84958266098bebe4d991ea7e0c289211d81603d6a4ff6",
"deps": [
"@args4j",
"@com_google_code_findbugs_jsr305",
@@ -303,8 +338,8 @@ DEPS = {
"type": "archive",
"format": "zip",
"overlay": "@io_bazel_rules_closure//closure/templates:soy_jssrc.BUILD",
- "targets": ["https://storage.googleapis.com/bloom-software/frontend/soy/soy-jssrc-b27.jar"],
- "seal": "e6b6e9071475cbdef2d2b716d48c4d645632447c46a1ada96d6e82cdc50ee4ad"},
+ "targets": ["https://storage.googleapis.com/bloom-software/frontend/soy/soy-jssrc-b28.jar"],
+ "seal": "0e0506261139b7d008cad47c721d55210785f33fbd4beedd3cb36e6752d85320"},
# Micronaut: Views (Core)
"io_micronaut_micronaut_views": {
diff --git a/defs/toolchain/java/repos.bzl b/defs/toolchain/java/repos.bzl
index e1719f5b5..205770dc0 100644
--- a/defs/toolchain/java/repos.bzl
+++ b/defs/toolchain/java/repos.bzl
@@ -26,8 +26,10 @@ ASM_VERSION = "7.0"
SLF4J_VERSION = "1.7.26"
PROTOBUF_VERSION = "3.11.4"
+GCLOUD_API_VERSION = "3.4.0"
+GCLOUD_FIRESTORE_VERSION = "1.32.4"
-GRPC_JAVA_VERSION = "1.26.0"
+GRPC_JAVA_VERSION = "1.27.1"
OPENTRACING_VERSION = "0.2.1"
MICRONAUT_VERSION = "1.3.1"
@@ -37,6 +39,56 @@ MICRONAUT_REDIS_VERSION = "1.2.0"
MICRONAUT_SECURITY_VERSION = "1.3.0"
+GRPC_EXCLUSIONS = [
+ maven.exclusion(
+ artifact = "grpc-api",
+ group = "io.grpc",
+ ),
+ maven.exclusion(
+ artifact = "grpc-core",
+ group = "io.grpc",
+ ),
+ maven.exclusion(
+ artifact = "grpc-services",
+ group = "io.grpc",
+ ),
+ maven.exclusion(
+ artifact = "grpc-auth",
+ group = "io.grpc",
+ ),
+ maven.exclusion(
+ artifact = "grpc-stub",
+ group = "io.grpc",
+ ),
+ maven.exclusion(
+ artifact = "grpc-context",
+ group = "io.grpc",
+ ),
+]
+
+SOY_EXCLUSIONS = [
+ maven.exclusion(
+ artifact = "types",
+ group = "com.google.common.html.types",
+ ),
+ maven.exclusion(
+ artifact = "soy",
+ group = "com.google.template",
+ ),
+]
+
+GCLOUD_EXCLUSIONS = GRPC_EXCLUSIONS + SOY_EXCLUSIONS + [
+ maven.exclusion(
+ artifact = "protobuf-java",
+ group = "com.google.protobuf",
+ ),
+ maven.exclusion(
+ artifact = "guava",
+ group = "com.google.guava",
+ ),
+]
+
+
REPOSITORIES = [
"https://jcenter.bintray.com/",
"https://maven.google.com",
@@ -49,48 +101,49 @@ BUILD_ARTIFACTS = [
"org.slf4j:slf4j-api:%s" % SLF4J_VERSION,
]
-MICRONAUT_BUILD_ARTIFACTS = [
+GRPC_BUILD_ARTIFACTS = [
"io.grpc:grpc-core:%s" % GRPC_JAVA_VERSION,
"io.grpc:grpc-auth:%s" % GRPC_JAVA_VERSION,
"io.grpc:grpc-api:%s" % GRPC_JAVA_VERSION,
+ "io.grpc:grpc-services:%s" % GRPC_JAVA_VERSION,
"io.grpc:grpc-stub:%s" % GRPC_JAVA_VERSION,
"io.grpc:grpc-context:%s" % GRPC_JAVA_VERSION,
"io.grpc:grpc-protobuf:%s" % GRPC_JAVA_VERSION,
- "com.google.protobuf:protobuf-java:%s" % PROTOBUF_VERSION,
- "io.micronaut:micronaut-aop:%s" % MICRONAUT_VERSION,
- "io.micronaut:micronaut-core:%s" % MICRONAUT_VERSION,
- "io.micronaut:micronaut-http:%s" % MICRONAUT_VERSION,
- "io.micronaut:micronaut-http-client:%s" % MICRONAUT_VERSION,
- "io.micronaut:micronaut-inject:%s" % MICRONAUT_VERSION,
- "io.micronaut:micronaut-inject-java:%s" % MICRONAUT_VERSION,
- "io.micronaut:micronaut-runtime:%s" % MICRONAUT_VERSION,
- "io.micronaut:micronaut-validation:%s" % MICRONAUT_VERSION,
- "io.micronaut:micronaut-http-server:%s" % MICRONAUT_VERSION,
- "io.micronaut:micronaut-http-server-netty:%s" % MICRONAUT_VERSION,
- "io.micronaut:micronaut-buffer-netty:%s" % MICRONAUT_VERSION,
- "io.micronaut:micronaut-graal:%s" % MICRONAUT_VERSION,
-# "io.micronaut:micronaut-views:%s" % MICRONAUT_VERSION,
-# "io.micronaut:micronaut-views-soy:%s" % MICRONAUT_VERSION,
- "io.micronaut:micronaut-router:%s" % MICRONAUT_VERSION,
- "io.micronaut:micronaut-session:%s" % MICRONAUT_VERSION,
- "io.micronaut:micronaut-tracing:%s" % MICRONAUT_VERSION,
- "io.micronaut:micronaut-security:%s" % MICRONAUT_SECURITY_VERSION,
- "io.micronaut:micronaut-multitenancy:%s" % MICRONAUT_VERSION,
- "io.micronaut.grpc:micronaut-grpc-runtime:%s" % MICRONAUT_GRPC_VERSION,
- "io.micronaut.grpc:micronaut-grpc-annotation:%s" % MICRONAUT_GRPC_VERSION,
- "io.micronaut.grpc:micronaut-protobuff-support:%s" % MICRONAUT_GRPC_VERSION,
- "io.micronaut.configuration:micronaut-redis-lettuce:%s" % MICRONAUT_REDIS_VERSION,
-
- maven.artifact("io.micronaut", "micronaut-views", MICRONAUT_VERSION, exclusions = [
- maven.exclusion(
- artifact = "types",
- group = "com.google.common.html.types",
- ),
- maven.exclusion(
- artifact = "soy",
- group = "com.google.template",
- ),
- ]),
+]
+
+def _micronaut_artifact(coordinates):
+
+ """ Inject exclusions for Micronaut. """
+
+ split = coordinates.split(":")
+ return maven.artifact(split[0], split[1], split[2], exclusions = (
+ SOY_EXCLUSIONS +
+ GRPC_EXCLUSIONS))
+
+MICRONAUT_BUILD_ARTIFACTS = [
+ _micronaut_artifact("io.micronaut:micronaut-aop:%s" % MICRONAUT_VERSION),
+ _micronaut_artifact("io.micronaut:micronaut-core:%s" % MICRONAUT_VERSION),
+ _micronaut_artifact("io.micronaut:micronaut-http:%s" % MICRONAUT_VERSION),
+ _micronaut_artifact("io.micronaut:micronaut-http-client:%s" % MICRONAUT_VERSION),
+ _micronaut_artifact("io.micronaut:micronaut-inject:%s" % MICRONAUT_VERSION),
+ _micronaut_artifact("io.micronaut:micronaut-inject-java:%s" % MICRONAUT_VERSION),
+ _micronaut_artifact("io.micronaut:micronaut-runtime:%s" % MICRONAUT_VERSION),
+ _micronaut_artifact("io.micronaut:micronaut-validation:%s" % MICRONAUT_VERSION),
+ _micronaut_artifact("io.micronaut:micronaut-http-server:%s" % MICRONAUT_VERSION),
+ _micronaut_artifact("io.micronaut:micronaut-http-server-netty:%s" % MICRONAUT_VERSION),
+ _micronaut_artifact("io.micronaut:micronaut-buffer-netty:%s" % MICRONAUT_VERSION),
+ _micronaut_artifact("io.micronaut:micronaut-graal:%s" % MICRONAUT_VERSION),
+ _micronaut_artifact("io.micronaut:micronaut-router:%s" % MICRONAUT_VERSION),
+ _micronaut_artifact("io.micronaut:micronaut-session:%s" % MICRONAUT_VERSION),
+ _micronaut_artifact("io.micronaut:micronaut-tracing:%s" % MICRONAUT_VERSION),
+ _micronaut_artifact("io.micronaut:micronaut-security:%s" % MICRONAUT_SECURITY_VERSION),
+ _micronaut_artifact("io.micronaut:micronaut-multitenancy:%s" % MICRONAUT_VERSION),
+ _micronaut_artifact("io.micronaut.grpc:micronaut-grpc-runtime:%s" % MICRONAUT_GRPC_VERSION),
+ _micronaut_artifact("io.micronaut.grpc:micronaut-grpc-annotation:%s" % MICRONAUT_GRPC_VERSION),
+ _micronaut_artifact("io.micronaut.grpc:micronaut-protobuff-support:%s" % MICRONAUT_GRPC_VERSION),
+ _micronaut_artifact("io.micronaut.configuration:micronaut-redis-lettuce:%s" % MICRONAUT_REDIS_VERSION),
+
+ maven.artifact("io.micronaut", "micronaut-views", MICRONAUT_VERSION, exclusions = SOY_EXCLUSIONS),
]
RUNTIME_ARTIFACTS = [
@@ -103,6 +156,14 @@ MICRONAUT_RUNTIME_ARTIFACTS = [
"io.opentracing.contrib:opentracing-grpc:%s" % OPENTRACING_VERSION,
]
+GOOGLE_ARTIFACTS = [
+ "com.google.protobuf:protobuf-java:%s" % PROTOBUF_VERSION,
+ maven.artifact("com.google.cloud", "libraries-bom",
+ GCLOUD_API_VERSION, exclusions = GCLOUD_EXCLUSIONS),
+ maven.artifact("com.google.cloud", "google-cloud-firestore",
+ GCLOUD_FIRESTORE_VERSION, exclusions = GCLOUD_EXCLUSIONS),
+]
+
TEST_ARTIFACTS = [
# No base testing artifacts yet.
] + RULES_WEBTESTING_ARTIFACTS
@@ -120,6 +181,8 @@ def _gust_java_deps(micronaut = True):
artifacts = BUILD_ARTIFACTS + RUNTIME_ARTIFACTS + TEST_ARTIFACTS
if micronaut:
artifacts += [i for i in (
+ GOOGLE_ARTIFACTS +
+ GRPC_BUILD_ARTIFACTS +
MICRONAUT_BUILD_ARTIFACTS +
MICRONAUT_RUNTIME_ARTIFACTS +
MICRONAUT_TEST_ARTIFACTS) if i not in artifacts]
diff --git a/defs/toolchain/java/rules.bzl b/defs/toolchain/java/rules.bzl
index 699470a3f..7cbb9f3c2 100644
--- a/defs/toolchain/java/rules.bzl
+++ b/defs/toolchain/java/rules.bzl
@@ -99,6 +99,11 @@ INJECTED_MICRONAUT_GRPC_DEPS = [
maven("io.micronaut.grpc:micronaut-protobuff-support"),
]
+INJECTED_GAPI_DEPS = [
+ maven("com.google.cloud:libraries-bom"),
+ maven("com.google.cloud:google-cloud-firestore"),
+]
+
INJECTED_MICRONAUT_RUNTIME_DEPS = [
maven("org.slf4j:slf4j-jdk14"),
maven("io.micronaut:micronaut-runtime"),
diff --git a/tools/BUILD.bazel b/tools/BUILD.bazel
new file mode 100644
index 000000000..3a7b0c936
--- /dev/null
+++ b/tools/BUILD.bazel
@@ -0,0 +1,9 @@
+package(
+ default_visibility = ["//visibility:public"],
+)
+
+
+alias(
+ name = "grpc-cli",
+ actual = "@com_github_grpc_grpc//test/cpp/util:grpc_cli",
+)
diff --git a/tools/bazel.rc b/tools/bazel.rc
new file mode 100644
index 000000000..9b208365c
--- /dev/null
+++ b/tools/bazel.rc
@@ -0,0 +1,97 @@
+
+# bazelrc file
+# bazel >= 0.18 looks for %workspace%/.bazelrc (which redirects here)
+# Older bazel versions look for %workspace%/tools/bazel.rc (this file)
+# See https://github.com/bazelbuild/bazel/issues/6319
+
+
+##
+# Base Settings
+##
+
+common --experimental_allow_incremental_repository_updates
+
+build --watchfs
+build --symlink_prefix=dist/
+build --nolegacy_external_runfiles
+build --incompatible_strict_action_env
+build --javacopt="-encoding UTF-8"
+build --strict_java_deps=strict
+build --use_ijars
+build --interface_shared_objects
+build --java_toolchain=@bazel_tools//tools/jdk:toolchain_java11
+build --host_java_toolchain=@bazel_tools//tools/jdk:toolchain_java11
+build --workspace_status_command=./tools/bazel_stamp_vars.sh
+build --embed_label=alpha
+build --define project=bloom-sandbox
+
+run --incompatible_strict_action_env
+run --workspace_status_command=./tools/bazel_stamp_vars.sh
+
+build:ci --spawn_strategy=local
+
+build:release --compilation_mode=opt
+build:release --copt=-Wframe-larger-than=16384
+
+build:dev --compilation_mode=dbg
+build:dev --spawn_strategy=local
+build:dev --strategy=J2cl=worker
+build:dev --strategy=Closure=worker
+build:dev --strategy=TypeScriptCompile=worker
+build:dev --experimental_persistent_javac
+build:dev --define=jdk=zulu
+build:dev --define=ZULUBASE=/Library/Java/JavaVirtualMachines/zulu-12.jdk/Contents/Home
+build:dev --javabase=//defs/toolchain/java:java_runtime
+build:dev --disk_cache=~/.cache/bazel-disk-cache
+
+query --output=label_kind
+
+# This .bazelrc file contains all of the flags required for the provided
+# toolchain with Remote Build Execution.
+# Note your WORKSPACE must contain an rbe_autoconfig target with
+# name="rbe_default" to use these flags as-is.
+build:remote --jobs=5
+
+# Platform flags:
+# The toolchain container used for execution is defined in the target indicated
+# by "extra_execution_platforms", "host_platform" and "platforms".
+# More about platforms: https://docs.bazel.build/versions/master/platforms.html
+build:remote --extra_toolchains=@rbe_default//config:cc-toolchain
+build:remote --extra_execution_platforms=@rbe_default//config:platform
+build:remote --host_platform=@rbe_default//config:platform
+build:remote --platforms=@rbe_default//config:platform
+build:remote --host_javabase=@rbe_default//java:jdk
+build:remote --javabase=@rbe_default//java:jdk
+build:remote --host_java_toolchain=@bazel_tools//tools/jdk:toolchain_hostjdk8
+build:remote --java_toolchain=@bazel_tools//tools/jdk:toolchain_hostjdk8
+build:remote --crosstool_top=@rbe_default//cc:toolchain
+build:remote --action_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1
+build:remote --spawn_strategy=remote
+
+# Starting with Bazel 0.27.0 strategies do not need to be explicitly
+# defined. See https://github.com/bazelbuild/bazel/issues/7480
+build:remote --define=EXECUTOR=remote
+
+# Enable remote execution so actions are performed on the remote systems.
+build:remote --remote_executor=grpcs://remotebuildexecution.googleapis.com
+
+# Enforce stricter environment rules, which eliminates some non-hermetic
+# behavior and therefore improves both the remote cache hit rate and the
+# correctness and repeatability of the build.
+build:remote --incompatible_strict_action_env=true
+
+# Set a higher timeout value, just in case.
+build:remote --remote_timeout=3600
+
+# Enable authentication. This will pick up application default credentials by
+# default. You can use --google_credentials=some_file.json to use a service
+# account credential instead.
+build:remote --google_default_credentials=true
+
+test --instrumentation_filter=//...
+test --instrument_test_targets
+coverage --instrumentation_filter=//...
+coverage --instrument_test_targets
+
+try-import %workspace%/.bazelrc.user
+
From a8d38f114197ada0a13a65880541784583a12ab2 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Wed, 26 Feb 2020 16:32:31 -0800
Subject: [PATCH 009/103] Seal Java dependencies
---
maven_install.json | 3644 +++++++++++++++++++++++++++++++++++++-------
1 file changed, 3091 insertions(+), 553 deletions(-)
diff --git a/maven_install.json b/maven_install.json
index 15454cf3f..e96dd3006 100644
--- a/maven_install.json
+++ b/maven_install.json
@@ -1,6 +1,6 @@
{
"dependency_tree": {
- "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": 100953722,
+ "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": -2025541304,
"conflict_resolution": {
"com.google.guava:guava:28.0-jre": "com.google.guava:guava:28.1-android"
},
@@ -42,50 +42,62 @@
"url": "https://jcenter.bintray.com/com/fasterxml/jackson/core/jackson-annotations/2.10.1/jackson-annotations-2.10.1-sources.jar"
},
{
- "coord": "com.fasterxml.jackson.core:jackson-core:2.10.1",
+ "coord": "com.fasterxml.jackson.core:jackson-core:2.10.2",
"dependencies": [],
"directDependencies": [],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
- "file": "v1/https/jcenter.bintray.com/com/fasterxml/jackson/core/jackson-core/2.10.1/jackson-core-2.10.1.jar",
+ "file": "v1/https/jcenter.bintray.com/com/fasterxml/jackson/core/jackson-core/2.10.2/jackson-core-2.10.2.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/com/fasterxml/jackson/core/jackson-core/2.10.1/jackson-core-2.10.1.jar",
- "https://maven.google.com/com/fasterxml/jackson/core/jackson-core/2.10.1/jackson-core-2.10.1.jar",
- "https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/2.10.1/jackson-core-2.10.1.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/com/fasterxml/jackson/core/jackson-core/2.10.1/jackson-core-2.10.1.jar"
+ "https://jcenter.bintray.com/com/fasterxml/jackson/core/jackson-core/2.10.2/jackson-core-2.10.2.jar",
+ "https://maven.google.com/com/fasterxml/jackson/core/jackson-core/2.10.2/jackson-core-2.10.2.jar",
+ "https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/2.10.2/jackson-core-2.10.2.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/fasterxml/jackson/core/jackson-core/2.10.2/jackson-core-2.10.2.jar"
],
- "sha256": "79bffbdcd349f69a5ac252e2b4096131704386af4fa14d95395ea9a0e423cf33",
- "url": "https://jcenter.bintray.com/com/fasterxml/jackson/core/jackson-core/2.10.1/jackson-core-2.10.1.jar"
+ "sha256": "4c41f22a48f6ebb28752baeb6d25bf09ba4ff0ad8bfb82650dde448928b9da4f",
+ "url": "https://jcenter.bintray.com/com/fasterxml/jackson/core/jackson-core/2.10.2/jackson-core-2.10.2.jar"
},
{
- "coord": "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
+ "coord": "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
"dependencies": [],
"directDependencies": [],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
- "file": "v1/https/jcenter.bintray.com/com/fasterxml/jackson/core/jackson-core/2.10.1/jackson-core-2.10.1-sources.jar",
+ "file": "v1/https/jcenter.bintray.com/com/fasterxml/jackson/core/jackson-core/2.10.2/jackson-core-2.10.2-sources.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/com/fasterxml/jackson/core/jackson-core/2.10.1/jackson-core-2.10.1-sources.jar",
- "https://maven.google.com/com/fasterxml/jackson/core/jackson-core/2.10.1/jackson-core-2.10.1-sources.jar",
- "https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/2.10.1/jackson-core-2.10.1-sources.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/com/fasterxml/jackson/core/jackson-core/2.10.1/jackson-core-2.10.1-sources.jar"
+ "https://jcenter.bintray.com/com/fasterxml/jackson/core/jackson-core/2.10.2/jackson-core-2.10.2-sources.jar",
+ "https://maven.google.com/com/fasterxml/jackson/core/jackson-core/2.10.2/jackson-core-2.10.2-sources.jar",
+ "https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/2.10.2/jackson-core-2.10.2-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/fasterxml/jackson/core/jackson-core/2.10.2/jackson-core-2.10.2-sources.jar"
],
- "sha256": "001eeeb4ae3241e0e880ab2f9b867c33d560c73b34a5d69d9b216b8b04cfb9bd",
- "url": "https://jcenter.bintray.com/com/fasterxml/jackson/core/jackson-core/2.10.1/jackson-core-2.10.1-sources.jar"
+ "sha256": "3f356724ca7a5ba77a18e5448e31d544a4e04b9beca585f680fed81ff80767fb",
+ "url": "https://jcenter.bintray.com/com/fasterxml/jackson/core/jackson-core/2.10.2/jackson-core-2.10.2-sources.jar"
},
{
"coord": "com.fasterxml.jackson.core:jackson-databind:2.10.1",
"dependencies": [
"com.fasterxml.jackson.core:jackson-annotations:2.10.1",
- "com.fasterxml.jackson.core:jackson-core:2.10.1"
+ "com.fasterxml.jackson.core:jackson-core:2.10.2"
],
"directDependencies": [
"com.fasterxml.jackson.core:jackson-annotations:2.10.1",
- "com.fasterxml.jackson.core:jackson-core:2.10.1"
+ "com.fasterxml.jackson.core:jackson-core:2.10.2"
],
"exclusions": [
"com.google.template:soy",
@@ -105,15 +117,21 @@
"coord": "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
"dependencies": [
"com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
- "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1"
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2"
],
"directDependencies": [
"com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
- "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1"
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2"
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/com/fasterxml/jackson/core/jackson-databind/2.10.1/jackson-databind-2.10.1-sources.jar",
"mirror_urls": [
@@ -130,15 +148,21 @@
"dependencies": [
"com.fasterxml.jackson.core:jackson-databind:2.10.1",
"com.fasterxml.jackson.core:jackson-annotations:2.10.1",
- "com.fasterxml.jackson.core:jackson-core:2.10.1"
+ "com.fasterxml.jackson.core:jackson-core:2.10.2"
],
"directDependencies": [
- "com.fasterxml.jackson.core:jackson-core:2.10.1",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
"com.fasterxml.jackson.core:jackson-databind:2.10.1"
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.10.1/jackson-datatype-jdk8-2.10.1.jar",
"mirror_urls": [
@@ -154,16 +178,22 @@
"coord": "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
"dependencies": [
"com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
- "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
- "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1"
+ "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2"
],
"directDependencies": [
- "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
"com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1"
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.10.1/jackson-datatype-jdk8-2.10.1-sources.jar",
"mirror_urls": [
@@ -180,11 +210,11 @@
"dependencies": [
"com.fasterxml.jackson.core:jackson-databind:2.10.1",
"com.fasterxml.jackson.core:jackson-annotations:2.10.1",
- "com.fasterxml.jackson.core:jackson-core:2.10.1"
+ "com.fasterxml.jackson.core:jackson-core:2.10.2"
],
"directDependencies": [
"com.fasterxml.jackson.core:jackson-annotations:2.10.1",
- "com.fasterxml.jackson.core:jackson-core:2.10.1",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
"com.fasterxml.jackson.core:jackson-databind:2.10.1"
],
"exclusions": [
@@ -205,17 +235,23 @@
"coord": "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
"dependencies": [
"com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
- "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
- "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1"
+ "com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2"
],
"directDependencies": [
"com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
- "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
"com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1"
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.10.1/jackson-datatype-jsr310-2.10.1-sources.jar",
"mirror_urls": [
@@ -308,7 +344,217 @@
"url": "https://jcenter.bintray.com/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4-sources.jar"
},
{
- "coord": "com.google.api.grpc:proto-google-common-protos:1.12.0",
+ "coord": "com.google.api.grpc:proto-google-cloud-firestore-admin-v1:1.32.4",
+ "dependencies": [
+ "javax.annotation:javax.annotation-api:1.3.2",
+ "com.google.api:api-common:1.8.1",
+ "com.google.api.grpc:proto-google-common-protos:1.17.0",
+ "com.google.code.findbugs:jsr305:3.0.2"
+ ],
+ "directDependencies": [
+ "com.google.api:api-common:1.8.1",
+ "com.google.api.grpc:proto-google-common-protos:1.17.0",
+ "javax.annotation:javax.annotation-api:1.3.2"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/api/grpc/proto-google-cloud-firestore-admin-v1/1.32.4/proto-google-cloud-firestore-admin-v1-1.32.4.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/api/grpc/proto-google-cloud-firestore-admin-v1/1.32.4/proto-google-cloud-firestore-admin-v1-1.32.4.jar",
+ "https://maven.google.com/com/google/api/grpc/proto-google-cloud-firestore-admin-v1/1.32.4/proto-google-cloud-firestore-admin-v1-1.32.4.jar",
+ "https://repo1.maven.org/maven2/com/google/api/grpc/proto-google-cloud-firestore-admin-v1/1.32.4/proto-google-cloud-firestore-admin-v1-1.32.4.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/api/grpc/proto-google-cloud-firestore-admin-v1/1.32.4/proto-google-cloud-firestore-admin-v1-1.32.4.jar"
+ ],
+ "sha256": "03f5f78740bddcc73ed7be6dbf3b75a903043df206fb794de67d01c58365dab7",
+ "url": "https://jcenter.bintray.com/com/google/api/grpc/proto-google-cloud-firestore-admin-v1/1.32.4/proto-google-cloud-firestore-admin-v1-1.32.4.jar"
+ },
+ {
+ "coord": "com.google.api.grpc:proto-google-cloud-firestore-admin-v1:jar:sources:1.32.4",
+ "dependencies": [
+ "com.google.api:api-common:jar:sources:1.8.1",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2",
+ "com.google.api.grpc:proto-google-common-protos:jar:sources:1.17.0"
+ ],
+ "directDependencies": [
+ "com.google.api:api-common:jar:sources:1.8.1",
+ "com.google.api.grpc:proto-google-common-protos:jar:sources:1.17.0",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/api/grpc/proto-google-cloud-firestore-admin-v1/1.32.4/proto-google-cloud-firestore-admin-v1-1.32.4-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/api/grpc/proto-google-cloud-firestore-admin-v1/1.32.4/proto-google-cloud-firestore-admin-v1-1.32.4-sources.jar",
+ "https://maven.google.com/com/google/api/grpc/proto-google-cloud-firestore-admin-v1/1.32.4/proto-google-cloud-firestore-admin-v1-1.32.4-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/api/grpc/proto-google-cloud-firestore-admin-v1/1.32.4/proto-google-cloud-firestore-admin-v1-1.32.4-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/api/grpc/proto-google-cloud-firestore-admin-v1/1.32.4/proto-google-cloud-firestore-admin-v1-1.32.4-sources.jar"
+ ],
+ "sha256": "aac87d89f496fb538df33007fa77ac5f9ed41731293bc43e3068505e6c7c8e4d",
+ "url": "https://jcenter.bintray.com/com/google/api/grpc/proto-google-cloud-firestore-admin-v1/1.32.4/proto-google-cloud-firestore-admin-v1-1.32.4-sources.jar"
+ },
+ {
+ "coord": "com.google.api.grpc:proto-google-cloud-firestore-v1:1.32.4",
+ "dependencies": [
+ "javax.annotation:javax.annotation-api:1.3.2",
+ "com.google.api:api-common:1.8.1",
+ "com.google.api.grpc:proto-google-common-protos:1.17.0",
+ "com.google.code.findbugs:jsr305:3.0.2"
+ ],
+ "directDependencies": [
+ "com.google.api:api-common:1.8.1",
+ "com.google.api.grpc:proto-google-common-protos:1.17.0",
+ "javax.annotation:javax.annotation-api:1.3.2"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/api/grpc/proto-google-cloud-firestore-v1/1.32.4/proto-google-cloud-firestore-v1-1.32.4.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/api/grpc/proto-google-cloud-firestore-v1/1.32.4/proto-google-cloud-firestore-v1-1.32.4.jar",
+ "https://maven.google.com/com/google/api/grpc/proto-google-cloud-firestore-v1/1.32.4/proto-google-cloud-firestore-v1-1.32.4.jar",
+ "https://repo1.maven.org/maven2/com/google/api/grpc/proto-google-cloud-firestore-v1/1.32.4/proto-google-cloud-firestore-v1-1.32.4.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/api/grpc/proto-google-cloud-firestore-v1/1.32.4/proto-google-cloud-firestore-v1-1.32.4.jar"
+ ],
+ "sha256": "7ee56f20cc94c58fb7cb5a105e140f85279e483e8b7b8b12a1aa4700cd63b618",
+ "url": "https://jcenter.bintray.com/com/google/api/grpc/proto-google-cloud-firestore-v1/1.32.4/proto-google-cloud-firestore-v1-1.32.4.jar"
+ },
+ {
+ "coord": "com.google.api.grpc:proto-google-cloud-firestore-v1:jar:sources:1.32.4",
+ "dependencies": [
+ "com.google.api:api-common:jar:sources:1.8.1",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2",
+ "com.google.api.grpc:proto-google-common-protos:jar:sources:1.17.0"
+ ],
+ "directDependencies": [
+ "com.google.api:api-common:jar:sources:1.8.1",
+ "com.google.api.grpc:proto-google-common-protos:jar:sources:1.17.0",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/api/grpc/proto-google-cloud-firestore-v1/1.32.4/proto-google-cloud-firestore-v1-1.32.4-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/api/grpc/proto-google-cloud-firestore-v1/1.32.4/proto-google-cloud-firestore-v1-1.32.4-sources.jar",
+ "https://maven.google.com/com/google/api/grpc/proto-google-cloud-firestore-v1/1.32.4/proto-google-cloud-firestore-v1-1.32.4-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/api/grpc/proto-google-cloud-firestore-v1/1.32.4/proto-google-cloud-firestore-v1-1.32.4-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/api/grpc/proto-google-cloud-firestore-v1/1.32.4/proto-google-cloud-firestore-v1-1.32.4-sources.jar"
+ ],
+ "sha256": "cc89977c25081668a0874a04adb94d085edb70516c6b3086bd599e01f65e7907",
+ "url": "https://jcenter.bintray.com/com/google/api/grpc/proto-google-cloud-firestore-v1/1.32.4/proto-google-cloud-firestore-v1-1.32.4-sources.jar"
+ },
+ {
+ "coord": "com.google.api.grpc:proto-google-cloud-firestore-v1beta1:0.85.4",
+ "dependencies": [
+ "javax.annotation:javax.annotation-api:1.3.2",
+ "com.google.api:api-common:1.8.1",
+ "com.google.api.grpc:proto-google-common-protos:1.17.0",
+ "com.google.code.findbugs:jsr305:3.0.2"
+ ],
+ "directDependencies": [
+ "com.google.api:api-common:1.8.1",
+ "com.google.api.grpc:proto-google-common-protos:1.17.0",
+ "javax.annotation:javax.annotation-api:1.3.2"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/api/grpc/proto-google-cloud-firestore-v1beta1/0.85.4/proto-google-cloud-firestore-v1beta1-0.85.4.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/api/grpc/proto-google-cloud-firestore-v1beta1/0.85.4/proto-google-cloud-firestore-v1beta1-0.85.4.jar",
+ "https://maven.google.com/com/google/api/grpc/proto-google-cloud-firestore-v1beta1/0.85.4/proto-google-cloud-firestore-v1beta1-0.85.4.jar",
+ "https://repo1.maven.org/maven2/com/google/api/grpc/proto-google-cloud-firestore-v1beta1/0.85.4/proto-google-cloud-firestore-v1beta1-0.85.4.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/api/grpc/proto-google-cloud-firestore-v1beta1/0.85.4/proto-google-cloud-firestore-v1beta1-0.85.4.jar"
+ ],
+ "sha256": "2a94793b041285198b627d1df3b23cb1e90b3b22631abc4f32a0199fb4bf8d51",
+ "url": "https://jcenter.bintray.com/com/google/api/grpc/proto-google-cloud-firestore-v1beta1/0.85.4/proto-google-cloud-firestore-v1beta1-0.85.4.jar"
+ },
+ {
+ "coord": "com.google.api.grpc:proto-google-cloud-firestore-v1beta1:jar:sources:0.85.4",
+ "dependencies": [
+ "com.google.api:api-common:jar:sources:1.8.1",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2",
+ "com.google.api.grpc:proto-google-common-protos:jar:sources:1.17.0"
+ ],
+ "directDependencies": [
+ "com.google.api:api-common:jar:sources:1.8.1",
+ "com.google.api.grpc:proto-google-common-protos:jar:sources:1.17.0",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/api/grpc/proto-google-cloud-firestore-v1beta1/0.85.4/proto-google-cloud-firestore-v1beta1-0.85.4-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/api/grpc/proto-google-cloud-firestore-v1beta1/0.85.4/proto-google-cloud-firestore-v1beta1-0.85.4-sources.jar",
+ "https://maven.google.com/com/google/api/grpc/proto-google-cloud-firestore-v1beta1/0.85.4/proto-google-cloud-firestore-v1beta1-0.85.4-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/api/grpc/proto-google-cloud-firestore-v1beta1/0.85.4/proto-google-cloud-firestore-v1beta1-0.85.4-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/api/grpc/proto-google-cloud-firestore-v1beta1/0.85.4/proto-google-cloud-firestore-v1beta1-0.85.4-sources.jar"
+ ],
+ "sha256": "854c34ee9b2d851079a59f3d58bc48255a77fbfddc0f9b755d7fa0699dd0cba5",
+ "url": "https://jcenter.bintray.com/com/google/api/grpc/proto-google-cloud-firestore-v1beta1/0.85.4/proto-google-cloud-firestore-v1beta1-0.85.4-sources.jar"
+ },
+ {
+ "coord": "com.google.api.grpc:proto-google-common-protos:1.17.0",
"dependencies": [],
"directDependencies": [],
"exclusions": [
@@ -317,18 +563,18 @@
"com.google.template:soy",
"com.google.common.html.types:types"
],
- "file": "v1/https/jcenter.bintray.com/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar",
+ "file": "v1/https/jcenter.bintray.com/com/google/api/grpc/proto-google-common-protos/1.17.0/proto-google-common-protos-1.17.0.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar",
- "https://maven.google.com/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar",
- "https://repo1.maven.org/maven2/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar"
+ "https://jcenter.bintray.com/com/google/api/grpc/proto-google-common-protos/1.17.0/proto-google-common-protos-1.17.0.jar",
+ "https://maven.google.com/com/google/api/grpc/proto-google-common-protos/1.17.0/proto-google-common-protos-1.17.0.jar",
+ "https://repo1.maven.org/maven2/com/google/api/grpc/proto-google-common-protos/1.17.0/proto-google-common-protos-1.17.0.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/api/grpc/proto-google-common-protos/1.17.0/proto-google-common-protos-1.17.0.jar"
],
- "sha256": "bd60cd7a423b00fb824c27bdd0293aaf4781be1daba6ed256311103fb4b84108",
- "url": "https://jcenter.bintray.com/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar"
+ "sha256": "ad25472c73ee470606fb500b376ae5a97973d5406c2f5c3b7d07fb25b4648b65",
+ "url": "https://jcenter.bintray.com/com/google/api/grpc/proto-google-common-protos/1.17.0/proto-google-common-protos-1.17.0.jar"
},
{
- "coord": "com.google.api.grpc:proto-google-common-protos:jar:sources:1.12.0",
+ "coord": "com.google.api.grpc:proto-google-common-protos:jar:sources:1.17.0",
"dependencies": [],
"directDependencies": [],
"exclusions": [
@@ -337,51 +583,991 @@
"com.google.template:soy",
"com.google.common.html.types:types"
],
- "file": "v1/https/jcenter.bintray.com/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0-sources.jar",
+ "file": "v1/https/jcenter.bintray.com/com/google/api/grpc/proto-google-common-protos/1.17.0/proto-google-common-protos-1.17.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/api/grpc/proto-google-common-protos/1.17.0/proto-google-common-protos-1.17.0-sources.jar",
+ "https://maven.google.com/com/google/api/grpc/proto-google-common-protos/1.17.0/proto-google-common-protos-1.17.0-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/api/grpc/proto-google-common-protos/1.17.0/proto-google-common-protos-1.17.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/api/grpc/proto-google-common-protos/1.17.0/proto-google-common-protos-1.17.0-sources.jar"
+ ],
+ "sha256": "7a0128ee3a58953ed8f30828812d9ac54c10f36494fc9eed88a5398c23c29c85",
+ "url": "https://jcenter.bintray.com/com/google/api/grpc/proto-google-common-protos/1.17.0/proto-google-common-protos-1.17.0-sources.jar"
+ },
+ {
+ "coord": "com.google.api.grpc:proto-google-iam-v1:0.13.0",
+ "dependencies": [
+ "javax.annotation:javax.annotation-api:1.3.2",
+ "com.google.api:api-common:1.8.1",
+ "com.google.api.grpc:proto-google-common-protos:1.17.0",
+ "com.google.code.findbugs:jsr305:3.0.2"
+ ],
+ "directDependencies": [
+ "com.google.api:api-common:1.8.1",
+ "com.google.api.grpc:proto-google-common-protos:1.17.0"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/api/grpc/proto-google-iam-v1/0.13.0/proto-google-iam-v1-0.13.0.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/api/grpc/proto-google-iam-v1/0.13.0/proto-google-iam-v1-0.13.0.jar",
+ "https://maven.google.com/com/google/api/grpc/proto-google-iam-v1/0.13.0/proto-google-iam-v1-0.13.0.jar",
+ "https://repo1.maven.org/maven2/com/google/api/grpc/proto-google-iam-v1/0.13.0/proto-google-iam-v1-0.13.0.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/api/grpc/proto-google-iam-v1/0.13.0/proto-google-iam-v1-0.13.0.jar"
+ ],
+ "sha256": "1b440938d7bdad70e3fad9cb5db91c075a02ab08995c5cca55533ed580c7e185",
+ "url": "https://jcenter.bintray.com/com/google/api/grpc/proto-google-iam-v1/0.13.0/proto-google-iam-v1-0.13.0.jar"
+ },
+ {
+ "coord": "com.google.api.grpc:proto-google-iam-v1:jar:sources:0.13.0",
+ "dependencies": [
+ "com.google.api:api-common:jar:sources:1.8.1",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2",
+ "com.google.api.grpc:proto-google-common-protos:jar:sources:1.17.0"
+ ],
+ "directDependencies": [
+ "com.google.api:api-common:jar:sources:1.8.1",
+ "com.google.api.grpc:proto-google-common-protos:jar:sources:1.17.0"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/api/grpc/proto-google-iam-v1/0.13.0/proto-google-iam-v1-0.13.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/api/grpc/proto-google-iam-v1/0.13.0/proto-google-iam-v1-0.13.0-sources.jar",
+ "https://maven.google.com/com/google/api/grpc/proto-google-iam-v1/0.13.0/proto-google-iam-v1-0.13.0-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/api/grpc/proto-google-iam-v1/0.13.0/proto-google-iam-v1-0.13.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/api/grpc/proto-google-iam-v1/0.13.0/proto-google-iam-v1-0.13.0-sources.jar"
+ ],
+ "sha256": "a136eddb31906057a7fec1de79078379a64f2f25d5e4f29f6b11b926eeed4775",
+ "url": "https://jcenter.bintray.com/com/google/api/grpc/proto-google-iam-v1/0.13.0/proto-google-iam-v1-0.13.0-sources.jar"
+ },
+ {
+ "coord": "com.google.api:api-common:1.8.1",
+ "dependencies": [
+ "javax.annotation:javax.annotation-api:1.3.2",
+ "com.google.code.findbugs:jsr305:3.0.2"
+ ],
+ "directDependencies": [
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "javax.annotation:javax.annotation-api:1.3.2"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/api/api-common/1.8.1/api-common-1.8.1.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/api/api-common/1.8.1/api-common-1.8.1.jar",
+ "https://maven.google.com/com/google/api/api-common/1.8.1/api-common-1.8.1.jar",
+ "https://repo1.maven.org/maven2/com/google/api/api-common/1.8.1/api-common-1.8.1.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/api/api-common/1.8.1/api-common-1.8.1.jar"
+ ],
+ "sha256": "9840ed24fce0a96492e671853077be62edab802b6760e3b327362d6949943674",
+ "url": "https://jcenter.bintray.com/com/google/api/api-common/1.8.1/api-common-1.8.1.jar"
+ },
+ {
+ "coord": "com.google.api:api-common:jar:sources:1.8.1",
+ "dependencies": [
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2"
+ ],
+ "directDependencies": [
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/api/api-common/1.8.1/api-common-1.8.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/api/api-common/1.8.1/api-common-1.8.1-sources.jar",
+ "https://maven.google.com/com/google/api/api-common/1.8.1/api-common-1.8.1-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/api/api-common/1.8.1/api-common-1.8.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/api/api-common/1.8.1/api-common-1.8.1-sources.jar"
+ ],
+ "sha256": "d61ca9de9fd31f341b83890f878f5cb45238531fecb41516650574f417c19c60",
+ "url": "https://jcenter.bintray.com/com/google/api/api-common/1.8.1/api-common-1.8.1-sources.jar"
+ },
+ {
+ "coord": "com.google.api:gax-grpc:1.53.1",
+ "dependencies": [
+ "com.google.api.grpc:proto-google-common-protos:1.17.0",
+ "com.google.j2objc:j2objc-annotations:1.3",
+ "commons-logging:commons-logging:1.2",
+ "io.opencensus:opencensus-contrib-http-util:0.24.0",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "com.google.auto.value:auto-value-annotations:1.7",
+ "com.google.auth:google-auth-library-credentials:0.20.0",
+ "org.apache.httpcomponents:httpclient:4.5.11",
+ "com.google.api:api-common:1.8.1",
+ "commons-codec:commons-codec:1.11",
+ "com.google.code.gson:gson:2.8.6",
+ "io.grpc:grpc-protobuf:1.27.1",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
+ "org.apache.httpcomponents:httpcore:4.4.13",
+ "com.google.http-client:google-http-client-jackson2:1.34.1",
+ "org.threeten:threetenbp:1.4.1",
+ "io.grpc:grpc-protobuf-lite:1.27.1",
+ "io.grpc:grpc-grpclb:1.27.0",
+ "org.apache.commons:commons-lang3:3.5",
+ "javax.annotation:javax.annotation-api:1.3.2",
+ "io.grpc:grpc-netty-shaded:1.27.0",
+ "com.google.auth:google-auth-library-oauth2-http:0.20.0",
+ "com.google.api:gax:1.53.1",
+ "org.conscrypt:conscrypt-openjdk-uber:2.2.1",
+ "io.grpc:grpc-alts:1.27.0",
+ "com.google.protobuf:protobuf-java-util:3.11.4",
+ "io.opencensus:opencensus-api:0.25.0",
+ "com.google.http-client:google-http-client:1.34.1"
+ ],
+ "directDependencies": [
+ "com.google.api.grpc:proto-google-common-protos:1.17.0",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "com.google.auth:google-auth-library-credentials:0.20.0",
+ "com.google.api:api-common:1.8.1",
+ "io.grpc:grpc-protobuf:1.27.1",
+ "org.threeten:threetenbp:1.4.1",
+ "io.grpc:grpc-netty-shaded:1.27.0",
+ "com.google.auth:google-auth-library-oauth2-http:0.20.0",
+ "com.google.api:gax:1.53.1",
+ "io.grpc:grpc-alts:1.27.0"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/api/gax-grpc/1.53.1/gax-grpc-1.53.1.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/api/gax-grpc/1.53.1/gax-grpc-1.53.1.jar",
+ "https://maven.google.com/com/google/api/gax-grpc/1.53.1/gax-grpc-1.53.1.jar",
+ "https://repo1.maven.org/maven2/com/google/api/gax-grpc/1.53.1/gax-grpc-1.53.1.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/api/gax-grpc/1.53.1/gax-grpc-1.53.1.jar"
+ ],
+ "sha256": "8252a943013357ed1d11b694065df94b8f8f5581cc6b06b68412fd6268175c8c",
+ "url": "https://jcenter.bintray.com/com/google/api/gax-grpc/1.53.1/gax-grpc-1.53.1.jar"
+ },
+ {
+ "coord": "com.google.api:gax-grpc:jar:sources:1.53.1",
+ "dependencies": [
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.auth:google-auth-library-credentials:jar:sources:0.20.0",
+ "org.threeten:threetenbp:jar:sources:1.4.1",
+ "com.google.http-client:google-http-client:jar:sources:1.34.1",
+ "com.google.auth:google-auth-library-oauth2-http:jar:sources:0.20.0",
+ "io.grpc:grpc-protobuf:jar:sources:1.27.1",
+ "io.grpc:grpc-alts:jar:sources:1.27.0",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "commons-logging:commons-logging:jar:sources:1.2",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
+ "io.grpc:grpc-protobuf-lite:jar:sources:1.27.1",
+ "com.google.api:api-common:jar:sources:1.8.1",
+ "com.google.protobuf:protobuf-java-util:jar:sources:3.11.4",
+ "com.google.api:gax:jar:sources:1.53.1",
+ "com.google.api.grpc:proto-google-common-protos:jar:sources:1.17.0",
+ "com.google.http-client:google-http-client-jackson2:jar:sources:1.34.1",
+ "io.grpc:grpc-grpclb:jar:sources:1.27.0",
+ "org.apache.httpcomponents:httpclient:jar:sources:4.5.11",
+ "com.google.code.gson:gson:jar:sources:2.8.6",
+ "org.apache.commons:commons-lang3:jar:sources:3.5",
+ "io.grpc:grpc-netty-shaded:jar:sources:1.27.0",
+ "commons-codec:commons-codec:jar:sources:1.11",
+ "io.opencensus:opencensus-api:jar:sources:0.25.0",
+ "org.conscrypt:conscrypt-openjdk-uber:jar:sources:2.2.1",
+ "io.opencensus:opencensus-contrib-http-util:jar:sources:0.24.0",
+ "org.apache.httpcomponents:httpcore:jar:sources:4.4.13",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2",
+ "com.google.auto.value:auto-value-annotations:jar:sources:1.7"
+ ],
+ "directDependencies": [
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.auth:google-auth-library-credentials:jar:sources:0.20.0",
+ "org.threeten:threetenbp:jar:sources:1.4.1",
+ "com.google.auth:google-auth-library-oauth2-http:jar:sources:0.20.0",
+ "io.grpc:grpc-protobuf:jar:sources:1.27.1",
+ "io.grpc:grpc-alts:jar:sources:1.27.0",
+ "com.google.api:api-common:jar:sources:1.8.1",
+ "com.google.api:gax:jar:sources:1.53.1",
+ "com.google.api.grpc:proto-google-common-protos:jar:sources:1.17.0",
+ "io.grpc:grpc-netty-shaded:jar:sources:1.27.0"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/api/gax-grpc/1.53.1/gax-grpc-1.53.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/api/gax-grpc/1.53.1/gax-grpc-1.53.1-sources.jar",
+ "https://maven.google.com/com/google/api/gax-grpc/1.53.1/gax-grpc-1.53.1-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/api/gax-grpc/1.53.1/gax-grpc-1.53.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/api/gax-grpc/1.53.1/gax-grpc-1.53.1-sources.jar"
+ ],
+ "sha256": "813c4704300d433a70b82107870df6121c0785236adbf24bc8e3d9781ff4464c",
+ "url": "https://jcenter.bintray.com/com/google/api/gax-grpc/1.53.1/gax-grpc-1.53.1-sources.jar"
+ },
+ {
+ "coord": "com.google.api:gax:1.53.1",
+ "dependencies": [
+ "com.google.j2objc:j2objc-annotations:1.3",
+ "commons-logging:commons-logging:1.2",
+ "io.opencensus:opencensus-contrib-http-util:0.24.0",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "com.google.auto.value:auto-value-annotations:1.7",
+ "com.google.auth:google-auth-library-credentials:0.20.0",
+ "org.apache.httpcomponents:httpclient:4.5.11",
+ "com.google.api:api-common:1.8.1",
+ "commons-codec:commons-codec:1.11",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
+ "org.apache.httpcomponents:httpcore:4.4.13",
+ "com.google.http-client:google-http-client-jackson2:1.34.1",
+ "org.threeten:threetenbp:1.4.1",
+ "javax.annotation:javax.annotation-api:1.3.2",
+ "com.google.auth:google-auth-library-oauth2-http:0.20.0",
+ "io.opencensus:opencensus-api:0.25.0",
+ "com.google.http-client:google-http-client:1.34.1"
+ ],
+ "directDependencies": [
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "com.google.api:api-common:1.8.1",
+ "org.threeten:threetenbp:1.4.1",
+ "com.google.auth:google-auth-library-oauth2-http:0.20.0",
+ "io.opencensus:opencensus-api:0.25.0"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/api/gax/1.53.1/gax-1.53.1.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/api/gax/1.53.1/gax-1.53.1.jar",
+ "https://maven.google.com/com/google/api/gax/1.53.1/gax-1.53.1.jar",
+ "https://repo1.maven.org/maven2/com/google/api/gax/1.53.1/gax-1.53.1.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/api/gax/1.53.1/gax-1.53.1.jar"
+ ],
+ "sha256": "37f668559501fcc70ea7c5cd17f2afa737940162655f14ef79b6cd8548bd73ce",
+ "url": "https://jcenter.bintray.com/com/google/api/gax/1.53.1/gax-1.53.1.jar"
+ },
+ {
+ "coord": "com.google.api:gax:jar:sources:1.53.1",
+ "dependencies": [
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.auth:google-auth-library-credentials:jar:sources:0.20.0",
+ "org.threeten:threetenbp:jar:sources:1.4.1",
+ "com.google.http-client:google-http-client:jar:sources:1.34.1",
+ "com.google.auth:google-auth-library-oauth2-http:jar:sources:0.20.0",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "commons-logging:commons-logging:jar:sources:1.2",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
+ "com.google.api:api-common:jar:sources:1.8.1",
+ "com.google.http-client:google-http-client-jackson2:jar:sources:1.34.1",
+ "org.apache.httpcomponents:httpclient:jar:sources:4.5.11",
+ "commons-codec:commons-codec:jar:sources:1.11",
+ "io.opencensus:opencensus-api:jar:sources:0.25.0",
+ "io.opencensus:opencensus-contrib-http-util:jar:sources:0.24.0",
+ "org.apache.httpcomponents:httpcore:jar:sources:4.4.13",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2",
+ "com.google.auto.value:auto-value-annotations:jar:sources:1.7"
+ ],
+ "directDependencies": [
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "org.threeten:threetenbp:jar:sources:1.4.1",
+ "com.google.auth:google-auth-library-oauth2-http:jar:sources:0.20.0",
+ "com.google.api:api-common:jar:sources:1.8.1",
+ "io.opencensus:opencensus-api:jar:sources:0.25.0"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/api/gax/1.53.1/gax-1.53.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/api/gax/1.53.1/gax-1.53.1-sources.jar",
+ "https://maven.google.com/com/google/api/gax/1.53.1/gax-1.53.1-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/api/gax/1.53.1/gax-1.53.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/api/gax/1.53.1/gax-1.53.1-sources.jar"
+ ],
+ "sha256": "e2dd318b8558bdc49733fe0f9c69d2aaea3be3b69c3169e13d79ce57a6b4b68c",
+ "url": "https://jcenter.bintray.com/com/google/api/gax/1.53.1/gax-1.53.1-sources.jar"
+ },
+ {
+ "coord": "com.google.auth:google-auth-library-credentials:0.20.0",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/auth/google-auth-library-credentials/0.20.0/google-auth-library-credentials-0.20.0.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/auth/google-auth-library-credentials/0.20.0/google-auth-library-credentials-0.20.0.jar",
+ "https://maven.google.com/com/google/auth/google-auth-library-credentials/0.20.0/google-auth-library-credentials-0.20.0.jar",
+ "https://repo1.maven.org/maven2/com/google/auth/google-auth-library-credentials/0.20.0/google-auth-library-credentials-0.20.0.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/auth/google-auth-library-credentials/0.20.0/google-auth-library-credentials-0.20.0.jar"
+ ],
+ "sha256": "8a415273a5dae5c8f9080134e53b9592dc171ca5d13127488c910177c5903bd6",
+ "url": "https://jcenter.bintray.com/com/google/auth/google-auth-library-credentials/0.20.0/google-auth-library-credentials-0.20.0.jar"
+ },
+ {
+ "coord": "com.google.auth:google-auth-library-credentials:jar:sources:0.20.0",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/auth/google-auth-library-credentials/0.20.0/google-auth-library-credentials-0.20.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/auth/google-auth-library-credentials/0.20.0/google-auth-library-credentials-0.20.0-sources.jar",
+ "https://maven.google.com/com/google/auth/google-auth-library-credentials/0.20.0/google-auth-library-credentials-0.20.0-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/auth/google-auth-library-credentials/0.20.0/google-auth-library-credentials-0.20.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/auth/google-auth-library-credentials/0.20.0/google-auth-library-credentials-0.20.0-sources.jar"
+ ],
+ "sha256": "5f2abefb5764e32622392cd6483aba642c0c97ce0620b9f5b7f9d335ac49a4f5",
+ "url": "https://jcenter.bintray.com/com/google/auth/google-auth-library-credentials/0.20.0/google-auth-library-credentials-0.20.0-sources.jar"
+ },
+ {
+ "coord": "com.google.auth:google-auth-library-oauth2-http:0.20.0",
+ "dependencies": [
+ "com.google.j2objc:j2objc-annotations:1.3",
+ "commons-logging:commons-logging:1.2",
+ "io.opencensus:opencensus-contrib-http-util:0.24.0",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "com.google.auto.value:auto-value-annotations:1.7",
+ "com.google.auth:google-auth-library-credentials:0.20.0",
+ "org.apache.httpcomponents:httpclient:4.5.11",
+ "commons-codec:commons-codec:1.11",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
+ "org.apache.httpcomponents:httpcore:4.4.13",
+ "com.google.http-client:google-http-client-jackson2:1.34.1",
+ "io.opencensus:opencensus-api:0.25.0",
+ "com.google.http-client:google-http-client:1.34.1"
+ ],
+ "directDependencies": [
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "com.google.auto.value:auto-value-annotations:1.7",
+ "com.google.auth:google-auth-library-credentials:0.20.0",
+ "com.google.http-client:google-http-client-jackson2:1.34.1",
+ "com.google.http-client:google-http-client:1.34.1"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/auth/google-auth-library-oauth2-http/0.20.0/google-auth-library-oauth2-http-0.20.0.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/auth/google-auth-library-oauth2-http/0.20.0/google-auth-library-oauth2-http-0.20.0.jar",
+ "https://maven.google.com/com/google/auth/google-auth-library-oauth2-http/0.20.0/google-auth-library-oauth2-http-0.20.0.jar",
+ "https://repo1.maven.org/maven2/com/google/auth/google-auth-library-oauth2-http/0.20.0/google-auth-library-oauth2-http-0.20.0.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/auth/google-auth-library-oauth2-http/0.20.0/google-auth-library-oauth2-http-0.20.0.jar"
+ ],
+ "sha256": "43e96e8c07285c2887042eda4e35ca96522ef361f6c1843f469039d9ccdc8f8a",
+ "url": "https://jcenter.bintray.com/com/google/auth/google-auth-library-oauth2-http/0.20.0/google-auth-library-oauth2-http-0.20.0.jar"
+ },
+ {
+ "coord": "com.google.auth:google-auth-library-oauth2-http:jar:sources:0.20.0",
+ "dependencies": [
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.auth:google-auth-library-credentials:jar:sources:0.20.0",
+ "com.google.http-client:google-http-client:jar:sources:1.34.1",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "commons-logging:commons-logging:jar:sources:1.2",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
+ "com.google.http-client:google-http-client-jackson2:jar:sources:1.34.1",
+ "org.apache.httpcomponents:httpclient:jar:sources:4.5.11",
+ "commons-codec:commons-codec:jar:sources:1.11",
+ "io.opencensus:opencensus-api:jar:sources:0.25.0",
+ "io.opencensus:opencensus-contrib-http-util:jar:sources:0.24.0",
+ "org.apache.httpcomponents:httpcore:jar:sources:4.4.13",
+ "com.google.auto.value:auto-value-annotations:jar:sources:1.7"
+ ],
+ "directDependencies": [
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.auth:google-auth-library-credentials:jar:sources:0.20.0",
+ "com.google.http-client:google-http-client:jar:sources:1.34.1",
+ "com.google.http-client:google-http-client-jackson2:jar:sources:1.34.1",
+ "com.google.auto.value:auto-value-annotations:jar:sources:1.7"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/auth/google-auth-library-oauth2-http/0.20.0/google-auth-library-oauth2-http-0.20.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/auth/google-auth-library-oauth2-http/0.20.0/google-auth-library-oauth2-http-0.20.0-sources.jar",
+ "https://maven.google.com/com/google/auth/google-auth-library-oauth2-http/0.20.0/google-auth-library-oauth2-http-0.20.0-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/auth/google-auth-library-oauth2-http/0.20.0/google-auth-library-oauth2-http-0.20.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/auth/google-auth-library-oauth2-http/0.20.0/google-auth-library-oauth2-http-0.20.0-sources.jar"
+ ],
+ "sha256": "7e8c65b329da8525e0c4ef09a49b19a63124e747401ce6757bfa91ae9546ca56",
+ "url": "https://jcenter.bintray.com/com/google/auth/google-auth-library-oauth2-http/0.20.0/google-auth-library-oauth2-http-0.20.0-sources.jar"
+ },
+ {
+ "coord": "com.google.auto.value:auto-value-annotations:1.7",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/auto/value/auto-value-annotations/1.7/auto-value-annotations-1.7.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0-sources.jar",
- "https://maven.google.com/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0-sources.jar",
- "https://repo1.maven.org/maven2/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0-sources.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0-sources.jar"
+ "https://jcenter.bintray.com/com/google/auto/value/auto-value-annotations/1.7/auto-value-annotations-1.7.jar",
+ "https://maven.google.com/com/google/auto/value/auto-value-annotations/1.7/auto-value-annotations-1.7.jar",
+ "https://repo1.maven.org/maven2/com/google/auto/value/auto-value-annotations/1.7/auto-value-annotations-1.7.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/auto/value/auto-value-annotations/1.7/auto-value-annotations-1.7.jar"
],
- "sha256": "936fdc055855a956ef82afb1b408bd0bd5ea5d040fe6f6fc25c4955879db649a",
- "url": "https://jcenter.bintray.com/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0-sources.jar"
+ "sha256": "b134bab5082e9f49f2b45802573c78e0726e059b645323645da03e328e501f86",
+ "url": "https://jcenter.bintray.com/com/google/auto/value/auto-value-annotations/1.7/auto-value-annotations-1.7.jar"
},
{
- "coord": "com.google.auth:google-auth-library-credentials:0.18.0",
+ "coord": "com.google.auto.value:auto-value-annotations:jar:sources:1.7",
"dependencies": [],
"directDependencies": [],
"exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/auto/value/auto-value-annotations/1.7/auto-value-annotations-1.7-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/auto/value/auto-value-annotations/1.7/auto-value-annotations-1.7-sources.jar",
+ "https://maven.google.com/com/google/auto/value/auto-value-annotations/1.7/auto-value-annotations-1.7-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/auto/value/auto-value-annotations/1.7/auto-value-annotations-1.7-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/auto/value/auto-value-annotations/1.7/auto-value-annotations-1.7-sources.jar"
+ ],
+ "sha256": "28b590946a8fb82f62c5efbf29bf68df85b2b2ece921452591451954f2769b67",
+ "url": "https://jcenter.bintray.com/com/google/auto/value/auto-value-annotations/1.7/auto-value-annotations-1.7-sources.jar"
+ },
+ {
+ "coord": "com.google.cloud:google-cloud-core-grpc:1.92.5",
+ "dependencies": [
+ "com.google.api.grpc:proto-google-common-protos:1.17.0",
+ "com.google.j2objc:j2objc-annotations:1.3",
+ "commons-logging:commons-logging:1.2",
+ "io.opencensus:opencensus-contrib-http-util:0.24.0",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "com.google.auto.value:auto-value-annotations:1.7",
+ "com.google.auth:google-auth-library-credentials:0.20.0",
+ "org.apache.httpcomponents:httpclient:4.5.11",
+ "com.google.api:api-common:1.8.1",
+ "commons-codec:commons-codec:1.11",
+ "com.google.cloud:google-cloud-core:1.92.5",
+ "com.google.code.gson:gson:2.8.6",
+ "io.grpc:grpc-protobuf:1.27.1",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
+ "org.apache.httpcomponents:httpcore:4.4.13",
+ "com.google.errorprone:error_prone_annotations:2.3.4",
+ "com.google.http-client:google-http-client-jackson2:1.34.1",
+ "org.threeten:threetenbp:1.4.1",
+ "io.grpc:grpc-protobuf-lite:1.27.1",
+ "com.google.api.grpc:proto-google-iam-v1:0.13.0",
+ "io.grpc:grpc-grpclb:1.27.0",
+ "org.apache.commons:commons-lang3:3.5",
+ "javax.annotation:javax.annotation-api:1.3.2",
+ "io.grpc:grpc-netty-shaded:1.27.0",
+ "com.google.auth:google-auth-library-oauth2-http:0.20.0",
+ "com.google.api:gax:1.53.1",
+ "org.conscrypt:conscrypt-openjdk-uber:2.2.1",
+ "io.grpc:grpc-alts:1.27.0",
+ "com.google.api:gax-grpc:1.53.1",
+ "com.google.protobuf:protobuf-java-util:3.11.4",
+ "io.opencensus:opencensus-api:0.25.0",
+ "com.google.http-client:google-http-client:1.34.1"
+ ],
+ "directDependencies": [
+ "com.google.auth:google-auth-library-credentials:0.20.0",
+ "com.google.api:api-common:1.8.1",
+ "com.google.cloud:google-cloud-core:1.92.5",
+ "com.google.api:gax:1.53.1",
+ "com.google.api:gax-grpc:1.53.1",
+ "com.google.http-client:google-http-client:1.34.1"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/cloud/google-cloud-core-grpc/1.92.5/google-cloud-core-grpc-1.92.5.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/cloud/google-cloud-core-grpc/1.92.5/google-cloud-core-grpc-1.92.5.jar",
+ "https://maven.google.com/com/google/cloud/google-cloud-core-grpc/1.92.5/google-cloud-core-grpc-1.92.5.jar",
+ "https://repo1.maven.org/maven2/com/google/cloud/google-cloud-core-grpc/1.92.5/google-cloud-core-grpc-1.92.5.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/cloud/google-cloud-core-grpc/1.92.5/google-cloud-core-grpc-1.92.5.jar"
+ ],
+ "sha256": "5e10aa726b65c1fecbc6cafaf1be74722294f8a3c08314ecdb42d1cdec04aedc",
+ "url": "https://jcenter.bintray.com/com/google/cloud/google-cloud-core-grpc/1.92.5/google-cloud-core-grpc-1.92.5.jar"
+ },
+ {
+ "coord": "com.google.cloud:google-cloud-core-grpc:jar:sources:1.92.5",
+ "dependencies": [
+ "com.google.api.grpc:proto-google-iam-v1:jar:sources:0.13.0",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.auth:google-auth-library-credentials:jar:sources:0.20.0",
+ "org.threeten:threetenbp:jar:sources:1.4.1",
+ "com.google.http-client:google-http-client:jar:sources:1.34.1",
+ "com.google.auth:google-auth-library-oauth2-http:jar:sources:0.20.0",
+ "io.grpc:grpc-protobuf:jar:sources:1.27.1",
+ "io.grpc:grpc-alts:jar:sources:1.27.0",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "com.google.cloud:google-cloud-core:jar:sources:1.92.5",
+ "commons-logging:commons-logging:jar:sources:1.2",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
+ "io.grpc:grpc-protobuf-lite:jar:sources:1.27.1",
+ "com.google.api:api-common:jar:sources:1.8.1",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4",
+ "com.google.api:gax-grpc:jar:sources:1.53.1",
+ "com.google.protobuf:protobuf-java-util:jar:sources:3.11.4",
+ "com.google.api:gax:jar:sources:1.53.1",
+ "com.google.api.grpc:proto-google-common-protos:jar:sources:1.17.0",
+ "com.google.http-client:google-http-client-jackson2:jar:sources:1.34.1",
+ "io.grpc:grpc-grpclb:jar:sources:1.27.0",
+ "org.apache.httpcomponents:httpclient:jar:sources:4.5.11",
+ "com.google.code.gson:gson:jar:sources:2.8.6",
+ "org.apache.commons:commons-lang3:jar:sources:3.5",
+ "io.grpc:grpc-netty-shaded:jar:sources:1.27.0",
+ "commons-codec:commons-codec:jar:sources:1.11",
+ "io.opencensus:opencensus-api:jar:sources:0.25.0",
+ "org.conscrypt:conscrypt-openjdk-uber:jar:sources:2.2.1",
+ "io.opencensus:opencensus-contrib-http-util:jar:sources:0.24.0",
+ "org.apache.httpcomponents:httpcore:jar:sources:4.4.13",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2",
+ "com.google.auto.value:auto-value-annotations:jar:sources:1.7"
+ ],
+ "directDependencies": [
+ "com.google.auth:google-auth-library-credentials:jar:sources:0.20.0",
+ "com.google.http-client:google-http-client:jar:sources:1.34.1",
+ "com.google.cloud:google-cloud-core:jar:sources:1.92.5",
+ "com.google.api:api-common:jar:sources:1.8.1",
+ "com.google.api:gax-grpc:jar:sources:1.53.1",
+ "com.google.api:gax:jar:sources:1.53.1"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/cloud/google-cloud-core-grpc/1.92.5/google-cloud-core-grpc-1.92.5-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/cloud/google-cloud-core-grpc/1.92.5/google-cloud-core-grpc-1.92.5-sources.jar",
+ "https://maven.google.com/com/google/cloud/google-cloud-core-grpc/1.92.5/google-cloud-core-grpc-1.92.5-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/cloud/google-cloud-core-grpc/1.92.5/google-cloud-core-grpc-1.92.5-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/cloud/google-cloud-core-grpc/1.92.5/google-cloud-core-grpc-1.92.5-sources.jar"
+ ],
+ "sha256": "2a88ba4831ac3b878a50f337883baa16657f9b640d0be23fdb79571921a963aa",
+ "url": "https://jcenter.bintray.com/com/google/cloud/google-cloud-core-grpc/1.92.5/google-cloud-core-grpc-1.92.5-sources.jar"
+ },
+ {
+ "coord": "com.google.cloud:google-cloud-core:1.92.5",
+ "dependencies": [
+ "com.google.api.grpc:proto-google-common-protos:1.17.0",
+ "com.google.j2objc:j2objc-annotations:1.3",
+ "commons-logging:commons-logging:1.2",
+ "io.opencensus:opencensus-contrib-http-util:0.24.0",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "com.google.auto.value:auto-value-annotations:1.7",
+ "com.google.auth:google-auth-library-credentials:0.20.0",
+ "org.apache.httpcomponents:httpclient:4.5.11",
+ "com.google.api:api-common:1.8.1",
+ "commons-codec:commons-codec:1.11",
+ "com.google.code.gson:gson:2.8.6",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
+ "org.apache.httpcomponents:httpcore:4.4.13",
+ "com.google.errorprone:error_prone_annotations:2.3.4",
+ "com.google.http-client:google-http-client-jackson2:1.34.1",
+ "org.threeten:threetenbp:1.4.1",
+ "com.google.api.grpc:proto-google-iam-v1:0.13.0",
+ "javax.annotation:javax.annotation-api:1.3.2",
+ "com.google.auth:google-auth-library-oauth2-http:0.20.0",
+ "com.google.api:gax:1.53.1",
+ "com.google.protobuf:protobuf-java-util:3.11.4",
+ "io.opencensus:opencensus-api:0.25.0",
+ "com.google.http-client:google-http-client:1.34.1"
+ ],
+ "directDependencies": [
+ "com.google.api.grpc:proto-google-common-protos:1.17.0",
+ "com.google.auth:google-auth-library-credentials:0.20.0",
+ "com.google.api:api-common:1.8.1",
+ "com.google.http-client:google-http-client-jackson2:1.34.1",
+ "org.threeten:threetenbp:1.4.1",
+ "com.google.api.grpc:proto-google-iam-v1:0.13.0",
+ "com.google.auth:google-auth-library-oauth2-http:0.20.0",
+ "com.google.api:gax:1.53.1",
+ "com.google.protobuf:protobuf-java-util:3.11.4",
+ "com.google.http-client:google-http-client:1.34.1"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/cloud/google-cloud-core/1.92.5/google-cloud-core-1.92.5.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/cloud/google-cloud-core/1.92.5/google-cloud-core-1.92.5.jar",
+ "https://maven.google.com/com/google/cloud/google-cloud-core/1.92.5/google-cloud-core-1.92.5.jar",
+ "https://repo1.maven.org/maven2/com/google/cloud/google-cloud-core/1.92.5/google-cloud-core-1.92.5.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/cloud/google-cloud-core/1.92.5/google-cloud-core-1.92.5.jar"
+ ],
+ "sha256": "e465baed5839e24bb03198d049df762217929804867d1e9d2be96040ae75bab5",
+ "url": "https://jcenter.bintray.com/com/google/cloud/google-cloud-core/1.92.5/google-cloud-core-1.92.5.jar"
+ },
+ {
+ "coord": "com.google.cloud:google-cloud-core:jar:sources:1.92.5",
+ "dependencies": [
+ "com.google.api.grpc:proto-google-iam-v1:jar:sources:0.13.0",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.auth:google-auth-library-credentials:jar:sources:0.20.0",
+ "org.threeten:threetenbp:jar:sources:1.4.1",
+ "com.google.http-client:google-http-client:jar:sources:1.34.1",
+ "com.google.auth:google-auth-library-oauth2-http:jar:sources:0.20.0",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "commons-logging:commons-logging:jar:sources:1.2",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
+ "com.google.api:api-common:jar:sources:1.8.1",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4",
+ "com.google.protobuf:protobuf-java-util:jar:sources:3.11.4",
+ "com.google.api:gax:jar:sources:1.53.1",
+ "com.google.api.grpc:proto-google-common-protos:jar:sources:1.17.0",
+ "com.google.http-client:google-http-client-jackson2:jar:sources:1.34.1",
+ "org.apache.httpcomponents:httpclient:jar:sources:4.5.11",
+ "com.google.code.gson:gson:jar:sources:2.8.6",
+ "commons-codec:commons-codec:jar:sources:1.11",
+ "io.opencensus:opencensus-api:jar:sources:0.25.0",
+ "io.opencensus:opencensus-contrib-http-util:jar:sources:0.24.0",
+ "org.apache.httpcomponents:httpcore:jar:sources:4.4.13",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2",
+ "com.google.auto.value:auto-value-annotations:jar:sources:1.7"
+ ],
+ "directDependencies": [
+ "com.google.api.grpc:proto-google-iam-v1:jar:sources:0.13.0",
+ "com.google.auth:google-auth-library-credentials:jar:sources:0.20.0",
+ "org.threeten:threetenbp:jar:sources:1.4.1",
+ "com.google.http-client:google-http-client:jar:sources:1.34.1",
+ "com.google.auth:google-auth-library-oauth2-http:jar:sources:0.20.0",
+ "com.google.api:api-common:jar:sources:1.8.1",
+ "com.google.protobuf:protobuf-java-util:jar:sources:3.11.4",
+ "com.google.api:gax:jar:sources:1.53.1",
+ "com.google.api.grpc:proto-google-common-protos:jar:sources:1.17.0",
+ "com.google.http-client:google-http-client-jackson2:jar:sources:1.34.1"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/cloud/google-cloud-core/1.92.5/google-cloud-core-1.92.5-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/cloud/google-cloud-core/1.92.5/google-cloud-core-1.92.5-sources.jar",
+ "https://maven.google.com/com/google/cloud/google-cloud-core/1.92.5/google-cloud-core-1.92.5-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/cloud/google-cloud-core/1.92.5/google-cloud-core-1.92.5-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/cloud/google-cloud-core/1.92.5/google-cloud-core-1.92.5-sources.jar"
+ ],
+ "sha256": "e1c005b5180e652d7d941e8c1465dd099b2554ee712ee4b4ba11e22a866cbef4",
+ "url": "https://jcenter.bintray.com/com/google/cloud/google-cloud-core/1.92.5/google-cloud-core-1.92.5-sources.jar"
+ },
+ {
+ "coord": "com.google.cloud:google-cloud-firestore:1.32.4",
+ "dependencies": [
+ "com.google.api.grpc:proto-google-common-protos:1.17.0",
+ "com.google.j2objc:j2objc-annotations:1.3",
+ "commons-logging:commons-logging:1.2",
+ "io.opencensus:opencensus-contrib-http-util:0.24.0",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "com.google.auto.value:auto-value-annotations:1.7",
+ "com.google.cloud:google-cloud-core-grpc:1.92.5",
+ "com.google.auth:google-auth-library-credentials:0.20.0",
+ "org.apache.httpcomponents:httpclient:4.5.11",
+ "com.google.api:api-common:1.8.1",
+ "commons-codec:commons-codec:1.11",
+ "com.google.api.grpc:proto-google-cloud-firestore-v1:1.32.4",
+ "com.google.cloud:google-cloud-core:1.92.5",
+ "com.google.code.gson:gson:2.8.6",
+ "io.grpc:grpc-protobuf:1.27.1",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
+ "org.apache.httpcomponents:httpcore:4.4.13",
+ "com.google.errorprone:error_prone_annotations:2.3.4",
+ "com.google.api.grpc:proto-google-cloud-firestore-v1beta1:0.85.4",
+ "com.google.http-client:google-http-client-jackson2:1.34.1",
+ "org.threeten:threetenbp:1.4.1",
+ "io.grpc:grpc-protobuf-lite:1.27.1",
+ "com.google.api.grpc:proto-google-iam-v1:0.13.0",
+ "io.grpc:grpc-grpclb:1.27.0",
+ "com.google.api.grpc:proto-google-cloud-firestore-admin-v1:1.32.4",
+ "org.apache.commons:commons-lang3:3.5",
+ "javax.annotation:javax.annotation-api:1.3.2",
+ "io.grpc:grpc-netty-shaded:1.27.0",
+ "io.opencensus:opencensus-contrib-grpc-util:0.25.0",
+ "com.google.auth:google-auth-library-oauth2-http:0.20.0",
+ "com.google.api:gax:1.53.1",
+ "org.conscrypt:conscrypt-openjdk-uber:2.2.1",
+ "io.grpc:grpc-alts:1.27.0",
+ "com.google.api:gax-grpc:1.53.1",
+ "com.google.protobuf:protobuf-java-util:3.11.4",
+ "io.opencensus:opencensus-api:0.25.0",
+ "com.google.http-client:google-http-client:1.34.1"
+ ],
+ "directDependencies": [
+ "com.google.api.grpc:proto-google-common-protos:1.17.0",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "com.google.auto.value:auto-value-annotations:1.7",
+ "com.google.cloud:google-cloud-core-grpc:1.92.5",
+ "com.google.auth:google-auth-library-credentials:0.20.0",
+ "com.google.api:api-common:1.8.1",
+ "com.google.api.grpc:proto-google-cloud-firestore-v1:1.32.4",
+ "com.google.cloud:google-cloud-core:1.92.5",
+ "com.google.code.gson:gson:2.8.6",
+ "io.grpc:grpc-protobuf:1.27.1",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
+ "com.google.api.grpc:proto-google-cloud-firestore-v1beta1:0.85.4",
+ "org.threeten:threetenbp:1.4.1",
+ "com.google.api.grpc:proto-google-cloud-firestore-admin-v1:1.32.4",
+ "javax.annotation:javax.annotation-api:1.3.2",
+ "io.opencensus:opencensus-contrib-grpc-util:0.25.0",
+ "com.google.api:gax:1.53.1",
+ "com.google.api:gax-grpc:1.53.1",
+ "com.google.protobuf:protobuf-java-util:3.11.4",
+ "io.opencensus:opencensus-api:0.25.0"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
- "file": "v1/https/jcenter.bintray.com/com/google/auth/google-auth-library-credentials/0.18.0/google-auth-library-credentials-0.18.0.jar",
+ "file": "v1/https/jcenter.bintray.com/com/google/cloud/google-cloud-firestore/1.32.4/google-cloud-firestore-1.32.4.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/com/google/auth/google-auth-library-credentials/0.18.0/google-auth-library-credentials-0.18.0.jar",
- "https://maven.google.com/com/google/auth/google-auth-library-credentials/0.18.0/google-auth-library-credentials-0.18.0.jar",
- "https://repo1.maven.org/maven2/com/google/auth/google-auth-library-credentials/0.18.0/google-auth-library-credentials-0.18.0.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/com/google/auth/google-auth-library-credentials/0.18.0/google-auth-library-credentials-0.18.0.jar"
+ "https://jcenter.bintray.com/com/google/cloud/google-cloud-firestore/1.32.4/google-cloud-firestore-1.32.4.jar",
+ "https://maven.google.com/com/google/cloud/google-cloud-firestore/1.32.4/google-cloud-firestore-1.32.4.jar",
+ "https://repo1.maven.org/maven2/com/google/cloud/google-cloud-firestore/1.32.4/google-cloud-firestore-1.32.4.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/cloud/google-cloud-firestore/1.32.4/google-cloud-firestore-1.32.4.jar"
],
- "sha256": "2377b149dbf63f000f96b66f5dc0f07b9da3928f5e3f31973f2d21fcb63ce6ff",
- "url": "https://jcenter.bintray.com/com/google/auth/google-auth-library-credentials/0.18.0/google-auth-library-credentials-0.18.0.jar"
+ "sha256": "26988e7ebfc3fa052d4c00ee471c51348229cd26647c48bfee5a0daf3dee2afd",
+ "url": "https://jcenter.bintray.com/com/google/cloud/google-cloud-firestore/1.32.4/google-cloud-firestore-1.32.4.jar"
},
{
- "coord": "com.google.auth:google-auth-library-credentials:jar:sources:0.18.0",
- "dependencies": [],
- "directDependencies": [],
+ "coord": "com.google.cloud:google-cloud-firestore:jar:sources:1.32.4",
+ "dependencies": [
+ "com.google.api.grpc:proto-google-iam-v1:jar:sources:0.13.0",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.auth:google-auth-library-credentials:jar:sources:0.20.0",
+ "org.threeten:threetenbp:jar:sources:1.4.1",
+ "com.google.http-client:google-http-client:jar:sources:1.34.1",
+ "com.google.api.grpc:proto-google-cloud-firestore-admin-v1:jar:sources:1.32.4",
+ "com.google.auth:google-auth-library-oauth2-http:jar:sources:0.20.0",
+ "io.grpc:grpc-protobuf:jar:sources:1.27.1",
+ "io.grpc:grpc-alts:jar:sources:1.27.0",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "com.google.cloud:google-cloud-core:jar:sources:1.92.5",
+ "commons-logging:commons-logging:jar:sources:1.2",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
+ "io.grpc:grpc-protobuf-lite:jar:sources:1.27.1",
+ "com.google.api:api-common:jar:sources:1.8.1",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4",
+ "com.google.api:gax-grpc:jar:sources:1.53.1",
+ "com.google.protobuf:protobuf-java-util:jar:sources:3.11.4",
+ "com.google.api:gax:jar:sources:1.53.1",
+ "io.opencensus:opencensus-contrib-grpc-util:jar:sources:0.25.0",
+ "com.google.api.grpc:proto-google-common-protos:jar:sources:1.17.0",
+ "com.google.http-client:google-http-client-jackson2:jar:sources:1.34.1",
+ "io.grpc:grpc-grpclb:jar:sources:1.27.0",
+ "org.apache.httpcomponents:httpclient:jar:sources:4.5.11",
+ "com.google.code.gson:gson:jar:sources:2.8.6",
+ "org.apache.commons:commons-lang3:jar:sources:3.5",
+ "io.grpc:grpc-netty-shaded:jar:sources:1.27.0",
+ "com.google.api.grpc:proto-google-cloud-firestore-v1:jar:sources:1.32.4",
+ "commons-codec:commons-codec:jar:sources:1.11",
+ "io.opencensus:opencensus-api:jar:sources:0.25.0",
+ "org.conscrypt:conscrypt-openjdk-uber:jar:sources:2.2.1",
+ "io.opencensus:opencensus-contrib-http-util:jar:sources:0.24.0",
+ "org.apache.httpcomponents:httpcore:jar:sources:4.4.13",
+ "com.google.api.grpc:proto-google-cloud-firestore-v1beta1:jar:sources:0.85.4",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2",
+ "com.google.cloud:google-cloud-core-grpc:jar:sources:1.92.5",
+ "com.google.auto.value:auto-value-annotations:jar:sources:1.7"
+ ],
+ "directDependencies": [
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.auth:google-auth-library-credentials:jar:sources:0.20.0",
+ "org.threeten:threetenbp:jar:sources:1.4.1",
+ "com.google.api.grpc:proto-google-cloud-firestore-admin-v1:jar:sources:1.32.4",
+ "io.grpc:grpc-protobuf:jar:sources:1.27.1",
+ "com.google.cloud:google-cloud-core:jar:sources:1.92.5",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
+ "com.google.api:api-common:jar:sources:1.8.1",
+ "com.google.api:gax-grpc:jar:sources:1.53.1",
+ "com.google.protobuf:protobuf-java-util:jar:sources:3.11.4",
+ "com.google.api:gax:jar:sources:1.53.1",
+ "io.opencensus:opencensus-contrib-grpc-util:jar:sources:0.25.0",
+ "com.google.api.grpc:proto-google-common-protos:jar:sources:1.17.0",
+ "com.google.code.gson:gson:jar:sources:2.8.6",
+ "com.google.api.grpc:proto-google-cloud-firestore-v1:jar:sources:1.32.4",
+ "io.opencensus:opencensus-api:jar:sources:0.25.0",
+ "com.google.api.grpc:proto-google-cloud-firestore-v1beta1:jar:sources:0.85.4",
+ "javax.annotation:javax.annotation-api:jar:sources:1.3.2",
+ "com.google.cloud:google-cloud-core-grpc:jar:sources:1.92.5",
+ "com.google.auto.value:auto-value-annotations:jar:sources:1.7"
+ ],
"exclusions": [
+ "com.google.guava:guava",
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
- "file": "v1/https/jcenter.bintray.com/com/google/auth/google-auth-library-credentials/0.18.0/google-auth-library-credentials-0.18.0-sources.jar",
+ "file": "v1/https/jcenter.bintray.com/com/google/cloud/google-cloud-firestore/1.32.4/google-cloud-firestore-1.32.4-sources.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/com/google/auth/google-auth-library-credentials/0.18.0/google-auth-library-credentials-0.18.0-sources.jar",
- "https://maven.google.com/com/google/auth/google-auth-library-credentials/0.18.0/google-auth-library-credentials-0.18.0-sources.jar",
- "https://repo1.maven.org/maven2/com/google/auth/google-auth-library-credentials/0.18.0/google-auth-library-credentials-0.18.0-sources.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/com/google/auth/google-auth-library-credentials/0.18.0/google-auth-library-credentials-0.18.0-sources.jar"
+ "https://jcenter.bintray.com/com/google/cloud/google-cloud-firestore/1.32.4/google-cloud-firestore-1.32.4-sources.jar",
+ "https://maven.google.com/com/google/cloud/google-cloud-firestore/1.32.4/google-cloud-firestore-1.32.4-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/cloud/google-cloud-firestore/1.32.4/google-cloud-firestore-1.32.4-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/cloud/google-cloud-firestore/1.32.4/google-cloud-firestore-1.32.4-sources.jar"
],
- "sha256": "bd7b9d3297e4df3411edc59bbe418cc33f2a529ac4979c4f6fa59f1e662527f3",
- "url": "https://jcenter.bintray.com/com/google/auth/google-auth-library-credentials/0.18.0/google-auth-library-credentials-0.18.0-sources.jar"
+ "sha256": "c75926668bd3d595c71800e4c30423550dd6e7af123905c11700e7f1ac685512",
+ "url": "https://jcenter.bintray.com/com/google/cloud/google-cloud-firestore/1.32.4/google-cloud-firestore-1.32.4-sources.jar"
},
{
"coord": "com.google.code.findbugs:jsr305:3.0.2",
@@ -406,8 +1592,16 @@
"dependencies": [],
"directDependencies": [],
"exclusions": [
+ "com.google.guava:guava",
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2-sources.jar",
"mirror_urls": [
@@ -456,40 +1650,40 @@
"url": "https://jcenter.bintray.com/com/google/code/gson/gson/2.8.6/gson-2.8.6-sources.jar"
},
{
- "coord": "com.google.errorprone:error_prone_annotations:2.3.3",
+ "coord": "com.google.errorprone:error_prone_annotations:2.3.4",
"dependencies": [],
"directDependencies": [],
"exclusions": [
"com.google.template:soy",
"com.google.common.html.types:types"
],
- "file": "v1/https/jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar",
+ "file": "v1/https/jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar",
- "https://maven.google.com/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar",
- "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar"
+ "https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar",
+ "https://maven.google.com/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar",
+ "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar"
],
- "sha256": "ec59f1b702d9afc09e8c3929f5c42777dec623a6ea2731ac694332c7d7680f5a",
- "url": "https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar"
+ "sha256": "baf7d6ea97ce606c53e11b6854ba5f2ce7ef5c24dddf0afa18d1260bd25b002c",
+ "url": "https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar"
},
{
- "coord": "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
+ "coord": "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4",
"dependencies": [],
"directDependencies": [],
"exclusions": [
"com.google.template:soy",
"com.google.common.html.types:types"
],
- "file": "v1/https/jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3-sources.jar",
+ "file": "v1/https/jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4-sources.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3-sources.jar",
- "https://maven.google.com/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3-sources.jar",
- "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3-sources.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3-sources.jar"
+ "https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4-sources.jar",
+ "https://maven.google.com/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4-sources.jar"
],
- "sha256": "f58446b80b5f1e98bcb74dae5c0710ed8e52baafe5a4bb315f769f306d85634a",
- "url": "https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3-sources.jar"
+ "sha256": "0b1011d1e2ea2eab35a545cffd1cff3877f131134c8020885e8eaf60a7d72f91",
+ "url": "https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4-sources.jar"
},
{
"coord": "com.google.guava:failureaccess:1.0.1",
@@ -533,8 +1727,8 @@
"com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
"org.codehaus.mojo:animal-sniffer-annotations:1.18",
"com.google.j2objc:j2objc-annotations:1.3",
- "com.google.errorprone:error_prone_annotations:2.3.3",
"com.google.code.findbugs:jsr305:3.0.2",
+ "com.google.errorprone:error_prone_annotations:2.3.4",
"com.google.guava:failureaccess:1.0.1",
"org.checkerframework:checker-compat-qual:2.5.5"
],
@@ -542,8 +1736,8 @@
"com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
"org.codehaus.mojo:animal-sniffer-annotations:1.18",
"com.google.j2objc:j2objc-annotations:1.3",
- "com.google.errorprone:error_prone_annotations:2.3.3",
"com.google.code.findbugs:jsr305:3.0.2",
+ "com.google.errorprone:error_prone_annotations:2.3.4",
"com.google.guava:failureaccess:1.0.1",
"org.checkerframework:checker-compat-qual:2.5.5"
],
@@ -567,7 +1761,7 @@
"org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18",
"com.google.code.findbugs:jsr305:jar:sources:3.0.2",
"com.google.j2objc:j2objc-annotations:jar:sources:1.3",
- "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4",
"org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
"com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
"com.google.guava:failureaccess:jar:sources:1.0.1"
@@ -576,7 +1770,7 @@
"org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18",
"com.google.code.findbugs:jsr305:jar:sources:3.0.2",
"com.google.j2objc:j2objc-annotations:jar:sources:1.3",
- "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4",
"org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
"com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
"com.google.guava:failureaccess:jar:sources:1.0.1"
@@ -613,6 +1807,170 @@
"sha256": "b372a037d4230aa57fbeffdef30fd6123f9c0c2db85d0aced00c91b974f33f99",
"url": "https://jcenter.bintray.com/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar"
},
+ {
+ "coord": "com.google.http-client:google-http-client-jackson2:1.34.1",
+ "dependencies": [
+ "com.google.j2objc:j2objc-annotations:1.3",
+ "commons-logging:commons-logging:1.2",
+ "io.opencensus:opencensus-contrib-http-util:0.24.0",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "org.apache.httpcomponents:httpclient:4.5.11",
+ "commons-codec:commons-codec:1.11",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
+ "org.apache.httpcomponents:httpcore:4.4.13",
+ "io.opencensus:opencensus-api:0.25.0",
+ "com.google.http-client:google-http-client:1.34.1"
+ ],
+ "directDependencies": [
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
+ "com.google.http-client:google-http-client:1.34.1"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/http-client/google-http-client-jackson2/1.34.1/google-http-client-jackson2-1.34.1.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/http-client/google-http-client-jackson2/1.34.1/google-http-client-jackson2-1.34.1.jar",
+ "https://maven.google.com/com/google/http-client/google-http-client-jackson2/1.34.1/google-http-client-jackson2-1.34.1.jar",
+ "https://repo1.maven.org/maven2/com/google/http-client/google-http-client-jackson2/1.34.1/google-http-client-jackson2-1.34.1.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/http-client/google-http-client-jackson2/1.34.1/google-http-client-jackson2-1.34.1.jar"
+ ],
+ "sha256": "33439188bcd62e9759b173583b197da907674c33b26c2203fb1f52199640f147",
+ "url": "https://jcenter.bintray.com/com/google/http-client/google-http-client-jackson2/1.34.1/google-http-client-jackson2-1.34.1.jar"
+ },
+ {
+ "coord": "com.google.http-client:google-http-client-jackson2:jar:sources:1.34.1",
+ "dependencies": [
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.http-client:google-http-client:jar:sources:1.34.1",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "commons-logging:commons-logging:jar:sources:1.2",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
+ "org.apache.httpcomponents:httpclient:jar:sources:4.5.11",
+ "commons-codec:commons-codec:jar:sources:1.11",
+ "io.opencensus:opencensus-api:jar:sources:0.25.0",
+ "io.opencensus:opencensus-contrib-http-util:jar:sources:0.24.0",
+ "org.apache.httpcomponents:httpcore:jar:sources:4.4.13"
+ ],
+ "directDependencies": [
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
+ "com.google.http-client:google-http-client:jar:sources:1.34.1"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/http-client/google-http-client-jackson2/1.34.1/google-http-client-jackson2-1.34.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/http-client/google-http-client-jackson2/1.34.1/google-http-client-jackson2-1.34.1-sources.jar",
+ "https://maven.google.com/com/google/http-client/google-http-client-jackson2/1.34.1/google-http-client-jackson2-1.34.1-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/http-client/google-http-client-jackson2/1.34.1/google-http-client-jackson2-1.34.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/http-client/google-http-client-jackson2/1.34.1/google-http-client-jackson2-1.34.1-sources.jar"
+ ],
+ "sha256": "012dc26127536e0831a8df8fd6fef2881d582e9358c96d159c0d598704a910a5",
+ "url": "https://jcenter.bintray.com/com/google/http-client/google-http-client-jackson2/1.34.1/google-http-client-jackson2-1.34.1-sources.jar"
+ },
+ {
+ "coord": "com.google.http-client:google-http-client:1.34.1",
+ "dependencies": [
+ "com.google.j2objc:j2objc-annotations:1.3",
+ "commons-logging:commons-logging:1.2",
+ "io.opencensus:opencensus-contrib-http-util:0.24.0",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "org.apache.httpcomponents:httpclient:4.5.11",
+ "commons-codec:commons-codec:1.11",
+ "org.apache.httpcomponents:httpcore:4.4.13",
+ "io.opencensus:opencensus-api:0.25.0"
+ ],
+ "directDependencies": [
+ "com.google.j2objc:j2objc-annotations:1.3",
+ "io.opencensus:opencensus-contrib-http-util:0.24.0",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "org.apache.httpcomponents:httpclient:4.5.11",
+ "org.apache.httpcomponents:httpcore:4.4.13",
+ "io.opencensus:opencensus-api:0.25.0"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/http-client/google-http-client/1.34.1/google-http-client-1.34.1.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/http-client/google-http-client/1.34.1/google-http-client-1.34.1.jar",
+ "https://maven.google.com/com/google/http-client/google-http-client/1.34.1/google-http-client-1.34.1.jar",
+ "https://repo1.maven.org/maven2/com/google/http-client/google-http-client/1.34.1/google-http-client-1.34.1.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/http-client/google-http-client/1.34.1/google-http-client-1.34.1.jar"
+ ],
+ "sha256": "ff790b71ec565627f58dcbc06133bb74b47c91ea7ea605e7d098859588d4935f",
+ "url": "https://jcenter.bintray.com/com/google/http-client/google-http-client/1.34.1/google-http-client-1.34.1.jar"
+ },
+ {
+ "coord": "com.google.http-client:google-http-client:jar:sources:1.34.1",
+ "dependencies": [
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "commons-logging:commons-logging:jar:sources:1.2",
+ "org.apache.httpcomponents:httpclient:jar:sources:4.5.11",
+ "commons-codec:commons-codec:jar:sources:1.11",
+ "io.opencensus:opencensus-api:jar:sources:0.25.0",
+ "io.opencensus:opencensus-contrib-http-util:jar:sources:0.24.0",
+ "org.apache.httpcomponents:httpcore:jar:sources:4.4.13"
+ ],
+ "directDependencies": [
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "org.apache.httpcomponents:httpclient:jar:sources:4.5.11",
+ "io.opencensus:opencensus-api:jar:sources:0.25.0",
+ "io.opencensus:opencensus-contrib-http-util:jar:sources:0.24.0",
+ "org.apache.httpcomponents:httpcore:jar:sources:4.4.13"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/com/google/http-client/google-http-client/1.34.1/google-http-client-1.34.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/com/google/http-client/google-http-client/1.34.1/google-http-client-1.34.1-sources.jar",
+ "https://maven.google.com/com/google/http-client/google-http-client/1.34.1/google-http-client-1.34.1-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/http-client/google-http-client/1.34.1/google-http-client-1.34.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/http-client/google-http-client/1.34.1/google-http-client-1.34.1-sources.jar"
+ ],
+ "sha256": "73b3d0d59340b11cbb577ea2e15c06e81633ca3524493784ccb2636b26f9b6c2",
+ "url": "https://jcenter.bintray.com/com/google/http-client/google-http-client/1.34.1/google-http-client-1.34.1-sources.jar"
+ },
{
"coord": "com.google.j2objc:j2objc-annotations:1.3",
"dependencies": [],
@@ -650,72 +2008,76 @@
"url": "https://jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3-sources.jar"
},
{
- "coord": "com.google.protobuf:protobuf-java-util:3.11.1",
+ "coord": "com.google.protobuf:protobuf-java-util:3.11.4",
"dependencies": [
"com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
"com.google.guava:guava:28.1-android",
"org.codehaus.mojo:animal-sniffer-annotations:1.18",
"com.google.j2objc:j2objc-annotations:1.3",
- "com.google.errorprone:error_prone_annotations:2.3.3",
"com.google.code.findbugs:jsr305:3.0.2",
"com.google.protobuf:protobuf-java:3.11.4",
"com.google.code.gson:gson:2.8.6",
+ "com.google.errorprone:error_prone_annotations:2.3.4",
"com.google.guava:failureaccess:1.0.1",
"org.checkerframework:checker-compat-qual:2.5.5"
],
"directDependencies": [
"com.google.code.gson:gson:2.8.6",
- "com.google.errorprone:error_prone_annotations:2.3.3",
+ "com.google.errorprone:error_prone_annotations:2.3.4",
"com.google.guava:guava:28.1-android",
"com.google.protobuf:protobuf-java:3.11.4"
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
- "file": "v1/https/jcenter.bintray.com/com/google/protobuf/protobuf-java-util/3.11.1/protobuf-java-util-3.11.1.jar",
+ "file": "v1/https/jcenter.bintray.com/com/google/protobuf/protobuf-java-util/3.11.4/protobuf-java-util-3.11.4.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/com/google/protobuf/protobuf-java-util/3.11.1/protobuf-java-util-3.11.1.jar",
- "https://maven.google.com/com/google/protobuf/protobuf-java-util/3.11.1/protobuf-java-util-3.11.1.jar",
- "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-java-util/3.11.1/protobuf-java-util-3.11.1.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/com/google/protobuf/protobuf-java-util/3.11.1/protobuf-java-util-3.11.1.jar"
+ "https://jcenter.bintray.com/com/google/protobuf/protobuf-java-util/3.11.4/protobuf-java-util-3.11.4.jar",
+ "https://maven.google.com/com/google/protobuf/protobuf-java-util/3.11.4/protobuf-java-util-3.11.4.jar",
+ "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-java-util/3.11.4/protobuf-java-util-3.11.4.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/protobuf/protobuf-java-util/3.11.4/protobuf-java-util-3.11.4.jar"
],
- "sha256": "dc7d8c502199c1309b284f9a8d0afff82356f0477d9a155ba4e50abb06e15313",
- "url": "https://jcenter.bintray.com/com/google/protobuf/protobuf-java-util/3.11.1/protobuf-java-util-3.11.1.jar"
+ "sha256": "29aacfff1cc455102627d4cfe6f319e4864ea7ce1a4e9d03b4c7bb01fc8255b0",
+ "url": "https://jcenter.bintray.com/com/google/protobuf/protobuf-java-util/3.11.4/protobuf-java-util-3.11.4.jar"
},
{
- "coord": "com.google.protobuf:protobuf-java-util:jar:sources:3.11.1",
+ "coord": "com.google.protobuf:protobuf-java-util:jar:sources:3.11.4",
"dependencies": [
- "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18",
- "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
- "com.google.protobuf:protobuf-java:jar:sources:3.11.4",
- "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
"com.google.code.gson:gson:jar:sources:2.8.6",
- "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
- "org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
- "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
- "com.google.guava:guava:jar:sources:28.1-android",
- "com.google.guava:failureaccess:jar:sources:1.0.1"
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4"
],
"directDependencies": [
"com.google.code.gson:gson:jar:sources:2.8.6",
- "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
- "com.google.guava:guava:jar:sources:28.1-android",
- "com.google.protobuf:protobuf-java:jar:sources:3.11.4"
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4"
],
"exclusions": [
+ "com.google.guava:guava",
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
- "file": "v1/https/jcenter.bintray.com/com/google/protobuf/protobuf-java-util/3.11.1/protobuf-java-util-3.11.1-sources.jar",
+ "file": "v1/https/jcenter.bintray.com/com/google/protobuf/protobuf-java-util/3.11.4/protobuf-java-util-3.11.4-sources.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/com/google/protobuf/protobuf-java-util/3.11.1/protobuf-java-util-3.11.1-sources.jar",
- "https://maven.google.com/com/google/protobuf/protobuf-java-util/3.11.1/protobuf-java-util-3.11.1-sources.jar",
- "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-java-util/3.11.1/protobuf-java-util-3.11.1-sources.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/com/google/protobuf/protobuf-java-util/3.11.1/protobuf-java-util-3.11.1-sources.jar"
+ "https://jcenter.bintray.com/com/google/protobuf/protobuf-java-util/3.11.4/protobuf-java-util-3.11.4-sources.jar",
+ "https://maven.google.com/com/google/protobuf/protobuf-java-util/3.11.4/protobuf-java-util-3.11.4-sources.jar",
+ "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-java-util/3.11.4/protobuf-java-util-3.11.4-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/com/google/protobuf/protobuf-java-util/3.11.4/protobuf-java-util-3.11.4-sources.jar"
],
- "sha256": "236b015889438e77ba203700675090753bdbf251e561984ebb94bc95f080590b",
- "url": "https://jcenter.bintray.com/com/google/protobuf/protobuf-java-util/3.11.1/protobuf-java-util-3.11.1-sources.jar"
+ "sha256": "8a004e59971f70a8b804634cfe21103217f37eda9410c74cc4ade4fb3e7ff258",
+ "url": "https://jcenter.bintray.com/com/google/protobuf/protobuf-java-util/3.11.4/protobuf-java-util-3.11.4-sources.jar"
},
{
"coord": "com.google.protobuf:protobuf-java:3.11.4",
@@ -869,6 +2231,110 @@
"sha256": "b6b4272875cd5c348aeb05613fba0b82032d179291d1d6efbe713ea8754bd3a0",
"url": "https://jcenter.bintray.com/com/univocity/univocity-parsers/2.7.6/univocity-parsers-2.7.6-sources.jar"
},
+ {
+ "coord": "commons-codec:commons-codec:1.11",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/commons-codec/commons-codec/1.11/commons-codec-1.11.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/commons-codec/commons-codec/1.11/commons-codec-1.11.jar",
+ "https://maven.google.com/commons-codec/commons-codec/1.11/commons-codec-1.11.jar",
+ "https://repo1.maven.org/maven2/commons-codec/commons-codec/1.11/commons-codec-1.11.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/commons-codec/commons-codec/1.11/commons-codec-1.11.jar"
+ ],
+ "sha256": "e599d5318e97aa48f42136a2927e6dfa4e8881dff0e6c8e3109ddbbff51d7b7d",
+ "url": "https://jcenter.bintray.com/commons-codec/commons-codec/1.11/commons-codec-1.11.jar"
+ },
+ {
+ "coord": "commons-codec:commons-codec:jar:sources:1.11",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/commons-codec/commons-codec/1.11/commons-codec-1.11-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/commons-codec/commons-codec/1.11/commons-codec-1.11-sources.jar",
+ "https://maven.google.com/commons-codec/commons-codec/1.11/commons-codec-1.11-sources.jar",
+ "https://repo1.maven.org/maven2/commons-codec/commons-codec/1.11/commons-codec-1.11-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/commons-codec/commons-codec/1.11/commons-codec-1.11-sources.jar"
+ ],
+ "sha256": "901cb5d1f7c2877017c95d3c5efd5a497738d0162ef72cdf58e9cb13f50b2e9c",
+ "url": "https://jcenter.bintray.com/commons-codec/commons-codec/1.11/commons-codec-1.11-sources.jar"
+ },
+ {
+ "coord": "commons-logging:commons-logging:1.2",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/commons-logging/commons-logging/1.2/commons-logging-1.2.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/commons-logging/commons-logging/1.2/commons-logging-1.2.jar",
+ "https://maven.google.com/commons-logging/commons-logging/1.2/commons-logging-1.2.jar",
+ "https://repo1.maven.org/maven2/commons-logging/commons-logging/1.2/commons-logging-1.2.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/commons-logging/commons-logging/1.2/commons-logging-1.2.jar"
+ ],
+ "sha256": "daddea1ea0be0f56978ab3006b8ac92834afeefbd9b7e4e6316fca57df0fa636",
+ "url": "https://jcenter.bintray.com/commons-logging/commons-logging/1.2/commons-logging-1.2.jar"
+ },
+ {
+ "coord": "commons-logging:commons-logging:jar:sources:1.2",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/commons-logging/commons-logging/1.2/commons-logging-1.2-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/commons-logging/commons-logging/1.2/commons-logging-1.2-sources.jar",
+ "https://maven.google.com/commons-logging/commons-logging/1.2/commons-logging-1.2-sources.jar",
+ "https://repo1.maven.org/maven2/commons-logging/commons-logging/1.2/commons-logging-1.2-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/commons-logging/commons-logging/1.2/commons-logging-1.2-sources.jar"
+ ],
+ "sha256": "44347acfe5860461728e9cb33251e97345be36f8a0dfd5c5130c172559455f41",
+ "url": "https://jcenter.bintray.com/commons-logging/commons-logging/1.2/commons-logging-1.2-sources.jar"
+ },
{
"coord": "io.arrow-kt:arrow-annotations:0.8.2",
"dependencies": [
@@ -1014,47 +2480,161 @@
"url": "https://jcenter.bintray.com/io/github/classgraph/classgraph/4.6.18/classgraph-4.6.18-sources.jar"
},
{
- "coord": "io.grpc:grpc-api:1.26.0",
+ "coord": "io.grpc:grpc-alts:1.27.0",
+ "dependencies": [
+ "com.google.api.grpc:proto-google-common-protos:1.17.0",
+ "com.google.j2objc:j2objc-annotations:1.3",
+ "commons-logging:commons-logging:1.2",
+ "io.opencensus:opencensus-contrib-http-util:0.24.0",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "com.google.auto.value:auto-value-annotations:1.7",
+ "com.google.auth:google-auth-library-credentials:0.20.0",
+ "org.apache.httpcomponents:httpclient:4.5.11",
+ "commons-codec:commons-codec:1.11",
+ "com.google.code.gson:gson:2.8.6",
+ "io.grpc:grpc-protobuf:1.27.1",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
+ "org.apache.httpcomponents:httpcore:4.4.13",
+ "com.google.http-client:google-http-client-jackson2:1.34.1",
+ "io.grpc:grpc-protobuf-lite:1.27.1",
+ "io.grpc:grpc-grpclb:1.27.0",
+ "org.apache.commons:commons-lang3:3.5",
+ "io.grpc:grpc-netty-shaded:1.27.0",
+ "com.google.auth:google-auth-library-oauth2-http:0.20.0",
+ "org.conscrypt:conscrypt-openjdk-uber:2.2.1",
+ "com.google.protobuf:protobuf-java-util:3.11.4",
+ "io.opencensus:opencensus-api:0.25.0",
+ "com.google.http-client:google-http-client:1.34.1"
+ ],
+ "directDependencies": [
+ "io.grpc:grpc-protobuf:1.27.1",
+ "io.grpc:grpc-grpclb:1.27.0",
+ "org.apache.commons:commons-lang3:3.5",
+ "io.grpc:grpc-netty-shaded:1.27.0",
+ "com.google.auth:google-auth-library-oauth2-http:0.20.0",
+ "org.conscrypt:conscrypt-openjdk-uber:2.2.1"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-alts/1.27.0/grpc-alts-1.27.0.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/grpc/grpc-alts/1.27.0/grpc-alts-1.27.0.jar",
+ "https://maven.google.com/io/grpc/grpc-alts/1.27.0/grpc-alts-1.27.0.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-alts/1.27.0/grpc-alts-1.27.0.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-alts/1.27.0/grpc-alts-1.27.0.jar"
+ ],
+ "sha256": "f5a0e97d9d30451c68ae5c611bb30c25a3ce8063d12b73c02dcf118b82deb81c",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-alts/1.27.0/grpc-alts-1.27.0.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-alts:jar:sources:1.27.0",
+ "dependencies": [
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.auth:google-auth-library-credentials:jar:sources:0.20.0",
+ "com.google.http-client:google-http-client:jar:sources:1.34.1",
+ "com.google.auth:google-auth-library-oauth2-http:jar:sources:0.20.0",
+ "io.grpc:grpc-protobuf:jar:sources:1.27.1",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "commons-logging:commons-logging:jar:sources:1.2",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
+ "io.grpc:grpc-protobuf-lite:jar:sources:1.27.1",
+ "com.google.protobuf:protobuf-java-util:jar:sources:3.11.4",
+ "com.google.api.grpc:proto-google-common-protos:jar:sources:1.17.0",
+ "com.google.http-client:google-http-client-jackson2:jar:sources:1.34.1",
+ "io.grpc:grpc-grpclb:jar:sources:1.27.0",
+ "org.apache.httpcomponents:httpclient:jar:sources:4.5.11",
+ "com.google.code.gson:gson:jar:sources:2.8.6",
+ "org.apache.commons:commons-lang3:jar:sources:3.5",
+ "io.grpc:grpc-netty-shaded:jar:sources:1.27.0",
+ "commons-codec:commons-codec:jar:sources:1.11",
+ "io.opencensus:opencensus-api:jar:sources:0.25.0",
+ "org.conscrypt:conscrypt-openjdk-uber:jar:sources:2.2.1",
+ "io.opencensus:opencensus-contrib-http-util:jar:sources:0.24.0",
+ "org.apache.httpcomponents:httpcore:jar:sources:4.4.13",
+ "com.google.auto.value:auto-value-annotations:jar:sources:1.7"
+ ],
+ "directDependencies": [
+ "com.google.auth:google-auth-library-oauth2-http:jar:sources:0.20.0",
+ "io.grpc:grpc-protobuf:jar:sources:1.27.1",
+ "io.grpc:grpc-grpclb:jar:sources:1.27.0",
+ "org.apache.commons:commons-lang3:jar:sources:3.5",
+ "io.grpc:grpc-netty-shaded:jar:sources:1.27.0",
+ "org.conscrypt:conscrypt-openjdk-uber:jar:sources:2.2.1"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-alts/1.27.0/grpc-alts-1.27.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/grpc/grpc-alts/1.27.0/grpc-alts-1.27.0-sources.jar",
+ "https://maven.google.com/io/grpc/grpc-alts/1.27.0/grpc-alts-1.27.0-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-alts/1.27.0/grpc-alts-1.27.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-alts/1.27.0/grpc-alts-1.27.0-sources.jar"
+ ],
+ "sha256": "82043c5601c48b026f8570ba560713512c58817021ba11fbbd96744ada72912c",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-alts/1.27.0/grpc-alts-1.27.0-sources.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-api:1.27.1",
"dependencies": [
"com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
"com.google.guava:guava:28.1-android",
"org.codehaus.mojo:animal-sniffer-annotations:1.18",
"com.google.j2objc:j2objc-annotations:1.3",
- "com.google.errorprone:error_prone_annotations:2.3.3",
"com.google.code.findbugs:jsr305:3.0.2",
- "io.grpc:grpc-context:1.26.0",
+ "com.google.errorprone:error_prone_annotations:2.3.4",
+ "io.grpc:grpc-context:1.27.1",
"com.google.guava:failureaccess:1.0.1",
"org.checkerframework:checker-compat-qual:2.5.5"
],
"directDependencies": [
"com.google.guava:guava:28.1-android",
"org.codehaus.mojo:animal-sniffer-annotations:1.18",
- "com.google.errorprone:error_prone_annotations:2.3.3",
"com.google.code.findbugs:jsr305:3.0.2",
- "io.grpc:grpc-context:1.26.0"
+ "com.google.errorprone:error_prone_annotations:2.3.4",
+ "io.grpc:grpc-context:1.27.1"
],
"exclusions": [
"com.google.template:soy",
"com.google.common.html.types:types"
],
- "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-api/1.26.0/grpc-api-1.26.0.jar",
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-api/1.27.1/grpc-api-1.27.1.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/io/grpc/grpc-api/1.26.0/grpc-api-1.26.0.jar",
- "https://maven.google.com/io/grpc/grpc-api/1.26.0/grpc-api-1.26.0.jar",
- "https://repo1.maven.org/maven2/io/grpc/grpc-api/1.26.0/grpc-api-1.26.0.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-api/1.26.0/grpc-api-1.26.0.jar"
+ "https://jcenter.bintray.com/io/grpc/grpc-api/1.27.1/grpc-api-1.27.1.jar",
+ "https://maven.google.com/io/grpc/grpc-api/1.27.1/grpc-api-1.27.1.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-api/1.27.1/grpc-api-1.27.1.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-api/1.27.1/grpc-api-1.27.1.jar"
],
- "sha256": "cd585bb053defe7721a0b78e8f3e23f0d7d6fb947c9941c53a1c859b0c52ea13",
- "url": "https://jcenter.bintray.com/io/grpc/grpc-api/1.26.0/grpc-api-1.26.0.jar"
+ "sha256": "4b34784b33220852b08c837d46992f451e62230ff45e62ceb0878ac7a1f4729a",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-api/1.27.1/grpc-api-1.27.1.jar"
},
{
- "coord": "io.grpc:grpc-api:jar:sources:1.26.0",
+ "coord": "io.grpc:grpc-api:jar:sources:1.27.1",
"dependencies": [
"org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18",
"com.google.code.findbugs:jsr305:jar:sources:3.0.2",
"com.google.j2objc:j2objc-annotations:jar:sources:1.3",
- "io.grpc:grpc-context:jar:sources:1.26.0",
- "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
+ "io.grpc:grpc-context:jar:sources:1.27.1",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4",
"org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
"com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
"com.google.guava:guava:jar:sources:28.1-android",
@@ -1063,246 +2643,351 @@
"directDependencies": [
"org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18",
"com.google.code.findbugs:jsr305:jar:sources:3.0.2",
- "io.grpc:grpc-context:jar:sources:1.26.0",
- "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
+ "io.grpc:grpc-context:jar:sources:1.27.1",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4",
"com.google.guava:guava:jar:sources:28.1-android"
],
"exclusions": [
"com.google.template:soy",
"com.google.common.html.types:types"
],
- "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-api/1.26.0/grpc-api-1.26.0-sources.jar",
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-api/1.27.1/grpc-api-1.27.1-sources.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/io/grpc/grpc-api/1.26.0/grpc-api-1.26.0-sources.jar",
- "https://maven.google.com/io/grpc/grpc-api/1.26.0/grpc-api-1.26.0-sources.jar",
- "https://repo1.maven.org/maven2/io/grpc/grpc-api/1.26.0/grpc-api-1.26.0-sources.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-api/1.26.0/grpc-api-1.26.0-sources.jar"
+ "https://jcenter.bintray.com/io/grpc/grpc-api/1.27.1/grpc-api-1.27.1-sources.jar",
+ "https://maven.google.com/io/grpc/grpc-api/1.27.1/grpc-api-1.27.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-api/1.27.1/grpc-api-1.27.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-api/1.27.1/grpc-api-1.27.1-sources.jar"
],
- "sha256": "c5499550d3111015be2136ed55ff915482bf37620b6ebdb236d549952096d3c5",
- "url": "https://jcenter.bintray.com/io/grpc/grpc-api/1.26.0/grpc-api-1.26.0-sources.jar"
+ "sha256": "1b1d1f96f97b173bb8dd593fd5d104e33e53f6fa19fe25b933ed1f5767844ede",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-api/1.27.1/grpc-api-1.27.1-sources.jar"
},
{
- "coord": "io.grpc:grpc-auth:1.26.0",
+ "coord": "io.grpc:grpc-auth:1.27.1",
"dependencies": [
"com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
"com.google.guava:guava:28.1-android",
"org.codehaus.mojo:animal-sniffer-annotations:1.18",
"com.google.j2objc:j2objc-annotations:1.3",
- "com.google.errorprone:error_prone_annotations:2.3.3",
"com.google.code.findbugs:jsr305:3.0.2",
- "io.grpc:grpc-context:1.26.0",
+ "com.google.auth:google-auth-library-credentials:0.20.0",
+ "com.google.errorprone:error_prone_annotations:2.3.4",
+ "io.grpc:grpc-context:1.27.1",
"com.google.guava:failureaccess:1.0.1",
- "com.google.auth:google-auth-library-credentials:0.18.0",
- "io.grpc:grpc-api:1.26.0",
+ "io.grpc:grpc-api:1.27.1",
"org.checkerframework:checker-compat-qual:2.5.5"
],
"directDependencies": [
- "com.google.auth:google-auth-library-credentials:0.18.0",
- "io.grpc:grpc-api:1.26.0"
+ "com.google.auth:google-auth-library-credentials:0.20.0",
+ "io.grpc:grpc-api:1.27.1"
],
"exclusions": [
"com.google.template:soy",
"com.google.common.html.types:types"
],
- "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-auth/1.26.0/grpc-auth-1.26.0.jar",
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-auth/1.27.1/grpc-auth-1.27.1.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/io/grpc/grpc-auth/1.26.0/grpc-auth-1.26.0.jar",
- "https://maven.google.com/io/grpc/grpc-auth/1.26.0/grpc-auth-1.26.0.jar",
- "https://repo1.maven.org/maven2/io/grpc/grpc-auth/1.26.0/grpc-auth-1.26.0.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-auth/1.26.0/grpc-auth-1.26.0.jar"
+ "https://jcenter.bintray.com/io/grpc/grpc-auth/1.27.1/grpc-auth-1.27.1.jar",
+ "https://maven.google.com/io/grpc/grpc-auth/1.27.1/grpc-auth-1.27.1.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-auth/1.27.1/grpc-auth-1.27.1.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-auth/1.27.1/grpc-auth-1.27.1.jar"
],
- "sha256": "d35024306a6e72364d5170a1a4da4d82e87ddb6271bba80a7c749780b85be86f",
- "url": "https://jcenter.bintray.com/io/grpc/grpc-auth/1.26.0/grpc-auth-1.26.0.jar"
+ "sha256": "57f6d40e7f84248140d23fdc7091df304aa1878b8727ccc9fd3a7e4c6bc78d7c",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-auth/1.27.1/grpc-auth-1.27.1.jar"
},
{
- "coord": "io.grpc:grpc-auth:jar:sources:1.26.0",
+ "coord": "io.grpc:grpc-auth:jar:sources:1.27.1",
"dependencies": [
"org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18",
"com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.auth:google-auth-library-credentials:jar:sources:0.20.0",
"com.google.j2objc:j2objc-annotations:jar:sources:1.3",
- "io.grpc:grpc-context:jar:sources:1.26.0",
- "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
+ "io.grpc:grpc-context:jar:sources:1.27.1",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4",
+ "io.grpc:grpc-api:jar:sources:1.27.1",
"org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
"com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
- "io.grpc:grpc-api:jar:sources:1.26.0",
"com.google.guava:guava:jar:sources:28.1-android",
- "com.google.guava:failureaccess:jar:sources:1.0.1",
- "com.google.auth:google-auth-library-credentials:jar:sources:0.18.0"
+ "com.google.guava:failureaccess:jar:sources:1.0.1"
],
"directDependencies": [
- "com.google.auth:google-auth-library-credentials:jar:sources:0.18.0",
- "io.grpc:grpc-api:jar:sources:1.26.0"
+ "com.google.auth:google-auth-library-credentials:jar:sources:0.20.0",
+ "io.grpc:grpc-api:jar:sources:1.27.1"
],
"exclusions": [
"com.google.template:soy",
"com.google.common.html.types:types"
],
- "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-auth/1.26.0/grpc-auth-1.26.0-sources.jar",
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-auth/1.27.1/grpc-auth-1.27.1-sources.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/io/grpc/grpc-auth/1.26.0/grpc-auth-1.26.0-sources.jar",
- "https://maven.google.com/io/grpc/grpc-auth/1.26.0/grpc-auth-1.26.0-sources.jar",
- "https://repo1.maven.org/maven2/io/grpc/grpc-auth/1.26.0/grpc-auth-1.26.0-sources.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-auth/1.26.0/grpc-auth-1.26.0-sources.jar"
+ "https://jcenter.bintray.com/io/grpc/grpc-auth/1.27.1/grpc-auth-1.27.1-sources.jar",
+ "https://maven.google.com/io/grpc/grpc-auth/1.27.1/grpc-auth-1.27.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-auth/1.27.1/grpc-auth-1.27.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-auth/1.27.1/grpc-auth-1.27.1-sources.jar"
],
- "sha256": "b1c9b2bd3ee3c9b81a4d2324d797b684701ef1249bbccbd80f9879bd2720338e",
- "url": "https://jcenter.bintray.com/io/grpc/grpc-auth/1.26.0/grpc-auth-1.26.0-sources.jar"
+ "sha256": "e0545c0769a7471ff83424b94bdacdeffbf7dbc14b34cc2f3a0f28f7228ae560",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-auth/1.27.1/grpc-auth-1.27.1-sources.jar"
},
{
- "coord": "io.grpc:grpc-context:1.26.0",
+ "coord": "io.grpc:grpc-context:1.27.1",
"dependencies": [],
"directDependencies": [],
"exclusions": [
"com.google.template:soy",
"com.google.common.html.types:types"
],
- "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-context/1.26.0/grpc-context-1.26.0.jar",
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-context/1.27.1/grpc-context-1.27.1.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/io/grpc/grpc-context/1.26.0/grpc-context-1.26.0.jar",
- "https://maven.google.com/io/grpc/grpc-context/1.26.0/grpc-context-1.26.0.jar",
- "https://repo1.maven.org/maven2/io/grpc/grpc-context/1.26.0/grpc-context-1.26.0.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-context/1.26.0/grpc-context-1.26.0.jar"
+ "https://jcenter.bintray.com/io/grpc/grpc-context/1.27.1/grpc-context-1.27.1.jar",
+ "https://maven.google.com/io/grpc/grpc-context/1.27.1/grpc-context-1.27.1.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-context/1.27.1/grpc-context-1.27.1.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-context/1.27.1/grpc-context-1.27.1.jar"
],
- "sha256": "16388315b48a3aee21e0530ae7a31441288226dd0878e7abdca2e09aa8a60404",
- "url": "https://jcenter.bintray.com/io/grpc/grpc-context/1.26.0/grpc-context-1.26.0.jar"
+ "sha256": "13a4b3be408e3aec2767a75a911a3f4b288e4d76d673eb18d8ca004e11d53cef",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-context/1.27.1/grpc-context-1.27.1.jar"
},
{
- "coord": "io.grpc:grpc-context:jar:sources:1.26.0",
+ "coord": "io.grpc:grpc-context:jar:sources:1.27.1",
"dependencies": [],
"directDependencies": [],
"exclusions": [
"com.google.template:soy",
"com.google.common.html.types:types"
],
- "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-context/1.26.0/grpc-context-1.26.0-sources.jar",
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-context/1.27.1/grpc-context-1.27.1-sources.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/io/grpc/grpc-context/1.26.0/grpc-context-1.26.0-sources.jar",
- "https://maven.google.com/io/grpc/grpc-context/1.26.0/grpc-context-1.26.0-sources.jar",
- "https://repo1.maven.org/maven2/io/grpc/grpc-context/1.26.0/grpc-context-1.26.0-sources.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-context/1.26.0/grpc-context-1.26.0-sources.jar"
+ "https://jcenter.bintray.com/io/grpc/grpc-context/1.27.1/grpc-context-1.27.1-sources.jar",
+ "https://maven.google.com/io/grpc/grpc-context/1.27.1/grpc-context-1.27.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-context/1.27.1/grpc-context-1.27.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-context/1.27.1/grpc-context-1.27.1-sources.jar"
],
- "sha256": "14d6440ce2236bcfe89ad87f868e7299caad7754b5e5ca57e1b31bff16e53388",
- "url": "https://jcenter.bintray.com/io/grpc/grpc-context/1.26.0/grpc-context-1.26.0-sources.jar"
+ "sha256": "1768d7374ba3799aa43c4b7c742b0c2ee6b9c03d4f267932ab97c8f8f8fcd80f",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-context/1.27.1/grpc-context-1.27.1-sources.jar"
},
{
- "coord": "io.grpc:grpc-core:1.26.0",
+ "coord": "io.grpc:grpc-core:1.27.1",
"dependencies": [
"com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
"com.google.guava:guava:28.1-android",
"org.codehaus.mojo:animal-sniffer-annotations:1.18",
"com.google.j2objc:j2objc-annotations:1.3",
- "com.google.errorprone:error_prone_annotations:2.3.3",
"com.google.code.findbugs:jsr305:3.0.2",
"com.google.android:annotations:4.1.1.4",
- "io.grpc:grpc-context:1.26.0",
- "io.opencensus:opencensus-api:0.24.0",
"com.google.code.gson:gson:2.8.6",
+ "com.google.errorprone:error_prone_annotations:2.3.4",
+ "io.grpc:grpc-context:1.27.1",
"com.google.guava:failureaccess:1.0.1",
- "io.opencensus:opencensus-contrib-grpc-metrics:0.24.0",
- "io.grpc:grpc-api:1.26.0",
"io.perfmark:perfmark-api:0.19.0",
+ "io.grpc:grpc-api:1.27.1",
"org.checkerframework:checker-compat-qual:2.5.5"
],
"directDependencies": [
"com.google.android:annotations:4.1.1.4",
- "io.opencensus:opencensus-api:0.24.0",
"com.google.code.gson:gson:2.8.6",
- "io.opencensus:opencensus-contrib-grpc-metrics:0.24.0",
- "io.grpc:grpc-api:1.26.0",
- "io.perfmark:perfmark-api:0.19.0"
+ "com.google.errorprone:error_prone_annotations:2.3.4",
+ "io.perfmark:perfmark-api:0.19.0",
+ "io.grpc:grpc-api:1.27.1"
],
"exclusions": [
"com.google.template:soy",
"com.google.common.html.types:types"
],
- "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-core/1.26.0/grpc-core-1.26.0.jar",
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-core/1.27.1/grpc-core-1.27.1.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/io/grpc/grpc-core/1.26.0/grpc-core-1.26.0.jar",
- "https://maven.google.com/io/grpc/grpc-core/1.26.0/grpc-core-1.26.0.jar",
- "https://repo1.maven.org/maven2/io/grpc/grpc-core/1.26.0/grpc-core-1.26.0.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-core/1.26.0/grpc-core-1.26.0.jar"
+ "https://jcenter.bintray.com/io/grpc/grpc-core/1.27.1/grpc-core-1.27.1.jar",
+ "https://maven.google.com/io/grpc/grpc-core/1.27.1/grpc-core-1.27.1.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-core/1.27.1/grpc-core-1.27.1.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-core/1.27.1/grpc-core-1.27.1.jar"
],
- "sha256": "7e4f83e4e8d963c0556bafaea9faf562aab8861f3e5644e53e294c85edef6a2d",
- "url": "https://jcenter.bintray.com/io/grpc/grpc-core/1.26.0/grpc-core-1.26.0.jar"
+ "sha256": "6b3f15db9e3231b6532aa5246495b83c071f10c053efc6a234ff51422a397f7a",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-core/1.27.1/grpc-core-1.27.1.jar"
},
{
- "coord": "io.grpc:grpc-core:jar:sources:1.26.0",
+ "coord": "io.grpc:grpc-core:jar:sources:1.27.1",
"dependencies": [
"org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18",
"com.google.code.findbugs:jsr305:jar:sources:3.0.2",
"com.google.android:annotations:jar:sources:4.1.1.4",
"com.google.j2objc:j2objc-annotations:jar:sources:1.3",
"io.perfmark:perfmark-api:jar:sources:0.19.0",
- "io.opencensus:opencensus-contrib-grpc-metrics:jar:sources:0.24.0",
- "io.grpc:grpc-context:jar:sources:1.26.0",
- "io.opencensus:opencensus-api:jar:sources:0.24.0",
+ "io.grpc:grpc-context:jar:sources:1.27.1",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4",
+ "io.grpc:grpc-api:jar:sources:1.27.1",
"com.google.code.gson:gson:jar:sources:2.8.6",
- "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
"org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
"com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
- "io.grpc:grpc-api:jar:sources:1.26.0",
"com.google.guava:guava:jar:sources:28.1-android",
"com.google.guava:failureaccess:jar:sources:1.0.1"
],
"directDependencies": [
"com.google.android:annotations:jar:sources:4.1.1.4",
"io.perfmark:perfmark-api:jar:sources:0.19.0",
- "io.opencensus:opencensus-contrib-grpc-metrics:jar:sources:0.24.0",
- "io.opencensus:opencensus-api:jar:sources:0.24.0",
- "com.google.code.gson:gson:jar:sources:2.8.6",
- "io.grpc:grpc-api:jar:sources:1.26.0"
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4",
+ "io.grpc:grpc-api:jar:sources:1.27.1",
+ "com.google.code.gson:gson:jar:sources:2.8.6"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-core/1.27.1/grpc-core-1.27.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/grpc/grpc-core/1.27.1/grpc-core-1.27.1-sources.jar",
+ "https://maven.google.com/io/grpc/grpc-core/1.27.1/grpc-core-1.27.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-core/1.27.1/grpc-core-1.27.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-core/1.27.1/grpc-core-1.27.1-sources.jar"
+ ],
+ "sha256": "531ed93e424082453b294f8294bb375ba59e7411a6db656f6e645628a0a02924",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-core/1.27.1/grpc-core-1.27.1-sources.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-grpclb:1.27.0",
+ "dependencies": [
+ "com.google.api.grpc:proto-google-common-protos:1.17.0",
+ "com.google.code.gson:gson:2.8.6",
+ "io.grpc:grpc-protobuf:1.27.1",
+ "io.grpc:grpc-protobuf-lite:1.27.1",
+ "com.google.protobuf:protobuf-java-util:3.11.4"
+ ],
+ "directDependencies": [
+ "com.google.protobuf:protobuf-java-util:3.11.4",
+ "io.grpc:grpc-protobuf:1.27.1"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-grpclb/1.27.0/grpc-grpclb-1.27.0.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/grpc/grpc-grpclb/1.27.0/grpc-grpclb-1.27.0.jar",
+ "https://maven.google.com/io/grpc/grpc-grpclb/1.27.0/grpc-grpclb-1.27.0.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-grpclb/1.27.0/grpc-grpclb-1.27.0.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-grpclb/1.27.0/grpc-grpclb-1.27.0.jar"
+ ],
+ "sha256": "5add1591f0217bd40553f2d67bb1fc569c7fdf12764a202982a2d022938fece3",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-grpclb/1.27.0/grpc-grpclb-1.27.0.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-grpclb:jar:sources:1.27.0",
+ "dependencies": [
+ "io.grpc:grpc-protobuf:jar:sources:1.27.1",
+ "io.grpc:grpc-protobuf-lite:jar:sources:1.27.1",
+ "com.google.protobuf:protobuf-java-util:jar:sources:3.11.4",
+ "com.google.api.grpc:proto-google-common-protos:jar:sources:1.17.0",
+ "com.google.code.gson:gson:jar:sources:2.8.6"
+ ],
+ "directDependencies": [
+ "com.google.protobuf:protobuf-java-util:jar:sources:3.11.4",
+ "io.grpc:grpc-protobuf:jar:sources:1.27.1"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-grpclb/1.27.0/grpc-grpclb-1.27.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/grpc/grpc-grpclb/1.27.0/grpc-grpclb-1.27.0-sources.jar",
+ "https://maven.google.com/io/grpc/grpc-grpclb/1.27.0/grpc-grpclb-1.27.0-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-grpclb/1.27.0/grpc-grpclb-1.27.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-grpclb/1.27.0/grpc-grpclb-1.27.0-sources.jar"
+ ],
+ "sha256": "c49ca68cb531453440749be989bae9815e2efeb3ea47db797e79ab94bc4aeedc",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-grpclb/1.27.0/grpc-grpclb-1.27.0-sources.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-netty-shaded:1.27.0",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-netty-shaded/1.27.0/grpc-netty-shaded-1.27.0.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/grpc/grpc-netty-shaded/1.27.0/grpc-netty-shaded-1.27.0.jar",
+ "https://maven.google.com/io/grpc/grpc-netty-shaded/1.27.0/grpc-netty-shaded-1.27.0.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-netty-shaded/1.27.0/grpc-netty-shaded-1.27.0.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-netty-shaded/1.27.0/grpc-netty-shaded-1.27.0.jar"
],
+ "sha256": "f39e2a2446b48746ce990ca25c1c2e30e7ea5651a09e9bc1bdf291eb7ef0765f",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-netty-shaded/1.27.0/grpc-netty-shaded-1.27.0.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-netty-shaded:jar:sources:1.27.0",
+ "dependencies": [],
+ "directDependencies": [],
"exclusions": [
+ "com.google.guava:guava",
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
- "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-core/1.26.0/grpc-core-1.26.0-sources.jar",
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-netty-shaded/1.27.0/grpc-netty-shaded-1.27.0-sources.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/io/grpc/grpc-core/1.26.0/grpc-core-1.26.0-sources.jar",
- "https://maven.google.com/io/grpc/grpc-core/1.26.0/grpc-core-1.26.0-sources.jar",
- "https://repo1.maven.org/maven2/io/grpc/grpc-core/1.26.0/grpc-core-1.26.0-sources.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-core/1.26.0/grpc-core-1.26.0-sources.jar"
+ "https://jcenter.bintray.com/io/grpc/grpc-netty-shaded/1.27.0/grpc-netty-shaded-1.27.0-sources.jar",
+ "https://maven.google.com/io/grpc/grpc-netty-shaded/1.27.0/grpc-netty-shaded-1.27.0-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-netty-shaded/1.27.0/grpc-netty-shaded-1.27.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-netty-shaded/1.27.0/grpc-netty-shaded-1.27.0-sources.jar"
],
- "sha256": "ed5e720dd039885752de82fa20f8861fd68cec22c8597e299894dbd8c0388d99",
- "url": "https://jcenter.bintray.com/io/grpc/grpc-core/1.26.0/grpc-core-1.26.0-sources.jar"
+ "sha256": "566ebc2ad4235149c0fc4f561ab2e63ab654ddc2e940fa7b6f9ed2e6f57a8f9b",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-netty-shaded/1.27.0/grpc-netty-shaded-1.27.0-sources.jar"
},
{
"coord": "io.grpc:grpc-netty:1.26.0",
"dependencies": [
- "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
"io.netty:netty-handler-proxy:4.1.45.Final",
- "com.google.guava:guava:28.1-android",
- "org.codehaus.mojo:animal-sniffer-annotations:1.18",
- "com.google.j2objc:j2objc-annotations:1.3",
- "com.google.errorprone:error_prone_annotations:2.3.3",
- "com.google.code.findbugs:jsr305:3.0.2",
- "com.google.android:annotations:4.1.1.4",
- "io.grpc:grpc-context:1.26.0",
"io.netty:netty-codec-socks:4.1.45.Final",
- "io.opencensus:opencensus-api:0.24.0",
- "com.google.code.gson:gson:2.8.6",
"io.netty:netty-codec:4.1.45.Final",
"io.netty:netty-codec-http:4.1.45.Final",
"io.netty:netty-transport:4.1.45.Final",
- "com.google.guava:failureaccess:1.0.1",
- "io.opencensus:opencensus-contrib-grpc-metrics:0.24.0",
"io.netty:netty-common:4.1.45.Final",
"io.netty:netty-resolver:4.1.45.Final",
"io.netty:netty-codec-http2:4.1.42.Final",
- "io.grpc:grpc-core:1.26.0",
- "io.grpc:grpc-api:1.26.0",
- "io.perfmark:perfmark-api:0.19.0",
"io.netty:netty-buffer:4.1.45.Final",
- "io.netty:netty-handler:4.1.45.Final",
- "org.checkerframework:checker-compat-qual:2.5.5"
+ "io.netty:netty-handler:4.1.45.Final"
],
"directDependencies": [
- "io.grpc:grpc-core:1.26.0",
"io.netty:netty-codec-http2:4.1.42.Final",
"io.netty:netty-handler-proxy:4.1.45.Final"
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/grpc/grpc-netty/1.26.0/grpc-netty-1.26.0.jar",
"mirror_urls": [
@@ -1320,38 +3005,27 @@
"io.netty:netty-codec-http:jar:sources:4.1.45.Final",
"io.netty:netty-transport:jar:sources:4.1.45.Final",
"io.netty:netty-codec-http2:jar:sources:4.1.42.Final",
- "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18",
- "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
- "com.google.android:annotations:jar:sources:4.1.1.4",
"io.netty:netty-codec:jar:sources:4.1.45.Final",
"io.netty:netty-buffer:jar:sources:4.1.45.Final",
- "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
- "io.perfmark:perfmark-api:jar:sources:0.19.0",
"io.netty:netty-handler-proxy:jar:sources:4.1.45.Final",
- "io.opencensus:opencensus-contrib-grpc-metrics:jar:sources:0.24.0",
- "io.grpc:grpc-context:jar:sources:1.26.0",
- "io.opencensus:opencensus-api:jar:sources:0.24.0",
"io.netty:netty-handler:jar:sources:4.1.45.Final",
- "com.google.code.gson:gson:jar:sources:2.8.6",
"io.netty:netty-codec-socks:jar:sources:4.1.45.Final",
- "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
- "org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
- "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
- "io.grpc:grpc-api:jar:sources:1.26.0",
- "io.grpc:grpc-core:jar:sources:1.26.0",
- "com.google.guava:guava:jar:sources:28.1-android",
"io.netty:netty-common:jar:sources:4.1.45.Final",
- "com.google.guava:failureaccess:jar:sources:1.0.1",
"io.netty:netty-resolver:jar:sources:4.1.45.Final"
],
"directDependencies": [
- "io.grpc:grpc-core:jar:sources:1.26.0",
"io.netty:netty-codec-http2:jar:sources:4.1.42.Final",
"io.netty:netty-handler-proxy:jar:sources:4.1.45.Final"
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/grpc/grpc-netty/1.26.0/grpc-netty-1.26.0-sources.jar",
"mirror_urls": [
@@ -1364,208 +3038,296 @@
"url": "https://jcenter.bintray.com/io/grpc/grpc-netty/1.26.0/grpc-netty-1.26.0-sources.jar"
},
{
- "coord": "io.grpc:grpc-protobuf-lite:1.26.0",
+ "coord": "io.grpc:grpc-protobuf-lite:1.27.1",
"dependencies": [
"com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
"com.google.guava:guava:28.1-android",
"org.codehaus.mojo:animal-sniffer-annotations:1.18",
"com.google.j2objc:j2objc-annotations:1.3",
- "com.google.errorprone:error_prone_annotations:2.3.3",
"com.google.code.findbugs:jsr305:3.0.2",
- "io.grpc:grpc-context:1.26.0",
+ "com.google.errorprone:error_prone_annotations:2.3.4",
+ "io.grpc:grpc-context:1.27.1",
"com.google.guava:failureaccess:1.0.1",
- "io.grpc:grpc-api:1.26.0",
+ "io.grpc:grpc-api:1.27.1",
"org.checkerframework:checker-compat-qual:2.5.5"
],
"directDependencies": [
"com.google.guava:guava:28.1-android",
- "io.grpc:grpc-api:1.26.0"
+ "io.grpc:grpc-api:1.27.1"
],
"exclusions": [
"com.google.protobuf:protobuf-javalite",
"com.google.template:soy",
"com.google.common.html.types:types"
],
- "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-protobuf-lite/1.26.0/grpc-protobuf-lite-1.26.0.jar",
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-protobuf-lite/1.27.1/grpc-protobuf-lite-1.27.1.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/io/grpc/grpc-protobuf-lite/1.26.0/grpc-protobuf-lite-1.26.0.jar",
- "https://maven.google.com/io/grpc/grpc-protobuf-lite/1.26.0/grpc-protobuf-lite-1.26.0.jar",
- "https://repo1.maven.org/maven2/io/grpc/grpc-protobuf-lite/1.26.0/grpc-protobuf-lite-1.26.0.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-protobuf-lite/1.26.0/grpc-protobuf-lite-1.26.0.jar"
+ "https://jcenter.bintray.com/io/grpc/grpc-protobuf-lite/1.27.1/grpc-protobuf-lite-1.27.1.jar",
+ "https://maven.google.com/io/grpc/grpc-protobuf-lite/1.27.1/grpc-protobuf-lite-1.27.1.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-protobuf-lite/1.27.1/grpc-protobuf-lite-1.27.1.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-protobuf-lite/1.27.1/grpc-protobuf-lite-1.27.1.jar"
],
- "sha256": "195ce913891e9522dbf00059fe72ea8ffeb0e1ad8328dd8197ef5c96d50655ec",
- "url": "https://jcenter.bintray.com/io/grpc/grpc-protobuf-lite/1.26.0/grpc-protobuf-lite-1.26.0.jar"
+ "sha256": "9ff13dcdc215d11f39754d826bbfcc67eb9cf1739bf5c25488563c318a67ba6c",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-protobuf-lite/1.27.1/grpc-protobuf-lite-1.27.1.jar"
},
{
- "coord": "io.grpc:grpc-protobuf-lite:jar:sources:1.26.0",
+ "coord": "io.grpc:grpc-protobuf-lite:jar:sources:1.27.1",
"dependencies": [
"org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18",
"com.google.code.findbugs:jsr305:jar:sources:3.0.2",
"com.google.j2objc:j2objc-annotations:jar:sources:1.3",
- "io.grpc:grpc-context:jar:sources:1.26.0",
- "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
+ "io.grpc:grpc-context:jar:sources:1.27.1",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4",
+ "io.grpc:grpc-api:jar:sources:1.27.1",
"org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
"com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
- "io.grpc:grpc-api:jar:sources:1.26.0",
"com.google.guava:guava:jar:sources:28.1-android",
"com.google.guava:failureaccess:jar:sources:1.0.1"
],
"directDependencies": [
"com.google.guava:guava:jar:sources:28.1-android",
- "io.grpc:grpc-api:jar:sources:1.26.0"
+ "io.grpc:grpc-api:jar:sources:1.27.1"
],
"exclusions": [
"com.google.protobuf:protobuf-javalite",
"com.google.template:soy",
"com.google.common.html.types:types"
],
- "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-protobuf-lite/1.26.0/grpc-protobuf-lite-1.26.0-sources.jar",
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-protobuf-lite/1.27.1/grpc-protobuf-lite-1.27.1-sources.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/io/grpc/grpc-protobuf-lite/1.26.0/grpc-protobuf-lite-1.26.0-sources.jar",
- "https://maven.google.com/io/grpc/grpc-protobuf-lite/1.26.0/grpc-protobuf-lite-1.26.0-sources.jar",
- "https://repo1.maven.org/maven2/io/grpc/grpc-protobuf-lite/1.26.0/grpc-protobuf-lite-1.26.0-sources.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-protobuf-lite/1.26.0/grpc-protobuf-lite-1.26.0-sources.jar"
+ "https://jcenter.bintray.com/io/grpc/grpc-protobuf-lite/1.27.1/grpc-protobuf-lite-1.27.1-sources.jar",
+ "https://maven.google.com/io/grpc/grpc-protobuf-lite/1.27.1/grpc-protobuf-lite-1.27.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-protobuf-lite/1.27.1/grpc-protobuf-lite-1.27.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-protobuf-lite/1.27.1/grpc-protobuf-lite-1.27.1-sources.jar"
],
- "sha256": "9d948923266521bb62e6a6e297b1ad3d18add8a3af0f75bf511cb4210aa9c9cb",
- "url": "https://jcenter.bintray.com/io/grpc/grpc-protobuf-lite/1.26.0/grpc-protobuf-lite-1.26.0-sources.jar"
+ "sha256": "f19972da9f6113b42e9707aded8e96dbc4fc3beab8449cf3f7c63aba9dc1560d",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-protobuf-lite/1.27.1/grpc-protobuf-lite-1.27.1-sources.jar"
},
{
- "coord": "io.grpc:grpc-protobuf:1.26.0",
+ "coord": "io.grpc:grpc-protobuf:1.27.1",
"dependencies": [
"com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
"com.google.guava:guava:28.1-android",
"org.codehaus.mojo:animal-sniffer-annotations:1.18",
+ "com.google.api.grpc:proto-google-common-protos:1.17.0",
"com.google.j2objc:j2objc-annotations:1.3",
- "com.google.errorprone:error_prone_annotations:2.3.3",
"com.google.code.findbugs:jsr305:3.0.2",
- "io.grpc:grpc-context:1.26.0",
"com.google.protobuf:protobuf-java:3.11.4",
- "com.google.api.grpc:proto-google-common-protos:1.12.0",
+ "com.google.errorprone:error_prone_annotations:2.3.4",
+ "io.grpc:grpc-context:1.27.1",
+ "io.grpc:grpc-protobuf-lite:1.27.1",
"com.google.guava:failureaccess:1.0.1",
- "io.grpc:grpc-api:1.26.0",
- "io.grpc:grpc-protobuf-lite:1.26.0",
+ "io.grpc:grpc-api:1.27.1",
"org.checkerframework:checker-compat-qual:2.5.5"
],
"directDependencies": [
"com.google.guava:guava:28.1-android",
+ "com.google.api.grpc:proto-google-common-protos:1.17.0",
"com.google.protobuf:protobuf-java:3.11.4",
- "com.google.api.grpc:proto-google-common-protos:1.12.0",
- "io.grpc:grpc-api:1.26.0",
- "io.grpc:grpc-protobuf-lite:1.26.0"
+ "io.grpc:grpc-protobuf-lite:1.27.1",
+ "io.grpc:grpc-api:1.27.1"
],
"exclusions": [
"com.google.template:soy",
"com.google.common.html.types:types"
],
- "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-protobuf/1.26.0/grpc-protobuf-1.26.0.jar",
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-protobuf/1.27.1/grpc-protobuf-1.27.1.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/io/grpc/grpc-protobuf/1.26.0/grpc-protobuf-1.26.0.jar",
- "https://maven.google.com/io/grpc/grpc-protobuf/1.26.0/grpc-protobuf-1.26.0.jar",
- "https://repo1.maven.org/maven2/io/grpc/grpc-protobuf/1.26.0/grpc-protobuf-1.26.0.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-protobuf/1.26.0/grpc-protobuf-1.26.0.jar"
+ "https://jcenter.bintray.com/io/grpc/grpc-protobuf/1.27.1/grpc-protobuf-1.27.1.jar",
+ "https://maven.google.com/io/grpc/grpc-protobuf/1.27.1/grpc-protobuf-1.27.1.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-protobuf/1.27.1/grpc-protobuf-1.27.1.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-protobuf/1.27.1/grpc-protobuf-1.27.1.jar"
],
- "sha256": "e8bf12fe69d51247b079817e82446b8d36f6ddc5fdd22bc30ef711e442e05c71",
- "url": "https://jcenter.bintray.com/io/grpc/grpc-protobuf/1.26.0/grpc-protobuf-1.26.0.jar"
+ "sha256": "6b5bce43af75e9e2c51937e5a3100af7f0d97b17fcba49060cc2ebf5676e964a",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-protobuf/1.27.1/grpc-protobuf-1.27.1.jar"
},
{
- "coord": "io.grpc:grpc-protobuf:jar:sources:1.26.0",
+ "coord": "io.grpc:grpc-protobuf:jar:sources:1.27.1",
"dependencies": [
"org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18",
"com.google.code.findbugs:jsr305:jar:sources:3.0.2",
- "io.grpc:grpc-protobuf-lite:jar:sources:1.26.0",
"com.google.protobuf:protobuf-java:jar:sources:3.11.4",
"com.google.j2objc:j2objc-annotations:jar:sources:1.3",
- "io.grpc:grpc-context:jar:sources:1.26.0",
- "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
- "com.google.api.grpc:proto-google-common-protos:jar:sources:1.12.0",
+ "io.grpc:grpc-context:jar:sources:1.27.1",
+ "io.grpc:grpc-protobuf-lite:jar:sources:1.27.1",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4",
+ "com.google.api.grpc:proto-google-common-protos:jar:sources:1.17.0",
+ "io.grpc:grpc-api:jar:sources:1.27.1",
"org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
"com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
- "io.grpc:grpc-api:jar:sources:1.26.0",
"com.google.guava:guava:jar:sources:28.1-android",
"com.google.guava:failureaccess:jar:sources:1.0.1"
],
"directDependencies": [
- "io.grpc:grpc-protobuf-lite:jar:sources:1.26.0",
"com.google.protobuf:protobuf-java:jar:sources:3.11.4",
- "com.google.api.grpc:proto-google-common-protos:jar:sources:1.12.0",
- "io.grpc:grpc-api:jar:sources:1.26.0",
+ "io.grpc:grpc-protobuf-lite:jar:sources:1.27.1",
+ "com.google.api.grpc:proto-google-common-protos:jar:sources:1.17.0",
+ "io.grpc:grpc-api:jar:sources:1.27.1",
"com.google.guava:guava:jar:sources:28.1-android"
],
"exclusions": [
"com.google.template:soy",
"com.google.common.html.types:types"
],
- "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-protobuf/1.26.0/grpc-protobuf-1.26.0-sources.jar",
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-protobuf/1.27.1/grpc-protobuf-1.27.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/grpc/grpc-protobuf/1.27.1/grpc-protobuf-1.27.1-sources.jar",
+ "https://maven.google.com/io/grpc/grpc-protobuf/1.27.1/grpc-protobuf-1.27.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-protobuf/1.27.1/grpc-protobuf-1.27.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-protobuf/1.27.1/grpc-protobuf-1.27.1-sources.jar"
+ ],
+ "sha256": "9359e60396667586c01200158d02fa1ad5665583d468b136b4a337cebdecaa33",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-protobuf/1.27.1/grpc-protobuf-1.27.1-sources.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-services:1.27.1",
+ "dependencies": [
+ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
+ "com.google.guava:guava:28.1-android",
+ "org.codehaus.mojo:animal-sniffer-annotations:1.18",
+ "com.google.api.grpc:proto-google-common-protos:1.17.0",
+ "com.google.j2objc:j2objc-annotations:1.3",
+ "io.grpc:grpc-stub:1.27.1",
+ "com.google.code.findbugs:jsr305:3.0.2",
+ "com.google.android:annotations:4.1.1.4",
+ "com.google.protobuf:protobuf-java:3.11.4",
+ "com.google.code.gson:gson:2.8.6",
+ "io.grpc:grpc-protobuf:1.27.1",
+ "com.google.errorprone:error_prone_annotations:2.3.4",
+ "io.grpc:grpc-context:1.27.1",
+ "io.grpc:grpc-protobuf-lite:1.27.1",
+ "com.google.guava:failureaccess:1.0.1",
+ "io.perfmark:perfmark-api:0.19.0",
+ "io.grpc:grpc-core:1.27.1",
+ "io.grpc:grpc-api:1.27.1",
+ "com.google.protobuf:protobuf-java-util:3.11.4",
+ "org.checkerframework:checker-compat-qual:2.5.5"
+ ],
+ "directDependencies": [
+ "com.google.protobuf:protobuf-java-util:3.11.4",
+ "io.grpc:grpc-core:1.27.1",
+ "io.grpc:grpc-protobuf:1.27.1",
+ "io.grpc:grpc-stub:1.27.1"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-services/1.27.1/grpc-services-1.27.1.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/grpc/grpc-services/1.27.1/grpc-services-1.27.1.jar",
+ "https://maven.google.com/io/grpc/grpc-services/1.27.1/grpc-services-1.27.1.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-services/1.27.1/grpc-services-1.27.1.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-services/1.27.1/grpc-services-1.27.1.jar"
+ ],
+ "sha256": "6308ce046f188593de95a2b4fd0445789b240f4556b6c434ff21bc5a40b6a58a",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-services/1.27.1/grpc-services-1.27.1.jar"
+ },
+ {
+ "coord": "io.grpc:grpc-services:jar:sources:1.27.1",
+ "dependencies": [
+ "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18",
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
+ "com.google.protobuf:protobuf-java:jar:sources:3.11.4",
+ "com.google.android:annotations:jar:sources:4.1.1.4",
+ "io.grpc:grpc-protobuf:jar:sources:1.27.1",
+ "com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "io.perfmark:perfmark-api:jar:sources:0.19.0",
+ "io.grpc:grpc-context:jar:sources:1.27.1",
+ "io.grpc:grpc-protobuf-lite:jar:sources:1.27.1",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4",
+ "com.google.protobuf:protobuf-java-util:jar:sources:3.11.4",
+ "com.google.api.grpc:proto-google-common-protos:jar:sources:1.17.0",
+ "io.grpc:grpc-api:jar:sources:1.27.1",
+ "io.grpc:grpc-core:jar:sources:1.27.1",
+ "com.google.code.gson:gson:jar:sources:2.8.6",
+ "io.grpc:grpc-stub:jar:sources:1.27.1",
+ "org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
+ "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
+ "com.google.guava:guava:jar:sources:28.1-android",
+ "com.google.guava:failureaccess:jar:sources:1.0.1"
+ ],
+ "directDependencies": [
+ "com.google.protobuf:protobuf-java-util:jar:sources:3.11.4",
+ "io.grpc:grpc-core:jar:sources:1.27.1",
+ "io.grpc:grpc-protobuf:jar:sources:1.27.1",
+ "io.grpc:grpc-stub:jar:sources:1.27.1"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-services/1.27.1/grpc-services-1.27.1-sources.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/io/grpc/grpc-protobuf/1.26.0/grpc-protobuf-1.26.0-sources.jar",
- "https://maven.google.com/io/grpc/grpc-protobuf/1.26.0/grpc-protobuf-1.26.0-sources.jar",
- "https://repo1.maven.org/maven2/io/grpc/grpc-protobuf/1.26.0/grpc-protobuf-1.26.0-sources.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-protobuf/1.26.0/grpc-protobuf-1.26.0-sources.jar"
+ "https://jcenter.bintray.com/io/grpc/grpc-services/1.27.1/grpc-services-1.27.1-sources.jar",
+ "https://maven.google.com/io/grpc/grpc-services/1.27.1/grpc-services-1.27.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-services/1.27.1/grpc-services-1.27.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-services/1.27.1/grpc-services-1.27.1-sources.jar"
],
- "sha256": "f6c42b0b933be42251d3ae75c776621cd789a6cffe2b76fa97966e98f10b69b6",
- "url": "https://jcenter.bintray.com/io/grpc/grpc-protobuf/1.26.0/grpc-protobuf-1.26.0-sources.jar"
+ "sha256": "f64c8438929813f6d2c8032423db326e7233de51499b110aa92c5e2d76221796",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-services/1.27.1/grpc-services-1.27.1-sources.jar"
},
{
- "coord": "io.grpc:grpc-stub:1.26.0",
+ "coord": "io.grpc:grpc-stub:1.27.1",
"dependencies": [
"com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
"com.google.guava:guava:28.1-android",
"org.codehaus.mojo:animal-sniffer-annotations:1.18",
"com.google.j2objc:j2objc-annotations:1.3",
- "com.google.errorprone:error_prone_annotations:2.3.3",
"com.google.code.findbugs:jsr305:3.0.2",
- "io.grpc:grpc-context:1.26.0",
+ "com.google.errorprone:error_prone_annotations:2.3.4",
+ "io.grpc:grpc-context:1.27.1",
"com.google.guava:failureaccess:1.0.1",
- "io.grpc:grpc-api:1.26.0",
+ "io.grpc:grpc-api:1.27.1",
"org.checkerframework:checker-compat-qual:2.5.5"
],
"directDependencies": [
- "io.grpc:grpc-api:1.26.0"
+ "io.grpc:grpc-api:1.27.1"
],
"exclusions": [
"com.google.template:soy",
"com.google.common.html.types:types"
],
- "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-stub/1.26.0/grpc-stub-1.26.0.jar",
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-stub/1.27.1/grpc-stub-1.27.1.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/io/grpc/grpc-stub/1.26.0/grpc-stub-1.26.0.jar",
- "https://maven.google.com/io/grpc/grpc-stub/1.26.0/grpc-stub-1.26.0.jar",
- "https://repo1.maven.org/maven2/io/grpc/grpc-stub/1.26.0/grpc-stub-1.26.0.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-stub/1.26.0/grpc-stub-1.26.0.jar"
+ "https://jcenter.bintray.com/io/grpc/grpc-stub/1.27.1/grpc-stub-1.27.1.jar",
+ "https://maven.google.com/io/grpc/grpc-stub/1.27.1/grpc-stub-1.27.1.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-stub/1.27.1/grpc-stub-1.27.1.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-stub/1.27.1/grpc-stub-1.27.1.jar"
],
- "sha256": "b67cbb0a7e1a91e91c5dfb9fc3a0f889119f9132766d1f406f9df4c7c5411eb3",
- "url": "https://jcenter.bintray.com/io/grpc/grpc-stub/1.26.0/grpc-stub-1.26.0.jar"
+ "sha256": "9413babe15db188bed7a728c9f3a32e109bd008791c09543b439b52d43395e20",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-stub/1.27.1/grpc-stub-1.27.1.jar"
},
{
- "coord": "io.grpc:grpc-stub:jar:sources:1.26.0",
+ "coord": "io.grpc:grpc-stub:jar:sources:1.27.1",
"dependencies": [
"org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18",
"com.google.code.findbugs:jsr305:jar:sources:3.0.2",
"com.google.j2objc:j2objc-annotations:jar:sources:1.3",
- "io.grpc:grpc-context:jar:sources:1.26.0",
- "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
+ "io.grpc:grpc-context:jar:sources:1.27.1",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4",
+ "io.grpc:grpc-api:jar:sources:1.27.1",
"org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
"com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
- "io.grpc:grpc-api:jar:sources:1.26.0",
"com.google.guava:guava:jar:sources:28.1-android",
"com.google.guava:failureaccess:jar:sources:1.0.1"
],
"directDependencies": [
- "io.grpc:grpc-api:jar:sources:1.26.0"
+ "io.grpc:grpc-api:jar:sources:1.27.1"
],
"exclusions": [
"com.google.template:soy",
"com.google.common.html.types:types"
],
- "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-stub/1.26.0/grpc-stub-1.26.0-sources.jar",
+ "file": "v1/https/jcenter.bintray.com/io/grpc/grpc-stub/1.27.1/grpc-stub-1.27.1-sources.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/io/grpc/grpc-stub/1.26.0/grpc-stub-1.26.0-sources.jar",
- "https://maven.google.com/io/grpc/grpc-stub/1.26.0/grpc-stub-1.26.0-sources.jar",
- "https://repo1.maven.org/maven2/io/grpc/grpc-stub/1.26.0/grpc-stub-1.26.0-sources.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-stub/1.26.0/grpc-stub-1.26.0-sources.jar"
+ "https://jcenter.bintray.com/io/grpc/grpc-stub/1.27.1/grpc-stub-1.27.1-sources.jar",
+ "https://maven.google.com/io/grpc/grpc-stub/1.27.1/grpc-stub-1.27.1-sources.jar",
+ "https://repo1.maven.org/maven2/io/grpc/grpc-stub/1.27.1/grpc-stub-1.27.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/grpc/grpc-stub/1.27.1/grpc-stub-1.27.1-sources.jar"
],
- "sha256": "b37ce9c9020c0cdd30f2d8f1c9d32d31a957488ffe205fab55d3edf438f9f56a",
- "url": "https://jcenter.bintray.com/io/grpc/grpc-stub/1.26.0/grpc-stub-1.26.0-sources.jar"
+ "sha256": "6a09d15d35ffb0aaadedb883de823a425e4f8abd798e377b6c596ede2037ae89",
+ "url": "https://jcenter.bintray.com/io/grpc/grpc-stub/1.27.1/grpc-stub-1.27.1-sources.jar"
},
{
"coord": "io.kindedj:kindedj:1.1.0",
@@ -1927,7 +3689,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/lettuce/lettuce-core/5.1.7.RELEASE/lettuce-core-5.1.7.RELEASE.jar",
"mirror_urls": [
@@ -1959,7 +3727,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/lettuce/lettuce-core/5.1.7.RELEASE/lettuce-core-5.1.7.RELEASE-sources.jar",
"mirror_urls": [
@@ -1979,11 +3753,11 @@
"com.google.code.findbugs:jsr305:3.0.2",
"org.slf4j:slf4j-api:1.7.26",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.1",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
"io.micronaut:micronaut-aop:1.3.1",
"io.reactivex.rxjava2:rxjava:2.2.10",
"io.micronaut:micronaut-http:1.3.1",
"org.yaml:snakeyaml:1.24",
- "com.fasterxml.jackson.core:jackson-core:2.10.1",
"io.micronaut:micronaut-core:1.3.1",
"io.netty:netty-codec:4.1.45.Final",
"com.fasterxml.jackson.core:jackson-annotations:2.10.1",
@@ -2007,7 +3781,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/configuration/micronaut-redis-lettuce/1.2.0/micronaut-redis-lettuce-1.2.0.jar",
"mirror_urls": [
@@ -2031,12 +3811,12 @@
"io.netty:netty-buffer:jar:sources:4.1.45.Final",
"io.micronaut:micronaut-core:jar:sources:1.3.1",
"io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
"org.reactivestreams:reactive-streams:jar:sources:1.0.3",
"org.slf4j:slf4j-api:jar:sources:1.7.26",
"javax.inject:javax.inject:jar:sources:1",
"io.netty:netty-handler:jar:sources:4.1.45.Final",
"io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
- "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
"org.yaml:snakeyaml:jar:sources:1.24",
@@ -2055,7 +3835,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/configuration/micronaut-redis-lettuce/1.2.0/micronaut-redis-lettuce-1.2.0-sources.jar",
"mirror_urls": [
@@ -2084,7 +3870,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/grpc/micronaut-grpc-annotation/1.1.1/micronaut-grpc-annotation-1.1.1.jar",
"mirror_urls": [
@@ -2113,7 +3905,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/grpc/micronaut-grpc-annotation/1.1.1/micronaut-grpc-annotation-1.1.1-sources.jar",
"mirror_urls": [
@@ -2131,27 +3929,21 @@
"org.reactivestreams:reactive-streams:1.0.3",
"com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava",
"io.netty:netty-handler-proxy:4.1.45.Final",
- "io.grpc:grpc-stub:1.26.0",
"com.google.guava:guava:28.1-android",
- "org.codehaus.mojo:animal-sniffer-annotations:1.18",
+ "com.google.api.grpc:proto-google-common-protos:1.17.0",
"com.google.j2objc:j2objc-annotations:1.3",
- "com.google.errorprone:error_prone_annotations:2.3.3",
"com.google.code.findbugs:jsr305:3.0.2",
- "com.google.android:annotations:4.1.1.4",
- "io.grpc:grpc-context:1.26.0",
"org.slf4j:slf4j-api:1.7.26",
"io.netty:netty-codec-socks:4.1.45.Final",
"com.google.protobuf:protobuf-java:3.11.4",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.1",
- "io.opencensus:opencensus-api:0.24.0",
- "io.grpc:grpc-protobuf:1.26.0",
- "com.google.code.gson:gson:2.8.6",
- "com.google.api.grpc:proto-google-common-protos:1.12.0",
+ "io.grpc:grpc-protobuf:1.27.1",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
"io.micronaut:micronaut-aop:1.3.1",
"io.reactivex.rxjava2:rxjava:2.2.10",
"io.micronaut:micronaut-http:1.3.1",
"org.yaml:snakeyaml:1.24",
- "com.fasterxml.jackson.core:jackson-core:2.10.1",
+ "io.grpc:grpc-protobuf-lite:1.27.1",
"io.grpc:grpc-netty:1.26.0",
"io.micronaut:micronaut-core:1.3.1",
"io.netty:netty-codec:4.1.45.Final",
@@ -2163,25 +3955,19 @@
"io.netty:netty-transport:4.1.45.Final",
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.10.1",
"com.google.guava:failureaccess:1.0.1",
- "io.opencensus:opencensus-contrib-grpc-metrics:0.24.0",
"io.netty:netty-common:4.1.45.Final",
"io.netty:netty-resolver:4.1.45.Final",
"javax.inject:javax.inject:1",
"io.netty:netty-codec-http2:4.1.42.Final",
"com.fasterxml.jackson.core:jackson-databind:2.10.1",
- "io.grpc:grpc-core:1.26.0",
- "io.grpc:grpc-api:1.26.0",
- "io.perfmark:perfmark-api:0.19.0",
"io.netty:netty-buffer:4.1.45.Final",
"javax.validation:validation-api:2.0.1.Final",
"io.netty:netty-handler:4.1.45.Final",
"io.micronaut:micronaut-runtime:1.3.1",
- "io.grpc:grpc-protobuf-lite:1.26.0",
"org.checkerframework:checker-compat-qual:2.5.5"
],
"directDependencies": [
- "io.grpc:grpc-stub:1.26.0",
- "io.grpc:grpc-protobuf:1.26.0",
+ "io.grpc:grpc-protobuf:1.27.1",
"io.grpc:grpc-netty:1.26.0",
"io.micronaut.grpc:micronaut-grpc-annotation:1.1.1",
"io.micronaut:micronaut-inject:1.3.1",
@@ -2189,7 +3975,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/grpc/micronaut-grpc-runtime/1.1.1/micronaut-grpc-runtime-1.1.1.jar",
"mirror_urls": [
@@ -2208,45 +4000,34 @@
"io.netty:netty-codec-http:jar:sources:4.1.45.Final",
"io.netty:netty-transport:jar:sources:4.1.45.Final",
"io.netty:netty-codec-http2:jar:sources:4.1.42.Final",
- "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18",
"javax.validation:validation-api:jar:sources:2.0.1.Final",
"com.google.code.findbugs:jsr305:jar:sources:3.0.2",
"io.micronaut:micronaut-runtime:jar:sources:1.3.1",
"com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
- "io.grpc:grpc-protobuf-lite:jar:sources:1.26.0",
"com.google.protobuf:protobuf-java:jar:sources:3.11.4",
- "com.google.android:annotations:jar:sources:4.1.1.4",
"io.netty:netty-codec:jar:sources:4.1.45.Final",
- "io.grpc:grpc-protobuf:jar:sources:1.26.0",
+ "io.grpc:grpc-protobuf:jar:sources:1.27.1",
"io.netty:netty-buffer:jar:sources:4.1.45.Final",
"com.google.j2objc:j2objc-annotations:jar:sources:1.3",
"io.micronaut:micronaut-core:jar:sources:1.3.1",
- "io.perfmark:perfmark-api:jar:sources:0.19.0",
"io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
+ "io.grpc:grpc-protobuf-lite:jar:sources:1.27.1",
"io.netty:netty-handler-proxy:jar:sources:4.1.45.Final",
- "io.opencensus:opencensus-contrib-grpc-metrics:jar:sources:0.24.0",
+ "com.google.api.grpc:proto-google-common-protos:jar:sources:1.17.0",
"org.reactivestreams:reactive-streams:jar:sources:1.0.3",
"org.slf4j:slf4j-api:jar:sources:1.7.26",
- "io.grpc:grpc-context:jar:sources:1.26.0",
"javax.inject:javax.inject:jar:sources:1",
- "io.grpc:grpc-stub:jar:sources:1.26.0",
- "io.opencensus:opencensus-api:jar:sources:0.24.0",
"io.netty:netty-handler:jar:sources:4.1.45.Final",
"io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
- "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
- "com.google.code.gson:gson:jar:sources:2.8.6",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
"io.netty:netty-codec-socks:jar:sources:4.1.45.Final",
- "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
- "com.google.api.grpc:proto-google-common-protos:jar:sources:1.12.0",
"org.yaml:snakeyaml:jar:sources:1.24",
"com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
"org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
"com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
"io.micronaut:micronaut-http:jar:sources:1.3.1",
- "io.grpc:grpc-api:jar:sources:1.26.0",
- "io.grpc:grpc-core:jar:sources:1.26.0",
"com.google.guava:guava:jar:sources:28.1-android",
"io.netty:netty-common:jar:sources:4.1.45.Final",
"com.google.guava:failureaccess:jar:sources:1.0.1",
@@ -2258,14 +4039,19 @@
"directDependencies": [
"io.micronaut.grpc:micronaut-grpc-annotation:jar:sources:1.1.1",
"io.micronaut:micronaut-runtime:jar:sources:1.3.1",
- "io.grpc:grpc-protobuf:jar:sources:1.26.0",
- "io.grpc:grpc-stub:jar:sources:1.26.0",
+ "io.grpc:grpc-protobuf:jar:sources:1.27.1",
"io.micronaut:micronaut-inject:jar:sources:1.3.1",
"io.grpc:grpc-netty:jar:sources:1.26.0"
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/grpc/micronaut-grpc-runtime/1.1.1/micronaut-grpc-runtime-1.1.1-sources.jar",
"mirror_urls": [
@@ -2285,7 +4071,6 @@
"com.google.guava:guava:28.1-android",
"org.codehaus.mojo:animal-sniffer-annotations:1.18",
"com.google.j2objc:j2objc-annotations:1.3",
- "com.google.errorprone:error_prone_annotations:2.3.3",
"io.micronaut:micronaut-buffer-netty:1.3.1",
"com.google.code.findbugs:jsr305:3.0.2",
"org.slf4j:slf4j-api:1.7.26",
@@ -2294,8 +4079,8 @@
"com.google.code.gson:gson:2.8.6",
"io.micronaut:micronaut-aop:1.3.1",
"io.reactivex.rxjava2:rxjava:2.2.10",
- "com.google.protobuf:protobuf-java-util:3.11.1",
"io.micronaut:micronaut-http:1.3.1",
+ "com.google.errorprone:error_prone_annotations:2.3.4",
"org.yaml:snakeyaml:1.24",
"io.micronaut:micronaut-websocket:1.3.1",
"io.micronaut:micronaut-core:1.3.1",
@@ -2309,20 +4094,27 @@
"io.netty:netty-resolver:4.1.45.Final",
"javax.inject:javax.inject:1",
"io.netty:netty-buffer:4.1.45.Final",
+ "com.google.protobuf:protobuf-java-util:3.11.4",
"io.netty:netty-handler:4.1.45.Final",
"org.checkerframework:checker-compat-qual:2.5.5"
],
"directDependencies": [
"io.micronaut:micronaut-http-netty:1.3.1",
"com.google.protobuf:protobuf-java:3.11.4",
- "com.google.protobuf:protobuf-java-util:3.11.1",
"io.micronaut:micronaut-http:1.3.1",
"io.micronaut:micronaut-inject:1.3.1",
- "javax.annotation:javax.annotation-api:1.3.2"
+ "javax.annotation:javax.annotation-api:1.3.2",
+ "com.google.protobuf:protobuf-java-util:3.11.4"
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/grpc/micronaut-protobuff-support/1.1.1/micronaut-protobuff-support-1.1.1.jar",
"mirror_urls": [
@@ -2347,14 +4139,14 @@
"com.google.j2objc:j2objc-annotations:jar:sources:1.3",
"io.micronaut:micronaut-core:jar:sources:1.3.1",
"io.micronaut:micronaut-aop:jar:sources:1.3.1",
- "com.google.protobuf:protobuf-java-util:jar:sources:3.11.1",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4",
+ "com.google.protobuf:protobuf-java-util:jar:sources:3.11.4",
"org.reactivestreams:reactive-streams:jar:sources:1.0.3",
"org.slf4j:slf4j-api:jar:sources:1.7.26",
"javax.inject:javax.inject:jar:sources:1",
"io.netty:netty-handler:jar:sources:4.1.45.Final",
"io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
"com.google.code.gson:gson:jar:sources:2.8.6",
- "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
"org.yaml:snakeyaml:jar:sources:1.24",
"org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
"com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
@@ -2371,7 +4163,7 @@
],
"directDependencies": [
"com.google.protobuf:protobuf-java:jar:sources:3.11.4",
- "com.google.protobuf:protobuf-java-util:jar:sources:3.11.1",
+ "com.google.protobuf:protobuf-java-util:jar:sources:3.11.4",
"io.micronaut:micronaut-http:jar:sources:1.3.1",
"io.micronaut:micronaut-http-netty:jar:sources:1.3.1",
"io.micronaut:micronaut-inject:jar:sources:1.3.1",
@@ -2379,7 +4171,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/grpc/micronaut-protobuff-support/1.1.1/micronaut-protobuff-support-1.1.1-sources.jar",
"mirror_urls": [
@@ -2398,11 +4196,11 @@
"com.google.code.findbugs:jsr305:3.0.2",
"org.slf4j:slf4j-api:1.7.26",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.1",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
"io.micronaut:micronaut-aop:1.3.1",
"io.reactivex.rxjava2:rxjava:2.2.10",
"io.micronaut:micronaut-http:1.3.1",
"org.yaml:snakeyaml:1.24",
- "com.fasterxml.jackson.core:jackson-core:2.10.1",
"io.micronaut:micronaut-core:1.3.1",
"com.fasterxml.jackson.core:jackson-annotations:2.10.1",
"io.micronaut:micronaut-inject:1.3.1",
@@ -2440,11 +4238,11 @@
"com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
"io.micronaut:micronaut-core:jar:sources:1.3.1",
"io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
"org.reactivestreams:reactive-streams:jar:sources:1.0.3",
"org.slf4j:slf4j-api:jar:sources:1.7.26",
"javax.inject:javax.inject:jar:sources:1",
"io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
- "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
"org.yaml:snakeyaml:jar:sources:1.24",
@@ -2489,6 +4287,7 @@
"org.jetbrains.kotlin:kotlin-reflect:1.3.20",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.1",
"org.eclipse.jgit:org.eclipse.jgit:4.4.1.201607150455-r",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
"com.univocity:univocity-parsers:2.7.6",
"io.micronaut.test:micronaut-test-core:1.1.2",
"io.micronaut:micronaut-aop:1.3.1",
@@ -2496,7 +4295,6 @@
"org.opentest4j:opentest4j:1.1.1",
"io.micronaut:micronaut-http:1.3.1",
"org.yaml:snakeyaml:1.24",
- "com.fasterxml.jackson.core:jackson-core:2.10.1",
"io.kotlintest:kotlintest-runner-jvm:3.2.1",
"org.jetbrains.kotlin:kotlin-stdlib-common:1.3.20",
"org.jetbrains.kotlin:kotlin-stdlib:1.3.20",
@@ -2556,6 +4354,7 @@
"org.junit.platform:junit-platform-engine:jar:sources:1.3.2",
"io.micronaut:micronaut-aop:jar:sources:1.3.1",
"com.univocity:univocity-parsers:jar:sources:2.7.6",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
"org.jetbrains.kotlin:kotlin-reflect:jar:sources:1.3.20",
"io.arrow-kt:arrow-annotations:jar:sources:0.8.2",
"org.reactivestreams:reactive-streams:jar:sources:1.0.3",
@@ -2565,7 +4364,6 @@
"org.junit.platform:junit-platform-commons:jar:sources:1.3.2",
"io.kotlintest:kotlintest-core:jar:sources:3.2.1",
"io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
- "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
"org.jetbrains.kotlinx:kotlinx-coroutines-core:jar:sources:1.1.0",
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
@@ -2661,7 +4459,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-aop/1.3.1/micronaut-aop-1.3.1-sources.jar",
"mirror_urls": [
@@ -2695,7 +4499,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-buffer-netty/1.3.1/micronaut-buffer-netty-1.3.1.jar",
"mirror_urls": [
@@ -2729,7 +4539,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-buffer-netty/1.3.1/micronaut-buffer-netty-1.3.1-sources.jar",
"mirror_urls": [
@@ -2781,7 +4597,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-core/1.3.1/micronaut-core-1.3.1-sources.jar",
"mirror_urls": [
@@ -2799,8 +4621,8 @@
"org.reactivestreams:reactive-streams:1.0.3",
"com.google.code.findbugs:jsr305:3.0.2",
"org.slf4j:slf4j-api:1.7.26",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
"org.yaml:snakeyaml:1.24",
- "com.fasterxml.jackson.core:jackson-core:2.10.1",
"io.micronaut:micronaut-core:1.3.1",
"com.fasterxml.jackson.core:jackson-annotations:2.10.1",
"io.micronaut:micronaut-inject:1.3.1",
@@ -2815,7 +4637,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-graal/1.3.1/micronaut-graal-1.3.1.jar",
"mirror_urls": [
@@ -2833,10 +4661,10 @@
"com.google.code.findbugs:jsr305:jar:sources:3.0.2",
"com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
"io.micronaut:micronaut-core:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
"org.reactivestreams:reactive-streams:jar:sources:1.0.3",
"org.slf4j:slf4j-api:jar:sources:1.7.26",
"javax.inject:javax.inject:jar:sources:1",
- "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
"org.yaml:snakeyaml:jar:sources:1.24",
"com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.10.1",
"io.micronaut:micronaut-inject:jar:sources:1.3.1",
@@ -2849,7 +4677,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-graal/1.3.1/micronaut-graal-1.3.1-sources.jar",
"mirror_urls": [
@@ -2872,11 +4706,11 @@
"io.micronaut:micronaut-http-netty:1.3.1",
"io.netty:netty-codec-socks:4.1.45.Final",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.1",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
"io.micronaut:micronaut-aop:1.3.1",
"io.reactivex.rxjava2:rxjava:2.2.10",
"io.micronaut:micronaut-http:1.3.1",
"org.yaml:snakeyaml:1.24",
- "com.fasterxml.jackson.core:jackson-core:2.10.1",
"io.micronaut:micronaut-websocket:1.3.1",
"io.micronaut:micronaut-core:1.3.1",
"io.netty:netty-codec:4.1.45.Final",
@@ -2905,7 +4739,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-http-client/1.3.1/micronaut-http-client-1.3.1.jar",
"mirror_urls": [
@@ -2930,13 +4770,13 @@
"io.netty:netty-buffer:jar:sources:4.1.45.Final",
"io.micronaut:micronaut-core:jar:sources:1.3.1",
"io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
"io.netty:netty-handler-proxy:jar:sources:4.1.45.Final",
"org.reactivestreams:reactive-streams:jar:sources:1.0.3",
"org.slf4j:slf4j-api:jar:sources:1.7.26",
"javax.inject:javax.inject:jar:sources:1",
"io.netty:netty-handler:jar:sources:4.1.45.Final",
"io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
- "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
"io.netty:netty-codec-socks:jar:sources:4.1.45.Final",
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
@@ -2961,7 +4801,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-http-client/1.3.1/micronaut-http-client-1.3.1-sources.jar",
"mirror_urls": [
@@ -3008,7 +4854,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-http-netty/1.3.1/micronaut-http-netty-1.3.1.jar",
"mirror_urls": [
@@ -3055,7 +4907,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-http-netty/1.3.1/micronaut-http-netty-1.3.1-sources.jar",
"mirror_urls": [
@@ -3077,11 +4935,11 @@
"org.slf4j:slf4j-api:1.7.26",
"io.micronaut:micronaut-http-netty:1.3.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.1",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
"io.micronaut:micronaut-aop:1.3.1",
"io.reactivex.rxjava2:rxjava:2.2.10",
"io.micronaut:micronaut-http:1.3.1",
"org.yaml:snakeyaml:1.24",
- "com.fasterxml.jackson.core:jackson-core:2.10.1",
"io.micronaut:micronaut-websocket:1.3.1",
"io.micronaut:micronaut-core:1.3.1",
"io.netty:netty-codec:4.1.45.Final",
@@ -3110,7 +4968,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-http-server-netty/1.3.1/micronaut-http-server-netty-1.3.1.jar",
"mirror_urls": [
@@ -3135,13 +4999,13 @@
"io.netty:netty-buffer:jar:sources:4.1.45.Final",
"io.micronaut:micronaut-core:jar:sources:1.3.1",
"io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
"org.reactivestreams:reactive-streams:jar:sources:1.0.3",
"io.micronaut:micronaut-http-server:jar:sources:1.3.1",
"org.slf4j:slf4j-api:jar:sources:1.7.26",
"javax.inject:javax.inject:jar:sources:1",
"io.netty:netty-handler:jar:sources:4.1.45.Final",
"io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
- "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
"org.yaml:snakeyaml:jar:sources:1.24",
@@ -3165,7 +5029,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-http-server-netty/1.3.1/micronaut-http-server-netty-1.3.1-sources.jar",
"mirror_urls": [
@@ -3184,11 +5054,11 @@
"com.google.code.findbugs:jsr305:3.0.2",
"org.slf4j:slf4j-api:1.7.26",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.1",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
"io.micronaut:micronaut-aop:1.3.1",
"io.reactivex.rxjava2:rxjava:2.2.10",
"io.micronaut:micronaut-http:1.3.1",
"org.yaml:snakeyaml:1.24",
- "com.fasterxml.jackson.core:jackson-core:2.10.1",
"io.micronaut:micronaut-websocket:1.3.1",
"io.micronaut:micronaut-core:1.3.1",
"com.fasterxml.jackson.core:jackson-annotations:2.10.1",
@@ -3209,7 +5079,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-http-server/1.3.1/micronaut-http-server-1.3.1.jar",
"mirror_urls": [
@@ -3230,11 +5106,11 @@
"com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
"io.micronaut:micronaut-core:jar:sources:1.3.1",
"io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
"org.reactivestreams:reactive-streams:jar:sources:1.0.3",
"org.slf4j:slf4j-api:jar:sources:1.7.26",
"javax.inject:javax.inject:jar:sources:1",
"io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
- "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
"org.yaml:snakeyaml:jar:sources:1.24",
@@ -3252,8 +5128,9 @@
"org.slf4j:slf4j-api:jar:sources:1.7.26"
],
"exclusions": [
- "com.google.template:soy",
- "com.google.common.html.types:types"
+ "org.freemarker:freemarker",
+ "com.google.common.html.types:types",
+ "com.google.template:soy"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-http-server/1.3.1/micronaut-http-server-1.3.1-sources.jar",
"mirror_urls": [
@@ -3345,7 +5222,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-inject-java/1.3.1/micronaut-inject-java-1.3.1.jar",
"mirror_urls": [
@@ -3377,7 +5260,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-inject-java/1.3.1/micronaut-inject-java-1.3.1-sources.jar",
"mirror_urls": [
@@ -3441,7 +5330,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-inject/1.3.1/micronaut-inject-1.3.1-sources.jar",
"mirror_urls": [
@@ -3460,11 +5355,11 @@
"com.google.code.findbugs:jsr305:3.0.2",
"org.slf4j:slf4j-api:1.7.26",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.1",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
"io.micronaut:micronaut-aop:1.3.1",
"io.reactivex.rxjava2:rxjava:2.2.10",
"io.micronaut:micronaut-http:1.3.1",
"org.yaml:snakeyaml:1.24",
- "com.fasterxml.jackson.core:jackson-core:2.10.1",
"io.micronaut:micronaut-core:1.3.1",
"com.fasterxml.jackson.core:jackson-annotations:2.10.1",
"io.micronaut:micronaut-inject:1.3.1",
@@ -3483,7 +5378,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-management/1.3.0/micronaut-management-1.3.0.jar",
"mirror_urls": [
@@ -3504,11 +5405,11 @@
"com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
"io.micronaut:micronaut-core:jar:sources:1.3.1",
"io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
"org.reactivestreams:reactive-streams:jar:sources:1.0.3",
"org.slf4j:slf4j-api:jar:sources:1.7.26",
"javax.inject:javax.inject:jar:sources:1",
"io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
- "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
"org.yaml:snakeyaml:jar:sources:1.24",
@@ -3525,7 +5426,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-management/1.3.0/micronaut-management-1.3.0-sources.jar",
"mirror_urls": [
@@ -3545,11 +5452,11 @@
"com.google.code.findbugs:jsr305:3.0.2",
"org.slf4j:slf4j-api:1.7.26",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.1",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
"io.micronaut:micronaut-aop:1.3.1",
"io.reactivex.rxjava2:rxjava:2.2.10",
"io.micronaut:micronaut-http:1.3.1",
"org.yaml:snakeyaml:1.24",
- "com.fasterxml.jackson.core:jackson-core:2.10.1",
"io.micronaut:micronaut-websocket:1.3.1",
"io.micronaut:micronaut-core:1.3.1",
"com.fasterxml.jackson.core:jackson-annotations:2.10.1",
@@ -3570,7 +5477,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-multitenancy/1.3.1/micronaut-multitenancy-1.3.1.jar",
"mirror_urls": [
@@ -3591,12 +5504,12 @@
"com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
"io.micronaut:micronaut-core:jar:sources:1.3.1",
"io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
"org.reactivestreams:reactive-streams:jar:sources:1.0.3",
"io.micronaut:micronaut-http-server:jar:sources:1.3.1",
"org.slf4j:slf4j-api:jar:sources:1.7.26",
"javax.inject:javax.inject:jar:sources:1",
"io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
- "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
"org.yaml:snakeyaml:jar:sources:1.24",
@@ -3615,7 +5528,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-multitenancy/1.3.1/micronaut-multitenancy-1.3.1-sources.jar",
"mirror_urls": [
@@ -3647,7 +5566,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-router/1.3.1/micronaut-router-1.3.1.jar",
"mirror_urls": [
@@ -3698,11 +5623,11 @@
"com.google.code.findbugs:jsr305:3.0.2",
"org.slf4j:slf4j-api:1.7.26",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.1",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
"io.micronaut:micronaut-aop:1.3.1",
"io.reactivex.rxjava2:rxjava:2.2.10",
"io.micronaut:micronaut-http:1.3.1",
"org.yaml:snakeyaml:1.24",
- "com.fasterxml.jackson.core:jackson-core:2.10.1",
"io.micronaut:micronaut-core:1.3.1",
"com.fasterxml.jackson.core:jackson-annotations:2.10.1",
"io.micronaut:micronaut-inject:1.3.1",
@@ -3725,7 +5650,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-runtime/1.3.1/micronaut-runtime-1.3.1.jar",
"mirror_urls": [
@@ -3745,11 +5676,11 @@
"com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
"io.micronaut:micronaut-core:jar:sources:1.3.1",
"io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
"org.reactivestreams:reactive-streams:jar:sources:1.0.3",
"org.slf4j:slf4j-api:jar:sources:1.7.26",
"javax.inject:javax.inject:jar:sources:1",
"io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
- "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
"org.yaml:snakeyaml:jar:sources:1.24",
@@ -3771,7 +5702,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-runtime/1.3.1/micronaut-runtime-1.3.1-sources.jar",
"mirror_urls": [
@@ -3793,11 +5730,11 @@
"org.slf4j:slf4j-api:1.7.26",
"io.micronaut:micronaut-validation:1.3.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.1",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
"io.micronaut:micronaut-aop:1.3.1",
"io.reactivex.rxjava2:rxjava:2.2.10",
"io.micronaut:micronaut-http:1.3.1",
"org.yaml:snakeyaml:1.24",
- "com.fasterxml.jackson.core:jackson-core:2.10.1",
"io.micronaut:micronaut-websocket:1.3.1",
"io.micronaut:micronaut-core:1.3.1",
"com.fasterxml.jackson.core:jackson-annotations:2.10.1",
@@ -3820,7 +5757,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-security/1.3.0/micronaut-security-1.3.0.jar",
"mirror_urls": [
@@ -3842,13 +5785,13 @@
"com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
"io.micronaut:micronaut-core:jar:sources:1.3.1",
"io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
"org.reactivestreams:reactive-streams:jar:sources:1.0.3",
"io.micronaut:micronaut-http-server:jar:sources:1.3.1",
"org.slf4j:slf4j-api:jar:sources:1.7.26",
"javax.inject:javax.inject:jar:sources:1",
"io.micronaut:micronaut-management:jar:sources:1.3.0",
"io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
- "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
"org.yaml:snakeyaml:jar:sources:1.24",
@@ -3869,7 +5812,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-security/1.3.0/micronaut-security-1.3.0-sources.jar",
"mirror_urls": [
@@ -3888,11 +5837,11 @@
"com.google.code.findbugs:jsr305:3.0.2",
"org.slf4j:slf4j-api:1.7.26",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.1",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
"io.micronaut:micronaut-aop:1.3.1",
"io.reactivex.rxjava2:rxjava:2.2.10",
"io.micronaut:micronaut-http:1.3.1",
"org.yaml:snakeyaml:1.24",
- "com.fasterxml.jackson.core:jackson-core:2.10.1",
"io.micronaut:micronaut-core:1.3.1",
"com.fasterxml.jackson.core:jackson-annotations:2.10.1",
"io.micronaut:micronaut-inject:1.3.1",
@@ -3910,7 +5859,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-session/1.3.1/micronaut-session-1.3.1.jar",
"mirror_urls": [
@@ -3931,11 +5886,11 @@
"com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
"io.micronaut:micronaut-core:jar:sources:1.3.1",
"io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
"org.reactivestreams:reactive-streams:jar:sources:1.0.3",
"org.slf4j:slf4j-api:jar:sources:1.7.26",
"javax.inject:javax.inject:jar:sources:1",
"io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
- "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
"org.yaml:snakeyaml:jar:sources:1.24",
@@ -3951,7 +5906,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-session/1.3.1/micronaut-session-1.3.1-sources.jar",
"mirror_urls": [
@@ -3974,11 +5935,11 @@
"io.micronaut:micronaut-http-netty:1.3.1",
"io.netty:netty-codec-socks:4.1.45.Final",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.1",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
"io.micronaut:micronaut-aop:1.3.1",
"io.reactivex.rxjava2:rxjava:2.2.10",
"io.micronaut:micronaut-http:1.3.1",
"org.yaml:snakeyaml:1.24",
- "com.fasterxml.jackson.core:jackson-core:2.10.1",
"io.micronaut:micronaut-websocket:1.3.1",
"io.micronaut:micronaut-core:1.3.1",
"io.netty:netty-codec:4.1.45.Final",
@@ -4011,7 +5972,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-tracing/1.3.1/micronaut-tracing-1.3.1.jar",
"mirror_urls": [
@@ -4038,13 +6005,13 @@
"io.micronaut:micronaut-core:jar:sources:1.3.1",
"io.micronaut:micronaut-aop:jar:sources:1.3.1",
"io.opentracing:opentracing-noop:jar:sources:0.33.0",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
"io.netty:netty-handler-proxy:jar:sources:4.1.45.Final",
"org.reactivestreams:reactive-streams:jar:sources:1.0.3",
"org.slf4j:slf4j-api:jar:sources:1.7.26",
"javax.inject:javax.inject:jar:sources:1",
"io.netty:netty-handler:jar:sources:4.1.45.Final",
"io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
- "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
"io.netty:netty-codec-socks:jar:sources:4.1.45.Final",
"io.opentracing:opentracing-api:jar:sources:0.33.0",
@@ -4071,7 +6038,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-tracing/1.3.1/micronaut-tracing-1.3.1-sources.jar",
"mirror_urls": [
@@ -4105,7 +6078,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-validation/1.3.1/micronaut-validation-1.3.1.jar",
"mirror_urls": [
@@ -4139,7 +6118,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-validation/1.3.1/micronaut-validation-1.3.1-sources.jar",
"mirror_urls": [
@@ -4159,11 +6144,11 @@
"com.google.code.findbugs:jsr305:3.0.2",
"org.slf4j:slf4j-api:1.7.26",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.1",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
"io.micronaut:micronaut-aop:1.3.1",
"io.reactivex.rxjava2:rxjava:2.2.10",
"io.micronaut:micronaut-http:1.3.1",
"org.yaml:snakeyaml:1.24",
- "com.fasterxml.jackson.core:jackson-core:2.10.1",
"io.micronaut:micronaut-websocket:1.3.1",
"io.micronaut:micronaut-core:1.3.1",
"com.fasterxml.jackson.core:jackson-annotations:2.10.1",
@@ -4204,12 +6189,12 @@
"com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
"io.micronaut:micronaut-core:jar:sources:1.3.1",
"io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
"org.reactivestreams:reactive-streams:jar:sources:1.0.3",
"io.micronaut:micronaut-http-server:jar:sources:1.3.1",
"org.slf4j:slf4j-api:jar:sources:1.7.26",
"javax.inject:javax.inject:jar:sources:1",
"io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
- "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
"org.yaml:snakeyaml:jar:sources:1.24",
@@ -4247,11 +6232,11 @@
"com.google.code.findbugs:jsr305:3.0.2",
"org.slf4j:slf4j-api:1.7.26",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.1",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
"io.micronaut:micronaut-aop:1.3.1",
"io.reactivex.rxjava2:rxjava:2.2.10",
"io.micronaut:micronaut-http:1.3.1",
"org.yaml:snakeyaml:1.24",
- "com.fasterxml.jackson.core:jackson-core:2.10.1",
"io.micronaut:micronaut-websocket:1.3.1",
"io.micronaut:micronaut-core:1.3.1",
"com.fasterxml.jackson.core:jackson-annotations:2.10.1",
@@ -4295,12 +6280,12 @@
"com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
"io.micronaut:micronaut-core:jar:sources:1.3.1",
"io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
"org.reactivestreams:reactive-streams:jar:sources:1.0.3",
"io.micronaut:micronaut-http-server:jar:sources:1.3.1",
"org.slf4j:slf4j-api:jar:sources:1.7.26",
"javax.inject:javax.inject:jar:sources:1",
"io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
- "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
"org.yaml:snakeyaml:jar:sources:1.24",
@@ -4341,11 +6326,11 @@
"com.google.code.findbugs:jsr305:3.0.2",
"org.slf4j:slf4j-api:1.7.26",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.1",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
"io.micronaut:micronaut-aop:1.3.1",
"io.reactivex.rxjava2:rxjava:2.2.10",
"io.micronaut:micronaut-http:1.3.1",
"org.yaml:snakeyaml:1.24",
- "com.fasterxml.jackson.core:jackson-core:2.10.1",
"io.micronaut:micronaut-websocket:1.3.1",
"io.micronaut:micronaut-core:1.3.1",
"com.fasterxml.jackson.core:jackson-annotations:2.10.1",
@@ -4389,12 +6374,12 @@
"com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
"io.micronaut:micronaut-core:jar:sources:1.3.1",
"io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
"org.reactivestreams:reactive-streams:jar:sources:1.0.3",
"io.micronaut:micronaut-http-server:jar:sources:1.3.1",
"org.slf4j:slf4j-api:jar:sources:1.7.26",
"javax.inject:javax.inject:jar:sources:1",
"io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
- "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
"org.yaml:snakeyaml:jar:sources:1.24",
@@ -4435,11 +6420,11 @@
"com.google.code.findbugs:jsr305:3.0.2",
"org.slf4j:slf4j-api:1.7.26",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.1",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
"io.micronaut:micronaut-aop:1.3.1",
"io.reactivex.rxjava2:rxjava:2.2.10",
"io.micronaut:micronaut-http:1.3.1",
"org.yaml:snakeyaml:1.24",
- "com.fasterxml.jackson.core:jackson-core:2.10.1",
"io.micronaut:micronaut-websocket:1.3.1",
"io.micronaut:micronaut-core:1.3.1",
"com.fasterxml.jackson.core:jackson-annotations:2.10.1",
@@ -4482,12 +6467,12 @@
"com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
"io.micronaut:micronaut-core:jar:sources:1.3.1",
"io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
"org.reactivestreams:reactive-streams:jar:sources:1.0.3",
"io.micronaut:micronaut-http-server:jar:sources:1.3.1",
"org.slf4j:slf4j-api:jar:sources:1.7.26",
"javax.inject:javax.inject:jar:sources:1",
"io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
- "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
"org.yaml:snakeyaml:jar:sources:1.24",
@@ -4527,11 +6512,11 @@
"com.google.code.findbugs:jsr305:3.0.2",
"org.slf4j:slf4j-api:1.7.26",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.1",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
"io.micronaut:micronaut-aop:1.3.1",
"io.reactivex.rxjava2:rxjava:2.2.10",
"io.micronaut:micronaut-http:1.3.1",
"org.yaml:snakeyaml:1.24",
- "com.fasterxml.jackson.core:jackson-core:2.10.1",
"io.micronaut:micronaut-websocket:1.3.1",
"io.micronaut:micronaut-core:1.3.1",
"com.fasterxml.jackson.core:jackson-annotations:2.10.1",
@@ -4576,12 +6561,12 @@
"com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
"io.micronaut:micronaut-core:jar:sources:1.3.1",
"io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
"org.reactivestreams:reactive-streams:jar:sources:1.0.3",
"io.micronaut:micronaut-http-server:jar:sources:1.3.1",
"org.slf4j:slf4j-api:jar:sources:1.7.26",
"javax.inject:javax.inject:jar:sources:1",
"io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
- "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
"org.yaml:snakeyaml:jar:sources:1.24",
@@ -4623,11 +6608,11 @@
"com.google.code.findbugs:jsr305:3.0.2",
"org.slf4j:slf4j-api:1.7.26",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.1",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
"io.micronaut:micronaut-aop:1.3.1",
"io.reactivex.rxjava2:rxjava:2.2.10",
"io.micronaut:micronaut-http:1.3.1",
"org.yaml:snakeyaml:1.24",
- "com.fasterxml.jackson.core:jackson-core:2.10.1",
"io.micronaut:micronaut-websocket:1.3.1",
"io.micronaut:micronaut-core:1.3.1",
"com.fasterxml.jackson.core:jackson-annotations:2.10.1",
@@ -4671,12 +6656,12 @@
"com.fasterxml.jackson.core:jackson-databind:jar:sources:2.10.1",
"io.micronaut:micronaut-core:jar:sources:1.3.1",
"io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
"org.reactivestreams:reactive-streams:jar:sources:1.0.3",
"io.micronaut:micronaut-http-server:jar:sources:1.3.1",
"org.slf4j:slf4j-api:jar:sources:1.7.26",
"javax.inject:javax.inject:jar:sources:1",
"io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
- "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
"org.yaml:snakeyaml:jar:sources:1.24",
@@ -4718,11 +6703,11 @@
"org.slf4j:slf4j-api:1.7.26",
"io.micronaut:micronaut-views-soy:1.3.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.1",
+ "com.fasterxml.jackson.core:jackson-core:2.10.2",
"io.micronaut:micronaut-aop:1.3.1",
"io.reactivex.rxjava2:rxjava:2.2.10",
"io.micronaut:micronaut-http:1.3.1",
"org.yaml:snakeyaml:1.24",
- "com.fasterxml.jackson.core:jackson-core:2.10.1",
"io.micronaut:micronaut-views-thymeleaf:1.3.1",
"io.micronaut:micronaut-websocket:1.3.1",
"io.micronaut:micronaut-core:1.3.1",
@@ -4772,6 +6757,7 @@
"io.micronaut:micronaut-views-thymeleaf:jar:sources:1.3.1",
"io.micronaut:micronaut-core:jar:sources:1.3.1",
"io.micronaut:micronaut-aop:jar:sources:1.3.1",
+ "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.2",
"org.reactivestreams:reactive-streams:jar:sources:1.0.3",
"io.micronaut:micronaut-http-server:jar:sources:1.3.1",
"org.slf4j:slf4j-api:jar:sources:1.7.26",
@@ -4779,7 +6765,6 @@
"io.micronaut:micronaut-views-velocity:jar:sources:1.3.1",
"io.reactivex.rxjava2:rxjava:jar:sources:2.2.10",
"io.micronaut:micronaut-views-handlebars:jar:sources:1.3.1",
- "com.fasterxml.jackson.core:jackson-core:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources:2.10.1",
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources:2.10.1",
"org.yaml:snakeyaml:jar:sources:1.24",
@@ -4838,8 +6823,9 @@
"io.micronaut:micronaut-inject:1.3.1"
],
"exclusions": [
- "com.google.template:soy",
- "com.google.common.html.types:types"
+ "org.thymeleaf:thymeleaf",
+ "com.google.common.html.types:types",
+ "com.google.template:soy"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-websocket/1.3.1/micronaut-websocket-1.3.1.jar",
"mirror_urls": [
@@ -4875,7 +6861,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/micronaut/micronaut-websocket/1.3.1/micronaut-websocket-1.3.1-sources.jar",
"mirror_urls": [
@@ -4897,7 +6889,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/netty/netty-buffer/4.1.45.Final/netty-buffer-4.1.45.Final.jar",
"mirror_urls": [
@@ -4919,7 +6917,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/netty/netty-buffer/4.1.45.Final/netty-buffer-4.1.45.Final-sources.jar",
"mirror_urls": [
@@ -4937,7 +6941,13 @@
"directDependencies": [],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar",
"mirror_urls": [
@@ -4955,7 +6965,13 @@
"directDependencies": [],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final-sources.jar",
"mirror_urls": [
@@ -4986,7 +7002,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/netty/netty-codec-http/4.1.45.Final/netty-codec-http-4.1.45.Final.jar",
"mirror_urls": [
@@ -5017,7 +7039,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/netty/netty-codec-http/4.1.45.Final/netty-codec-http-4.1.45.Final-sources.jar",
"mirror_urls": [
@@ -5046,7 +7074,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/netty/netty-codec-socks/4.1.45.Final/netty-codec-socks-4.1.45.Final.jar",
"mirror_urls": [
@@ -5075,7 +7109,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/netty/netty-codec-socks/4.1.45.Final/netty-codec-socks-4.1.45.Final-sources.jar",
"mirror_urls": [
@@ -5102,7 +7142,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/netty/netty-codec/4.1.45.Final/netty-codec-4.1.45.Final.jar",
"mirror_urls": [
@@ -5129,7 +7175,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/netty/netty-codec/4.1.45.Final/netty-codec-4.1.45.Final-sources.jar",
"mirror_urls": [
@@ -5147,7 +7199,13 @@
"directDependencies": [],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/netty/netty-common/4.1.45.Final/netty-common-4.1.45.Final.jar",
"mirror_urls": [
@@ -5165,7 +7223,13 @@
"directDependencies": [],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/netty/netty-common/4.1.45.Final/netty-common-4.1.45.Final-sources.jar",
"mirror_urls": [
@@ -5199,7 +7263,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/netty/netty-handler-proxy/4.1.45.Final/netty-handler-proxy-4.1.45.Final.jar",
"mirror_urls": [
@@ -5233,7 +7303,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/netty/netty-handler-proxy/4.1.45.Final/netty-handler-proxy-4.1.45.Final-sources.jar",
"mirror_urls": [
@@ -5262,7 +7338,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/netty/netty-handler/4.1.45.Final/netty-handler-4.1.45.Final.jar",
"mirror_urls": [
@@ -5291,7 +7373,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/netty/netty-handler/4.1.45.Final/netty-handler-4.1.45.Final-sources.jar",
"mirror_urls": [
@@ -5313,7 +7401,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/netty/netty-resolver/4.1.45.Final/netty-resolver-4.1.45.Final.jar",
"mirror_urls": [
@@ -5335,7 +7429,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/netty/netty-resolver/4.1.45.Final/netty-resolver-4.1.45.Final-sources.jar",
"mirror_urls": [
@@ -5361,7 +7461,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/netty/netty-transport/4.1.45.Final/netty-transport-4.1.45.Final.jar",
"mirror_urls": [
@@ -5387,7 +7493,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/netty/netty-transport/4.1.45.Final/netty-transport-4.1.45.Final-sources.jar",
"mirror_urls": [
@@ -5400,96 +7512,176 @@
"url": "https://jcenter.bintray.com/io/netty/netty-transport/4.1.45.Final/netty-transport-4.1.45.Final-sources.jar"
},
{
- "coord": "io.opencensus:opencensus-api:0.24.0",
+ "coord": "io.opencensus:opencensus-api:0.25.0",
"dependencies": [],
"directDependencies": [],
"exclusions": [
"com.google.guava:guava",
"com.google.template:soy",
"io.grpc:grpc-context",
- "com.google.code.findbugs:jsr305",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
- "file": "v1/https/jcenter.bintray.com/io/opencensus/opencensus-api/0.24.0/opencensus-api-0.24.0.jar",
+ "file": "v1/https/jcenter.bintray.com/io/opencensus/opencensus-api/0.25.0/opencensus-api-0.25.0.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/io/opencensus/opencensus-api/0.24.0/opencensus-api-0.24.0.jar",
- "https://maven.google.com/io/opencensus/opencensus-api/0.24.0/opencensus-api-0.24.0.jar",
- "https://repo1.maven.org/maven2/io/opencensus/opencensus-api/0.24.0/opencensus-api-0.24.0.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/io/opencensus/opencensus-api/0.24.0/opencensus-api-0.24.0.jar"
+ "https://jcenter.bintray.com/io/opencensus/opencensus-api/0.25.0/opencensus-api-0.25.0.jar",
+ "https://maven.google.com/io/opencensus/opencensus-api/0.25.0/opencensus-api-0.25.0.jar",
+ "https://repo1.maven.org/maven2/io/opencensus/opencensus-api/0.25.0/opencensus-api-0.25.0.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/opencensus/opencensus-api/0.25.0/opencensus-api-0.25.0.jar"
],
- "sha256": "f561b1cc2673844288e596ddf5bb6596868a8472fd2cb8993953fc5c034b2352",
- "url": "https://jcenter.bintray.com/io/opencensus/opencensus-api/0.24.0/opencensus-api-0.24.0.jar"
+ "sha256": "f270b599be9e042fbd9e33557f2ed34db5c0c37e448f9890ad53d2db91f73e2f",
+ "url": "https://jcenter.bintray.com/io/opencensus/opencensus-api/0.25.0/opencensus-api-0.25.0.jar"
},
{
- "coord": "io.opencensus:opencensus-api:jar:sources:0.24.0",
+ "coord": "io.opencensus:opencensus-api:jar:sources:0.25.0",
"dependencies": [],
"directDependencies": [],
"exclusions": [
"com.google.guava:guava",
"com.google.template:soy",
"io.grpc:grpc-context",
- "com.google.code.findbugs:jsr305",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
- "file": "v1/https/jcenter.bintray.com/io/opencensus/opencensus-api/0.24.0/opencensus-api-0.24.0-sources.jar",
+ "file": "v1/https/jcenter.bintray.com/io/opencensus/opencensus-api/0.25.0/opencensus-api-0.25.0-sources.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/io/opencensus/opencensus-api/0.24.0/opencensus-api-0.24.0-sources.jar",
- "https://maven.google.com/io/opencensus/opencensus-api/0.24.0/opencensus-api-0.24.0-sources.jar",
- "https://repo1.maven.org/maven2/io/opencensus/opencensus-api/0.24.0/opencensus-api-0.24.0-sources.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/io/opencensus/opencensus-api/0.24.0/opencensus-api-0.24.0-sources.jar"
+ "https://jcenter.bintray.com/io/opencensus/opencensus-api/0.25.0/opencensus-api-0.25.0-sources.jar",
+ "https://maven.google.com/io/opencensus/opencensus-api/0.25.0/opencensus-api-0.25.0-sources.jar",
+ "https://repo1.maven.org/maven2/io/opencensus/opencensus-api/0.25.0/opencensus-api-0.25.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/opencensus/opencensus-api/0.25.0/opencensus-api-0.25.0-sources.jar"
],
- "sha256": "01693c455b3748a494813ae612e1766c9e804d56561b759d8399270865427bf6",
- "url": "https://jcenter.bintray.com/io/opencensus/opencensus-api/0.24.0/opencensus-api-0.24.0-sources.jar"
+ "sha256": "e054c88da765eb8e46d3dade0592ad6a4c441f04801cbc235193a4210a7c8664",
+ "url": "https://jcenter.bintray.com/io/opencensus/opencensus-api/0.25.0/opencensus-api-0.25.0-sources.jar"
},
{
- "coord": "io.opencensus:opencensus-contrib-grpc-metrics:0.24.0",
+ "coord": "io.opencensus:opencensus-contrib-grpc-util:0.25.0",
"dependencies": [
- "io.opencensus:opencensus-api:0.24.0"
+ "io.opencensus:opencensus-api:0.25.0"
],
"directDependencies": [
- "io.opencensus:opencensus-api:0.24.0"
+ "io.opencensus:opencensus-api:0.25.0"
],
"exclusions": [
"com.google.guava:guava",
"com.google.template:soy",
"io.grpc:grpc-context",
- "com.google.code.findbugs:jsr305",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
- "file": "v1/https/jcenter.bintray.com/io/opencensus/opencensus-contrib-grpc-metrics/0.24.0/opencensus-contrib-grpc-metrics-0.24.0.jar",
+ "file": "v1/https/jcenter.bintray.com/io/opencensus/opencensus-contrib-grpc-util/0.25.0/opencensus-contrib-grpc-util-0.25.0.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/io/opencensus/opencensus-contrib-grpc-metrics/0.24.0/opencensus-contrib-grpc-metrics-0.24.0.jar",
- "https://maven.google.com/io/opencensus/opencensus-contrib-grpc-metrics/0.24.0/opencensus-contrib-grpc-metrics-0.24.0.jar",
- "https://repo1.maven.org/maven2/io/opencensus/opencensus-contrib-grpc-metrics/0.24.0/opencensus-contrib-grpc-metrics-0.24.0.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/io/opencensus/opencensus-contrib-grpc-metrics/0.24.0/opencensus-contrib-grpc-metrics-0.24.0.jar"
+ "https://jcenter.bintray.com/io/opencensus/opencensus-contrib-grpc-util/0.25.0/opencensus-contrib-grpc-util-0.25.0.jar",
+ "https://maven.google.com/io/opencensus/opencensus-contrib-grpc-util/0.25.0/opencensus-contrib-grpc-util-0.25.0.jar",
+ "https://repo1.maven.org/maven2/io/opencensus/opencensus-contrib-grpc-util/0.25.0/opencensus-contrib-grpc-util-0.25.0.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/opencensus/opencensus-contrib-grpc-util/0.25.0/opencensus-contrib-grpc-util-0.25.0.jar"
],
- "sha256": "875582e093f11950ad3f4a50b5fee33a008023f7d1e47820a1bef05d23b9ed42",
- "url": "https://jcenter.bintray.com/io/opencensus/opencensus-contrib-grpc-metrics/0.24.0/opencensus-contrib-grpc-metrics-0.24.0.jar"
+ "sha256": "588ed36059a09386173a4d997f18492396eb7e9799f59ce628d8d22949df972c",
+ "url": "https://jcenter.bintray.com/io/opencensus/opencensus-contrib-grpc-util/0.25.0/opencensus-contrib-grpc-util-0.25.0.jar"
},
{
- "coord": "io.opencensus:opencensus-contrib-grpc-metrics:jar:sources:0.24.0",
+ "coord": "io.opencensus:opencensus-contrib-grpc-util:jar:sources:0.25.0",
"dependencies": [
- "io.opencensus:opencensus-api:jar:sources:0.24.0"
+ "io.opencensus:opencensus-api:jar:sources:0.25.0"
],
"directDependencies": [
- "io.opencensus:opencensus-api:jar:sources:0.24.0"
+ "io.opencensus:opencensus-api:jar:sources:0.25.0"
],
"exclusions": [
"com.google.guava:guava",
"com.google.template:soy",
"io.grpc:grpc-context",
- "com.google.code.findbugs:jsr305",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/opencensus/opencensus-contrib-grpc-util/0.25.0/opencensus-contrib-grpc-util-0.25.0-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/opencensus/opencensus-contrib-grpc-util/0.25.0/opencensus-contrib-grpc-util-0.25.0-sources.jar",
+ "https://maven.google.com/io/opencensus/opencensus-contrib-grpc-util/0.25.0/opencensus-contrib-grpc-util-0.25.0-sources.jar",
+ "https://repo1.maven.org/maven2/io/opencensus/opencensus-contrib-grpc-util/0.25.0/opencensus-contrib-grpc-util-0.25.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/opencensus/opencensus-contrib-grpc-util/0.25.0/opencensus-contrib-grpc-util-0.25.0-sources.jar"
+ ],
+ "sha256": "411fddb4e0c3d308d5e59d3301a2d25a8107d10185745f97f9cc96f43bb7187c",
+ "url": "https://jcenter.bintray.com/io/opencensus/opencensus-contrib-grpc-util/0.25.0/opencensus-contrib-grpc-util-0.25.0-sources.jar"
+ },
+ {
+ "coord": "io.opencensus:opencensus-contrib-http-util:0.24.0",
+ "dependencies": [
+ "io.opencensus:opencensus-api:0.25.0"
+ ],
+ "directDependencies": [
+ "io.opencensus:opencensus-api:0.25.0"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/io/opencensus/opencensus-contrib-http-util/0.24.0/opencensus-contrib-http-util-0.24.0.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/io/opencensus/opencensus-contrib-http-util/0.24.0/opencensus-contrib-http-util-0.24.0.jar",
+ "https://maven.google.com/io/opencensus/opencensus-contrib-http-util/0.24.0/opencensus-contrib-http-util-0.24.0.jar",
+ "https://repo1.maven.org/maven2/io/opencensus/opencensus-contrib-http-util/0.24.0/opencensus-contrib-http-util-0.24.0.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/opencensus/opencensus-contrib-http-util/0.24.0/opencensus-contrib-http-util-0.24.0.jar"
+ ],
+ "sha256": "7155273bbb1ed3d477ea33cf19d7bbc0b285ff395f43b29ae576722cf247000f",
+ "url": "https://jcenter.bintray.com/io/opencensus/opencensus-contrib-http-util/0.24.0/opencensus-contrib-http-util-0.24.0.jar"
+ },
+ {
+ "coord": "io.opencensus:opencensus-contrib-http-util:jar:sources:0.24.0",
+ "dependencies": [
+ "io.opencensus:opencensus-api:jar:sources:0.25.0"
+ ],
+ "directDependencies": [
+ "io.opencensus:opencensus-api:jar:sources:0.25.0"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
- "file": "v1/https/jcenter.bintray.com/io/opencensus/opencensus-contrib-grpc-metrics/0.24.0/opencensus-contrib-grpc-metrics-0.24.0-sources.jar",
+ "file": "v1/https/jcenter.bintray.com/io/opencensus/opencensus-contrib-http-util/0.24.0/opencensus-contrib-http-util-0.24.0-sources.jar",
"mirror_urls": [
- "https://jcenter.bintray.com/io/opencensus/opencensus-contrib-grpc-metrics/0.24.0/opencensus-contrib-grpc-metrics-0.24.0-sources.jar",
- "https://maven.google.com/io/opencensus/opencensus-contrib-grpc-metrics/0.24.0/opencensus-contrib-grpc-metrics-0.24.0-sources.jar",
- "https://repo1.maven.org/maven2/io/opencensus/opencensus-contrib-grpc-metrics/0.24.0/opencensus-contrib-grpc-metrics-0.24.0-sources.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/io/opencensus/opencensus-contrib-grpc-metrics/0.24.0/opencensus-contrib-grpc-metrics-0.24.0-sources.jar"
+ "https://jcenter.bintray.com/io/opencensus/opencensus-contrib-http-util/0.24.0/opencensus-contrib-http-util-0.24.0-sources.jar",
+ "https://maven.google.com/io/opencensus/opencensus-contrib-http-util/0.24.0/opencensus-contrib-http-util-0.24.0-sources.jar",
+ "https://repo1.maven.org/maven2/io/opencensus/opencensus-contrib-http-util/0.24.0/opencensus-contrib-http-util-0.24.0-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/io/opencensus/opencensus-contrib-http-util/0.24.0/opencensus-contrib-http-util-0.24.0-sources.jar"
],
- "sha256": "48c84a321af149c35a95b0d433a49c78e21674e10568fbc529675de0ee46fa96",
- "url": "https://jcenter.bintray.com/io/opencensus/opencensus-contrib-grpc-metrics/0.24.0/opencensus-contrib-grpc-metrics-0.24.0-sources.jar"
+ "sha256": "bbf2eb991fb641ad9e4e07f4fabfa3222edcded61440663d2886c8be13ca2cae",
+ "url": "https://jcenter.bintray.com/io/opencensus/opencensus-contrib-http-util/0.24.0/opencensus-contrib-http-util-0.24.0-sources.jar"
},
{
"coord": "io.opentracing.contrib:opentracing-grpc:0.2.1",
@@ -5672,14 +7864,13 @@
{
"coord": "io.perfmark:perfmark-api:0.19.0",
"dependencies": [
- "com.google.errorprone:error_prone_annotations:2.3.3",
"com.google.code.findbugs:jsr305:3.0.2"
],
"directDependencies": [
- "com.google.code.findbugs:jsr305:3.0.2",
- "com.google.errorprone:error_prone_annotations:2.3.3"
+ "com.google.code.findbugs:jsr305:3.0.2"
],
"exclusions": [
+ "com.google.errorprone:error_prone_annotations",
"com.google.template:soy",
"com.google.common.html.types:types"
],
@@ -5696,14 +7887,13 @@
{
"coord": "io.perfmark:perfmark-api:jar:sources:0.19.0",
"dependencies": [
- "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
- "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3"
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2"
],
"directDependencies": [
- "com.google.code.findbugs:jsr305:jar:sources:3.0.2",
- "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3"
+ "com.google.code.findbugs:jsr305:jar:sources:3.0.2"
],
"exclusions": [
+ "com.google.errorprone:error_prone_annotations",
"com.google.template:soy",
"com.google.common.html.types:types"
],
@@ -5727,7 +7917,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/projectreactor/reactor-core/3.2.8.RELEASE/reactor-core-3.2.8.RELEASE.jar",
"mirror_urls": [
@@ -5749,7 +7945,13 @@
],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/io/projectreactor/reactor-core/3.2.8.RELEASE/reactor-core-3.2.8.RELEASE-sources.jar",
"mirror_urls": [
@@ -5847,7 +8049,13 @@
"directDependencies": [],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/javax/inject/javax.inject/1/javax.inject-1.jar",
"mirror_urls": [
@@ -5883,7 +8091,13 @@
"directDependencies": [],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/javax/validation/validation-api/2.0.1.Final/validation-api-2.0.1.Final.jar",
"mirror_urls": [
@@ -5985,6 +8199,178 @@
"sha256": "c121d8e70010092bafc56f358e7259ac484653db595aafea1e67a040f51aea66",
"url": "https://jcenter.bintray.com/org/apache/commons/commons-exec/1.3/commons-exec-1.3-sources.jar"
},
+ {
+ "coord": "org.apache.commons:commons-lang3:3.5",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/apache/commons/commons-lang3/3.5/commons-lang3-3.5.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/apache/commons/commons-lang3/3.5/commons-lang3-3.5.jar",
+ "https://maven.google.com/org/apache/commons/commons-lang3/3.5/commons-lang3-3.5.jar",
+ "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.5/commons-lang3-3.5.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/apache/commons/commons-lang3/3.5/commons-lang3-3.5.jar"
+ ],
+ "sha256": "8ac96fc686512d777fca85e144f196cd7cfe0c0aec23127229497d1a38ff651c",
+ "url": "https://jcenter.bintray.com/org/apache/commons/commons-lang3/3.5/commons-lang3-3.5.jar"
+ },
+ {
+ "coord": "org.apache.commons:commons-lang3:jar:sources:3.5",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/apache/commons/commons-lang3/3.5/commons-lang3-3.5-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/apache/commons/commons-lang3/3.5/commons-lang3-3.5-sources.jar",
+ "https://maven.google.com/org/apache/commons/commons-lang3/3.5/commons-lang3-3.5-sources.jar",
+ "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.5/commons-lang3-3.5-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/apache/commons/commons-lang3/3.5/commons-lang3-3.5-sources.jar"
+ ],
+ "sha256": "1f7adeee4d483a6ca8d479d522cb2b07e39d976b758f3c2b6e1a0fed20dcbd2d",
+ "url": "https://jcenter.bintray.com/org/apache/commons/commons-lang3/3.5/commons-lang3-3.5-sources.jar"
+ },
+ {
+ "coord": "org.apache.httpcomponents:httpclient:4.5.11",
+ "dependencies": [
+ "org.apache.httpcomponents:httpcore:4.4.13",
+ "commons-logging:commons-logging:1.2",
+ "commons-codec:commons-codec:1.11"
+ ],
+ "directDependencies": [
+ "commons-codec:commons-codec:1.11",
+ "commons-logging:commons-logging:1.2",
+ "org.apache.httpcomponents:httpcore:4.4.13"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/apache/httpcomponents/httpclient/4.5.11/httpclient-4.5.11.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/apache/httpcomponents/httpclient/4.5.11/httpclient-4.5.11.jar",
+ "https://maven.google.com/org/apache/httpcomponents/httpclient/4.5.11/httpclient-4.5.11.jar",
+ "https://repo1.maven.org/maven2/org/apache/httpcomponents/httpclient/4.5.11/httpclient-4.5.11.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/apache/httpcomponents/httpclient/4.5.11/httpclient-4.5.11.jar"
+ ],
+ "sha256": "1420aabd81fd0bb9a0acf6d3bc03dddc1b6f3398914cfd03c70e44ce69f290a4",
+ "url": "https://jcenter.bintray.com/org/apache/httpcomponents/httpclient/4.5.11/httpclient-4.5.11.jar"
+ },
+ {
+ "coord": "org.apache.httpcomponents:httpclient:jar:sources:4.5.11",
+ "dependencies": [
+ "org.apache.httpcomponents:httpcore:jar:sources:4.4.13",
+ "commons-codec:commons-codec:jar:sources:1.11",
+ "commons-logging:commons-logging:jar:sources:1.2"
+ ],
+ "directDependencies": [
+ "commons-codec:commons-codec:jar:sources:1.11",
+ "commons-logging:commons-logging:jar:sources:1.2",
+ "org.apache.httpcomponents:httpcore:jar:sources:4.4.13"
+ ],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/apache/httpcomponents/httpclient/4.5.11/httpclient-4.5.11-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/apache/httpcomponents/httpclient/4.5.11/httpclient-4.5.11-sources.jar",
+ "https://maven.google.com/org/apache/httpcomponents/httpclient/4.5.11/httpclient-4.5.11-sources.jar",
+ "https://repo1.maven.org/maven2/org/apache/httpcomponents/httpclient/4.5.11/httpclient-4.5.11-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/apache/httpcomponents/httpclient/4.5.11/httpclient-4.5.11-sources.jar"
+ ],
+ "sha256": "947af9eca4e3ca2dbed551eecd553e874575af616c024a0d9eda92c5aefe3631",
+ "url": "https://jcenter.bintray.com/org/apache/httpcomponents/httpclient/4.5.11/httpclient-4.5.11-sources.jar"
+ },
+ {
+ "coord": "org.apache.httpcomponents:httpcore:4.4.13",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/apache/httpcomponents/httpcore/4.4.13/httpcore-4.4.13.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/apache/httpcomponents/httpcore/4.4.13/httpcore-4.4.13.jar",
+ "https://maven.google.com/org/apache/httpcomponents/httpcore/4.4.13/httpcore-4.4.13.jar",
+ "https://repo1.maven.org/maven2/org/apache/httpcomponents/httpcore/4.4.13/httpcore-4.4.13.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/apache/httpcomponents/httpcore/4.4.13/httpcore-4.4.13.jar"
+ ],
+ "sha256": "e06e89d40943245fcfa39ec537cdbfce3762aecde8f9c597780d2b00c2b43424",
+ "url": "https://jcenter.bintray.com/org/apache/httpcomponents/httpcore/4.4.13/httpcore-4.4.13.jar"
+ },
+ {
+ "coord": "org.apache.httpcomponents:httpcore:jar:sources:4.4.13",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/apache/httpcomponents/httpcore/4.4.13/httpcore-4.4.13-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/apache/httpcomponents/httpcore/4.4.13/httpcore-4.4.13-sources.jar",
+ "https://maven.google.com/org/apache/httpcomponents/httpcore/4.4.13/httpcore-4.4.13-sources.jar",
+ "https://repo1.maven.org/maven2/org/apache/httpcomponents/httpcore/4.4.13/httpcore-4.4.13-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/apache/httpcomponents/httpcore/4.4.13/httpcore-4.4.13-sources.jar"
+ ],
+ "sha256": "c0418a6ee8c32e9de37e4ba515e9562a2acc6a36b684b618fee56d41b81ef2a9",
+ "url": "https://jcenter.bintray.com/org/apache/httpcomponents/httpcore/4.4.13/httpcore-4.4.13-sources.jar"
+ },
{
"coord": "org.apiguardian:apiguardian-api:1.0.0",
"dependencies": [],
@@ -6093,6 +8479,58 @@
"sha256": "ee078a91bf7136ee1961abd612b54d1cd9877352b960a7e1e7e3e4c17ceafcf1",
"url": "https://jcenter.bintray.com/org/codehaus/mojo/animal-sniffer-annotations/1.18/animal-sniffer-annotations-1.18-sources.jar"
},
+ {
+ "coord": "org.conscrypt:conscrypt-openjdk-uber:2.2.1",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/conscrypt/conscrypt-openjdk-uber/2.2.1/conscrypt-openjdk-uber-2.2.1.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/conscrypt/conscrypt-openjdk-uber/2.2.1/conscrypt-openjdk-uber-2.2.1.jar",
+ "https://maven.google.com/org/conscrypt/conscrypt-openjdk-uber/2.2.1/conscrypt-openjdk-uber-2.2.1.jar",
+ "https://repo1.maven.org/maven2/org/conscrypt/conscrypt-openjdk-uber/2.2.1/conscrypt-openjdk-uber-2.2.1.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/conscrypt/conscrypt-openjdk-uber/2.2.1/conscrypt-openjdk-uber-2.2.1.jar"
+ ],
+ "sha256": "27f4314bf01e5af288ade537f06cb6eb7f0c760aed4a8d7cf441de71de0a7abb",
+ "url": "https://jcenter.bintray.com/org/conscrypt/conscrypt-openjdk-uber/2.2.1/conscrypt-openjdk-uber-2.2.1.jar"
+ },
+ {
+ "coord": "org.conscrypt:conscrypt-openjdk-uber:jar:sources:2.2.1",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/conscrypt/conscrypt-openjdk-uber/2.2.1/conscrypt-openjdk-uber-2.2.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/conscrypt/conscrypt-openjdk-uber/2.2.1/conscrypt-openjdk-uber-2.2.1-sources.jar",
+ "https://maven.google.com/org/conscrypt/conscrypt-openjdk-uber/2.2.1/conscrypt-openjdk-uber-2.2.1-sources.jar",
+ "https://repo1.maven.org/maven2/org/conscrypt/conscrypt-openjdk-uber/2.2.1/conscrypt-openjdk-uber-2.2.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/conscrypt/conscrypt-openjdk-uber/2.2.1/conscrypt-openjdk-uber-2.2.1-sources.jar"
+ ],
+ "sha256": "02571b4657cdd54967dadb046247c591760e8f62839deb721e482f0a367f43ec",
+ "url": "https://jcenter.bintray.com/org/conscrypt/conscrypt-openjdk-uber/2.2.1/conscrypt-openjdk-uber-2.2.1-sources.jar"
+ },
{
"coord": "org.eclipse.jgit:org.eclipse.jgit:4.4.1.201607150455-r",
"dependencies": [],
@@ -6797,7 +9235,13 @@
"directDependencies": [],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3-sources.jar",
"mirror_urls": [
@@ -6853,9 +9297,9 @@
"com.squareup.okio:okio:1.14.0",
"org.codehaus.mojo:animal-sniffer-annotations:1.18",
"com.google.j2objc:j2objc-annotations:1.3",
- "com.google.errorprone:error_prone_annotations:2.3.3",
"com.google.code.findbugs:jsr305:3.0.2",
"org.seleniumhq.selenium:selenium-api:3.141.59",
+ "com.google.errorprone:error_prone_annotations:2.3.4",
"com.squareup.okhttp3:okhttp:3.11.0",
"com.google.guava:failureaccess:1.0.1",
"net.bytebuddy:byte-buddy:1.8.15",
@@ -6890,11 +9334,11 @@
"org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18",
"com.google.code.findbugs:jsr305:jar:sources:3.0.2",
"com.google.j2objc:j2objc-annotations:jar:sources:1.3",
+ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4",
"org.seleniumhq.selenium:selenium-api:jar:sources:3.141.59",
"net.bytebuddy:byte-buddy:jar:sources:1.8.15",
"org.apache.commons:commons-exec:jar:sources:1.3",
"com.squareup.okhttp3:okhttp:jar:sources:3.11.0",
- "com.google.errorprone:error_prone_annotations:jar:sources:2.3.3",
"org.checkerframework:checker-compat-qual:jar:sources:2.5.5",
"com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
"com.google.guava:guava:jar:sources:28.1-android",
@@ -7003,13 +9447,71 @@
"sha256": "ba5565b6d633b56d72d0e72250eb316fbffb24912fd696548847b90ab16537e2",
"url": "https://jcenter.bintray.com/org/slf4j/slf4j-jdk14/1.7.26/slf4j-jdk14-1.7.26-sources.jar"
},
+ {
+ "coord": "org.threeten:threetenbp:1.4.1",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/threeten/threetenbp/1.4.1/threetenbp-1.4.1.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/threeten/threetenbp/1.4.1/threetenbp-1.4.1.jar",
+ "https://maven.google.com/org/threeten/threetenbp/1.4.1/threetenbp-1.4.1.jar",
+ "https://repo1.maven.org/maven2/org/threeten/threetenbp/1.4.1/threetenbp-1.4.1.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/threeten/threetenbp/1.4.1/threetenbp-1.4.1.jar"
+ ],
+ "sha256": "6cb8bd0b9db3b2184ca68f407d1553ebba078e3d4c875341f28f153c7971267d",
+ "url": "https://jcenter.bintray.com/org/threeten/threetenbp/1.4.1/threetenbp-1.4.1.jar"
+ },
+ {
+ "coord": "org.threeten:threetenbp:jar:sources:1.4.1",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": "v1/https/jcenter.bintray.com/org/threeten/threetenbp/1.4.1/threetenbp-1.4.1-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/org/threeten/threetenbp/1.4.1/threetenbp-1.4.1-sources.jar",
+ "https://maven.google.com/org/threeten/threetenbp/1.4.1/threetenbp-1.4.1-sources.jar",
+ "https://repo1.maven.org/maven2/org/threeten/threetenbp/1.4.1/threetenbp-1.4.1-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/org/threeten/threetenbp/1.4.1/threetenbp-1.4.1-sources.jar"
+ ],
+ "sha256": "2c8ed98691fa8631a6c89d490ddf8e1434ba729429922083b02c5e6c2f5235df",
+ "url": "https://jcenter.bintray.com/org/threeten/threetenbp/1.4.1/threetenbp-1.4.1-sources.jar"
+ },
{
"coord": "org.yaml:snakeyaml:1.24",
"dependencies": [],
"directDependencies": [],
"exclusions": [
"com.google.template:soy",
- "com.google.common.html.types:types"
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
],
"file": "v1/https/jcenter.bintray.com/org/yaml/snakeyaml/1.24/snakeyaml-1.24.jar",
"mirror_urls": [
@@ -7039,6 +9541,42 @@
"sha256": "2ca4a62e017fb92f4ddd57692a71dfe2be23a2482bf0bd8b6821a08506fe04fe",
"url": "https://jcenter.bintray.com/org/yaml/snakeyaml/1.24/snakeyaml-1.24-sources.jar"
},
+ {
+ "coord": "com.google.cloud:libraries-bom:3.4.0",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": null
+ },
+ {
+ "coord": "com.google.cloud:libraries-bom:jar:sources:3.4.0",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.guava:guava",
+ "com.google.template:soy",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-services",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-auth",
+ "com.google.protobuf:protobuf-java",
+ "io.grpc:grpc-stub",
+ "com.google.common.html.types:types",
+ "io.grpc:grpc-core"
+ ],
+ "file": null
+ },
{
"coord": "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava",
"dependencies": [],
From df4f84d6f82ac5fbce241554c8dae9ff0578988d Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Wed, 26 Feb 2020 16:32:43 -0800
Subject: [PATCH 010/103] Further gRPC support in Todolist
- Add support for reflection service
- Make service / interceptor simple passthroughs
---
samples/BUILD.bazel | 3 +++
samples/todolist/src/BUILD.bazel | 15 +++++++++++++
samples/todolist/src/application.yml | 2 +-
.../todolist/src/server/ReflectionService.kt | 21 +++++++++++++++++++
samples/todolist/src/server/TasksService.kt | 3 ++-
.../src/server/TodolistInterceptor.kt | 2 +-
6 files changed, 43 insertions(+), 3 deletions(-)
create mode 100644 samples/todolist/src/server/ReflectionService.kt
diff --git a/samples/BUILD.bazel b/samples/BUILD.bazel
index e69de29bb..f3490d58e 100644
--- a/samples/BUILD.bazel
+++ b/samples/BUILD.bazel
@@ -0,0 +1,3 @@
+package(
+ default_visibility = ["//visibility:public"],
+)
\ No newline at end of file
diff --git a/samples/todolist/src/BUILD.bazel b/samples/todolist/src/BUILD.bazel
index 4f6fe790a..485d7ac66 100644
--- a/samples/todolist/src/BUILD.bazel
+++ b/samples/todolist/src/BUILD.bazel
@@ -12,6 +12,11 @@ load(
"ssr_library",
)
+load(
+ "@gust//defs/toolchain:deps.bzl",
+ "maven",
+)
+
load(
"@gust//defs/toolchain:backend.bzl",
"micronaut_library",
@@ -60,6 +65,15 @@ micronaut_interceptor(
srcs = ["server/TodolistInterceptor.kt"],
)
+micronaut_library(
+ name = "ReflectionService",
+ srcs = ["server/ReflectionService.kt"],
+ deps = [
+ maven("io.grpc:grpc-api"),
+ maven("io.grpc:grpc-services"),
+ ],
+)
+
micronaut_library(
name = "TodolistLogic",
srcs = ["server/TodolistLogic.kt"],
@@ -97,6 +111,7 @@ micronaut_application(
services = [
":TasksService",
+ ":ReflectionService",
],
# -- Publishing / Images -- #
diff --git a/samples/todolist/src/application.yml b/samples/todolist/src/application.yml
index cdb9f5b3a..d8e1d0e25 100644
--- a/samples/todolist/src/application.yml
+++ b/samples/todolist/src/application.yml
@@ -80,7 +80,7 @@ micronaut:
grpc:
server:
- port: 8443
+ port: 8081
keep-alive-time: 1h
client:
diff --git a/samples/todolist/src/server/ReflectionService.kt b/samples/todolist/src/server/ReflectionService.kt
new file mode 100644
index 000000000..8939fa461
--- /dev/null
+++ b/samples/todolist/src/server/ReflectionService.kt
@@ -0,0 +1,21 @@
+package server
+
+import io.grpc.ServerBuilder
+import io.grpc.protobuf.services.ProtoReflectionService
+import io.micronaut.context.event.BeanCreatedEvent
+import io.micronaut.context.event.BeanCreatedEventListener
+import javax.inject.Singleton
+
+
+/**
+ * Observes for a [ServerBuilder] to be created in the bean context, and when it is, it mounts the built-in
+ * [ProtoReflectionService] so that we may use the gRPC CLI and other tools.
+ */
+@Singleton
+class ReflectionService: BeanCreatedEventListener> {
+ override fun onCreated(event: BeanCreatedEvent>): ServerBuilder<*> {
+ // skip `TasksService`/`TodolistInterceptor` - they are installed by default
+ // because they are members of the bean context.
+ return event.bean.addService(ProtoReflectionService.newInstance())
+ }
+}
diff --git a/samples/todolist/src/server/TasksService.kt b/samples/todolist/src/server/TasksService.kt
index b1c98df03..3b39e59d0 100644
--- a/samples/todolist/src/server/TasksService.kt
+++ b/samples/todolist/src/server/TasksService.kt
@@ -43,6 +43,7 @@ class TasksService: TasksGrpc.TasksImplBase() {
* @param observer Observer for responses or errors which should be relayed back to the invoking client.
*/
override fun health(request: Empty, observer: StreamObserver) {
- TODO("not yet implemented")
+ observer.onNext(Empty.getDefaultInstance())
+ observer.onCompleted()
}
}
diff --git a/samples/todolist/src/server/TodolistInterceptor.kt b/samples/todolist/src/server/TodolistInterceptor.kt
index 9b56ad074..419007de1 100644
--- a/samples/todolist/src/server/TodolistInterceptor.kt
+++ b/samples/todolist/src/server/TodolistInterceptor.kt
@@ -45,6 +45,6 @@ class TodolistInterceptor: ServerInterceptor {
metadata: Metadata,
handler: ServerCallHandler):
ServerCall.Listener {
- TODO("not yet implemented")
+ return handler.startCall(call, metadata)
}
}
From 181c10aa7127bf699903e856ba6c5fe0c4f789b0 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Wed, 26 Feb 2020 16:33:42 -0800
Subject: [PATCH 011/103] New todolist port arrangement
- Run app on :8081
- Run API on :8082
---
samples/todolist/src/application.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/samples/todolist/src/application.yml b/samples/todolist/src/application.yml
index d8e1d0e25..febe41c43 100644
--- a/samples/todolist/src/application.yml
+++ b/samples/todolist/src/application.yml
@@ -6,7 +6,7 @@ micronaut:
server:
maxRequestSize: 10MB
host: 0.0.0.0
- port: 8080
+ port: 8081
cors:
enabled: false
netty:
@@ -80,7 +80,7 @@ micronaut:
grpc:
server:
- port: 8081
+ port: 8082
keep-alive-time: 1h
client:
From a22d045d171c42f963bc3e3c0c10b99e4b380b03 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Wed, 26 Feb 2020 16:47:36 -0800
Subject: [PATCH 012/103] Add Todolist sample to cloudbuild config
---
.develop/cloudbuild.yml | 1 +
cloudbuild.yaml | 14 ++++++++++++++
2 files changed, 15 insertions(+)
create mode 120000 .develop/cloudbuild.yml
diff --git a/.develop/cloudbuild.yml b/.develop/cloudbuild.yml
new file mode 120000
index 000000000..4c52c11e4
--- /dev/null
+++ b/.develop/cloudbuild.yml
@@ -0,0 +1 @@
+../cloudbuild.yaml
\ No newline at end of file
diff --git a/cloudbuild.yaml b/cloudbuild.yaml
index 9580f9c11..f5d3e7bf1 100644
--- a/cloudbuild.yaml
+++ b/cloudbuild.yaml
@@ -1,5 +1,7 @@
steps:
+
+# Remote build: Gust Framework
- name: 'l.gcr.io/google/bazel'
args:
- --bazelrc=.bazelrc
@@ -9,7 +11,19 @@ steps:
- --
- //gust/...
+# Image build: Todolist App
+- name: 'l.gcr.io/google/bazel'
+ args:
+ - --bazelrc=.bazelrc
+ - run
+ - --config=remote
+ - --remote_instance_name=projects/bloom-sandbox/instances/default_instance
+ - --
+ - //samples/todolist/src:TodolistServer-image-push
+
timeout: 30m
options:
machineType: "N1_HIGHCPU_32"
+images:
+ - us.gcr.io/elide-tools/sample/todolist/jvm
From f58af784b10b3990c8f685828c10146f91a460e1 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Wed, 26 Feb 2020 17:08:34 -0800
Subject: [PATCH 013/103] Eliminate remote build in GCB
---
cloudbuild.yaml | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/cloudbuild.yaml b/cloudbuild.yaml
index f5d3e7bf1..8e90644bd 100644
--- a/cloudbuild.yaml
+++ b/cloudbuild.yaml
@@ -6,8 +6,7 @@ steps:
args:
- --bazelrc=.bazelrc
- build
- - --config=remote
- - --remote_instance_name=projects/bloom-sandbox/instances/default_instance
+ - --config=ci
- --
- //gust/...
@@ -16,8 +15,7 @@ steps:
args:
- --bazelrc=.bazelrc
- run
- - --config=remote
- - --remote_instance_name=projects/bloom-sandbox/instances/default_instance
+ - --config=ci
- --
- //samples/todolist/src:TodolistServer-image-push
From 6d6198933b3565da21e2d4db4e4c3ed242754e0c Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Wed, 26 Feb 2020 17:15:16 -0800
Subject: [PATCH 014/103] Adjust build stamp to fallback to COMMIT_SHA variable
---
tools/bazel_stamp_vars.sh | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/tools/bazel_stamp_vars.sh b/tools/bazel_stamp_vars.sh
index cc67fd470..115592c79 100755
--- a/tools/bazel_stamp_vars.sh
+++ b/tools/bazel_stamp_vars.sh
@@ -1,4 +1,4 @@
#!/usr/bin/env bash
-echo BUILD_SCM_REVISION $(git rev-parse --short HEAD)
-echo BUILD_SCM_VERSION $(git describe --abbrev=7 --always --tags HEAD)
-echo BUILD_GUST_VERSION $(cat package.json | grep version | head -1 | awk -F: '{ print $2 }' | sed 's/[",]//g' | tr -d '[[:space:]]')
+echo BUILD_SCM_REVISION $(git rev-parse --short HEAD) || $SHORT_SHA
+echo BUILD_SCM_VERSION $(git describe --abbrev=7 --always --tags HEAD) || $SHORT_SHA
+echo BUILD_GUST_VERSION $(cat package.json | grep version | head -1 | awk -F: '{ print $2 }' | sed 's/[",]//g' | tr -d '[[:space:]]') || $SHORT_SHA
From 67b3ee7dbddc99eed8fc25bde119fe5f20d758fd Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Wed, 26 Feb 2020 17:25:07 -0800
Subject: [PATCH 015/103] Apply fix for image tag in GCB
---
cloudbuild.yaml | 3 ++-
samples/todolist/src/BUILD.bazel | 1 +
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/cloudbuild.yaml b/cloudbuild.yaml
index 8e90644bd..4471e7412 100644
--- a/cloudbuild.yaml
+++ b/cloudbuild.yaml
@@ -16,12 +16,13 @@ steps:
- --bazelrc=.bazelrc
- run
- --config=ci
+ - --define=todolist_release_tag=$SHORT_SHA
- --
- //samples/todolist/src:TodolistServer-image-push
timeout: 30m
options:
- machineType: "N1_HIGHCPU_32"
+ machineType: "N1_HIGHCPU_8"
images:
- us.gcr.io/elide-tools/sample/todolist/jvm
diff --git a/samples/todolist/src/BUILD.bazel b/samples/todolist/src/BUILD.bazel
index 485d7ac66..ac28f7232 100644
--- a/samples/todolist/src/BUILD.bazel
+++ b/samples/todolist/src/BUILD.bazel
@@ -116,6 +116,7 @@ micronaut_application(
# -- Publishing / Images -- #
native = False,
+ tag = "$(todolist_release_tag)",
repository = "elide-tools/sample/todolist/jvm",
native_repository = "elide-tools/sample/todolist/native",
reflection_configuration = ":reflection.json",
From 65d69644957d736ce26d32592c0d5db99545aa05 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Wed, 26 Feb 2020 17:26:02 -0800
Subject: [PATCH 016/103] Add K8S rules dependency
---
WORKSPACE | 7 +++++++
defs/build.bzl | 7 +++++++
2 files changed, 14 insertions(+)
diff --git a/WORKSPACE b/WORKSPACE
index ab7389894..9cf810756 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -190,6 +190,13 @@ grpc_java_repositories()
load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps")
protobuf_deps()
+## Kubernetes/Bazel
+load("@io_bazel_rules_k8s//k8s:k8s.bzl", "k8s_repositories")
+k8s_repositories()
+
+load("@io_bazel_rules_k8s//k8s:k8s_go_deps.bzl", k8s_go_deps = "deps")
+k8s_go_deps()
+
## Java Containers
load("@io_bazel_rules_docker//container:container.bzl", "container_pull")
diff --git a/defs/build.bzl b/defs/build.bzl
index bf7c91c79..3524a6d1d 100644
--- a/defs/build.bzl
+++ b/defs/build.bzl
@@ -134,6 +134,13 @@ DEPS = {
"target": "e3ccf5006e17b83f2bab0f9764396dabb337172e",
"seal": "3e9559277c0e990f9043aa7a6fb817fedf0c3fe77b582d386015bd9e4c52b506"},
+ # Rules: Kubernetes
+ "io_bazel_rules_k8s": {
+ "type": "github",
+ "repo": "bazelbuild/rules_k8s",
+ "target": "0a9e6d75ca7e544a2fc3c6d770db01ba930d7f20",
+ "seal": "c114b47a1a3f07fb70b4017912bffa049c0189369410f6ce6d6f39c60c67f79b"},
+
# Google: Protobuf
"com_google_protobuf": {
"type": "github",
From 77ad19526eed98d5fc7d96f74286ddb3eac9f385 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Wed, 26 Feb 2020 17:59:14 -0800
Subject: [PATCH 017/103] Further adjustments to GCB config
---
cloudbuild.yaml | 20 +++++++++++++++-----
1 file changed, 15 insertions(+), 5 deletions(-)
diff --git a/cloudbuild.yaml b/cloudbuild.yaml
index 4471e7412..3dcc28b09 100644
--- a/cloudbuild.yaml
+++ b/cloudbuild.yaml
@@ -1,7 +1,7 @@
steps:
-# Remote build: Gust Framework
+# Build: Gust Framework
- name: 'l.gcr.io/google/bazel'
args:
- --bazelrc=.bazelrc
@@ -18,11 +18,21 @@ steps:
- --config=ci
- --define=todolist_release_tag=$SHORT_SHA
- --
+ - //samples/todolist/src:TodolistServer_deploy.jar
- //samples/todolist/src:TodolistServer-image-push
-timeout: 30m
-options:
- machineType: "N1_HIGHCPU_8"
+timeout: 10m
images:
- - us.gcr.io/elide-tools/sample/todolist/jvm
+ - us.gcr.io/elide-tools/sample/todolist/jvm:$SHORT_SHA
+
+artifacts:
+ objects:
+ location: 'gs://elide-artifacts/'
+ paths: ['dist/bin/samples/todolist/src/TodolistServer_deploy.jar']
+
+tags: ['framework', 'tools', 'gust']
+
+options:
+ machineType: "N1_HIGHCPU_8"
+ sourceProvenanceHash: ['SHA256']
From 2a2ed11cc70c6f5c827c72cad7e6e069f7ea2086 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Wed, 26 Feb 2020 18:08:12 -0800
Subject: [PATCH 018/103] Fix misplaced deploy jar target
---
cloudbuild.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cloudbuild.yaml b/cloudbuild.yaml
index 3dcc28b09..9a89e6e35 100644
--- a/cloudbuild.yaml
+++ b/cloudbuild.yaml
@@ -8,6 +8,7 @@ steps:
- build
- --config=ci
- --
+ - //samples/todolist/src:TodolistServer_deploy.jar
- //gust/...
# Image build: Todolist App
@@ -18,7 +19,6 @@ steps:
- --config=ci
- --define=todolist_release_tag=$SHORT_SHA
- --
- - //samples/todolist/src:TodolistServer_deploy.jar
- //samples/todolist/src:TodolistServer-image-push
timeout: 10m
From 096e600d95715158fe0560ecfbe782e8e7f0bd13 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Wed, 26 Feb 2020 18:21:38 -0800
Subject: [PATCH 019/103] Pull and tag latest todolist image on build
---
cloudbuild.yaml | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/cloudbuild.yaml b/cloudbuild.yaml
index 9a89e6e35..10820fab7 100644
--- a/cloudbuild.yaml
+++ b/cloudbuild.yaml
@@ -21,10 +21,21 @@ steps:
- --
- //samples/todolist/src:TodolistServer-image-push
-timeout: 10m
+# Image pull: Built App
+- name: 'gcr.io/cloud-builders/docker'
+ args: ['pull', "us.gcr.io/elide-tools/sample/todolist/jvm:$SHORT_SHA"]
+
+# Image tag: Latest
+- name: 'gcr.io/cloud-builders/docker'
+ args: ['tag', 'us.gcr.io/elide-tools/sample/todolist/jvm:$SHORT_SHA', 'us.gcr.io/elide-tools/sample/todolist/jvm:latest']
+
+# Image push: Latest
+- name: 'gcr.io/cloud-builders/docker'
+ args: ['push', 'us.gcr.io/elide-tools/sample/todolist/jvm:latest']
images:
- us.gcr.io/elide-tools/sample/todolist/jvm:$SHORT_SHA
+ - us.gcr.io/elide-tools/sample/todolist/jvm:latest
artifacts:
objects:
@@ -33,6 +44,7 @@ artifacts:
tags: ['framework', 'tools', 'gust']
+timeout: 10m
options:
machineType: "N1_HIGHCPU_8"
sourceProvenanceHash: ['SHA256']
From 412a4284d71b37936f5a4909ad39c0b3e18e32b4 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Wed, 26 Feb 2020 18:21:47 -0800
Subject: [PATCH 020/103] Add initial ambassador config
---
samples/todolist/src/config/BUILD.bazel | 9 +++++++++
samples/todolist/src/config/ambassador.yml | 17 +++++++++++++++++
2 files changed, 26 insertions(+)
create mode 100644 samples/todolist/src/config/BUILD.bazel
create mode 100644 samples/todolist/src/config/ambassador.yml
diff --git a/samples/todolist/src/config/BUILD.bazel b/samples/todolist/src/config/BUILD.bazel
new file mode 100644
index 000000000..2847eb7cf
--- /dev/null
+++ b/samples/todolist/src/config/BUILD.bazel
@@ -0,0 +1,9 @@
+package(
+ default_visibility = ["//visibility:public"],
+)
+
+
+filegroup(
+ name = "ambassador-config",
+ srcs = ["ambassador.yml"],
+)
diff --git a/samples/todolist/src/config/ambassador.yml b/samples/todolist/src/config/ambassador.yml
new file mode 100644
index 000000000..6aee304eb
--- /dev/null
+++ b/samples/todolist/src/config/ambassador.yml
@@ -0,0 +1,17 @@
+apiVersion: getambassador.io/v2
+kind: Mapping
+metadata:
+ name: grpc-py
+ annotations:
+ getambassador.io/config: |
+ ---
+ apiVersion: getambassador.io/v2
+ kind: Module
+ name: ambassador
+ config:
+ enable_grpc_web: True
+spec:
+ grpc: True
+ prefix: /todolist.Tasks/
+ rewrite: /todolist.Tasks/
+ service: tasks
From 0c0abb6eb6085221a4dc663f1ca6c223c4eb84b7 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Wed, 26 Feb 2020 19:21:13 -0800
Subject: [PATCH 021/103] Remove failing build artifact upload in GCB
---
cloudbuild.yaml | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/cloudbuild.yaml b/cloudbuild.yaml
index 10820fab7..cce83ab5b 100644
--- a/cloudbuild.yaml
+++ b/cloudbuild.yaml
@@ -3,16 +3,17 @@ steps:
# Build: Gust Framework
- name: 'l.gcr.io/google/bazel'
+ id: build
args:
- --bazelrc=.bazelrc
- build
- --config=ci
- --
- - //samples/todolist/src:TodolistServer_deploy.jar
- //gust/...
# Image build: Todolist App
- name: 'l.gcr.io/google/bazel'
+ id: todolist
args:
- --bazelrc=.bazelrc
- run
@@ -23,25 +24,23 @@ steps:
# Image pull: Built App
- name: 'gcr.io/cloud-builders/docker'
+ id: pull
args: ['pull', "us.gcr.io/elide-tools/sample/todolist/jvm:$SHORT_SHA"]
# Image tag: Latest
- name: 'gcr.io/cloud-builders/docker'
+ id: tag
args: ['tag', 'us.gcr.io/elide-tools/sample/todolist/jvm:$SHORT_SHA', 'us.gcr.io/elide-tools/sample/todolist/jvm:latest']
# Image push: Latest
- name: 'gcr.io/cloud-builders/docker'
+ id: push
args: ['push', 'us.gcr.io/elide-tools/sample/todolist/jvm:latest']
images:
- us.gcr.io/elide-tools/sample/todolist/jvm:$SHORT_SHA
- us.gcr.io/elide-tools/sample/todolist/jvm:latest
-artifacts:
- objects:
- location: 'gs://elide-artifacts/'
- paths: ['dist/bin/samples/todolist/src/TodolistServer_deploy.jar']
-
tags: ['framework', 'tools', 'gust']
timeout: 10m
From 7ae86bc6ea365c7089bf22b051ae7bda0df01df5 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Wed, 26 Feb 2020 19:51:41 -0800
Subject: [PATCH 022/103] Add initial test for PageContext
---
.ijwb/.bazelproject | 1 +
javatests/BUILD.bazel | 1 +
javatests/gust/backend/BUILD.bazel | 26 ++++++++++++------
javatests/gust/backend/PageContextTest.java | 29 +++++++++++++++++++++
4 files changed, 49 insertions(+), 8 deletions(-)
create mode 100644 javatests/gust/backend/PageContextTest.java
diff --git a/.ijwb/.bazelproject b/.ijwb/.bazelproject
index 4cc7ebfec..d4e087022 100644
--- a/.ijwb/.bazelproject
+++ b/.ijwb/.bazelproject
@@ -2,6 +2,7 @@ import .bazelproject
build_flags:
--config=dev
+ --define=todolist_release_tag=latest
directories:
defs
diff --git a/javatests/BUILD.bazel b/javatests/BUILD.bazel
index 25795504d..647532034 100644
--- a/javatests/BUILD.bazel
+++ b/javatests/BUILD.bazel
@@ -10,6 +10,7 @@ test_suite(
"//javatests/gust:DualStackTest",
"//javatests/gust/backend:ApplicationTest",
"//javatests/gust/backend:NoConfigTest",
+ "//javatests/gust/backend:PageContextTest",
"//javatests/gust/backend:TemplateProviderTest",
],
)
diff --git a/javatests/gust/backend/BUILD.bazel b/javatests/gust/backend/BUILD.bazel
index 6922264a9..52c3c381f 100644
--- a/javatests/gust/backend/BUILD.bazel
+++ b/javatests/gust/backend/BUILD.bazel
@@ -21,19 +21,29 @@ jdk_test(
],
)
+jdk_test(
+ name = "NoConfigTest",
+ srcs = ["NoConfigTest.java"],
+ deps = ["//java/gust/backend:Application"],
+ test_class = "javatests.gust.backend.NoConfigTest",
+ testonly = True,
+)
jdk_test(
- name = "TemplateProviderTest",
- srcs = ["TemplateProviderTest.java"],
- deps = ["//java/gust/backend:TemplateProvider"],
- test_class = "javatests.gust.backend.TemplateProviderTest",
+ name = "PageContextTest",
+ srcs = ["PageContextTest.java"],
+ deps = [
+ "//java/gust/backend:PageContext",
+ "@com_google_guava//:com_google_guava",
+ ],
+ test_class = "javatests.gust.backend.PageContextTest",
testonly = True,
)
jdk_test(
- name = "NoConfigTest",
- srcs = ["NoConfigTest.java"],
- deps = ["//java/gust/backend:Application"],
- test_class = "javatests.gust.backend.NoConfigTest",
+ name = "TemplateProviderTest",
+ srcs = ["TemplateProviderTest.java"],
+ deps = ["//java/gust/backend:TemplateProvider"],
+ test_class = "javatests.gust.backend.TemplateProviderTest",
testonly = True,
)
diff --git a/javatests/gust/backend/PageContextTest.java b/javatests/gust/backend/PageContextTest.java
new file mode 100644
index 000000000..9b5103cd3
--- /dev/null
+++ b/javatests/gust/backend/PageContextTest.java
@@ -0,0 +1,29 @@
+package javatests.gust.backend;
+
+import com.google.common.collect.ImmutableMap;
+import gust.backend.PageContext;
+import org.junit.Test;
+
+import java.util.Collections;
+
+import static org.junit.Assert.*;
+
+
+/** Tests the {@link PageContext} class for various behavioral contracts. */
+public class PageContextTest {
+ /** Test that a simple map context works fine with {@link PageContext}. */
+ @Test
+ public void testMapContext() {
+ String hiprop = "hi";
+ PageContext ctx = PageContext.fromMap(Collections.singletonMap(hiprop, 5));
+ assertEquals("basic context property should be fetchable",
+ 5, ctx.getProperties().get(hiprop));
+
+ PageContext ctx2 = PageContext.fromMap(
+ ImmutableMap.of("hi", 10, "hey", 15));
+ assertEquals("properties should not blend between instances",
+ 10, ctx2.getProperties().get("hi"));
+ assertEquals("property map should work fine with multiple entries",
+ 15, ctx2.getProperties().get("hey"));
+ }
+}
From 17f2fc4856db3b2685cba898799c5f6b328bd0ef Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Wed, 26 Feb 2020 20:32:20 -0800
Subject: [PATCH 023/103] Improvements to page context integration
- Add extended `SoyProtoContextMediator` interface
- Add efficient empty context use
- Cover `PageContext` with tests
---
java/gust/backend/BUILD.bazel | 7 +
java/gust/backend/PageContext.java | 33 +++-
.../gust/backend/SoyProtoContextMediator.java | 25 +++
javatests/gust/backend/BUILD.bazel | 5 +-
javatests/gust/backend/PageContextTest.java | 184 +++++++++++++++++-
5 files changed, 249 insertions(+), 5 deletions(-)
create mode 100644 java/gust/backend/SoyProtoContextMediator.java
diff --git a/java/gust/backend/BUILD.bazel b/java/gust/backend/BUILD.bazel
index a40286a2b..925665bb9 100644
--- a/java/gust/backend/BUILD.bazel
+++ b/java/gust/backend/BUILD.bazel
@@ -35,9 +35,16 @@ template_library(
srcs = ["page.soy"],
)
+micronaut_library(
+ name = "SoyProtoContextMediator",
+ srcs = ["SoyProtoContextMediator.java"],
+ proto_deps = ["//gust/page:page_proto"],
+)
+
micronaut_library(
name = "PageContext",
srcs = ["PageContext.java"],
+ deps = [":SoyProtoContextMediator"],
proto_deps = ["//gust/page:page_proto"],
)
diff --git a/java/gust/backend/PageContext.java b/java/gust/backend/PageContext.java
index 798452323..6c668a826 100644
--- a/java/gust/backend/PageContext.java
+++ b/java/gust/backend/PageContext.java
@@ -2,7 +2,6 @@
import com.google.common.collect.ImmutableMap;
import io.micronaut.views.soy.SoyContext;
-import io.micronaut.views.soy.SoyContextMediator;
import io.micronaut.views.soy.SoyNamingMapProvider;
import tools.elide.page.Context;
@@ -24,10 +23,17 @@
*/
@Immutable
@SuppressWarnings("unused")
-public final class PageContext implements SoyContextMediator {
+public final class PageContext implements SoyProtoContextMediator {
/** Name at which proto-context is injected. */
private static final String CONTEXT_PROPERTY_NAME = "context";
+ /** Shared singleton instance of an empty page context. */
+ private static final PageContext _EMPTY = new PageContext(
+ Context.getDefaultInstance(),
+ null,
+ null,
+ null);
+
/** Raw context. */
private final @Nonnull SoyContext rawContext;
@@ -56,6 +62,16 @@ private PageContext(@Nullable Context proto,
// -- Factories: Maps -- //
+ /**
+ * Factory to create an empty page context. Under the hood, this uses a static singleton representing an empty context
+ * to avoid re-creating the object repeatedly.
+ *
+ * @return Pre-fabricated empty page context.
+ */
+ public static PageContext empty() {
+ return PageContext._EMPTY;
+ }
+
/**
* Factory to create a page context object from a regular Java map, of string context properties to values of any
* object type. Under the hood, this is processed and converted/wrapped into Soy values.
@@ -179,6 +195,19 @@ public static PageContext fromMap(@Nonnull Map context,
return new PageContext(pageContext, props, injected, namingMapProvider);
}
+ // -- Interface: Soy Proto Context -- //
+
+ /**
+ * Retrieve serializable server-side-rendered page context, which should be assigned to the render flow bound to this
+ * context mediator.
+ *
+ * @return Server-side rendered page context.
+ */
+ @Nonnull @Override
+ public Context getPageContext() {
+ return this.protoContext;
+ }
+
// -- Interface: Soy Context Mediation -- //
/**
diff --git a/java/gust/backend/SoyProtoContextMediator.java b/java/gust/backend/SoyProtoContextMediator.java
new file mode 100644
index 000000000..ca6ff6c8a
--- /dev/null
+++ b/java/gust/backend/SoyProtoContextMediator.java
@@ -0,0 +1,25 @@
+package gust.backend;
+
+import io.micronaut.views.soy.SoyContextMediator;
+import tools.elide.page.Context;
+
+import javax.annotation.Nonnull;
+
+
+/**
+ * Interface by which protobuf-driven Soy render context can be managed and orchestrated by a custom {@link PageContext}
+ * object. Provides the ability to specify variables for @param and @inject Soy declarations, and
+ * the ability to override objects like the {@link io.micronaut.views.soy.SoyNamingMapProvider}.
+ *
+ * @author Sam Gammon (sam@momentum.io)
+ * @see PageContext Default implementation of this interface
+ */
+public interface SoyProtoContextMediator extends SoyContextMediator {
+ /**
+ * Retrieve serializable server-side-rendered page context, which should be assigned to the render flow bound to this
+ * context mediator.
+ *
+ * @return Server-side rendered page context.
+ */
+ @Nonnull Context getPageContext();
+}
diff --git a/javatests/gust/backend/BUILD.bazel b/javatests/gust/backend/BUILD.bazel
index 52c3c381f..8ed99c1bb 100644
--- a/javatests/gust/backend/BUILD.bazel
+++ b/javatests/gust/backend/BUILD.bazel
@@ -34,7 +34,10 @@ jdk_test(
srcs = ["PageContextTest.java"],
deps = [
"//java/gust/backend:PageContext",
- "@com_google_guava//:com_google_guava",
+ "//java/gust/backend:SoyProtoContextMediator",
+ "@com_google_guava",
+ "@com_google_template_soy",
+ "@io_micronaut_micronaut_views_soy",
],
test_class = "javatests.gust.backend.PageContextTest",
testonly = True,
diff --git a/javatests/gust/backend/PageContextTest.java b/javatests/gust/backend/PageContextTest.java
index 9b5103cd3..3d20a49f3 100644
--- a/javatests/gust/backend/PageContextTest.java
+++ b/javatests/gust/backend/PageContextTest.java
@@ -1,9 +1,15 @@
package javatests.gust.backend;
import com.google.common.collect.ImmutableMap;
+import com.google.template.soy.shared.SoyCssRenamingMap;
+import com.google.template.soy.shared.SoyIdRenamingMap;
import gust.backend.PageContext;
+import gust.backend.SoyProtoContextMediator;
+import io.micronaut.views.soy.SoyNamingMapProvider;
import org.junit.Test;
+import tools.elide.page.Context;
+import javax.annotation.Nullable;
import java.util.Collections;
import static org.junit.Assert.*;
@@ -12,8 +18,7 @@
/** Tests the {@link PageContext} class for various behavioral contracts. */
public class PageContextTest {
/** Test that a simple map context works fine with {@link PageContext}. */
- @Test
- public void testMapContext() {
+ @Test public void testMapContext() {
String hiprop = "hi";
PageContext ctx = PageContext.fromMap(Collections.singletonMap(hiprop, 5));
assertEquals("basic context property should be fetchable",
@@ -26,4 +31,179 @@ public void testMapContext() {
assertEquals("property map should work fine with multiple entries",
15, ctx2.getProperties().get("hey"));
}
+
+ /** Test that a simple map, and injected props, work fine with {@link PageContext}. */
+ @Test public void testMapWithInjectedContext() {
+ PageContext ctx = PageContext.fromMap(
+ Collections.singletonMap("hi", 5),
+ Collections.singletonMap("yo", 10));
+
+ assertEquals("properties should be available through regular props, when injection is present",
+ 5, ctx.getProperties().get("hi"));
+ assertEquals("inject properties should be made available",
+ 10, ctx.getInjectedProperties().get("yo"));
+ }
+
+ /** Test behavior with a context map and renaming map override. */
+ @Test public void testContextMapWithRenamingOverride() {
+ SoyNamingMapProvider overrideMap = new SoyNamingMapProvider() {
+ @Nullable @Override
+ public SoyCssRenamingMap cssRenamingMap() {
+ return null;
+ }
+
+ @Nullable @Override
+ public SoyIdRenamingMap idRenamingMap() {
+ return null;
+ }
+ };
+
+ PageContext ctx = PageContext.fromMap(
+ Collections.singletonMap("hi", 5),
+ Collections.singletonMap("yo", 10),
+ overrideMap);
+
+ assertEquals("properties should be available through regular props, when injection is present",
+ 5, ctx.getProperties().get("hi"));
+ assertEquals("inject properties should be made available",
+ 10, ctx.getInjectedProperties().get("yo"));
+ assertTrue("renaming map should be present when we provide it",
+ ctx.overrideNamingMap().isPresent());
+ assertSame("should get back same soy renaming map override that we provide",
+ overrideMap,
+ ctx.overrideNamingMap().get());
+ }
+
+ /** Test basic proto-driven page context with {@link PageContext}. */
+ @Test public void testSimpleProtoContext() {
+ PageContext ctx = PageContext.fromProto(Context.newBuilder()
+ .setMeta(Context.Metadata.newBuilder()
+ .setTitle("Page Title Here"))
+ .build());
+
+ assertEquals("simple proto context should pass properties through",
+ "Page Title Here",
+ ctx.getPageContext().getMeta().getTitle());
+
+ assertEquals("simple proto context should be exposed through `@inject context`",
+ "Page Title Here",
+ ((Context)ctx.getInjectedProperties().get("context")).getMeta().getTitle());
+
+ assertEquals("proto context should be valid through interface or object",
+ ((SoyProtoContextMediator)ctx).getPageContext(),
+ ctx.getPageContext());
+ }
+
+ /** Test the default value for renaming map overrides. */
+ @Test public void testRenamingMapOverrideDefault() {
+ PageContext ctx = PageContext.empty();
+ assertFalse("empty page context should default to a null renaming map override",
+ ctx.overrideNamingMap().isPresent());
+ }
+
+ /** Test default context maps for an empty page context. */
+ @Test public void testContextMapDefaults() {
+ PageContext ctx = PageContext.empty();
+ assertTrue("empty prop context should default to an empty map",
+ ctx.getProperties().isEmpty());
+ assertFalse("empty inject context should still specify a context proto",
+ ctx.getInjectedProperties().isEmpty());
+ }
+
+ /** Test default proto context for an empty page context. */
+ @Test public void testContextProtoDefault() {
+ PageContext ctx = PageContext.empty();
+ assertSame("should get back the default context instance for an empty page context",
+ Context.getDefaultInstance(),
+ ctx.getPageContext());
+ }
+
+ /** Test proto-based context factory methods. */
+ @Test public void testContextProtoFactoryMethods() {
+ PageContext protoWithProps = PageContext.fromProto(Context.newBuilder()
+ .setMeta(Context.Metadata.newBuilder()
+ .setTitle("Page Title Here"))
+ .build(),
+ ImmutableMap.of("hi", 5));
+
+ assertNotNull("should get a valid context for a proto with props",
+ protoWithProps);
+ assertEquals("page title should properly pass through with props present",
+ "Page Title Here",
+ protoWithProps.getPageContext().getMeta().getTitle());
+ assertEquals("page title should properly pass through as injected value with props present",
+ "Page Title Here",
+ ((Context)protoWithProps.getInjectedProperties().get("context")).getMeta().getTitle());
+ assertEquals("regular context props should properly pass through with proto-based factory",
+ 5,
+ protoWithProps.getProperties().get("hi"));
+
+ PageContext protoWithPropsAndInjectedValues = PageContext.fromProto(Context.newBuilder()
+ .setMeta(Context.Metadata.newBuilder()
+ .setTitle("Page Title Here"))
+ .build(),
+ ImmutableMap.of("hi", 5),
+ ImmutableMap.of("yo", 10, "hi", 15));
+
+ assertNotNull("should get a valid context for a proto with props (+injected)",
+ protoWithPropsAndInjectedValues);
+ assertEquals("page title should properly pass through with props present (+injected)",
+ "Page Title Here",
+ protoWithPropsAndInjectedValues.getPageContext().getMeta().getTitle());
+ assertEquals("page title should properly pass through as injected value with props present (+injected)",
+ "Page Title Here",
+ ((Context)protoWithPropsAndInjectedValues.getInjectedProperties().get("context")).getMeta().getTitle());
+ assertEquals("regular context props should properly pass through with proto-based factory (+injected)",
+ 5,
+ protoWithPropsAndInjectedValues.getProperties().get("hi"));
+ assertEquals("injected context props should properly pass through with proto-based factory",
+ 10,
+ protoWithPropsAndInjectedValues.getInjectedProperties().get("yo"));
+ assertEquals("injected context props should not blend with regular context properties",
+ 15,
+ protoWithPropsAndInjectedValues.getInjectedProperties().get("hi"));
+
+ SoyNamingMapProvider overrideMap = new SoyNamingMapProvider() {
+ @Nullable @Override
+ public SoyCssRenamingMap cssRenamingMap() {
+ return null;
+ }
+
+ @Nullable @Override
+ public SoyIdRenamingMap idRenamingMap() {
+ return null;
+ }
+ };
+
+ PageContext protoWithPropsAndInjectedValuesAndMap = PageContext.fromProto(Context.newBuilder()
+ .setMeta(Context.Metadata.newBuilder()
+ .setTitle("Page Title Here"))
+ .build(),
+ ImmutableMap.of("hi", 5),
+ ImmutableMap.of("yo", 10, "hi", 15),
+ overrideMap);
+
+ assertNotNull("should get a valid context for a proto with props (+injected and map)",
+ protoWithPropsAndInjectedValuesAndMap);
+ assertEquals("page title should properly pass through with props present (+injected and map)",
+ "Page Title Here",
+ protoWithPropsAndInjectedValuesAndMap.getPageContext().getMeta().getTitle());
+ assertEquals("page title should properly pass through as injected value with props present (+injected and map)",
+ "Page Title Here",
+ ((Context)protoWithPropsAndInjectedValuesAndMap.getInjectedProperties().get("context")).getMeta().getTitle());
+ assertEquals("regular context props should properly pass through with proto-based factory (+injected and map)",
+ 5,
+ protoWithPropsAndInjectedValuesAndMap.getProperties().get("hi"));
+ assertEquals("injected context props should properly pass through with proto-based factory (+map)",
+ 10,
+ protoWithPropsAndInjectedValuesAndMap.getInjectedProperties().get("yo"));
+ assertEquals("injected context props should not blend with regular context properties (+map)",
+ 15,
+ protoWithPropsAndInjectedValuesAndMap.getInjectedProperties().get("hi"));
+ assertTrue("rewrite map should show as present if provided",
+ protoWithPropsAndInjectedValuesAndMap.overrideNamingMap().isPresent());
+ assertSame("providing rewrite map override through proto context factories should pass-through",
+ overrideMap,
+ protoWithPropsAndInjectedValuesAndMap.overrideNamingMap().get());
+ }
}
From 6c8067bf64113452c968644054faca5a252d657d Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Wed, 26 Feb 2020 21:30:27 -0800
Subject: [PATCH 024/103] Adjust coverage reporting
---
codecov.yml | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/codecov.yml b/codecov.yml
index 5e930c32a..b61ac21d9 100644
--- a/codecov.yml
+++ b/codecov.yml
@@ -8,6 +8,12 @@ coverage:
precision: 2
round: down
range: "60...90"
+ status:
+ project:
+ default:
+ target: 80
+ threshold: 15%
+ base: auto
parsers:
pass
@@ -22,4 +28,3 @@ ignore:
- "javatests/"
- "vendor/"
- "node_modules/"
-
From 054b6320219d92d7c8b42d761ba017134f6f4547 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Wed, 26 Feb 2020 21:31:33 -0800
Subject: [PATCH 025/103] Refactor `HomeController` to use new `AppController`
- Add `PageContextManager` and factory
- Init `AppController` and `BaseController`
- Adjust Bazel flags to be normalized
---
.develop/codecov.yml | 1 +
defs/toolchain/java/rules.bzl | 5 +
java/gust/backend/AppController.java | 32 ++++++
java/gust/backend/BUILD.bazel | 24 ++++
java/gust/backend/BaseController.java | 30 +++++
java/gust/backend/PageContextManager.java | 108 ++++++++++++++++++
java/gust/logback.xml | 1 +
samples/todolist/.bazelrc | 1 +
samples/todolist/src/server/HomeController.kt | 5 +-
tools/bazel.rc | 1 +
10 files changed, 207 insertions(+), 1 deletion(-)
create mode 120000 .develop/codecov.yml
create mode 100644 java/gust/backend/AppController.java
create mode 100644 java/gust/backend/BaseController.java
create mode 100644 java/gust/backend/PageContextManager.java
diff --git a/.develop/codecov.yml b/.develop/codecov.yml
new file mode 120000
index 000000000..223d1ba8f
--- /dev/null
+++ b/.develop/codecov.yml
@@ -0,0 +1 @@
+../codecov.yml
\ No newline at end of file
diff --git a/defs/toolchain/java/rules.bzl b/defs/toolchain/java/rules.bzl
index 7cbb9f3c2..d01df9ab4 100644
--- a/defs/toolchain/java/rules.bzl
+++ b/defs/toolchain/java/rules.bzl
@@ -67,6 +67,7 @@ INJECTED_MICRONAUT_DEPS = [
"@com_google_code_findbugs_jsr305",
"@io_micronaut_micronaut_views",
"@io_micronaut_micronaut_views_soy",
+ maven("org.slf4j:slf4j-api"),
maven("com.google.protobuf:protobuf-java"),
maven("io.micronaut:micronaut-aop"),
maven("io.micronaut:micronaut-core"),
@@ -85,6 +86,7 @@ INJECTED_MICRONAUT_DEPS = [
maven("io.micronaut:micronaut-session"),
maven("io.micronaut:micronaut-security"),
maven("io.micronaut:micronaut-multitenancy"),
+ maven("io.micronaut:micronaut-runtime"),
]
INJECTED_MICRONAUT_GRPC_DEPS = [
@@ -111,6 +113,9 @@ INJECTED_MICRONAUT_RUNTIME_DEPS = [
INJECTED_CONTROLLER_DEPS = [
"//java/gust/backend:PageContext",
+ "//java/gust/backend:PageContextManager",
+ "//java/gust/backend:BaseController",
+ "//java/gust/backend:AppController",
]
diff --git a/java/gust/backend/AppController.java b/java/gust/backend/AppController.java
new file mode 100644
index 000000000..130aa4818
--- /dev/null
+++ b/java/gust/backend/AppController.java
@@ -0,0 +1,32 @@
+package gust.backend;
+
+
+import javax.annotation.Nonnull;
+import javax.inject.Inject;
+
+
+/**
+ * Describes a framework application controller, which is pre-loaded with convenient access to tooling, and any injected
+ * application logic. Alternatively, if the invoking developer wishes to use their own base class, they can acquire most
+ * or all of the enclosed functionality via injection.
+ *
+ * Various
protected properties are made available which allow easy access to stuff:
+ *
+ * context : This property exposes a builder for the current flow's page context. This can be
+ * manipulated to provide/inject properties, and then subsequently used in Soy.
+ *
+ *
+ * To make use of this controller, simply inherit from it in your own
@Controller -annotated class. When a
+ * request method is invoked, the logic provided by this object will have been initialized and will be ready to use.
+ */
+public class AppController extends BaseController {
+ /**
+ * Private constructor, which accepts injected manager objects. Some or all of these are passed up to
+ * {@link BaseController}.
+ *
+ * @param pageContextManager Page context manager.
+ */
+ @Inject public AppController(@Nonnull PageContextManager pageContextManager) {
+ super(pageContextManager);
+ }
+}
diff --git a/java/gust/backend/BUILD.bazel b/java/gust/backend/BUILD.bazel
index 925665bb9..40b6dcbe0 100644
--- a/java/gust/backend/BUILD.bazel
+++ b/java/gust/backend/BUILD.bazel
@@ -35,6 +35,24 @@ template_library(
srcs = ["page.soy"],
)
+micronaut_library(
+ name = "AppController",
+ srcs = ["AppController.java"],
+ deps = [
+ ":BaseController",
+ "//java/gust/backend:PageContextManager",
+ ],
+)
+
+micronaut_library(
+ name = "BaseController",
+ srcs = ["BaseController.java"],
+ deps = [
+ "//java/gust/backend:PageContext",
+ "//java/gust/backend:PageContextManager",
+ ]
+)
+
micronaut_library(
name = "SoyProtoContextMediator",
srcs = ["SoyProtoContextMediator.java"],
@@ -48,6 +66,12 @@ micronaut_library(
proto_deps = ["//gust/page:page_proto"],
)
+micronaut_library(
+ name = "PageContextManager",
+ srcs = ["PageContextManager.java"],
+ deps = [":PageContext"],
+)
+
micronaut_library(
name = "TemplateProvider",
srcs = ["TemplateProvider.java"],
diff --git a/java/gust/backend/BaseController.java b/java/gust/backend/BaseController.java
new file mode 100644
index 000000000..1f43d7713
--- /dev/null
+++ b/java/gust/backend/BaseController.java
@@ -0,0 +1,30 @@
+package gust.backend;
+
+
+import javax.annotation.Nonnull;
+
+
+/**
+ * Supplies shared logic to all framework-provided controller base classes. Responsible for managing such things as the
+ * {@link PageContextManager}, and any other request-scoped state.
+ *
+ * Implementors of this class are provided with convenient access to initialized app logic and clients (such as gRPC
+ * clients or database clients). However, controller authors need not select this route for convenience sake if they
+ * have a better base class in mind: all the functionality provided here can easily be obtained via dependency
+ * injection.
+ */
+@SuppressWarnings("WeakerAccess")
+public abstract class BaseController {
+ /** Holds request-bound page context as it is built. */
+ protected final @Nonnull PageContextManager context;
+
+ /**
+ * Protected (implementor) constructor. Demands each dependency directly (generally, implementors would make use of DI
+ * and pass the provided objects in).
+ *
+ * @param contextManager Page context manager.
+ */
+ protected BaseController(@Nonnull PageContextManager contextManager) {
+ this.context = contextManager;
+ }
+}
diff --git a/java/gust/backend/PageContextManager.java b/java/gust/backend/PageContextManager.java
new file mode 100644
index 000000000..b82455efd
--- /dev/null
+++ b/java/gust/backend/PageContextManager.java
@@ -0,0 +1,108 @@
+package gust.backend;
+
+import io.micronaut.http.HttpRequest;
+import io.micronaut.runtime.http.scope.RequestScope;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import tools.elide.page.Context;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import javax.inject.Inject;
+import java.io.Closeable;
+
+
+/**
+ * Manages the process of filling out {@link PageContext} objects before they are sealed, and delivered to Closure/Soy
+ * to be reduced and rendered into content.
+ *
+ * This object may be used from controllers via dependency injection, or used via the base controller classes provided
+ * as part of the framework.
+ */
+@RequestScope
+@SuppressWarnings("unused")
+public class PageContextManager implements Closeable, AutoCloseable {
+ private static final Logger LOG = LoggerFactory.getLogger(PageContextManager.class);
+
+ /** Factory to create request-scoped {@link PageContextManager} instances. */
+ @io.micronaut.context.annotation.Factory
+ public final static class Factory {
+ /**
+ * Create a new request-bound {@link PageContextManager}. This is our chance to accept any injected values and init
+ * the object with them.
+ *
+ * @param request Current HTTP request.
+ * @return Page context manager instance.
+ */
+ @RequestScope
+ public PageContextManager managerFactory(@Nonnull HttpRequest request) {
+ return new PageContextManager(request);
+ }
+ }
+
+ /** HTTP request tied to this flow. */
+ private final @Nonnull HttpRequest request;
+
+ /** Page context builder. */
+ private final @Nonnull Context.Builder context;
+
+ /** Built context: assembled when we "close" the page context manager. */
+ private @Nullable Context builtContext = null;
+
+ /** Whether we have closed context building or not. */
+ private boolean closed = false;
+
+ /**
+ * Package-private constructor to restrict initialization to {@link Factory}.
+ *
+ * @param request Current HTTP request.
+ */
+ @Inject PageContextManager(@Nonnull HttpRequest request) {
+ if (LOG.isDebugEnabled())
+ LOG.debug(String.format("Initializing `PageContextManager` for request %s.", request.toString()));
+ this.request = request;
+ this.context = Context.newBuilder();
+ }
+
+ /** @return The active HTTP request for this flow. */
+ @Nonnull public HttpRequest getRequest() {
+ return request;
+ }
+
+ /** @return The current page context builder. */
+ @Nonnull public Context.Builder getContext() {
+ if (this.closed)
+ throw new IllegalStateException("Cannot access mutable context after closing page manager state.");
+ return context;
+ }
+
+ /** @return Built context. After calling this method the first time, context may no longer be mutated. */
+ @Nonnull public Context export() {
+ if (this.closed) {
+ assert this.builtContext != null;
+ return this.builtContext;
+ } else {
+ this.close();
+ if (LOG.isDebugEnabled())
+ LOG.debug("Exporting page context...");
+ this.builtContext = this.context.build();
+ assert this.builtContext != null;
+ if (LOG.isDebugEnabled())
+ LOG.debug(String.format("Exported page context: %s", this.builtContext));
+ }
+ return this.builtContext;
+ }
+
+ /**
+ * Closes this stream and releases any system resources associated with it. If the stream is already closed then
+ * invoking this method has no effect.
+ *
+ * As noted in {@link AutoCloseable#close()}, cases where the close may fail require careful attention. It is
+ * strongly advised to relinquish the underlying resources and to internally mark the {@code Closeable} as
+ * closed, prior to throwing the {@code IOException}.
+ */
+ @Override
+ public void close() {
+ this.closed = true;
+ }
+}
diff --git a/java/gust/logback.xml b/java/gust/logback.xml
index 8b01dfb54..9f668f300 100644
--- a/java/gust/logback.xml
+++ b/java/gust/logback.xml
@@ -10,4 +10,5 @@
+
diff --git a/samples/todolist/.bazelrc b/samples/todolist/.bazelrc
index 8fef3639b..e44071195 100644
--- a/samples/todolist/.bazelrc
+++ b/samples/todolist/.bazelrc
@@ -24,6 +24,7 @@ build:ci --javabase=//defs/toolchain/java:java_runtime
build:release --compilation_mode=opt
+build:dev --define=todolist_release_tag=latest
build:dev --compilation_mode=dbg
build:dev --spawn_strategy=local
build:dev --strategy=J2cl=worker
diff --git a/samples/todolist/src/server/HomeController.kt b/samples/todolist/src/server/HomeController.kt
index 0c2bf3514..9f4bc2197 100644
--- a/samples/todolist/src/server/HomeController.kt
+++ b/samples/todolist/src/server/HomeController.kt
@@ -1,7 +1,9 @@
package server
import com.google.common.collect.ImmutableMap
+import gust.backend.AppController
import gust.backend.PageContext
+import gust.backend.PageContextManager
import io.micronaut.http.HttpResponse
import io.micronaut.http.MediaType
import io.micronaut.http.annotation.Controller
@@ -9,6 +11,7 @@ import io.micronaut.http.annotation.Get
import io.micronaut.http.annotation.QueryValue
import io.micronaut.security.annotation.Secured
import io.micronaut.views.View
+import javax.inject.Inject
/**
@@ -18,7 +21,7 @@ import io.micronaut.views.View
*/
@Controller
@Secured("isAnonymous()")
-class HomeController {
+class HomeController @Inject constructor (ctx: PageContextManager): AppController(ctx) {
/**
* `/` (`HTTP GET`): Handler for the root homepage for Todolist - i.e. `/`. Serves the preview page if the user isn't
* logged in, or the regular app page & container if they are.
diff --git a/tools/bazel.rc b/tools/bazel.rc
index 9b208365c..51e5aaf6d 100644
--- a/tools/bazel.rc
+++ b/tools/bazel.rc
@@ -28,6 +28,7 @@ build --define project=bloom-sandbox
run --incompatible_strict_action_env
run --workspace_status_command=./tools/bazel_stamp_vars.sh
+build:dev --define=todolist_release_tag=latest
build:ci --spawn_strategy=local
build:release --compilation_mode=opt
From a792b62c66d6bcbd83492f9b7927a47a4183b7b3 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Wed, 26 Feb 2020 22:10:17 -0800
Subject: [PATCH 026/103] Cleanup and simplify PageContext/PageContextManager
- Remove embedded PageContextManager.Factory
- Clean up DI flow
- Fix issue injecting HTTP request
---
java/gust/backend/PageContext.java | 2 +-
java/gust/backend/PageContextManager.java | 168 ++++++++++++++----
samples/todolist/src/server/HomeController.kt | 8 +-
3 files changed, 138 insertions(+), 40 deletions(-)
diff --git a/java/gust/backend/PageContext.java b/java/gust/backend/PageContext.java
index 6c668a826..b8243d0c9 100644
--- a/java/gust/backend/PageContext.java
+++ b/java/gust/backend/PageContext.java
@@ -191,7 +191,7 @@ public static PageContext fromMap(@Nonnull Map context,
public static @Nonnull PageContext fromProto(@Nonnull Context pageContext,
@Nonnull Map props,
@Nonnull Map injected,
- @Nonnull SoyNamingMapProvider namingMapProvider) {
+ @Nullable SoyNamingMapProvider namingMapProvider) {
return new PageContext(pageContext, props, injected, namingMapProvider);
}
diff --git a/java/gust/backend/PageContextManager.java b/java/gust/backend/PageContextManager.java
index b82455efd..562a40884 100644
--- a/java/gust/backend/PageContextManager.java
+++ b/java/gust/backend/PageContextManager.java
@@ -1,15 +1,19 @@
package gust.backend;
import io.micronaut.http.HttpRequest;
+import io.micronaut.http.context.ServerRequestContext;
import io.micronaut.runtime.http.scope.RequestScope;
+import io.micronaut.views.soy.SoyNamingMapProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import tools.elide.page.Context;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
-import javax.inject.Inject;
import java.io.Closeable;
+import java.util.Optional;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ConcurrentSkipListMap;
/**
@@ -24,49 +28,43 @@
public class PageContextManager implements Closeable, AutoCloseable {
private static final Logger LOG = LoggerFactory.getLogger(PageContextManager.class);
- /** Factory to create request-scoped {@link PageContextManager} instances. */
- @io.micronaut.context.annotation.Factory
- public final static class Factory {
- /**
- * Create a new request-bound {@link PageContextManager}. This is our chance to accept any injected values and init
- * the object with them.
- *
- * @param request Current HTTP request.
- * @return Page context manager instance.
- */
- @RequestScope
- public PageContextManager managerFactory(@Nonnull HttpRequest request) {
- return new PageContextManager(request);
- }
- }
+ /** Page context builder. */
+ private final @Nonnull Context.Builder context;
- /** HTTP request tied to this flow. */
+ /** HTTP request bound to this flow. */
private final @Nonnull HttpRequest request;
- /** Page context builder. */
- private final @Nonnull Context.Builder context;
+ /** Main properties to apply during Soy render. */
+ private final @Nonnull ConcurrentMap props;
+
+ /** Additional injected values to apply during Soy render. */
+ private final @Nonnull ConcurrentMap injected;
+
+ /** Naming map provider to apply during the Soy render flow. */
+ private @Nonnull Optional namingMapProvider;
/** Built context: assembled when we "close" the page context manager. */
- private @Nullable Context builtContext = null;
+ private @Nullable PageContext builtContext = null;
/** Whether we have closed context building or not. */
private boolean closed = false;
/**
- * Package-private constructor to restrict initialization to {@link Factory}.
+ * Constructor for page context.
*
- * @param request Current HTTP request.
+ * @param namingMapProvider Style renaming map provider.
+ * @throws IllegalStateException If an attempt is made to construct context outside of a server-side HTTP flow.
*/
- @Inject PageContextManager(@Nonnull HttpRequest request) {
- if (LOG.isDebugEnabled())
- LOG.debug(String.format("Initializing `PageContextManager` for request %s.", request.toString()));
- this.request = request;
+ PageContextManager(@Nonnull Optional namingMapProvider) {
+ if (LOG.isDebugEnabled()) LOG.debug("Initializing `PageContextManager`.");
+ //noinspection SimplifyOptionalCallChains
+ if (!ServerRequestContext.currentRequest().isPresent())
+ throw new IllegalStateException("Cannot construct `PageContext` outside of a server-side HTTP flow.");
+ this.request = ServerRequestContext.currentRequest().get();
this.context = Context.newBuilder();
- }
-
- /** @return The active HTTP request for this flow. */
- @Nonnull public HttpRequest getRequest() {
- return request;
+ this.props = new ConcurrentSkipListMap<>();
+ this.injected = new ConcurrentSkipListMap<>();
+ this.namingMapProvider = namingMapProvider;
}
/** @return The current page context builder. */
@@ -77,22 +75,122 @@ public PageContextManager managerFactory(@Nonnull HttpRequest request) {
}
/** @return Built context. After calling this method the first time, context may no longer be mutated. */
- @Nonnull public Context export() {
+ @Nonnull public PageContext render() {
if (this.closed) {
assert this.builtContext != null;
- return this.builtContext;
} else {
this.close();
if (LOG.isDebugEnabled())
LOG.debug("Exporting page context...");
- this.builtContext = this.context.build();
- assert this.builtContext != null;
+ this.builtContext = PageContext.fromProto(
+ this.context.build(),
+ this.props,
+ this.injected,
+ this.namingMapProvider.orElse(null));
if (LOG.isDebugEnabled())
LOG.debug(String.format("Exported page context: %s", this.builtContext));
}
return this.builtContext;
}
+ // -- Map-like Interface (Props) -- //
+
+ /**
+ * Install a regular context value, at the named key provided. This will make the value available in any bound Soy
+ * render flow via a @param declaration on the subject template to be rendered.
+ *
+ * @param key Key at which to make this available as a param.
+ * @param value Value to provide for the parameter.
+ * @return Current page context manager (for call chain-ability).
+ * @throws IllegalArgumentException If the provided key is null , or a disallowed value, like
+ * context (which cannot be overridden).
+ */
+ public @Nonnull PageContextManager put(@Nonnull String key, @Nonnull Object value) {
+ //noinspection ConstantConditions
+ if (key == null)
+ throw new IllegalArgumentException("Must provide a key to put a Soy context property. Got `null` for key.");
+ this.props.put(key, value);
+ return this;
+ }
+
+ /**
+ * Safely retrieve a value from the current render context properties. If no property is found at the provided key,
+ * an empty {@link Optional} is returned. Otherwise, an {@link Optional} is returned wrapping whatever value was
+ * found.
+ *
+ * @param key Key at which to retrieve the desired render context property.
+ * @return Optional-wrapped context property value.
+ */
+ public @Nonnull Optional get(@Nonnull String key) {
+ return this.get(key, false);
+ }
+
+ /**
+ * Safely retrieve a value from either the current render context properties, or the current injected values. If no
+ * value is found in whatever context we're looking in, an empty {@link Optional} is returned. Otherwise, an
+ * {@link Optional} is returned wrapping whatever value was found.
+ *
+ * @param key Key at which to retrieve the desired render property or injected value.
+ * @param injected Whether to look in the injected values, or regular property values.
+ * @return Empty optional if nothing was found, otherwise, the found value wrapped in an optional.
+ */
+ public @Nonnull Optional get(@Nonnull String key, boolean injected) {
+ final ConcurrentMap base = injected ? this.injected : this.props;
+ if (base.containsKey(key))
+ return Optional.of(base.get(key));
+ return Optional.empty();
+ }
+
+ /**
+ * Install an injected context value, at the named key provided. This will make the value available in any bound Soy
+ * render flow via the @inject declaration, on any template in the render flow.
+ *
+ * @param key Key at which to make this available as an injected value.
+ * @param value Value to provide for the parameter.
+ * @return Current page context manager (for call chain-ability).
+ * @throws IllegalArgumentException If the provided key is null , or a disallowed value, like
+ * context (which cannot be overridden).
+ */
+ public @Nonnull PageContextManager inject(@Nonnull String key, @Nonnull Object value) {
+ //noinspection ConstantConditions
+ if (key == null)
+ throw new IllegalArgumentException("Must provide a key to put a Soy context property. Got `null` for key.");
+ if ("context".equals(key.toLowerCase()))
+ throw new IllegalArgumentException("Cannot use key 'context' for injected property.");
+ this.injected.put(key, value);
+ return this;
+ }
+
+ /**
+ * Install, or uninstall, the request-scoped renaming map provider. This object will be used to lookup style classes
+ * and IDs for render-time rewriting. To disable an existing naming map provider override, simply pass an empty
+ * {@link Optional}.
+ *
+ * If no renaming map provider is set here, but a global one is, and renaming is enabled, the global map will be
+ * used. If a renaming map is set here, but renaming is not enabled, no renaming takes place.
+ *
+ * @param namingMapProvider Renaming map provider to install, or {@link Optional#empty()} to uninstall any existing
+ * overriding renaming map provider.
+ * @return Current page context manager (for call chain-ability).
+ */
+ public @Nonnull PageContextManager rewrite(@Nonnull Optional namingMapProvider) {
+ this.namingMapProvider = namingMapProvider;
+ return this;
+ }
+
+ // -- Interface: HTTP Request -- //
+
+ /**
+ * Return the currently-active HTTP request object, to which the current render/controller flow is bound.
+ *
+ * @return Active HTTP request object.
+ */
+ public @Nonnull HttpRequest getRequest() {
+ return this.request;
+ }
+
+ // -- Interface: Closeable -- //
+
/**
* Closes this stream and releases any system resources associated with it. If the stream is already closed then
* invoking this method has no effect.
diff --git a/samples/todolist/src/server/HomeController.kt b/samples/todolist/src/server/HomeController.kt
index 9f4bc2197..4cbe32b1d 100644
--- a/samples/todolist/src/server/HomeController.kt
+++ b/samples/todolist/src/server/HomeController.kt
@@ -1,10 +1,8 @@
package server
-import com.google.common.collect.ImmutableMap
import gust.backend.AppController
import gust.backend.PageContext
import gust.backend.PageContextManager
-import io.micronaut.http.HttpResponse
import io.micronaut.http.MediaType
import io.micronaut.http.annotation.Controller
import io.micronaut.http.annotation.Get
@@ -37,7 +35,9 @@ class HomeController @Inject constructor (ctx: PageContextManager): AppControlle
*/
@Get("/", produces = [MediaType.TEXT_HTML])
@View("todolist.home.page")
- fun home(@QueryValue("name", defaultValue = "World") name: String): HttpResponse {
- return HttpResponse.ok(PageContext.fromMap(ImmutableMap.of("name", name) as Map))
+ fun home(@QueryValue("name", defaultValue = "World") name: String): PageContext {
+ return this.context
+ .put("name", name)
+ .render()
}
}
From 97a7df1e5bbe7f57dde5aae015b8b027964e613c Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Thu, 27 Feb 2020 13:10:47 -0800
Subject: [PATCH 027/103] Initial Todolist infrastructure configs
- Add full suite of K8S configs, scoped to `todolist` namespace
- Add customized Envoy configuration and image
---
.../todolist/src/config/00-namespace.k8s.yaml | 4 +
.../src/config/05-networking.k8s.yaml | 11 +
.../src/config/05-permissions.k8s.yaml | 22 ++
.../src/config/10-googleapis.istio.yaml | 34 +++
.../todolist/src/config/20-daemons.k8s.yaml | 57 ++++
.../todolist/src/config/25-services.k8s.yaml | 69 +++++
.../todolist/src/config/30-backend.k8s.yaml | 20 ++
.../todolist/src/config/40-ingress.k8s.yaml | 26 ++
samples/todolist/src/config/45-redis.k8s.yaml | 108 ++++++++
samples/todolist/src/config/50-envoy.k8s.yaml | 127 +++++++++
.../todolist/src/config/99-todolist.k8s.yaml | 142 ++++++++++
samples/todolist/src/config/BUILD.bazel | 93 ++++++-
samples/todolist/src/config/ambassador.yml | 17 --
samples/todolist/src/config/envoy/BUILD.bazel | 59 ++++
samples/todolist/src/config/envoy/Dockerfile | 7 +
samples/todolist/src/config/envoy/envoy.yaml | 253 ++++++++++++++++++
samples/todolist/src/config/envoy/tls.crt | 15 ++
samples/todolist/src/config/envoy/tls.key | 8 +
18 files changed, 1052 insertions(+), 20 deletions(-)
create mode 100644 samples/todolist/src/config/00-namespace.k8s.yaml
create mode 100644 samples/todolist/src/config/05-networking.k8s.yaml
create mode 100644 samples/todolist/src/config/05-permissions.k8s.yaml
create mode 100644 samples/todolist/src/config/10-googleapis.istio.yaml
create mode 100644 samples/todolist/src/config/20-daemons.k8s.yaml
create mode 100644 samples/todolist/src/config/25-services.k8s.yaml
create mode 100644 samples/todolist/src/config/30-backend.k8s.yaml
create mode 100644 samples/todolist/src/config/40-ingress.k8s.yaml
create mode 100644 samples/todolist/src/config/45-redis.k8s.yaml
create mode 100644 samples/todolist/src/config/50-envoy.k8s.yaml
create mode 100644 samples/todolist/src/config/99-todolist.k8s.yaml
delete mode 100644 samples/todolist/src/config/ambassador.yml
create mode 100644 samples/todolist/src/config/envoy/BUILD.bazel
create mode 100644 samples/todolist/src/config/envoy/Dockerfile
create mode 100644 samples/todolist/src/config/envoy/envoy.yaml
create mode 100644 samples/todolist/src/config/envoy/tls.crt
create mode 100644 samples/todolist/src/config/envoy/tls.key
diff --git a/samples/todolist/src/config/00-namespace.k8s.yaml b/samples/todolist/src/config/00-namespace.k8s.yaml
new file mode 100644
index 000000000..61ac270ca
--- /dev/null
+++ b/samples/todolist/src/config/00-namespace.k8s.yaml
@@ -0,0 +1,4 @@
+apiVersion: v1
+kind: Namespace
+metadata:
+ name: todolist
\ No newline at end of file
diff --git a/samples/todolist/src/config/05-networking.k8s.yaml b/samples/todolist/src/config/05-networking.k8s.yaml
new file mode 100644
index 000000000..72b116144
--- /dev/null
+++ b/samples/todolist/src/config/05-networking.k8s.yaml
@@ -0,0 +1,11 @@
+apiVersion: networking.k8s.io/v1
+kind: NetworkPolicy
+metadata:
+ name: allow-all
+ namespace: todolist
+spec:
+ podSelector: {}
+ ingress:
+ - {}
+ egress:
+ - {}
diff --git a/samples/todolist/src/config/05-permissions.k8s.yaml b/samples/todolist/src/config/05-permissions.k8s.yaml
new file mode 100644
index 000000000..80dd61224
--- /dev/null
+++ b/samples/todolist/src/config/05-permissions.k8s.yaml
@@ -0,0 +1,22 @@
+kind: Role
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: service-discoverer
+rules:
+ - apiGroups: [""]
+ resources: ["services", "endpoints", "configmaps", "secrets", "pods"]
+ verbs: ["get", "watch", "list"]
+---
+kind: RoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: default-service-discoverer
+ namespace: todolist
+subjects:
+ - kind: ServiceAccount
+ name: default
+ namespace: todolist
+roleRef:
+ kind: Role
+ name: service-discoverer
+ apiGroup: rbac.authorization.k8s.io
diff --git a/samples/todolist/src/config/10-googleapis.istio.yaml b/samples/todolist/src/config/10-googleapis.istio.yaml
new file mode 100644
index 000000000..2b3816a06
--- /dev/null
+++ b/samples/todolist/src/config/10-googleapis.istio.yaml
@@ -0,0 +1,34 @@
+apiVersion: networking.istio.io/v1alpha3
+kind: ServiceEntry
+metadata:
+ name: whitelist-egress-googleapis
+ namespace: todolist
+spec:
+ hosts:
+ - "accounts.google.com" # Used to get token
+ - "*.googleapis.com"
+ ports:
+ - number: 80
+ protocol: HTTP
+ name: http
+ - number: 443
+ protocol: HTTPS
+ name: https
+---
+apiVersion: networking.istio.io/v1alpha3
+kind: ServiceEntry
+metadata:
+ name: whitelist-egress-google-metadata
+ namespace: todolist
+spec:
+ hosts:
+ - metadata.google.internal
+ addresses:
+ - 169.254.169.254 # GCE metadata server
+ ports:
+ - number: 80
+ name: http
+ protocol: HTTP
+ - number: 443
+ name: https
+ protocol: HTTPS
diff --git a/samples/todolist/src/config/20-daemons.k8s.yaml b/samples/todolist/src/config/20-daemons.k8s.yaml
new file mode 100644
index 000000000..618c4395d
--- /dev/null
+++ b/samples/todolist/src/config/20-daemons.k8s.yaml
@@ -0,0 +1,57 @@
+apiVersion: apps/v1
+kind: DaemonSet
+metadata:
+ name: haveged
+ namespace: kube-system
+ labels:
+ app: haveged
+spec:
+ selector:
+ matchLabels:
+ daemonset: haveged
+ template:
+ metadata:
+ labels:
+ daemonset: haveged
+ spec:
+ containers:
+ - name: haveged
+ image: us.gcr.io/bloom-sandbox/lowlevel/haveged:latest
+ securityContext:
+ privileged: true
+---
+apiVersion: apps/v1
+kind: DaemonSet
+metadata:
+ name: sysctl-manager
+ namespace: kube-system
+ labels:
+ app: sysctl-manager
+spec:
+ selector:
+ matchLabels:
+ daemonset: sysctl-manager
+ template:
+ metadata:
+ labels:
+ daemonset: sysctl-manager
+ spec:
+ containers:
+ - name: sysctl-buddy
+ image: busybox:1.29
+ securityContext:
+ privileged: true
+ command:
+ - "/bin/sh"
+ - "-c"
+ - |
+ set -o errexit
+ set -o xtrace
+ while sysctl -w net.core.somaxconn=8192 vm.overcommit_memory=1 net.ipv4.tcp_fastopen=3
+ do
+ sleep 300s
+ done
+ resources:
+ requests:
+ cpu: 1m
+ memory: 5Mi
diff --git a/samples/todolist/src/config/25-services.k8s.yaml b/samples/todolist/src/config/25-services.k8s.yaml
new file mode 100644
index 000000000..5b9e179f1
--- /dev/null
+++ b/samples/todolist/src/config/25-services.k8s.yaml
@@ -0,0 +1,69 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: redis
+ namespace: todolist
+ labels:
+ app: todolist
+ role: cache
+ environment: production
+spec:
+ ports:
+ - port: 6379
+ protocol: TCP
+ name: tls-redis
+ selector:
+ app: todolist
+ role: cache
+ environment: production
+ type: NodePort
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: todolist
+ namespace: todolist
+ labels:
+ app: todolist
+ role: server
+ environment: production
+spec:
+ ports:
+ - name: tls-app
+ port: 8081
+ protocol: TCP
+ targetPort: 8081
+ - name: tls-rpc
+ port: 8082
+ protocol: TCP
+ targetPort: 8082
+ selector:
+ app: todolist
+ role: server
+ environment: production
+ type: NodePort
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: gateway
+ namespace: todolist
+ labels:
+ app: todolist
+ role: gateway
+ environment: production
+ annotations:
+ cloud.google.com/neg: '{"exposed_ports": {"443": {}}}'
+ cloud.google.com/app-protocols: '{"tls-gateway": "HTTP2"}'
+ cloud.google.com/backend-config: '{"ports": {"443":"todolist-server"}}'
+spec:
+ ports:
+ - name: tls-gateway
+ port: 443
+ protocol: TCP
+ targetPort: 443
+ selector:
+ app: todolist
+ role: gateway
+ environment: production
+ type: NodePort
diff --git a/samples/todolist/src/config/30-backend.k8s.yaml b/samples/todolist/src/config/30-backend.k8s.yaml
new file mode 100644
index 000000000..0c8690d67
--- /dev/null
+++ b/samples/todolist/src/config/30-backend.k8s.yaml
@@ -0,0 +1,20 @@
+apiVersion: cloud.google.com/v1beta1
+kind: BackendConfig
+metadata:
+ name: todolist-server
+ namespace: todolist
+ labels:
+ environment: production
+spec:
+ timeoutSec: 60
+ connectionDraining:
+ drainingTimeoutSec: 120
+ sessionAffinity:
+ affinityType: COOKIE
+ affinityCookieTtlSec: 300
+ cdn:
+ enabled: false
+ cachePolicy:
+ includeHost: true
+ includeProtocol: true
+ includeQueryString: true
diff --git a/samples/todolist/src/config/40-ingress.k8s.yaml b/samples/todolist/src/config/40-ingress.k8s.yaml
new file mode 100644
index 000000000..44065b27c
--- /dev/null
+++ b/samples/todolist/src/config/40-ingress.k8s.yaml
@@ -0,0 +1,26 @@
+apiVersion: networking.gke.io/v1beta1
+kind: ManagedCertificate
+metadata:
+ name: todolist-cert
+ namespace: todolist
+spec:
+ domains:
+ - todolist.apps.bloomworks.io
+---
+apiVersion: extensions/v1beta1
+kind: Ingress
+metadata:
+ name: todolist-frontend
+ namespace: todolist
+ annotations:
+ kubernetes.io/ingress.global-static-ip-name: todolist-ipv4
+ networking.gke.io/managed-certificates: todolist-cert
+spec:
+ rules:
+ - host: todolist.apps.bloomworks.io
+ http:
+ paths:
+ - path: /*
+ backend:
+ serviceName: gateway
+ servicePort: 443
diff --git a/samples/todolist/src/config/45-redis.k8s.yaml b/samples/todolist/src/config/45-redis.k8s.yaml
new file mode 100644
index 000000000..511cae52f
--- /dev/null
+++ b/samples/todolist/src/config/45-redis.k8s.yaml
@@ -0,0 +1,108 @@
+apiVersion: autoscaling/v1
+kind: HorizontalPodAutoscaler
+metadata:
+ name: redis-hpa
+ namespace: todolist
+spec:
+ scaleTargetRef:
+ apiVersion: apps/v1
+ kind: Deployment
+ name: redis
+ minReplicas: 1
+ maxReplicas: 3
+ targetCPUUtilizationPercentage: 50
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: redis
+ namespace: todolist
+ labels:
+ app: todolist
+ role: cache
+ environment: production
+spec:
+ # -- Replication ----------------------------------------------------------- #
+ replicas: 1
+ revisionHistoryLimit: 2
+ selector:
+ matchLabels:
+ app: todolist
+ role: cache
+ environment: production
+
+ strategy:
+ type: RollingUpdate
+ rollingUpdate:
+ maxSurge: 3
+ maxUnavailable: "30%"
+
+ # -- Timeouts -------------------------------------------------------------- #
+ minReadySeconds: 10
+ progressDeadlineSeconds: 300
+
+ template:
+ metadata:
+ labels:
+ app: todolist
+ role: cache
+ environment: production
+ spec:
+ # -- Scheduling -------------------------------------------------------- #
+ tolerations:
+ - key: role
+ operator: Equal
+ value: app
+ - key: sandbox.gke.io/runtime
+ operator: Equal
+ value: gvisor
+
+ # -- Networking --------------------------------------------------------- #
+ dnsPolicy: ClusterFirst
+
+ # -- Placement ---------------------------------------------------------- #
+
+ affinity:
+ # Don't schedule near other fcache pods.
+ podAntiAffinity:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ - weight: 100
+ podAffinityTerm:
+ labelSelector:
+ matchExpressions:
+ - key: name
+ operator: In
+ values:
+ - fcache
+ topologyKey: kubernetes.io/hostname
+
+ # -- Containers --------------------------------------------------------- #
+ containers:
+ # Fcache: Redis
+ - name: redis
+ image: redis:5.0.5-alpine3.10
+ ports:
+ - containerPort: 6379
+ name: tcp-fcache
+ resources:
+ requests:
+ cpu: "0.2"
+ memory: "256Mi"
+ limits:
+ cpu: "0.4"
+ memory: "1G"
+ env:
+ - name: K9_NAMESPACE
+ value: production
+ readinessProbe:
+ initialDelaySeconds: 10
+ successThreshold: 1
+ timeoutSeconds: 2
+ tcpSocket:
+ port: 6379
+ livenessProbe:
+ initialDelaySeconds: 30
+ periodSeconds: 5
+ timeoutSeconds: 1
+ tcpSocket:
+ port: 6379
diff --git a/samples/todolist/src/config/50-envoy.k8s.yaml b/samples/todolist/src/config/50-envoy.k8s.yaml
new file mode 100644
index 000000000..8f9ee4eae
--- /dev/null
+++ b/samples/todolist/src/config/50-envoy.k8s.yaml
@@ -0,0 +1,127 @@
+apiVersion: v1
+kind: Secret
+metadata:
+ name: tls
+ namespace: todolist
+data:
+ tls.key: LS0tLS1CRUdJTiBFQyBQQVJBTUVURVJTLS0tLS0KQmdncWhrak9QUU1CQnc9PQotLS0tLUVORCBFQyBQQVJBTUVURVJTLS0tLS0KLS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSU4wdjFudk04QUxZU3VaVlRqNDJBL1BrQlVnZm9tSTY0NzFyLy9vbHZPZThvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFak5Fd0lhdEFKVlNZcTk1YUNwTmRaWVQ5NnBpSENDZXVOM2hsWTdaeHNvUXhrdXZBdmVPbgpnQlFNNTYxL0NuSmZwbmlVSnJHZ2FLNEo1YkYrc2JHSVlBPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo=
+ tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNXRENDQWY0Q0NRRHNzcGdzMmZoSzhEQUtCZ2dxaGtqT1BRUURBakNCc3pFTE1Ba0dBMVVFQmhNQ1ZWTXgKRXpBUkJnTlZCQWdNQ2tOaGJHbG1iM0p1YVdFeEVUQVBCZ05WQkFjTUNGZHZiMlJ6YVdSbE1STXdFUVlEVlFRSwpEQXBDYkc5dmJYZHZjbXR6TVJRd0VnWURWUVFMREF0RmJtZHBibVZsY21sdVp6RWtNQ0lHQTFVRUF3d2JkRzlrCmIyeHBjM1F1WVhCd2N5NWliRzl2YlhkdmNtdHpMbWx2TVNzd0tRWUpLb1pJaHZjTkFRa0JGaHhwYm1adksyRjEKZEdodmNtbDBlVUJpYkc5dmJYZHZjbXR6TG1sdk1CNFhEVEl3TURJeU56SXdNRGd6TWxvWERUSXhNREl5TmpJdwpNRGd6TWxvd2diTXhDekFKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJREFwRFlXeHBabTl5Ym1saE1SRXdEd1lEClZRUUhEQWhYYjI5a2MybGtaVEVUTUJFR0ExVUVDZ3dLUW14dmIyMTNiM0pyY3pFVU1CSUdBMVVFQ3d3TFJXNW4KYVc1bFpYSnBibWN4SkRBaUJnTlZCQU1NRzNSdlpHOXNhWE4wTG1Gd2NITXVZbXh2YjIxM2IzSnJjeTVwYnpFcgpNQ2tHQ1NxR1NJYjNEUUVKQVJZY2FXNW1ieXRoZFhSb2IzSnBkSGxBWW14dmIyMTNiM0pyY3k1cGJ6QlpNQk1HCkJ5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUFCSXpSTUNHclFDVlVtS3ZlV2dxVFhXV0UvZXFZaHdnbnJqZDQKWldPMmNiS0VNWkxyd0wzanA0QVVET2V0ZndweVg2WjRsQ2F4b0dpdUNlV3hmckd4aUdBd0NnWUlLb1pJemowRQpBd0lEU0FBd1JRSWhBUDlYOG9vaG16endOUVQyWmwrS1phbVRIZXhwelJDZnRrMEFFcTdUWlFEeUFpQnFpS0thCkUwZFBsWDQycHh5dG9Bb1BZZ1JZb0gxdVRFNk1FVDlQQm9TTU1nPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
+---
+apiVersion: autoscaling/v1
+kind: HorizontalPodAutoscaler
+metadata:
+ name: envoy-hpa
+ namespace: todolist
+spec:
+ scaleTargetRef:
+ apiVersion: apps/v1
+ kind: Deployment
+ name: envoy
+ minReplicas: 1
+ maxReplicas: 3
+ targetCPUUtilizationPercentage: 60
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: envoy
+ namespace: todolist
+ labels:
+ environment: production
+spec:
+ # -- Replication ----------------------------------------------------------- #
+ replicas: 1
+ revisionHistoryLimit: 2
+ selector:
+ matchLabels:
+ app: todolist
+ role: gateway
+ environment: production
+
+ strategy:
+ type: RollingUpdate
+ rollingUpdate:
+ maxSurge: 3
+ maxUnavailable: "30%"
+
+ # -- Timeouts -------------------------------------------------------------- #
+ minReadySeconds: 10
+ progressDeadlineSeconds: 300
+
+ template:
+ metadata:
+ labels:
+ app: todolist
+ role: gateway
+ environment: production
+ spec:
+ # -- Networking --------------------------------------------------------- #
+ dnsPolicy: ClusterFirst
+
+ # -- Placement ---------------------------------------------------------- #
+ tolerations:
+ - key: role
+ operator: Equal
+ value: app
+ - key: sandbox.gke.io/runtime
+ operator: Equal
+ value: gvisor
+
+ affinity:
+ # Schedule away from other gateway pods.
+ podAntiAffinity:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ - weight: 50
+ podAffinityTerm:
+ labelSelector:
+ matchExpressions:
+ - key: name
+ operator: In
+ values:
+ - gateway
+ topologyKey: kubernetes.io/hostname
+
+ # -- Containers --------------------------------------------------------- #
+ containers:
+ ## Container: Gateway Proxy (Envoy)
+ - name: envoy
+ image: envoyproxy/envoy-alpine:v1.9.0
+ ports:
+ - name: tls-gateway
+ containerPort: 443
+ resources:
+ requests:
+ cpu: "0.2"
+ memory: "64Mi"
+ limits:
+ cpu: "0.4"
+ memory: "256Mi"
+ volumeMounts:
+ - name: tls
+ mountPath: /etc/ssl/envoy
+ readinessProbe:
+ successThreshold: 1
+ periodSeconds: 5
+ timeoutSeconds: 2
+ httpGet:
+ path: /health
+ port: 8090
+ initialDelaySeconds: 3
+ livenessProbe:
+ failureThreshold: 2
+ periodSeconds: 5
+ timeoutSeconds: 2
+ httpGet:
+ path: /health
+ httpHeaders:
+ - name: x-envoy-livenessprobe
+ value: healthz
+ port: 8090
+ initialDelaySeconds: 10
+ volumes:
+ - name: config
+ configMap:
+ name: envoy-conf
+ - name: tls
+ secret:
+ secretName: tls
diff --git a/samples/todolist/src/config/99-todolist.k8s.yaml b/samples/todolist/src/config/99-todolist.k8s.yaml
new file mode 100644
index 000000000..aa7852c9e
--- /dev/null
+++ b/samples/todolist/src/config/99-todolist.k8s.yaml
@@ -0,0 +1,142 @@
+apiVersion: autoscaling/v1
+kind: HorizontalPodAutoscaler
+metadata:
+ name: todolist-hpa
+ namespace: todolist
+spec:
+ scaleTargetRef:
+ apiVersion: apps/v1
+ kind: Deployment
+ name: todolist
+ minReplicas: 1
+ maxReplicas: 3
+ targetCPUUtilizationPercentage: 50
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: todolist
+ namespace: todolist
+ labels:
+ app: todolist
+ environment: production
+ annotations:
+ rules-k8s.bazel.io/gust: |
+ ---
+ app: todolist
+ framework: gust
+ engine: jvm
+spec:
+ # -- Replication ----------------------------------------------------------- #
+ replicas: 1
+ revisionHistoryLimit: 2
+ selector:
+ matchLabels:
+ app: todolist
+ role: server
+ environment: production
+
+ strategy:
+ type: RollingUpdate
+ rollingUpdate:
+ maxSurge: 3
+ maxUnavailable: "30%"
+
+ # -- Timeouts -------------------------------------------------------------- #
+ minReadySeconds: 10
+ progressDeadlineSeconds: 300
+
+ template:
+ metadata:
+ labels:
+ app: todolist
+ engine: jvm
+ role: server
+ environment: production
+
+ spec:
+ # -- Networking --------------------------------------------------------- #
+ dnsPolicy: ClusterFirst
+
+ # -- Placement ---------------------------------------------------------- #
+ tolerations:
+ - key: role
+ operator: Equal
+ value: app
+ - key: sandbox.gke.io/runtime
+ operator: Equal
+ value: gvisor
+
+ affinity:
+ # Schedule away from other todolist pods.
+ podAntiAffinity:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ - weight: 50
+ podAffinityTerm:
+ labelSelector:
+ matchExpressions:
+ - key: name
+ operator: In
+ values:
+ - todolist
+ topologyKey: kubernetes.io/hostname
+
+ # Schedule close to cache pods.
+ podAffinity:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ - weight: 40
+ podAffinityTerm:
+ labelSelector:
+ matchExpressions:
+ - key: name
+ operator: In
+ values:
+ - fcache
+ topologyKey: kubernetes.io/hostname
+
+ # -- Containers --------------------------------------------------------- #
+ containers:
+ ## Container: Todolist Server
+ - name: todolist-server
+ image: us.gcr.io/elide-tools/samples/todolist/jvm
+ resources:
+ requests:
+ cpu: "0.2"
+ memory: "400Mi"
+ limits:
+ cpu: "0.6"
+ memory: "512Mi"
+ volumeMounts:
+ - name: tls
+ mountPath: /etc/ssl/todolist
+ ports:
+ - name: app
+ containerPort: 8081
+ - name: api
+ containerPort: 8082
+ env:
+ - name: GUST_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ - name: GUST_ENVIRONMENT
+ value: production
+ readinessProbe:
+ initialDelaySeconds: 10
+ successThreshold: 1
+ timeoutSeconds: 2
+ periodSeconds: 5
+ httpGet:
+ path: /health
+ port: 8081
+ livenessProbe:
+ initialDelaySeconds: 30
+ periodSeconds: 5
+ timeoutSeconds: 1
+ httpGet:
+ path: /health
+ port: 8081
+ volumes:
+ - name: certlsts
+ secret:
+ secretName: tls
diff --git a/samples/todolist/src/config/BUILD.bazel b/samples/todolist/src/config/BUILD.bazel
index 2847eb7cf..38d5ca91f 100644
--- a/samples/todolist/src/config/BUILD.bazel
+++ b/samples/todolist/src/config/BUILD.bazel
@@ -2,8 +2,95 @@ package(
default_visibility = ["//visibility:public"],
)
+load(
+ "//defs/toolchain/k8s:rules.bzl",
+ k8s_config = "k8s_config",
+)
+
+load(
+ "@k9//:defaults.bzl",
+ _k9 = "k9",
+)
+
+
+exports_files(glob([
+ "*.yaml",
+ "*.json",
+]))
+
+_k9(
+ name = "namespace",
+ template = ":00-namespace.k8s.yaml",
+)
+
+_k9(
+ name = "networking",
+ template = ":05-networking.k8s.yaml",
+)
+
+_k9(
+ name = "permissions",
+ template = ":05-permissions.k8s.yaml",
+)
+
+_k9(
+ name = "googleapis",
+ template = ":10-googleapis.istio.yaml",
+)
+
+_k9(
+ name = "daemons",
+ template = ":20-daemons.k8s.yaml",
+)
+
+_k9(
+ name = "services",
+ template = ":25-services.k8s.yaml",
+)
+
+_k9(
+ name = "backend",
+ template = ":30-backend.k8s.yaml",
+)
+
+_k9(
+ name = "ingress",
+ template = ":40-ingress.k8s.yaml",
+)
+
+_k9(
+ name = "redis",
+ template = ":45-redis.k8s.yaml",
+)
+
+_k9(
+ name = "envoy",
+ template = ":50-envoy.k8s.yaml",
+ images = {
+ "us.gcr.io/elide-tools/samples/todolist/envoy": "//samples/todolist/src/config:envoy",
+ },
+)
+
+_k9(
+ name = "todolist",
+ template = ":99-todolist.k8s.yaml",
+ images = {
+ "us.gcr.io/elide-tools/samples/todolist/jvm": "//samples/todolist/src:TodolistServer-image",
+ },
+)
-filegroup(
- name = "ambassador-config",
- srcs = ["ambassador.yml"],
+k8s_config(
+ name = "k8s",
+ deps = [
+ ":namespace",
+ ":networking",
+ ":permissions",
+ ":daemons",
+ ":envoy",
+ ":backend",
+ ":services",
+ ":ingress",
+ ":redis",
+ ":todolist",
+ ]
)
diff --git a/samples/todolist/src/config/ambassador.yml b/samples/todolist/src/config/ambassador.yml
deleted file mode 100644
index 6aee304eb..000000000
--- a/samples/todolist/src/config/ambassador.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-apiVersion: getambassador.io/v2
-kind: Mapping
-metadata:
- name: grpc-py
- annotations:
- getambassador.io/config: |
- ---
- apiVersion: getambassador.io/v2
- kind: Module
- name: ambassador
- config:
- enable_grpc_web: True
-spec:
- grpc: True
- prefix: /todolist.Tasks/
- rewrite: /todolist.Tasks/
- service: tasks
diff --git a/samples/todolist/src/config/envoy/BUILD.bazel b/samples/todolist/src/config/envoy/BUILD.bazel
new file mode 100644
index 000000000..cc0aeed02
--- /dev/null
+++ b/samples/todolist/src/config/envoy/BUILD.bazel
@@ -0,0 +1,59 @@
+package(
+ default_visibility = ["//visibility:public"],
+)
+
+load(
+ "//defs/toolchain/docker:rules.bzl",
+ "container_image",
+)
+
+load(
+ "//defs/toolchain:pkg.bzl",
+ "tarball",
+)
+
+
+filegroup(
+ name = "envoy-yaml",
+ srcs = ["envoy.yaml"],
+)
+
+filegroup(
+ name = "tls-key",
+ srcs = ["tls.key"],
+)
+
+filegroup(
+ name = "tls-cert",
+ srcs = ["tls.crt"],
+)
+
+tarball(
+ name = "tls-assets",
+ srcs = [
+ ":tls-key",
+ ":tls-cert",
+ ],
+ strip_prefix = "/samples/todolist/src/config/envoy",
+ package_dir = "/etc/ssl",
+ mode = "0440",
+)
+
+tarball(
+ name = "envoy-configs",
+ srcs = [":envoy-yaml"],
+ strip_prefix = "/samples/todolist/src/config/envoy",
+ package_dir = "/etc/envoy",
+ mode = "0440",
+)
+
+container_image(
+ name = "envoy",
+ base = "@envoy_base//image",
+ repository = "elide-tools/samples/todolist/envoy",
+ ports = ["443", "8090", "9901"],
+ tars = [
+ ":tls-assets",
+ ":envoy-configs",
+ ],
+)
diff --git a/samples/todolist/src/config/envoy/Dockerfile b/samples/todolist/src/config/envoy/Dockerfile
new file mode 100644
index 000000000..0c69a5be7
--- /dev/null
+++ b/samples/todolist/src/config/envoy/Dockerfile
@@ -0,0 +1,7 @@
+FROM envoyproxy/envoy-alpine:v1.13.0
+COPY envoy.yaml /etc/envoy/envoy.yaml
+COPY tls.key /etc/ssl/tls.key
+COPY tls.crt /etc/ssl/tls.crt
+EXPOSE 443
+EXPOSE 8090
+EXPOSE 9901
\ No newline at end of file
diff --git a/samples/todolist/src/config/envoy/envoy.yaml b/samples/todolist/src/config/envoy/envoy.yaml
new file mode 100644
index 000000000..dad1cdfd5
--- /dev/null
+++ b/samples/todolist/src/config/envoy/envoy.yaml
@@ -0,0 +1,253 @@
+admin:
+ access_log_path: /tmp/admin_access.log
+ address:
+ ## Port 9901: Administration
+ socket_address: { address: 0.0.0.0, port_value: 19901 }
+
+overload_manager:
+ refresh_interval: 0.25s
+ resource_monitors:
+ - name: "envoy.resource_monitors.fixed_heap"
+ config:
+ max_heap_size_bytes: 1073741824 # 1 GiB
+ actions:
+ - name: "envoy.overload_actions.shrink_heap"
+ triggers:
+ - name: "envoy.resource_monitors.fixed_heap"
+ threshold:
+ value: 0.95
+ - name: "envoy.overload_actions.stop_accepting_requests"
+ triggers:
+ - name: "envoy.resource_monitors.fixed_heap"
+ threshold:
+ value: 0.98
+
+static_resources:
+ listeners:
+ ## Port 8090: Healthcheck (HTTP /healthz)
+ - name: health_listener
+ address:
+ socket_address: { address: 0.0.0.0, port_value: 8090 }
+ filter_chains:
+ - filters:
+ - name: envoy.http_connection_manager
+ typed_config:
+ "@type": type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager
+ codec_type: AUTO
+ use_remote_address: true
+ stat_prefix: ingress_health
+ server_name: "K9 (v5)"
+ route_config:
+ name: local_health
+ virtual_hosts:
+ - name: health
+ domains:
+ - "*"
+ routes:
+ - match: { path: "/healthz" }
+ direct_response:
+ status: 200
+ body:
+ inline_string: "SERVICE_OK"
+ - match: { path: "/health" }
+ direct_response:
+ status: 200
+ body:
+ inline_string: "SERVICE_OK"
+ - match: { path: "/" }
+ direct_response:
+ status: 200
+ body:
+ inline_string: "SERVICE_OK"
+ http_filters:
+ - name: envoy.router
+ typed_config: {}
+
+ ## Port 443: Todolist Application
+ - name: rpc_listener_tls
+ address:
+ socket_address: { address: 0.0.0.0, port_value: 443 }
+ filter_chains:
+ - tls_context:
+ common_tls_context:
+ tls_certificates:
+ - certificate_chain:
+ filename: "/etc/ssl/tls.crt"
+ private_key:
+ filename: "/etc/ssl/tls.key"
+ alpn_protocols:
+ - h2
+ - http/1.1
+ filters:
+ - name: envoy.http_connection_manager
+ typed_config:
+ "@type": type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager
+ codec_type: AUTO
+ use_remote_address: true
+ access_log:
+ - name: envoy.file_access_log
+ typed_config:
+ "@type": type.googleapis.com/envoy.config.accesslog.v2.FileAccessLog
+ path: "/dev/stdout"
+ stat_prefix: ingress_https
+ server_name: "K9 (v5)"
+ stream_idle_timeout: 900s # 15 mins, must be disabled for long-lived and streaming requests
+ request_timeout: 900s # 15 mins, must be disabled for long-lived and streaming requests
+ http2_protocol_options:
+ max_concurrent_streams: 100
+ initial_stream_window_size: 65536 # 64 KiB
+ initial_connection_window_size: 1048576 # 1 MiB
+ route_config:
+ name: local_route
+ virtual_hosts:
+ - name: app
+ domains:
+ - "todolist.apps.bloomworks.io"
+ - "*.todolist.apps.bloomworks.io"
+ response_headers_to_remove:
+ - x-envoy-upstream-service-time
+ routes:
+ - match: { path: "/healthz" }
+ direct_response:
+ status: 200
+ body:
+ inline_string: "SERVICE_OK"
+ - match: { prefix: "/v1/" }
+ route:
+ cluster: esp
+ max_grpc_timeout: 60s
+ - match: { prefix: "/todolist.Tasks/" }
+ route:
+ cluster: rpc
+ max_grpc_timeout: 30s
+ - match: { prefix: "/grpc.reflection.v1alpha.ServerReflection/" }
+ route:
+ cluster: rpc
+ max_grpc_timeout: 10s
+ - match: { prefix: "/" }
+ route:
+ cluster: app
+ http_filters:
+ - name: envoy.filters.http.header_to_metadata
+ config:
+ request_rules:
+ - header: user-agent
+ on_header_present:
+ metadata_namespace: client
+ key: agent
+ type: STRING
+ on_header_missing:
+ metadata_namespace: client
+ key: agent
+ value: 'default'
+ type: STRING
+ remove: false
+ - header: x-api-key
+ on_header_present:
+ metadata_namespace: client
+ key: apikey
+ type: STRING
+ on_header_missing:
+ metadata_namespace: client
+ key: agent
+ value: 'no-key'
+ type: STRING
+ remove: false
+ - name: envoy.grpc_web
+ typed_config: {}
+ - name: envoy.grpc_http1_bridge
+ typed_config: {}
+ - name: envoy.gzip
+ typed_config:
+ "@type": type.googleapis.com/envoy.config.filter.http.gzip.v2.Gzip
+ memory_level: 9
+ window_bits: 15
+ content_length: 900
+ compression_level: SPEED
+ compression_strategy: DEFAULT
+ content_type:
+ - "application/javascript"
+ - "application/json"
+ - "application/xhtml+xml"
+ - "image/svg+xml"
+ - "text/css"
+ - "text/html"
+ - "text/plain"
+ - "text/xml"
+ - "application/grpc-web+proto"
+ - "application/grpc-web-text+proto"
+ - name: envoy.cors
+ typed_config: {}
+ - name: envoy.csrf
+ config:
+ filter_enabled:
+ default_value:
+ numerator: 0
+ denominator: HUNDRED
+ shadow_enabled:
+ default_value:
+ numerator: 100
+ denominator: HUNDRED
+ - name: envoy.router
+ typed_config: {}
+
+ clusters:
+ ## Upstream: App Server
+ - name: app
+ connect_timeout: 0.25s
+ type: logical_dns
+ per_connection_buffer_limit_bytes: 32768 # 32 KiB
+ http2_protocol_options:
+ initial_stream_window_size: 65536 # 64 KiB
+ initial_connection_window_size: 1048576 # 1 MiB
+ lb_policy: round_robin
+ dns_lookup_family: V4_ONLY
+ load_assignment:
+ cluster_name: rpc
+ endpoints:
+ - lb_endpoints:
+ - endpoint:
+ address:
+ socket_address:
+ address: todolist
+ port_value: 8081
+
+ ## Upstream: API Server
+ - name: rpc
+ connect_timeout: 0.25s
+ type: logical_dns
+ per_connection_buffer_limit_bytes: 65536 # 64 KiB
+ http2_protocol_options:
+ initial_stream_window_size: 65536 # 64 KiB
+ initial_connection_window_size: 1048576 # 1 MiB
+ lb_policy: round_robin
+ dns_lookup_family: V4_ONLY
+ load_assignment:
+ cluster_name: dash
+ endpoints:
+ - lb_endpoints:
+ - endpoint:
+ address:
+ socket_address:
+ address: todolist
+ port_value: 8082
+
+ ## Upstream: Endpoints Service Proxy
+ - name: esp
+ connect_timeout: 0.25s
+ type: logical_dns
+ per_connection_buffer_limit_bytes: 32768 # 32 KiB
+ http2_protocol_options:
+ initial_stream_window_size: 65536 # 64 KiB
+ initial_connection_window_size: 1048576 # 1 MiB
+ lb_policy: round_robin
+ dns_lookup_family: V4_ONLY
+ load_assignment:
+ cluster_name: rpc
+ endpoints:
+ - lb_endpoints:
+ - endpoint:
+ address:
+ socket_address:
+ address: esp
+ port_value: 8083
diff --git a/samples/todolist/src/config/envoy/tls.crt b/samples/todolist/src/config/envoy/tls.crt
new file mode 100644
index 000000000..8951a8258
--- /dev/null
+++ b/samples/todolist/src/config/envoy/tls.crt
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICWDCCAf4CCQDsspgs2fhK8DAKBggqhkjOPQQDAjCBszELMAkGA1UEBhMCVVMx
+EzARBgNVBAgMCkNhbGlmb3JuaWExETAPBgNVBAcMCFdvb2RzaWRlMRMwEQYDVQQK
+DApCbG9vbXdvcmtzMRQwEgYDVQQLDAtFbmdpbmVlcmluZzEkMCIGA1UEAwwbdG9k
+b2xpc3QuYXBwcy5ibG9vbXdvcmtzLmlvMSswKQYJKoZIhvcNAQkBFhxpbmZvK2F1
+dGhvcml0eUBibG9vbXdvcmtzLmlvMB4XDTIwMDIyNzIwMDgzMloXDTIxMDIyNjIw
+MDgzMlowgbMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMREwDwYD
+VQQHDAhXb29kc2lkZTETMBEGA1UECgwKQmxvb213b3JrczEUMBIGA1UECwwLRW5n
+aW5lZXJpbmcxJDAiBgNVBAMMG3RvZG9saXN0LmFwcHMuYmxvb213b3Jrcy5pbzEr
+MCkGCSqGSIb3DQEJARYcaW5mbythdXRob3JpdHlAYmxvb213b3Jrcy5pbzBZMBMG
+ByqGSM49AgEGCCqGSM49AwEHA0IABIzRMCGrQCVUmKveWgqTXWWE/eqYhwgnrjd4
+ZWO2cbKEMZLrwL3jp4AUDOetfwpyX6Z4lCaxoGiuCeWxfrGxiGAwCgYIKoZIzj0E
+AwIDSAAwRQIhAP9X8oohmzzwNQT2Zl+KZamTHexpzRCftk0AEq7TZQDyAiBqiKKa
+E0dPlX42pxytoAoPYgRYoH1uTE6MET9PBoSMMg==
+-----END CERTIFICATE-----
diff --git a/samples/todolist/src/config/envoy/tls.key b/samples/todolist/src/config/envoy/tls.key
new file mode 100644
index 000000000..1b1229ae7
--- /dev/null
+++ b/samples/todolist/src/config/envoy/tls.key
@@ -0,0 +1,8 @@
+-----BEGIN EC PARAMETERS-----
+BggqhkjOPQMBBw==
+-----END EC PARAMETERS-----
+-----BEGIN EC PRIVATE KEY-----
+MHcCAQEEIN0v1nvM8ALYSuZVTj42A/PkBUgfomI6471r//olvOe8oAoGCCqGSM49
+AwEHoUQDQgAEjNEwIatAJVSYq95aCpNdZYT96piHCCeuN3hlY7ZxsoQxkuvAveOn
+gBQM561/CnJfpniUJrGgaK4J5bF+sbGIYA==
+-----END EC PRIVATE KEY-----
From 5780b51dab52ea0daa9fe43584aab54accfc832b Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Thu, 27 Feb 2020 13:11:11 -0800
Subject: [PATCH 028/103] Toolchain support for Docker, Kubernetes and
packaging
- Add macros for generic Docker images
- Add macros for Kubernetes configs
- Add macros for packaging
---
defs/toolchain/docker/BUILD.bazel | 3 ++
defs/toolchain/docker/rules.bzl | 37 +++++++++++++++++
defs/toolchain/java/rules.bzl | 6 +--
defs/toolchain/k8s/BUILD.bazel | 3 ++
defs/toolchain/k8s/rules.bzl | 69 +++++++++++++++++++++++++++++++
defs/toolchain/pkg.bzl | 42 +++++++++++++++++++
6 files changed, 157 insertions(+), 3 deletions(-)
create mode 100644 defs/toolchain/docker/BUILD.bazel
create mode 100644 defs/toolchain/docker/rules.bzl
create mode 100644 defs/toolchain/k8s/BUILD.bazel
create mode 100644 defs/toolchain/k8s/rules.bzl
create mode 100644 defs/toolchain/pkg.bzl
diff --git a/defs/toolchain/docker/BUILD.bazel b/defs/toolchain/docker/BUILD.bazel
new file mode 100644
index 000000000..f3490d58e
--- /dev/null
+++ b/defs/toolchain/docker/BUILD.bazel
@@ -0,0 +1,3 @@
+package(
+ default_visibility = ["//visibility:public"],
+)
\ No newline at end of file
diff --git a/defs/toolchain/docker/rules.bzl b/defs/toolchain/docker/rules.bzl
new file mode 100644
index 000000000..601fe3184
--- /dev/null
+++ b/defs/toolchain/docker/rules.bzl
@@ -0,0 +1,37 @@
+
+load(
+ "@io_bazel_rules_docker//container:image.bzl",
+ _docker_container_image = "container_image",
+)
+
+load(
+ "@io_bazel_rules_docker//container:push.bzl",
+ _docker_container_push = "container_push",
+)
+
+
+def _container_image(name,
+ repository,
+ tag = None,
+ registry = "us.gcr.io",
+ image_format = "OCI",
+ **kwargs):
+
+ """ Generate a regular Docker container image. """
+
+ _docker_container_image(
+ name = name,
+ **kwargs
+ )
+
+ _docker_container_push(
+ name = "%s-push" % name,
+ image = ":%s" % name,
+ tag = tag or "{BUILD_SCM_VERSION}",
+ registry = registry,
+ repository = repository,
+ format = image_format,
+ )
+
+
+container_image = _container_image
diff --git a/defs/toolchain/java/rules.bzl b/defs/toolchain/java/rules.bzl
index d01df9ab4..0bfd1d9e3 100644
--- a/defs/toolchain/java/rules.bzl
+++ b/defs/toolchain/java/rules.bzl
@@ -1,7 +1,7 @@
load(
- "@bazel_tools//tools/build_defs/pkg:pkg.bzl",
- "pkg_tar",
+ "@rules_pkg//pkg:pkg.bzl",
+ _pkg_tar = "pkg_tar",
)
load(
@@ -432,7 +432,7 @@ def _micronaut_application(name,
reflection_configuration = reflection_configuration,
)
- pkg_tar(
+ _pkg_tar(
name = "%s-native-pkg" % name,
extension = "tar",
srcs = ["%s-native-bin" % name],
diff --git a/defs/toolchain/k8s/BUILD.bazel b/defs/toolchain/k8s/BUILD.bazel
new file mode 100644
index 000000000..67cb1e21d
--- /dev/null
+++ b/defs/toolchain/k8s/BUILD.bazel
@@ -0,0 +1,3 @@
+package(
+ default_visibility = ["//visibility:public"],
+)
diff --git a/defs/toolchain/k8s/rules.bzl b/defs/toolchain/k8s/rules.bzl
new file mode 100644
index 000000000..49a58c857
--- /dev/null
+++ b/defs/toolchain/k8s/rules.bzl
@@ -0,0 +1,69 @@
+
+load(
+ "@rules_pkg//pkg:pkg.bzl",
+ _pkg_tar = "pkg_tar",
+ _pkg_zip = "pkg_zip",
+)
+
+load(
+ "@io_bazel_rules_k8s//k8s:object.bzl",
+ _k8s_object = "k8s_object",
+)
+
+load(
+ "@io_bazel_rules_k8s//k8s:objects.bzl",
+ _k8s_objects = "k8s_objects",
+)
+
+
+
+def _k8s_config(name,
+ kind = None,
+ template = None,
+ deps = None,
+ **kwargs):
+
+ """ Generate targets for a generic Kubernetes config file. """
+
+ if deps != None and template != None:
+ fail("Cannot specify both `deps` and `template` for k8s_config. Please use `deps=` for groupings of " +
+ "Kubernetes objects.")
+
+ native.filegroup(
+ name = "%s-files" % name,
+ srcs = (template and [template] or []) + (deps or []),
+ )
+
+ if deps != None:
+ _pkg_tar(
+ name = "%s-tar" % name,
+ srcs = [":%s-files" % name],
+ deps = [
+ ("%s-tar" % n) for n in (deps or [])
+ ],
+ )
+
+ _pkg_tar(
+ name = "%s-zip" % name,
+ srcs = [":%s-files" % name],
+ deps = [
+ ("%s-zip" % n) for n in (deps or [])
+ ],
+ )
+
+ _k8s_objects(
+ name = name,
+ objects = deps,
+ **kwargs
+ )
+
+ else:
+ _k8s_object(
+ name = name,
+ kind = kind,
+ template = template,
+ **kwargs
+ )
+
+
+k8s_config = _k8s_config
diff --git a/defs/toolchain/pkg.bzl b/defs/toolchain/pkg.bzl
new file mode 100644
index 000000000..b09384067
--- /dev/null
+++ b/defs/toolchain/pkg.bzl
@@ -0,0 +1,42 @@
+
+load(
+ "@bazel_tools//tools/build_defs/pkg:pkg.bzl",
+ _pkg_tar = "pkg_tar",
+)
+
+
+load(
+ "@rules_pkg//pkg:pkg.bzl",
+ _pkg_zip = "pkg_zip",
+)
+
+
+def _archive(name,
+ srcs,
+ deps = None,
+ format = "tar",
+ **kwargs):
+
+ """ Create a generic tarball or zip archive. """
+
+ if format == "tar":
+ _pkg_tar(
+ name = name,
+ srcs = srcs,
+ deps = deps,
+ **kwargs
+ )
+ elif format == "zip":
+ _pkg_zip(
+ name = name,
+ srcs = srcs,
+ deps = deps,
+ **kwargs
+ )
+ else:
+ fail("Unrecognized package format: '%s'." % format)
+
+
+zipball = _pkg_zip
+tarball = _pkg_tar
+archive = _archive
From 5d53c0fbbb9482bc027adb8a63de754559c81da4 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Thu, 27 Feb 2020 13:11:42 -0800
Subject: [PATCH 029/103] Pull in Envoy base image, setup K9 defaults
---
WORKSPACE | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/WORKSPACE b/WORKSPACE
index 9cf810756..e80104124 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -220,3 +220,19 @@ container_pull(
repository = "elide-tools/base/node",
digest = "sha256:76b64868e73d27361e294fd346b72aa6c50ad4e669bd9c2684fbdda7e839ea39",
)
+
+container_pull(
+ name = "envoy_base",
+ registry = "index.docker.io",
+ repository = "envoyproxy/envoy-alpine",
+ digest = "sha256:19f3b361450e31f68b46f891b0c8726041739f44ab9b90aecbca5f426c0d2eaf",
+)
+
+## K8S Setup
+load("@io_bazel_rules_k8s//k8s:k8s.bzl", "k8s_defaults")
+
+k8s_defaults(
+ name = "k9",
+ kind = "deployment",
+ cluster = "$(cluster)",
+)
From b055485fafa5bc61fe809501f708593c2fd3145f Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Thu, 27 Feb 2020 13:11:51 -0800
Subject: [PATCH 030/103] Add rules_pkg dependency
---
defs/build.bzl | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/defs/build.bzl b/defs/build.bzl
index 3524a6d1d..418b6d77e 100644
--- a/defs/build.bzl
+++ b/defs/build.bzl
@@ -19,6 +19,13 @@ DEPS = {
"target": "add8e42934d1bf63ecf27f5439574383e74ef8fc",
"seal": "088e451fbee1fadf328d69bd243f8de5b3a44f329946edc79bff7fca9382379c"},
+ # Bazel: Packaging
+ "rules_pkg": {
+ "type": "github",
+ "repo": "bazelbuild/rules_pkg",
+ "target": "b1014c8e56c27cc8199eaf747e671d0c32582175",
+ "seal": "59fe36ba70c97a52745a28503d48cd15bdc9b8745945d32d2a0ca9aeef2d9342"},
+
# Bazel: Stardoc
"io_bazel_stardoc": {
"type": "github",
From 9be4ac4b7a5c63838f4173c3a457886cf22ad7cf Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Thu, 27 Feb 2020 13:12:01 -0800
Subject: [PATCH 031/103] Add yarn run alias for gRPC CLI
---
package.json | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/package.json b/package.json
index dfa35b673..de5cfcedc 100644
--- a/package.json
+++ b/package.json
@@ -10,7 +10,8 @@
"license": "MIT",
"scripts": {
"build": "bazel build --config=dev //js/... //java/... //proto/... //style/...",
- "test": "bazel test --config=dev //javatests/..."
+ "test": "bazel test --config=dev //javatests/...",
+ "grpc": "dist/bin/external/com_github_grpc_grpc/test/cpp/util/grpc_cli"
},
"devDependencies": {
"@bazel/bazel": "2.1.0",
From 0a23e4348fc3097dc3bb08d0e0813a3d82047634 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Thu, 27 Feb 2020 13:12:17 -0800
Subject: [PATCH 032/103] Converge bazelrc and WORKSPACE for Todolist
---
samples/todolist/.bazelrc | 4 ++++
samples/todolist/WORKSPACE | 33 +++++++++++++++++++++++++++++++++
tools/bazel.rc | 6 ++++--
3 files changed, 41 insertions(+), 2 deletions(-)
diff --git a/samples/todolist/.bazelrc b/samples/todolist/.bazelrc
index e44071195..efeaf546d 100644
--- a/samples/todolist/.bazelrc
+++ b/samples/todolist/.bazelrc
@@ -3,6 +3,10 @@
# Base Settings
##
+build --embed_label=alpha
+build --define project=elide-tools
+build --define cluster=gke_bloom-sandbox_us-west2-c_k9-v4c
+
common --experimental_allow_incremental_repository_updates
build --watchfs
diff --git a/samples/todolist/WORKSPACE b/samples/todolist/WORKSPACE
index 040b1e428..07da4f9c0 100644
--- a/samples/todolist/WORKSPACE
+++ b/samples/todolist/WORKSPACE
@@ -78,3 +78,36 @@ pinned_maven_install()
load("@gust//defs:workspace.bzl", "setup_workspace")
setup_workspace()
+
+## K8S Setup
+load("@io_bazel_rules_k8s//k8s:k8s.bzl", "k8s_defaults")
+
+k8s_defaults(
+ name = "k9",
+ kind = "deployment",
+ cluster = "$(cluster)",
+)
+
+## Containers
+load("@io_bazel_rules_docker//container:container.bzl", "container_pull")
+
+container_pull(
+ name = "java_base",
+ registry = "gcr.io",
+ repository = "distroless/java",
+ digest = "sha256:0ce06c40e99e0dce26bdbcec30afe7a890a57bbd250777bd31ff2d1b798c7809",
+)
+
+container_pull(
+ name = "native_base",
+ registry = "us.gcr.io",
+ repository = "elide-tools/base/alpine",
+ digest = "sha256:decbf1b8ba41c556941f2fbd82811822f7b9622cbd3a17d5d4041cb5438bae2d",
+)
+
+container_pull(
+ name = "envoy_base",
+ registry = "index.docker.io",
+ repository = "envoyproxy/envoy-alpine",
+ digest = "sha256:19f3b361450e31f68b46f891b0c8726041739f44ab9b90aecbca5f426c0d2eaf",
+)
diff --git a/tools/bazel.rc b/tools/bazel.rc
index 51e5aaf6d..d21241350 100644
--- a/tools/bazel.rc
+++ b/tools/bazel.rc
@@ -9,6 +9,10 @@
# Base Settings
##
+build --embed_label=alpha
+build --define project=bloom-sandbox
+build --define cluster=gke_bloom-sandbox_us-west2-c_k9-v4c
+
common --experimental_allow_incremental_repository_updates
build --watchfs
@@ -22,8 +26,6 @@ build --interface_shared_objects
build --java_toolchain=@bazel_tools//tools/jdk:toolchain_java11
build --host_java_toolchain=@bazel_tools//tools/jdk:toolchain_java11
build --workspace_status_command=./tools/bazel_stamp_vars.sh
-build --embed_label=alpha
-build --define project=bloom-sandbox
run --incompatible_strict_action_env
run --workspace_status_command=./tools/bazel_stamp_vars.sh
From 06111c2ef2cb58078e14c83f14381a57d026a309 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Thu, 27 Feb 2020 13:41:09 -0800
Subject: [PATCH 033/103] Major work on Envoy proxy
---
samples/todolist/src/config/50-envoy.k8s.yaml | 17 +++++++++--------
.../todolist/src/config/99-todolist.k8s.yaml | 4 ++--
samples/todolist/src/config/BUILD.bazel | 4 ++--
.../src/config/{envoy => gateway}/BUILD.bazel | 4 ++--
.../src/config/{envoy => gateway}/Dockerfile | 0
.../src/config/{envoy => gateway}/envoy.yaml | 2 +-
.../src/config/{envoy => gateway}/tls.crt | 0
.../src/config/{envoy => gateway}/tls.key | 0
8 files changed, 16 insertions(+), 15 deletions(-)
rename samples/todolist/src/config/{envoy => gateway}/BUILD.bazel (92%)
rename samples/todolist/src/config/{envoy => gateway}/Dockerfile (100%)
rename samples/todolist/src/config/{envoy => gateway}/envoy.yaml (99%)
rename samples/todolist/src/config/{envoy => gateway}/tls.crt (100%)
rename samples/todolist/src/config/{envoy => gateway}/tls.key (100%)
diff --git a/samples/todolist/src/config/50-envoy.k8s.yaml b/samples/todolist/src/config/50-envoy.k8s.yaml
index 8f9ee4eae..e73c5dede 100644
--- a/samples/todolist/src/config/50-envoy.k8s.yaml
+++ b/samples/todolist/src/config/50-envoy.k8s.yaml
@@ -85,10 +85,14 @@ spec:
containers:
## Container: Gateway Proxy (Envoy)
- name: envoy
- image: envoyproxy/envoy-alpine:v1.9.0
+ image: us.gcr.io/elide-tools/sample/todolist/gateway
ports:
- name: tls-gateway
containerPort: 443
+ - name: http-health
+ containerPort: 8090
+ - name: http-admin
+ containerPort: 9901
resources:
requests:
cpu: "0.2"
@@ -101,27 +105,24 @@ spec:
mountPath: /etc/ssl/envoy
readinessProbe:
successThreshold: 1
- periodSeconds: 5
+ periodSeconds: 10
timeoutSeconds: 2
+ initialDelaySeconds: 5
httpGet:
- path: /health
+ path: /healthz
port: 8090
- initialDelaySeconds: 3
livenessProbe:
failureThreshold: 2
periodSeconds: 5
timeoutSeconds: 2
httpGet:
- path: /health
+ path: /healthz
httpHeaders:
- name: x-envoy-livenessprobe
value: healthz
port: 8090
initialDelaySeconds: 10
volumes:
- - name: config
- configMap:
- name: envoy-conf
- name: tls
secret:
secretName: tls
diff --git a/samples/todolist/src/config/99-todolist.k8s.yaml b/samples/todolist/src/config/99-todolist.k8s.yaml
index aa7852c9e..95b921ab6 100644
--- a/samples/todolist/src/config/99-todolist.k8s.yaml
+++ b/samples/todolist/src/config/99-todolist.k8s.yaml
@@ -98,7 +98,7 @@ spec:
containers:
## Container: Todolist Server
- name: todolist-server
- image: us.gcr.io/elide-tools/samples/todolist/jvm
+ image: us.gcr.io/elide-tools/sample/todolist/jvm
resources:
requests:
cpu: "0.2"
@@ -137,6 +137,6 @@ spec:
path: /health
port: 8081
volumes:
- - name: certlsts
+ - name: tls
secret:
secretName: tls
diff --git a/samples/todolist/src/config/BUILD.bazel b/samples/todolist/src/config/BUILD.bazel
index 38d5ca91f..33359b5c8 100644
--- a/samples/todolist/src/config/BUILD.bazel
+++ b/samples/todolist/src/config/BUILD.bazel
@@ -67,7 +67,7 @@ _k9(
name = "envoy",
template = ":50-envoy.k8s.yaml",
images = {
- "us.gcr.io/elide-tools/samples/todolist/envoy": "//samples/todolist/src/config:envoy",
+ "us.gcr.io/elide-tools/sample/todolist/envoy": "//samples/todolist/src/config/gateway:gateway",
},
)
@@ -75,7 +75,7 @@ _k9(
name = "todolist",
template = ":99-todolist.k8s.yaml",
images = {
- "us.gcr.io/elide-tools/samples/todolist/jvm": "//samples/todolist/src:TodolistServer-image",
+ "us.gcr.io/elide-tools/sample/todolist/jvm": "//samples/todolist/src:TodolistServer-image",
},
)
diff --git a/samples/todolist/src/config/envoy/BUILD.bazel b/samples/todolist/src/config/gateway/BUILD.bazel
similarity index 92%
rename from samples/todolist/src/config/envoy/BUILD.bazel
rename to samples/todolist/src/config/gateway/BUILD.bazel
index cc0aeed02..e4a760f68 100644
--- a/samples/todolist/src/config/envoy/BUILD.bazel
+++ b/samples/todolist/src/config/gateway/BUILD.bazel
@@ -48,9 +48,9 @@ tarball(
)
container_image(
- name = "envoy",
+ name = "gateway",
base = "@envoy_base//image",
- repository = "elide-tools/samples/todolist/envoy",
+ repository = "elide-tools/sample/todolist/gateway",
ports = ["443", "8090", "9901"],
tars = [
":tls-assets",
diff --git a/samples/todolist/src/config/envoy/Dockerfile b/samples/todolist/src/config/gateway/Dockerfile
similarity index 100%
rename from samples/todolist/src/config/envoy/Dockerfile
rename to samples/todolist/src/config/gateway/Dockerfile
diff --git a/samples/todolist/src/config/envoy/envoy.yaml b/samples/todolist/src/config/gateway/envoy.yaml
similarity index 99%
rename from samples/todolist/src/config/envoy/envoy.yaml
rename to samples/todolist/src/config/gateway/envoy.yaml
index dad1cdfd5..e4d023a0c 100644
--- a/samples/todolist/src/config/envoy/envoy.yaml
+++ b/samples/todolist/src/config/gateway/envoy.yaml
@@ -2,7 +2,7 @@ admin:
access_log_path: /tmp/admin_access.log
address:
## Port 9901: Administration
- socket_address: { address: 0.0.0.0, port_value: 19901 }
+ socket_address: { address: 0.0.0.0, port_value: 9901 }
overload_manager:
refresh_interval: 0.25s
diff --git a/samples/todolist/src/config/envoy/tls.crt b/samples/todolist/src/config/gateway/tls.crt
similarity index 100%
rename from samples/todolist/src/config/envoy/tls.crt
rename to samples/todolist/src/config/gateway/tls.crt
diff --git a/samples/todolist/src/config/envoy/tls.key b/samples/todolist/src/config/gateway/tls.key
similarity index 100%
rename from samples/todolist/src/config/envoy/tls.key
rename to samples/todolist/src/config/gateway/tls.key
From 7fdce2101b6ca3bc945c48bab47b59f320373c13 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Thu, 27 Feb 2020 13:48:16 -0800
Subject: [PATCH 034/103] Use manually-built Envoy image, for now
---
samples/todolist/src/config/50-envoy.k8s.yaml | 3 ++-
samples/todolist/src/config/BUILD.bazel | 3 ---
samples/todolist/src/config/gateway/BUILD.bazel | 1 +
3 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/samples/todolist/src/config/50-envoy.k8s.yaml b/samples/todolist/src/config/50-envoy.k8s.yaml
index e73c5dede..4579fdefb 100644
--- a/samples/todolist/src/config/50-envoy.k8s.yaml
+++ b/samples/todolist/src/config/50-envoy.k8s.yaml
@@ -85,7 +85,8 @@ spec:
containers:
## Container: Gateway Proxy (Envoy)
- name: envoy
- image: us.gcr.io/elide-tools/sample/todolist/gateway
+ image: us.gcr.io/elide-tools/sample/todolist/gateway:v2a
+ imagePullPolicy: Always
ports:
- name: tls-gateway
containerPort: 443
diff --git a/samples/todolist/src/config/BUILD.bazel b/samples/todolist/src/config/BUILD.bazel
index 33359b5c8..524f87043 100644
--- a/samples/todolist/src/config/BUILD.bazel
+++ b/samples/todolist/src/config/BUILD.bazel
@@ -66,9 +66,6 @@ _k9(
_k9(
name = "envoy",
template = ":50-envoy.k8s.yaml",
- images = {
- "us.gcr.io/elide-tools/sample/todolist/envoy": "//samples/todolist/src/config/gateway:gateway",
- },
)
_k9(
diff --git a/samples/todolist/src/config/gateway/BUILD.bazel b/samples/todolist/src/config/gateway/BUILD.bazel
index e4a760f68..016552cae 100644
--- a/samples/todolist/src/config/gateway/BUILD.bazel
+++ b/samples/todolist/src/config/gateway/BUILD.bazel
@@ -50,6 +50,7 @@ tarball(
container_image(
name = "gateway",
base = "@envoy_base//image",
+ image_format = "Docker",
repository = "elide-tools/sample/todolist/gateway",
ports = ["443", "8090", "9901"],
tars = [
From 42af94cca028c9269b8f25167208d8733c30366f Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Thu, 27 Feb 2020 13:48:23 -0800
Subject: [PATCH 035/103] Fix spacing issue in bazelrc
---
.bazelrc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.bazelrc b/.bazelrc
index 32e78e418..bc31c54e9 100644
--- a/.bazelrc
+++ b/.bazelrc
@@ -1,3 +1,3 @@
- # load bazelrc from the legacy location
+# load bazelrc from the legacy location
# as recommended in https://github.com/bazelbuild/bazel/issues/6319
import %workspace%/tools/bazel.rc
From 3398e520e1673011e8cf124a2035da2957571543 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Thu, 27 Feb 2020 13:58:52 -0800
Subject: [PATCH 036/103] Add external LB for testing
---
.../todolist/src/config/25-services.k8s.yaml | 21 +++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/samples/todolist/src/config/25-services.k8s.yaml b/samples/todolist/src/config/25-services.k8s.yaml
index 5b9e179f1..cf0785b9e 100644
--- a/samples/todolist/src/config/25-services.k8s.yaml
+++ b/samples/todolist/src/config/25-services.k8s.yaml
@@ -67,3 +67,24 @@ spec:
role: gateway
environment: production
type: NodePort
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: gateway-ext
+ namespace: todolist
+ labels:
+ app: todolist
+ role: gateway
+ environment: production
+spec:
+ ports:
+ - name: tls-ext
+ port: 443
+ protocol: TCP
+ targetPort: 443
+ selector:
+ app: todolist
+ role: gateway
+ environment: production
+ type: LoadBalancer
From 39d7c64d82899fea6d67edc15b0b137f4082cb28 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Thu, 27 Feb 2020 13:59:01 -0800
Subject: [PATCH 037/103] Use fully-qualified service DNS
---
samples/todolist/src/config/gateway/envoy.yaml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/samples/todolist/src/config/gateway/envoy.yaml b/samples/todolist/src/config/gateway/envoy.yaml
index e4d023a0c..fde3cd861 100644
--- a/samples/todolist/src/config/gateway/envoy.yaml
+++ b/samples/todolist/src/config/gateway/envoy.yaml
@@ -209,7 +209,7 @@ static_resources:
- endpoint:
address:
socket_address:
- address: todolist
+ address: todolist.todolist.svc.local
port_value: 8081
## Upstream: API Server
@@ -229,7 +229,7 @@ static_resources:
- endpoint:
address:
socket_address:
- address: todolist
+ address: todolist.todolist.svc.local
port_value: 8082
## Upstream: Endpoints Service Proxy
@@ -249,5 +249,5 @@ static_resources:
- endpoint:
address:
socket_address:
- address: esp
+ address: esp.todolist.svc.local
port_value: 8083
From 46180e86364fe7435232294a34d84ed787b10742 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Thu, 27 Feb 2020 15:16:28 -0800
Subject: [PATCH 038/103] Setup devops flow for Envoy and Todolist (including
deploy)
- Add deploy routine to GCB (CI will likely fail)
- Enable reflection service (+add logging)
- Tweaks to Envoy config, including healthcheck logging
---
cloudbuild.yaml | 34 +++++++++++++
defs/toolchain/java/rules.bzl | 2 +
samples/todolist/src/BUILD.bazel | 1 +
.../todolist/src/config/25-services.k8s.yaml | 4 ++
samples/todolist/src/config/50-envoy.k8s.yaml | 4 +-
samples/todolist/src/config/BUILD.bazel | 14 ++++-
.../todolist/src/config/gateway/envoy.yaml | 51 ++++++++++++-------
samples/todolist/src/logback.xml | 1 +
.../todolist/src/server/ReflectionService.kt | 4 ++
9 files changed, 94 insertions(+), 21 deletions(-)
diff --git a/cloudbuild.yaml b/cloudbuild.yaml
index cce83ab5b..585c008a5 100644
--- a/cloudbuild.yaml
+++ b/cloudbuild.yaml
@@ -37,6 +37,40 @@ steps:
id: push
args: ['push', 'us.gcr.io/elide-tools/sample/todolist/jvm:latest']
+# Credentials: K8S
+- name: 'gcr.io/cloud-builders/gcloud'
+ id: cluster
+ args: [
+ 'container',
+ 'clusters',
+ 'get-credentials',
+ 'k9-v4c',
+ '--zone',
+ 'us-west2-c',
+ '--project',
+ 'bloom-sandbox'
+ ]
+
+# Deploy: K8S (Envoy)
+- name: 'gcr.io/cloud-builders/bazel'
+ id: deploy-envoy
+ args:
+ - --bazelrc=.bazelrc
+ - run
+ - --config=ci
+ - --
+ - //samples/todolist/src/config:envoy.replace
+
+# Deploy: K8S (Todolist)
+- name: 'gcr.io/cloud-builders/bazel'
+ id: deploy-todolist
+ args:
+ - --bazelrc=.bazelrc
+ - run
+ - --config=ci
+ - --
+ - //samples/todolist/src/config:todolist.replace
+
images:
- us.gcr.io/elide-tools/sample/todolist/jvm:$SHORT_SHA
- us.gcr.io/elide-tools/sample/todolist/jvm:latest
diff --git a/defs/toolchain/java/rules.bzl b/defs/toolchain/java/rules.bzl
index 0bfd1d9e3..c316eaabf 100644
--- a/defs/toolchain/java/rules.bzl
+++ b/defs/toolchain/java/rules.bzl
@@ -336,6 +336,7 @@ def _micronaut_application(name,
runtime_deps = [],
jvm_flags = [],
defs = {},
+ ports = [],
inject_main = True,
reflection_configuration = None,
**kwargs):
@@ -444,6 +445,7 @@ def _micronaut_application(name,
directory = "/app",
files = ["%s-native-bin" % name],
workdir = "/app",
+ ports = ports,
cmd = None,
env = {
"PORT": "8080",
diff --git a/samples/todolist/src/BUILD.bazel b/samples/todolist/src/BUILD.bazel
index ac28f7232..60ad96a5f 100644
--- a/samples/todolist/src/BUILD.bazel
+++ b/samples/todolist/src/BUILD.bazel
@@ -103,6 +103,7 @@ micronaut_application(
name = "TodolistServer",
config = ":application.yml",
logging_config = ":logback.xml",
+ ports = ["8081", "8082"],
# -- Controllers -- #
controllers = [
diff --git a/samples/todolist/src/config/25-services.k8s.yaml b/samples/todolist/src/config/25-services.k8s.yaml
index cf0785b9e..c8d18b3e0 100644
--- a/samples/todolist/src/config/25-services.k8s.yaml
+++ b/samples/todolist/src/config/25-services.k8s.yaml
@@ -17,6 +17,7 @@ spec:
role: cache
environment: production
type: NodePort
+ publishNotReadyAddresses: yes
---
apiVersion: v1
kind: Service
@@ -42,6 +43,7 @@ spec:
role: server
environment: production
type: NodePort
+ publishNotReadyAddresses: yes
---
apiVersion: v1
kind: Service
@@ -67,6 +69,7 @@ spec:
role: gateway
environment: production
type: NodePort
+ publishNotReadyAddresses: yes
---
apiVersion: v1
kind: Service
@@ -88,3 +91,4 @@ spec:
role: gateway
environment: production
type: LoadBalancer
+ publishNotReadyAddresses: yes
diff --git a/samples/todolist/src/config/50-envoy.k8s.yaml b/samples/todolist/src/config/50-envoy.k8s.yaml
index 4579fdefb..f5ad4cbd0 100644
--- a/samples/todolist/src/config/50-envoy.k8s.yaml
+++ b/samples/todolist/src/config/50-envoy.k8s.yaml
@@ -19,7 +19,7 @@ spec:
name: envoy
minReplicas: 1
maxReplicas: 3
- targetCPUUtilizationPercentage: 60
+ targetCPUUtilizationPercentage: 80
---
apiVersion: apps/v1
kind: Deployment
@@ -85,7 +85,7 @@ spec:
containers:
## Container: Gateway Proxy (Envoy)
- name: envoy
- image: us.gcr.io/elide-tools/sample/todolist/gateway:v2a
+ image: us.gcr.io/elide-tools/sample/todolist/gateway:v6a
imagePullPolicy: Always
ports:
- name: tls-gateway
diff --git a/samples/todolist/src/config/BUILD.bazel b/samples/todolist/src/config/BUILD.bazel
index 524f87043..83bf82029 100644
--- a/samples/todolist/src/config/BUILD.bazel
+++ b/samples/todolist/src/config/BUILD.bazel
@@ -77,7 +77,7 @@ _k9(
)
k8s_config(
- name = "k8s",
+ name = "gke",
deps = [
":namespace",
":networking",
@@ -91,3 +91,15 @@ k8s_config(
":todolist",
]
)
+
+k8s_config(
+ name = "k8s",
+ deps = [
+ ":namespace",
+ ":networking",
+ ":envoy",
+ ":services",
+ ":redis",
+ ":todolist",
+ ]
+)
diff --git a/samples/todolist/src/config/gateway/envoy.yaml b/samples/todolist/src/config/gateway/envoy.yaml
index fde3cd861..c18483133 100644
--- a/samples/todolist/src/config/gateway/envoy.yaml
+++ b/samples/todolist/src/config/gateway/envoy.yaml
@@ -195,59 +195,74 @@ static_resources:
## Upstream: App Server
- name: app
connect_timeout: 0.25s
- type: logical_dns
+ type: strict_dns
per_connection_buffer_limit_bytes: 32768 # 32 KiB
- http2_protocol_options:
- initial_stream_window_size: 65536 # 64 KiB
- initial_connection_window_size: 1048576 # 1 MiB
lb_policy: round_robin
dns_lookup_family: V4_ONLY
+ health_checks:
+ - timeout: 2s
+ interval: 6s
+ unhealthy_threshold: 2
+ healthy_threshold: 2
+ event_log_path: /dev/stdout
+ http_health_check:
+ path: "/health"
load_assignment:
- cluster_name: rpc
+ cluster_name: app
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
- address: todolist.todolist.svc.local
+ address: todolist
port_value: 8081
## Upstream: API Server
- name: rpc
connect_timeout: 0.25s
- type: logical_dns
+ type: strict_dns
per_connection_buffer_limit_bytes: 65536 # 64 KiB
- http2_protocol_options:
- initial_stream_window_size: 65536 # 64 KiB
- initial_connection_window_size: 1048576 # 1 MiB
+ http2_protocol_options: {}
lb_policy: round_robin
dns_lookup_family: V4_ONLY
+ health_checks:
+ - timeout: 2s
+ interval: 6s
+ unhealthy_threshold: 2
+ healthy_threshold: 2
+ tcp_health_check: {}
+ event_log_path: /dev/stdout
load_assignment:
- cluster_name: dash
+ cluster_name: rpc
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
- address: todolist.todolist.svc.local
+ address: todolist
port_value: 8082
## Upstream: Endpoints Service Proxy
- name: esp
connect_timeout: 0.25s
- type: logical_dns
+ type: strict_dns
per_connection_buffer_limit_bytes: 32768 # 32 KiB
- http2_protocol_options:
- initial_stream_window_size: 65536 # 64 KiB
- initial_connection_window_size: 1048576 # 1 MiB
+ http2_protocol_options: {}
lb_policy: round_robin
dns_lookup_family: V4_ONLY
+ health_checks:
+ - timeout: 2s
+ interval: 6s
+ unhealthy_threshold: 2
+ healthy_threshold: 2
+ tcp_health_check: {}
+ event_log_path: /dev/stdout
load_assignment:
- cluster_name: rpc
+ cluster_name: esp
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
- address: esp.todolist.svc.local
+ address: esp
port_value: 8083
diff --git a/samples/todolist/src/logback.xml b/samples/todolist/src/logback.xml
index 8b01dfb54..9f668f300 100644
--- a/samples/todolist/src/logback.xml
+++ b/samples/todolist/src/logback.xml
@@ -10,4 +10,5 @@
+
diff --git a/samples/todolist/src/server/ReflectionService.kt b/samples/todolist/src/server/ReflectionService.kt
index 8939fa461..d5bdc894c 100644
--- a/samples/todolist/src/server/ReflectionService.kt
+++ b/samples/todolist/src/server/ReflectionService.kt
@@ -4,6 +4,7 @@ import io.grpc.ServerBuilder
import io.grpc.protobuf.services.ProtoReflectionService
import io.micronaut.context.event.BeanCreatedEvent
import io.micronaut.context.event.BeanCreatedEventListener
+import org.slf4j.LoggerFactory
import javax.inject.Singleton
@@ -13,9 +14,12 @@ import javax.inject.Singleton
*/
@Singleton
class ReflectionService: BeanCreatedEventListener> {
+ private val logging = LoggerFactory.getLogger(ReflectionService::class.java)
+
override fun onCreated(event: BeanCreatedEvent>): ServerBuilder<*> {
// skip `TasksService`/`TodolistInterceptor` - they are installed by default
// because they are members of the bean context.
+ logging.info("Mounting gRPC reflection service...")
return event.bean.addService(ProtoReflectionService.newInstance())
}
}
From 8c49f822c753efcd5e09b15f5012ffebbd31d247 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Thu, 27 Feb 2020 15:42:16 -0800
Subject: [PATCH 039/103] Fixes for ingress configuration
---
samples/todolist/src/config/40-ingress.k8s.yaml | 5 ++++-
samples/todolist/src/config/gateway/envoy.yaml | 1 +
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/samples/todolist/src/config/40-ingress.k8s.yaml b/samples/todolist/src/config/40-ingress.k8s.yaml
index 44065b27c..ddbf2e198 100644
--- a/samples/todolist/src/config/40-ingress.k8s.yaml
+++ b/samples/todolist/src/config/40-ingress.k8s.yaml
@@ -10,12 +10,15 @@ spec:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
- name: todolist-frontend
+ name: todolist-gclb
namespace: todolist
annotations:
kubernetes.io/ingress.global-static-ip-name: todolist-ipv4
networking.gke.io/managed-certificates: todolist-cert
spec:
+ backend:
+ serviceName: gateway
+ servicePort: 443
rules:
- host: todolist.apps.bloomworks.io
http:
diff --git a/samples/todolist/src/config/gateway/envoy.yaml b/samples/todolist/src/config/gateway/envoy.yaml
index c18483133..d37e8d573 100644
--- a/samples/todolist/src/config/gateway/envoy.yaml
+++ b/samples/todolist/src/config/gateway/envoy.yaml
@@ -104,6 +104,7 @@ static_resources:
domains:
- "todolist.apps.bloomworks.io"
- "*.todolist.apps.bloomworks.io"
+ - "*"
response_headers_to_remove:
- x-envoy-upstream-service-time
routes:
From d3bb94e86e17071a48b261acffa60f83b30f5318 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Thu, 27 Feb 2020 15:42:32 -0800
Subject: [PATCH 040/103] Transition to independent NEGs
---
samples/todolist/src/config/BUILD.bazel | 1 -
1 file changed, 1 deletion(-)
diff --git a/samples/todolist/src/config/BUILD.bazel b/samples/todolist/src/config/BUILD.bazel
index 83bf82029..95f2b82c4 100644
--- a/samples/todolist/src/config/BUILD.bazel
+++ b/samples/todolist/src/config/BUILD.bazel
@@ -86,7 +86,6 @@ k8s_config(
":envoy",
":backend",
":services",
- ":ingress",
":redis",
":todolist",
]
From 822ac52aca3fbbd45fdff92f36169a49ea776745 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Thu, 27 Feb 2020 16:01:46 -0800
Subject: [PATCH 041/103] [skip ci] Change to Bazel 2.1.0 in GCB
---
cloudbuild.yaml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/cloudbuild.yaml b/cloudbuild.yaml
index 585c008a5..d610351d8 100644
--- a/cloudbuild.yaml
+++ b/cloudbuild.yaml
@@ -2,7 +2,7 @@
steps:
# Build: Gust Framework
-- name: 'l.gcr.io/google/bazel'
+- name: 'l.gcr.io/google/bazel:2.1.0'
id: build
args:
- --bazelrc=.bazelrc
@@ -52,7 +52,7 @@ steps:
]
# Deploy: K8S (Envoy)
-- name: 'gcr.io/cloud-builders/bazel'
+- name: 'gcr.io/cloud-builders/bazel:2.1.0'
id: deploy-envoy
args:
- --bazelrc=.bazelrc
@@ -62,7 +62,7 @@ steps:
- //samples/todolist/src/config:envoy.replace
# Deploy: K8S (Todolist)
-- name: 'gcr.io/cloud-builders/bazel'
+- name: 'gcr.io/cloud-builders/bazel:2.1.0'
id: deploy-todolist
args:
- --bazelrc=.bazelrc
From b58d5f089f5978691fba89ee3fad49476715c6b2 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Thu, 27 Feb 2020 16:03:25 -0800
Subject: [PATCH 042/103] Prep version bump -> 1.0.0-alpha2
---
defs/config.bzl | 2 +-
package.json | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/defs/config.bzl b/defs/config.bzl
index 5f0088759..c6869d2ae 100644
--- a/defs/config.bzl
+++ b/defs/config.bzl
@@ -17,7 +17,7 @@ DEV = True
## Framework version tag.
## ------------------------------------
## Displayed in certain areas of the app, mostly when `DEV` is active.
-VERSION = "1.0.0-alpha1"
+VERSION = "1.0.0-alpha2"
## `Renaming` mode.
## ------------------------------------
diff --git a/package.json b/package.json
index de5cfcedc..ff71d8425 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@sgammon/gust",
- "version": "1.0.0-alpha1",
+ "version": "1.0.0-alpha2",
"description": "The Little Framework that Could",
"repository": {
"type": "git",
From af7c39d10bfd0b1952cf1c3ab350363754010943 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Thu, 27 Feb 2020 16:14:31 -0800
Subject: [PATCH 043/103] Fix incorrect Bazel version in GCB
---
cloudbuild.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cloudbuild.yaml b/cloudbuild.yaml
index d610351d8..f88e74b81 100644
--- a/cloudbuild.yaml
+++ b/cloudbuild.yaml
@@ -12,7 +12,7 @@ steps:
- //gust/...
# Image build: Todolist App
-- name: 'l.gcr.io/google/bazel'
+- name: 'l.gcr.io/google/bazel:2.1.0'
id: todolist
args:
- --bazelrc=.bazelrc
From 338e5441a385d2bc6a9de95b3b90ab08d69862db Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Thu, 27 Feb 2020 16:38:29 -0800
Subject: [PATCH 044/103] Fix prefix for Bazel images in GCB (late steps)
---
cloudbuild.yaml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/cloudbuild.yaml b/cloudbuild.yaml
index f88e74b81..c0ccfc2cf 100644
--- a/cloudbuild.yaml
+++ b/cloudbuild.yaml
@@ -52,7 +52,7 @@ steps:
]
# Deploy: K8S (Envoy)
-- name: 'gcr.io/cloud-builders/bazel:2.1.0'
+- name: 'l.gcr.io/google/bazel:2.1.0'
id: deploy-envoy
args:
- --bazelrc=.bazelrc
@@ -62,7 +62,7 @@ steps:
- //samples/todolist/src/config:envoy.replace
# Deploy: K8S (Todolist)
-- name: 'gcr.io/cloud-builders/bazel:2.1.0'
+- name: 'l.gcr.io/google/bazel:2.1.0'
id: deploy-todolist
args:
- --bazelrc=.bazelrc
From 457a5b66851cde2311107c263a64ebae26c29c70 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Thu, 27 Feb 2020 17:17:28 -0800
Subject: [PATCH 045/103] Pin and build K8S toolchain from source
---
WORKSPACE | 19 +++++++++++++------
defs/config.bzl | 5 +++++
2 files changed, 18 insertions(+), 6 deletions(-)
diff --git a/WORKSPACE b/WORKSPACE
index e80104124..3da160eda 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -3,7 +3,7 @@ workspace(
managed_directories = {"@npm": ["node_modules"]})
load("//defs:build.bzl", "install_dependencies")
-load("//defs:config.bzl", "CHROMIUM", "FIREFOX", "SAUCE", "GRAALVM_VERSION", "GRAALVM_JDK_VERSION")
+load("//defs:config.bzl", "CHROMIUM", "FIREFOX", "SAUCE", "GRAALVM_VERSION", "GRAALVM_JDK_VERSION", "K8S_VERSION")
install_dependencies()
load("//defs:workspace.bzl", "setup_workspace")
@@ -190,10 +190,6 @@ grpc_java_repositories()
load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps")
protobuf_deps()
-## Kubernetes/Bazel
-load("@io_bazel_rules_k8s//k8s:k8s.bzl", "k8s_repositories")
-k8s_repositories()
-
load("@io_bazel_rules_k8s//k8s:k8s_go_deps.bzl", k8s_go_deps = "deps")
k8s_go_deps()
@@ -229,8 +225,19 @@ container_pull(
)
## K8S Setup
-load("@io_bazel_rules_k8s//k8s:k8s.bzl", "k8s_defaults")
+load("@io_bazel_rules_k8s//toolchains/kubectl:kubectl_configure.bzl", "kubectl_configure")
+kubectl_configure(
+ name="k8s_config",
+ build_srcs = True,
+ k8s_commit = "v1.13.1",
+ k8s_sha256 = "677d2a5021c3826a9122de5a9c8827fed4f28352c6abacb336a1a5a007e434b7",
+ k8s_prefix = "kubernetes-1.13.1"
+)
+load("@io_bazel_rules_k8s//k8s:k8s.bzl", "k8s_repositories")
+k8s_repositories()
+
+load("@io_bazel_rules_k8s//k8s:k8s.bzl", "k8s_defaults")
k8s_defaults(
name = "k9",
kind = "deployment",
diff --git a/defs/config.bzl b/defs/config.bzl
index c6869d2ae..f27191a54 100644
--- a/defs/config.bzl
+++ b/defs/config.bzl
@@ -93,3 +93,8 @@ JAVA_LANGUAGE_LEVEL = "11"
## ------------------------------------
## Sets the Kotlin API and runtime version.
KOTLIN_LANGUAGE_LEVEL = "1.3"
+
+## Kubernetes toolchain version.
+## ------------------------------------
+## Sets the version for the Kubectl tool, etc.
+K8S_VERSION = "1.13.12"
From ca55aed1ddc790a627c1de7a02e4d78e4ccdecc4 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Thu, 27 Feb 2020 17:45:59 -0800
Subject: [PATCH 046/103] Attempt fix for K8S transitive load
---
WORKSPACE | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/WORKSPACE b/WORKSPACE
index 3da160eda..fe557b155 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -229,9 +229,9 @@ load("@io_bazel_rules_k8s//toolchains/kubectl:kubectl_configure.bzl", "kubectl_c
kubectl_configure(
name="k8s_config",
build_srcs = True,
- k8s_commit = "v1.13.1",
- k8s_sha256 = "677d2a5021c3826a9122de5a9c8827fed4f28352c6abacb336a1a5a007e434b7",
- k8s_prefix = "kubernetes-1.13.1"
+ k8s_commit = "v%s" % K8S_VERSION,
+ k8s_prefix = "kubernetes-%s" % K8S_VERSION,
+ k8s_sha256 = "bfbc45fb886c837d9dd81fea0ef7d2ea4726d821de75fd1ff121aff6bc28ace0",
)
load("@io_bazel_rules_k8s//k8s:k8s.bzl", "k8s_repositories")
From 8a2ffd8faefc1898cca9d76593bc5c9b80c03db1 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Thu, 27 Feb 2020 18:51:46 -0800
Subject: [PATCH 047/103] Upgrade K8S > 1.15.9
---
defs/config.bzl | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/defs/config.bzl b/defs/config.bzl
index f27191a54..9caaeb8f8 100644
--- a/defs/config.bzl
+++ b/defs/config.bzl
@@ -97,4 +97,4 @@ KOTLIN_LANGUAGE_LEVEL = "1.3"
## Kubernetes toolchain version.
## ------------------------------------
## Sets the version for the Kubectl tool, etc.
-K8S_VERSION = "1.13.12"
+K8S_VERSION = "1.15.9"
From 5021d042e2551f31be5a3d02624c9db56f4de715 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Fri, 28 Feb 2020 17:09:07 -0800
Subject: [PATCH 048/103] Update K8S hash, add dep on infrastructure tools
---
WORKSPACE | 2 +-
defs/build.bzl | 7 +++++++
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/WORKSPACE b/WORKSPACE
index fe557b155..47ed92c80 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -231,7 +231,7 @@ kubectl_configure(
build_srcs = True,
k8s_commit = "v%s" % K8S_VERSION,
k8s_prefix = "kubernetes-%s" % K8S_VERSION,
- k8s_sha256 = "bfbc45fb886c837d9dd81fea0ef7d2ea4726d821de75fd1ff121aff6bc28ace0",
+ k8s_sha256 = "e091944229641c5b2b2a6ac57767802548b50830cf6710bc676e851bd8233f74",
)
load("@io_bazel_rules_k8s//k8s:k8s.bzl", "k8s_repositories")
diff --git a/defs/build.bzl b/defs/build.bzl
index 418b6d77e..caf6d27ed 100644
--- a/defs/build.bzl
+++ b/defs/build.bzl
@@ -272,6 +272,13 @@ DEPS = {
"target": "1c2769383f027befac5b75b6cedd25daf3bf4dcf",
"seal": "a3d4de4f03cb321ef943678d72a045c9a19d26b23d6f4e313f97600c65201a27"},
+ # Kubernetes: Build Tools
+ "io_kubernetes_build": {
+ "type": "github",
+ "repo": "kubernetes/repo-infra",
+ "target": "dccb5aa645ea455a1c8c4c97a2a72b640036efc9",
+ "seal": "f4a99337b43b742d35f8592055af72aeb5ea0cdfa1acadd99d9e972d9aedd2b1"},
+
# Google: Closure Stylesheets
"com_google_closure_stylesheets": {
"type": "java",
From 2245c9d844db9b04618adc24f4e28333052080c4 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Fri, 28 Feb 2020 17:20:29 -0800
Subject: [PATCH 049/103] Switchup alias for K8S repo infra
---
defs/build.bzl | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/defs/build.bzl b/defs/build.bzl
index caf6d27ed..83dc72067 100644
--- a/defs/build.bzl
+++ b/defs/build.bzl
@@ -273,7 +273,7 @@ DEPS = {
"seal": "a3d4de4f03cb321ef943678d72a045c9a19d26b23d6f4e313f97600c65201a27"},
# Kubernetes: Build Tools
- "io_kubernetes_build": {
+ "io_k8s_repo_infra": {
"type": "github",
"repo": "kubernetes/repo-infra",
"target": "dccb5aa645ea455a1c8c4c97a2a72b640036efc9",
From 64224facae95cbcefc274a1074779577cdde412c Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Fri, 28 Feb 2020 17:30:49 -0800
Subject: [PATCH 050/103] Apply incompatible trip flags to fix K8S in GCB
---
defs/build.bzl | 2 +-
tools/bazel.rc | 3 +++
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/defs/build.bzl b/defs/build.bzl
index 83dc72067..caf6d27ed 100644
--- a/defs/build.bzl
+++ b/defs/build.bzl
@@ -273,7 +273,7 @@ DEPS = {
"seal": "a3d4de4f03cb321ef943678d72a045c9a19d26b23d6f4e313f97600c65201a27"},
# Kubernetes: Build Tools
- "io_k8s_repo_infra": {
+ "io_kubernetes_build": {
"type": "github",
"repo": "kubernetes/repo-infra",
"target": "dccb5aa645ea455a1c8c4c97a2a72b640036efc9",
diff --git a/tools/bazel.rc b/tools/bazel.rc
index d21241350..de34b81c2 100644
--- a/tools/bazel.rc
+++ b/tools/bazel.rc
@@ -15,6 +15,9 @@ build --define cluster=gke_bloom-sandbox_us-west2-c_k9-v4c
common --experimental_allow_incremental_repository_updates
+run --incompatible_depset_union=false
+build --incompatible_depset_union=false
+
build --watchfs
build --symlink_prefix=dist/
build --nolegacy_external_runfiles
From be9c2f56fbc60f007efbb9e64fe45090ca222bc3 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Fri, 28 Feb 2020 17:41:47 -0800
Subject: [PATCH 051/103] Alias K8S repo
---
defs/build.bzl | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/defs/build.bzl b/defs/build.bzl
index caf6d27ed..99132b72c 100644
--- a/defs/build.bzl
+++ b/defs/build.bzl
@@ -279,6 +279,13 @@ DEPS = {
"target": "dccb5aa645ea455a1c8c4c97a2a72b640036efc9",
"seal": "f4a99337b43b742d35f8592055af72aeb5ea0cdfa1acadd99d9e972d9aedd2b1"},
+ # Kubernetes: Build Tools (x2)
+ "io_k8s_repo_infra": {
+ "type": "github",
+ "repo": "kubernetes/repo-infra",
+ "target": "dccb5aa645ea455a1c8c4c97a2a72b640036efc9",
+ "seal": "f4a99337b43b742d35f8592055af72aeb5ea0cdfa1acadd99d9e972d9aedd2b1"},
+
# Google: Closure Stylesheets
"com_google_closure_stylesheets": {
"type": "java",
From 408842e815ae663df19e5e1195d47776270834eb Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Fri, 28 Feb 2020 18:10:33 -0800
Subject: [PATCH 052/103] Clean up K8S tools reference
---
WORKSPACE | 3 +++
defs/build.bzl | 7 -------
2 files changed, 3 insertions(+), 7 deletions(-)
diff --git a/WORKSPACE b/WORKSPACE
index 47ed92c80..b4f42118f 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -232,6 +232,9 @@ kubectl_configure(
k8s_commit = "v%s" % K8S_VERSION,
k8s_prefix = "kubernetes-%s" % K8S_VERSION,
k8s_sha256 = "e091944229641c5b2b2a6ac57767802548b50830cf6710bc676e851bd8233f74",
+ k8s_repo_tools_commit = "df02ded38f9506e5bbcbf21702034b4fef815f2f",
+ k8s_repo_tools_prefix = "repo-infra-df02ded38f9506e5bbcbf21702034b4fef815f2f",
+ k8s_repo_tools_sha = "4a8384320fba401cbf21fef177aa113ed8fe35952ace98e00b796cac87ae7868",
)
load("@io_bazel_rules_k8s//k8s:k8s.bzl", "k8s_repositories")
diff --git a/defs/build.bzl b/defs/build.bzl
index 99132b72c..caf6d27ed 100644
--- a/defs/build.bzl
+++ b/defs/build.bzl
@@ -279,13 +279,6 @@ DEPS = {
"target": "dccb5aa645ea455a1c8c4c97a2a72b640036efc9",
"seal": "f4a99337b43b742d35f8592055af72aeb5ea0cdfa1acadd99d9e972d9aedd2b1"},
- # Kubernetes: Build Tools (x2)
- "io_k8s_repo_infra": {
- "type": "github",
- "repo": "kubernetes/repo-infra",
- "target": "dccb5aa645ea455a1c8c4c97a2a72b640036efc9",
- "seal": "f4a99337b43b742d35f8592055af72aeb5ea0cdfa1acadd99d9e972d9aedd2b1"},
-
# Google: Closure Stylesheets
"com_google_closure_stylesheets": {
"type": "java",
From 5ea50ec2909c6401c529f8fbc36646e17faeaaea Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Fri, 28 Feb 2020 18:52:20 -0800
Subject: [PATCH 053/103] Add custom builder image for deploy, use it
---
.ci/Dockerfile | 18 ++++++++++++++++++
cloudbuild.yaml | 2 +-
2 files changed, 19 insertions(+), 1 deletion(-)
create mode 100644 .ci/Dockerfile
diff --git a/.ci/Dockerfile b/.ci/Dockerfile
new file mode 100644
index 000000000..83ac9dbab
--- /dev/null
+++ b/.ci/Dockerfile
@@ -0,0 +1,18 @@
+
+FROM gcr.io/cloud-marketplace/google/ubuntu1804@sha256:ca6f2441610b5eca910cb7e5d8494df11e539743d57e87abfc71f85f3d634d94
+RUN apt-get update \
+ && apt-get upgrade -y \
+ && apt-get install -y python3 \
+ && curl -sSL https://sdk.cloud.google.com > /tmp/gcl && bash /tmp/gcl --install-dir=/gcloud --disable-prompts \
+ && mkdir -p /bazelisk/bin \
+ && curl -sSL https://github.com/bazelbuild/bazelisk/releases/download/v1.3.0/bazelisk-linux-amd64 > /bazelisk/bin/bazelisk \
+ && chmod +x /bazelisk/bin/bazelisk \
+ && /gcloud/google-cloud-sdk/bin/gcloud components install \
+ appctl kpt kubectl bq gsutil docker-credential-gcr alpha beta \
+ && rm -rf /var/lib/apt/lists/* \
+ && echo "Installation done."
+
+ENV PATH $PATH:/gcloud/google-cloud-sdk/bin:/bazelisk/bin
+
+ENTRYPOINT ["/bazelisk/bin/bazelisk"]
+
diff --git a/cloudbuild.yaml b/cloudbuild.yaml
index c0ccfc2cf..3fa35f247 100644
--- a/cloudbuild.yaml
+++ b/cloudbuild.yaml
@@ -62,7 +62,7 @@ steps:
- //samples/todolist/src/config:envoy.replace
# Deploy: K8S (Todolist)
-- name: 'l.gcr.io/google/bazel:2.1.0'
+- name: 'us.gcr.io/elide-tools/tools/gcb:v1a'
id: deploy-todolist
args:
- --bazelrc=.bazelrc
From 13037f1dc0e37a17bca7e0d605d0ae92967aae85 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Fri, 28 Feb 2020 19:07:28 -0800
Subject: [PATCH 054/103] Switch up GCB image for 2nd-to-last build step
---
cloudbuild.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cloudbuild.yaml b/cloudbuild.yaml
index 3fa35f247..5cc667e7c 100644
--- a/cloudbuild.yaml
+++ b/cloudbuild.yaml
@@ -52,7 +52,7 @@ steps:
]
# Deploy: K8S (Envoy)
-- name: 'l.gcr.io/google/bazel:2.1.0'
+- name: 'us.gcr.io/elide-tools/tools/gcb:v1a'
id: deploy-envoy
args:
- --bazelrc=.bazelrc
From c3156a551650c6dc092f181d1def44e4f14b50a1 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Fri, 28 Feb 2020 19:21:18 -0800
Subject: [PATCH 055/103] Upgrade GCB image -> v1b
---
.ci/Dockerfile | 2 +-
cloudbuild.yaml | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/.ci/Dockerfile b/.ci/Dockerfile
index 83ac9dbab..5919fa4d9 100644
--- a/.ci/Dockerfile
+++ b/.ci/Dockerfile
@@ -2,7 +2,7 @@
FROM gcr.io/cloud-marketplace/google/ubuntu1804@sha256:ca6f2441610b5eca910cb7e5d8494df11e539743d57e87abfc71f85f3d634d94
RUN apt-get update \
&& apt-get upgrade -y \
- && apt-get install -y python3 \
+ && apt-get install -y python3 build-essential \
&& curl -sSL https://sdk.cloud.google.com > /tmp/gcl && bash /tmp/gcl --install-dir=/gcloud --disable-prompts \
&& mkdir -p /bazelisk/bin \
&& curl -sSL https://github.com/bazelbuild/bazelisk/releases/download/v1.3.0/bazelisk-linux-amd64 > /bazelisk/bin/bazelisk \
diff --git a/cloudbuild.yaml b/cloudbuild.yaml
index 5cc667e7c..221308d78 100644
--- a/cloudbuild.yaml
+++ b/cloudbuild.yaml
@@ -52,7 +52,7 @@ steps:
]
# Deploy: K8S (Envoy)
-- name: 'us.gcr.io/elide-tools/tools/gcb:v1a'
+- name: 'us.gcr.io/elide-tools/tools/gcb:v1b'
id: deploy-envoy
args:
- --bazelrc=.bazelrc
@@ -62,7 +62,7 @@ steps:
- //samples/todolist/src/config:envoy.replace
# Deploy: K8S (Todolist)
-- name: 'us.gcr.io/elide-tools/tools/gcb:v1a'
+- name: 'us.gcr.io/elide-tools/tools/gcb:v1b'
id: deploy-todolist
args:
- --bazelrc=.bazelrc
From 2d980e57b1fdee51ce3adf877874a46e7e6b30ab Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Fri, 28 Feb 2020 19:22:35 -0800
Subject: [PATCH 056/103] Shift build steps to GCB image
---
cloudbuild.yaml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/cloudbuild.yaml b/cloudbuild.yaml
index 221308d78..68dc53ca4 100644
--- a/cloudbuild.yaml
+++ b/cloudbuild.yaml
@@ -2,7 +2,7 @@
steps:
# Build: Gust Framework
-- name: 'l.gcr.io/google/bazel:2.1.0'
+- name: 'us.gcr.io/elide-tools/tools/gcb:v1b'
id: build
args:
- --bazelrc=.bazelrc
@@ -12,7 +12,7 @@ steps:
- //gust/...
# Image build: Todolist App
-- name: 'l.gcr.io/google/bazel:2.1.0'
+- name: 'us.gcr.io/elide-tools/tools/gcb:v1b'
id: todolist
args:
- --bazelrc=.bazelrc
From f55ba12ab776dce565909217eb7bfa07343443b9 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Fri, 28 Feb 2020 19:26:48 -0800
Subject: [PATCH 057/103] Add Alpine version of builder image
---
.ci/Dockerfile.alpine | 38 +++++++++++++++++++++++++++
.ci/{Dockerfile => Dockerfile.ubuntu} | 0
2 files changed, 38 insertions(+)
create mode 100644 .ci/Dockerfile.alpine
rename .ci/{Dockerfile => Dockerfile.ubuntu} (100%)
diff --git a/.ci/Dockerfile.alpine b/.ci/Dockerfile.alpine
new file mode 100644
index 000000000..3789376cc
--- /dev/null
+++ b/.ci/Dockerfile.alpine
@@ -0,0 +1,38 @@
+
+FROM docker:17.12.0-ce as static-docker-source
+
+FROM alpine:3.11
+ARG CLOUD_SDK_VERSION=282.0.0
+ENV CLOUD_SDK_VERSION=$CLOUD_SDK_VERSION
+ENV CLOUDSDK_PYTHON=python3
+
+ENV PATH /google-cloud-sdk/bin:$PATH
+COPY --from=static-docker-source /usr/local/bin/docker /usr/local/bin/docker
+RUN apk --no-cache add \
+ curl \
+ python3 \
+ py3-crcmod \
+ bash \
+ libc6-compat \
+ openssh-client \
+ git \
+ gnupg \
+ alpine-sdk \
+ && curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-${CLOUD_SDK_VERSION}-linux-x86_64.tar.gz && \
+ tar xzf google-cloud-sdk-${CLOUD_SDK_VERSION}-linux-x86_64.tar.gz && \
+ rm google-cloud-sdk-${CLOUD_SDK_VERSION}-linux-x86_64.tar.gz && \
+ gcloud config set core/disable_usage_reporting true && \
+ gcloud config set component_manager/disable_update_check true && \
+ gcloud config set metrics/environment github_docker_image && \
+ mkdir -p /bazelisk/bin && \
+ curl -sSL https://github.com/bazelbuild/bazelisk/releases/download/v1.3.0/bazelisk-linux-amd64 > /bazelisk/bin/bazelisk && \
+ chmod +x /bazelisk/bin/bazelisk && \
+ /google/cloud-sdk/bin/gcloud components install \
+ appctl kpt kubectl bq gsutil docker-credential-gcr alpha beta && \
+ rm -rf /var/cache/apk/* && \
+ gcloud --version && \
+ echo "Installation done."
+
+VOLUME ["/root/.config"]
+ENTRYPOINT ["/bazelisk/bin/bazelisk"]
+
diff --git a/.ci/Dockerfile b/.ci/Dockerfile.ubuntu
similarity index 100%
rename from .ci/Dockerfile
rename to .ci/Dockerfile.ubuntu
From a47b3bf98c0b73c2267ec172983043c65b8894c1 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Fri, 28 Feb 2020 19:35:06 -0800
Subject: [PATCH 058/103] Prep CI image for use
---
.ci/{Dockerfile.alpine => Dockerfile} | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename .ci/{Dockerfile.alpine => Dockerfile} (100%)
diff --git a/.ci/Dockerfile.alpine b/.ci/Dockerfile
similarity index 100%
rename from .ci/Dockerfile.alpine
rename to .ci/Dockerfile
From 5e751fbfeba8c789a543edc8cb6d35c60f43e67b Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Fri, 28 Feb 2020 19:44:01 -0800
Subject: [PATCH 059/103] Back to Ubuntu builder, install OpenJDK
---
.ci/Dockerfile | 46 ++++++++++++-------------------------------
.ci/Dockerfile.alpine | 38 +++++++++++++++++++++++++++++++++++
.ci/Dockerfile.ubuntu | 18 -----------------
cloudbuild.yaml | 8 ++++----
4 files changed, 55 insertions(+), 55 deletions(-)
create mode 100644 .ci/Dockerfile.alpine
delete mode 100644 .ci/Dockerfile.ubuntu
diff --git a/.ci/Dockerfile b/.ci/Dockerfile
index 3789376cc..620dd18a9 100644
--- a/.ci/Dockerfile
+++ b/.ci/Dockerfile
@@ -1,38 +1,18 @@
-FROM docker:17.12.0-ce as static-docker-source
+FROM gcr.io/cloud-marketplace/google/ubuntu1804@sha256:ca6f2441610b5eca910cb7e5d8494df11e539743d57e87abfc71f85f3d634d94
+RUN apt-get update \
+ && apt-get upgrade -y \
+ && apt-get install -y python3 build-essential default-jdk \
+ && curl -sSL https://sdk.cloud.google.com > /tmp/gcl && bash /tmp/gcl --install-dir=/gcloud --disable-prompts \
+ && mkdir -p /bazelisk/bin \
+ && curl -sSL https://github.com/bazelbuild/bazelisk/releases/download/v1.3.0/bazelisk-linux-amd64 > /bazelisk/bin/bazelisk \
+ && chmod +x /bazelisk/bin/bazelisk \
+ && /gcloud/google-cloud-sdk/bin/gcloud components install \
+ appctl kpt kubectl bq gsutil docker-credential-gcr alpha beta \
+ && rm -rf /var/lib/apt/lists/* \
+ && echo "Installation done."
-FROM alpine:3.11
-ARG CLOUD_SDK_VERSION=282.0.0
-ENV CLOUD_SDK_VERSION=$CLOUD_SDK_VERSION
-ENV CLOUDSDK_PYTHON=python3
+ENV PATH $PATH:/gcloud/google-cloud-sdk/bin:/bazelisk/bin
-ENV PATH /google-cloud-sdk/bin:$PATH
-COPY --from=static-docker-source /usr/local/bin/docker /usr/local/bin/docker
-RUN apk --no-cache add \
- curl \
- python3 \
- py3-crcmod \
- bash \
- libc6-compat \
- openssh-client \
- git \
- gnupg \
- alpine-sdk \
- && curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-${CLOUD_SDK_VERSION}-linux-x86_64.tar.gz && \
- tar xzf google-cloud-sdk-${CLOUD_SDK_VERSION}-linux-x86_64.tar.gz && \
- rm google-cloud-sdk-${CLOUD_SDK_VERSION}-linux-x86_64.tar.gz && \
- gcloud config set core/disable_usage_reporting true && \
- gcloud config set component_manager/disable_update_check true && \
- gcloud config set metrics/environment github_docker_image && \
- mkdir -p /bazelisk/bin && \
- curl -sSL https://github.com/bazelbuild/bazelisk/releases/download/v1.3.0/bazelisk-linux-amd64 > /bazelisk/bin/bazelisk && \
- chmod +x /bazelisk/bin/bazelisk && \
- /google/cloud-sdk/bin/gcloud components install \
- appctl kpt kubectl bq gsutil docker-credential-gcr alpha beta && \
- rm -rf /var/cache/apk/* && \
- gcloud --version && \
- echo "Installation done."
-
-VOLUME ["/root/.config"]
ENTRYPOINT ["/bazelisk/bin/bazelisk"]
diff --git a/.ci/Dockerfile.alpine b/.ci/Dockerfile.alpine
new file mode 100644
index 000000000..3789376cc
--- /dev/null
+++ b/.ci/Dockerfile.alpine
@@ -0,0 +1,38 @@
+
+FROM docker:17.12.0-ce as static-docker-source
+
+FROM alpine:3.11
+ARG CLOUD_SDK_VERSION=282.0.0
+ENV CLOUD_SDK_VERSION=$CLOUD_SDK_VERSION
+ENV CLOUDSDK_PYTHON=python3
+
+ENV PATH /google-cloud-sdk/bin:$PATH
+COPY --from=static-docker-source /usr/local/bin/docker /usr/local/bin/docker
+RUN apk --no-cache add \
+ curl \
+ python3 \
+ py3-crcmod \
+ bash \
+ libc6-compat \
+ openssh-client \
+ git \
+ gnupg \
+ alpine-sdk \
+ && curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-${CLOUD_SDK_VERSION}-linux-x86_64.tar.gz && \
+ tar xzf google-cloud-sdk-${CLOUD_SDK_VERSION}-linux-x86_64.tar.gz && \
+ rm google-cloud-sdk-${CLOUD_SDK_VERSION}-linux-x86_64.tar.gz && \
+ gcloud config set core/disable_usage_reporting true && \
+ gcloud config set component_manager/disable_update_check true && \
+ gcloud config set metrics/environment github_docker_image && \
+ mkdir -p /bazelisk/bin && \
+ curl -sSL https://github.com/bazelbuild/bazelisk/releases/download/v1.3.0/bazelisk-linux-amd64 > /bazelisk/bin/bazelisk && \
+ chmod +x /bazelisk/bin/bazelisk && \
+ /google/cloud-sdk/bin/gcloud components install \
+ appctl kpt kubectl bq gsutil docker-credential-gcr alpha beta && \
+ rm -rf /var/cache/apk/* && \
+ gcloud --version && \
+ echo "Installation done."
+
+VOLUME ["/root/.config"]
+ENTRYPOINT ["/bazelisk/bin/bazelisk"]
+
diff --git a/.ci/Dockerfile.ubuntu b/.ci/Dockerfile.ubuntu
deleted file mode 100644
index 5919fa4d9..000000000
--- a/.ci/Dockerfile.ubuntu
+++ /dev/null
@@ -1,18 +0,0 @@
-
-FROM gcr.io/cloud-marketplace/google/ubuntu1804@sha256:ca6f2441610b5eca910cb7e5d8494df11e539743d57e87abfc71f85f3d634d94
-RUN apt-get update \
- && apt-get upgrade -y \
- && apt-get install -y python3 build-essential \
- && curl -sSL https://sdk.cloud.google.com > /tmp/gcl && bash /tmp/gcl --install-dir=/gcloud --disable-prompts \
- && mkdir -p /bazelisk/bin \
- && curl -sSL https://github.com/bazelbuild/bazelisk/releases/download/v1.3.0/bazelisk-linux-amd64 > /bazelisk/bin/bazelisk \
- && chmod +x /bazelisk/bin/bazelisk \
- && /gcloud/google-cloud-sdk/bin/gcloud components install \
- appctl kpt kubectl bq gsutil docker-credential-gcr alpha beta \
- && rm -rf /var/lib/apt/lists/* \
- && echo "Installation done."
-
-ENV PATH $PATH:/gcloud/google-cloud-sdk/bin:/bazelisk/bin
-
-ENTRYPOINT ["/bazelisk/bin/bazelisk"]
-
diff --git a/cloudbuild.yaml b/cloudbuild.yaml
index 68dc53ca4..1eb4708fa 100644
--- a/cloudbuild.yaml
+++ b/cloudbuild.yaml
@@ -2,7 +2,7 @@
steps:
# Build: Gust Framework
-- name: 'us.gcr.io/elide-tools/tools/gcb:v1b'
+- name: 'us.gcr.io/elide-tools/tools/gcb:v1c'
id: build
args:
- --bazelrc=.bazelrc
@@ -12,7 +12,7 @@ steps:
- //gust/...
# Image build: Todolist App
-- name: 'us.gcr.io/elide-tools/tools/gcb:v1b'
+- name: 'us.gcr.io/elide-tools/tools/gcb:v1c'
id: todolist
args:
- --bazelrc=.bazelrc
@@ -52,7 +52,7 @@ steps:
]
# Deploy: K8S (Envoy)
-- name: 'us.gcr.io/elide-tools/tools/gcb:v1b'
+- name: 'us.gcr.io/elide-tools/tools/gcb:v1c'
id: deploy-envoy
args:
- --bazelrc=.bazelrc
@@ -62,7 +62,7 @@ steps:
- //samples/todolist/src/config:envoy.replace
# Deploy: K8S (Todolist)
-- name: 'us.gcr.io/elide-tools/tools/gcb:v1b'
+- name: 'us.gcr.io/elide-tools/tools/gcb:v1c'
id: deploy-todolist
args:
- --bazelrc=.bazelrc
From ad34fa82190bc2459772fea8f1c80f413f6ad718 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Fri, 28 Feb 2020 21:47:20 -0800
Subject: [PATCH 060/103] Add git to GCB environment
---
.ci/Dockerfile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.ci/Dockerfile b/.ci/Dockerfile
index 620dd18a9..00b822a42 100644
--- a/.ci/Dockerfile
+++ b/.ci/Dockerfile
@@ -2,7 +2,7 @@
FROM gcr.io/cloud-marketplace/google/ubuntu1804@sha256:ca6f2441610b5eca910cb7e5d8494df11e539743d57e87abfc71f85f3d634d94
RUN apt-get update \
&& apt-get upgrade -y \
- && apt-get install -y python3 build-essential default-jdk \
+ && apt-get install -y python3 build-essential default-jdk git \
&& curl -sSL https://sdk.cloud.google.com > /tmp/gcl && bash /tmp/gcl --install-dir=/gcloud --disable-prompts \
&& mkdir -p /bazelisk/bin \
&& curl -sSL https://github.com/bazelbuild/bazelisk/releases/download/v1.3.0/bazelisk-linux-amd64 > /bazelisk/bin/bazelisk \
From e072b63c028bd059ad6d2234c26f233c6e86394d Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 12:51:09 -0800
Subject: [PATCH 061/103] Auto-remove packages in builder image
---
.ci/Dockerfile | 1 +
1 file changed, 1 insertion(+)
diff --git a/.ci/Dockerfile b/.ci/Dockerfile
index 00b822a42..bc9c24611 100644
--- a/.ci/Dockerfile
+++ b/.ci/Dockerfile
@@ -3,6 +3,7 @@ FROM gcr.io/cloud-marketplace/google/ubuntu1804@sha256:ca6f2441610b5eca910cb7e5d
RUN apt-get update \
&& apt-get upgrade -y \
&& apt-get install -y python3 build-essential default-jdk git \
+ && apt-get autoremove \
&& curl -sSL https://sdk.cloud.google.com > /tmp/gcl && bash /tmp/gcl --install-dir=/gcloud --disable-prompts \
&& mkdir -p /bazelisk/bin \
&& curl -sSL https://github.com/bazelbuild/bazelisk/releases/download/v1.3.0/bazelisk-linux-amd64 > /bazelisk/bin/bazelisk \
From dfa595ac2710f5f3906c4ad5c7e0def5d69de8f0 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 12:51:38 -0800
Subject: [PATCH 062/103] Upgrade to builder v1d
---
cloudbuild.yaml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/cloudbuild.yaml b/cloudbuild.yaml
index 1eb4708fa..157ae1e38 100644
--- a/cloudbuild.yaml
+++ b/cloudbuild.yaml
@@ -2,7 +2,7 @@
steps:
# Build: Gust Framework
-- name: 'us.gcr.io/elide-tools/tools/gcb:v1c'
+- name: 'us.gcr.io/elide-tools/tools/gcb:v1d'
id: build
args:
- --bazelrc=.bazelrc
@@ -12,7 +12,7 @@ steps:
- //gust/...
# Image build: Todolist App
-- name: 'us.gcr.io/elide-tools/tools/gcb:v1c'
+- name: 'us.gcr.io/elide-tools/tools/gcb:v1d'
id: todolist
args:
- --bazelrc=.bazelrc
@@ -52,7 +52,7 @@ steps:
]
# Deploy: K8S (Envoy)
-- name: 'us.gcr.io/elide-tools/tools/gcb:v1c'
+- name: 'us.gcr.io/elide-tools/tools/gcb:v1d'
id: deploy-envoy
args:
- --bazelrc=.bazelrc
@@ -62,7 +62,7 @@ steps:
- //samples/todolist/src/config:envoy.replace
# Deploy: K8S (Todolist)
-- name: 'us.gcr.io/elide-tools/tools/gcb:v1c'
+- name: 'us.gcr.io/elide-tools/tools/gcb:v1d'
id: deploy-todolist
args:
- --bazelrc=.bazelrc
From 2c58a2ab9d7ea10507ddea0365912cb0d791768c Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 13:52:55 -0800
Subject: [PATCH 063/103] Add unzip to build image :eyeroll:
---
.ci/Dockerfile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.ci/Dockerfile b/.ci/Dockerfile
index bc9c24611..50af87a6f 100644
--- a/.ci/Dockerfile
+++ b/.ci/Dockerfile
@@ -2,7 +2,7 @@
FROM gcr.io/cloud-marketplace/google/ubuntu1804@sha256:ca6f2441610b5eca910cb7e5d8494df11e539743d57e87abfc71f85f3d634d94
RUN apt-get update \
&& apt-get upgrade -y \
- && apt-get install -y python3 build-essential default-jdk git \
+ && apt-get install -y python3 build-essential default-jdk git golang unzip \
&& apt-get autoremove \
&& curl -sSL https://sdk.cloud.google.com > /tmp/gcl && bash /tmp/gcl --install-dir=/gcloud --disable-prompts \
&& mkdir -p /bazelisk/bin \
From de2dc64944f8ac1020059258d9891fbabb5f98ae Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 13:53:39 -0800
Subject: [PATCH 064/103] Version bump for build image -> v1e
---
cloudbuild.yaml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/cloudbuild.yaml b/cloudbuild.yaml
index 157ae1e38..8a3898cc2 100644
--- a/cloudbuild.yaml
+++ b/cloudbuild.yaml
@@ -2,7 +2,7 @@
steps:
# Build: Gust Framework
-- name: 'us.gcr.io/elide-tools/tools/gcb:v1d'
+- name: 'us.gcr.io/elide-tools/tools/gcb:v1e'
id: build
args:
- --bazelrc=.bazelrc
@@ -12,7 +12,7 @@ steps:
- //gust/...
# Image build: Todolist App
-- name: 'us.gcr.io/elide-tools/tools/gcb:v1d'
+- name: 'us.gcr.io/elide-tools/tools/gcb:v1e'
id: todolist
args:
- --bazelrc=.bazelrc
@@ -52,7 +52,7 @@ steps:
]
# Deploy: K8S (Envoy)
-- name: 'us.gcr.io/elide-tools/tools/gcb:v1d'
+- name: 'us.gcr.io/elide-tools/tools/gcb:v1e'
id: deploy-envoy
args:
- --bazelrc=.bazelrc
@@ -62,7 +62,7 @@ steps:
- //samples/todolist/src/config:envoy.replace
# Deploy: K8S (Todolist)
-- name: 'us.gcr.io/elide-tools/tools/gcb:v1d'
+- name: 'us.gcr.io/elide-tools/tools/gcb:v1e'
id: deploy-todolist
args:
- --bazelrc=.bazelrc
From 7e619bedaf6660208c33bbf7df92486b9f641841 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 14:43:16 -0800
Subject: [PATCH 065/103] Add regular Python package to GCB
---
.ci/Dockerfile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.ci/Dockerfile b/.ci/Dockerfile
index 50af87a6f..7ecccfb26 100644
--- a/.ci/Dockerfile
+++ b/.ci/Dockerfile
@@ -2,7 +2,7 @@
FROM gcr.io/cloud-marketplace/google/ubuntu1804@sha256:ca6f2441610b5eca910cb7e5d8494df11e539743d57e87abfc71f85f3d634d94
RUN apt-get update \
&& apt-get upgrade -y \
- && apt-get install -y python3 build-essential default-jdk git golang unzip \
+ && apt-get install -y python python3 build-essential default-jdk git golang unzip \
&& apt-get autoremove \
&& curl -sSL https://sdk.cloud.google.com > /tmp/gcl && bash /tmp/gcl --install-dir=/gcloud --disable-prompts \
&& mkdir -p /bazelisk/bin \
From eee35ace4e904d322f342b616f34fa84547a7e1f Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 14:43:24 -0800
Subject: [PATCH 066/103] Version bump for GCB -> v1f
---
cloudbuild.yaml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/cloudbuild.yaml b/cloudbuild.yaml
index 8a3898cc2..39e80d88d 100644
--- a/cloudbuild.yaml
+++ b/cloudbuild.yaml
@@ -2,7 +2,7 @@
steps:
# Build: Gust Framework
-- name: 'us.gcr.io/elide-tools/tools/gcb:v1e'
+- name: 'us.gcr.io/elide-tools/tools/gcb:v1f'
id: build
args:
- --bazelrc=.bazelrc
@@ -12,7 +12,7 @@ steps:
- //gust/...
# Image build: Todolist App
-- name: 'us.gcr.io/elide-tools/tools/gcb:v1e'
+- name: 'us.gcr.io/elide-tools/tools/gcb:v1f'
id: todolist
args:
- --bazelrc=.bazelrc
@@ -52,7 +52,7 @@ steps:
]
# Deploy: K8S (Envoy)
-- name: 'us.gcr.io/elide-tools/tools/gcb:v1e'
+- name: 'us.gcr.io/elide-tools/tools/gcb:v1f'
id: deploy-envoy
args:
- --bazelrc=.bazelrc
@@ -62,7 +62,7 @@ steps:
- //samples/todolist/src/config:envoy.replace
# Deploy: K8S (Todolist)
-- name: 'us.gcr.io/elide-tools/tools/gcb:v1e'
+- name: 'us.gcr.io/elide-tools/tools/gcb:v1f'
id: deploy-todolist
args:
- --bazelrc=.bazelrc
From b58a1c5243767980cf38c0d21beb30fca918ff91 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 15:05:44 -0800
Subject: [PATCH 067/103] Upgrade GCB image -> v1g (add symlink to gcloud)
---
.ci/Dockerfile | 4 ++++
cloudbuild.yaml | 8 ++++----
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/.ci/Dockerfile b/.ci/Dockerfile
index 7ecccfb26..7035a1e31 100644
--- a/.ci/Dockerfile
+++ b/.ci/Dockerfile
@@ -13,6 +13,10 @@ RUN apt-get update \
&& rm -rf /var/lib/apt/lists/* \
&& echo "Installation done."
+RUN mkdir -p /builder/google-cloud-sdk \
+ && ln -s /gcloud/google-cloud-sdk/bin /builder/google-cloud-sdk/bin \
+ && echo "Google Cloud SDK is ready."
+
ENV PATH $PATH:/gcloud/google-cloud-sdk/bin:/bazelisk/bin
ENTRYPOINT ["/bazelisk/bin/bazelisk"]
diff --git a/cloudbuild.yaml b/cloudbuild.yaml
index 39e80d88d..ea14de525 100644
--- a/cloudbuild.yaml
+++ b/cloudbuild.yaml
@@ -2,7 +2,7 @@
steps:
# Build: Gust Framework
-- name: 'us.gcr.io/elide-tools/tools/gcb:v1f'
+- name: 'us.gcr.io/elide-tools/tools/gcb:v1g'
id: build
args:
- --bazelrc=.bazelrc
@@ -12,7 +12,7 @@ steps:
- //gust/...
# Image build: Todolist App
-- name: 'us.gcr.io/elide-tools/tools/gcb:v1f'
+- name: 'us.gcr.io/elide-tools/tools/gcb:v1g'
id: todolist
args:
- --bazelrc=.bazelrc
@@ -52,7 +52,7 @@ steps:
]
# Deploy: K8S (Envoy)
-- name: 'us.gcr.io/elide-tools/tools/gcb:v1f'
+- name: 'us.gcr.io/elide-tools/tools/gcb:v1g'
id: deploy-envoy
args:
- --bazelrc=.bazelrc
@@ -62,7 +62,7 @@ steps:
- //samples/todolist/src/config:envoy.replace
# Deploy: K8S (Todolist)
-- name: 'us.gcr.io/elide-tools/tools/gcb:v1f'
+- name: 'us.gcr.io/elide-tools/tools/gcb:v1g'
id: deploy-todolist
args:
- --bazelrc=.bazelrc
From 5536506ef87b65dc239b615dd6d0f620ad2ea591 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 16:59:39 -0800
Subject: [PATCH 068/103] Fix Python rules in CI
---
.ci/Dockerfile | 12 +++++++-----
WORKSPACE | 36 ++++++++++++++++++------------------
cloudbuild.yaml | 8 ++++----
3 files changed, 29 insertions(+), 27 deletions(-)
diff --git a/.ci/Dockerfile b/.ci/Dockerfile
index 7035a1e31..cdba49de5 100644
--- a/.ci/Dockerfile
+++ b/.ci/Dockerfile
@@ -2,8 +2,10 @@
FROM gcr.io/cloud-marketplace/google/ubuntu1804@sha256:ca6f2441610b5eca910cb7e5d8494df11e539743d57e87abfc71f85f3d634d94
RUN apt-get update \
&& apt-get upgrade -y \
- && apt-get install -y python python3 build-essential default-jdk git golang unzip \
+ && apt-get install --no-install-recommends -y \
+ python python-pip python3 build-essential default-jdk git golang unzip \
&& apt-get autoremove \
+ && apt-get clean \
&& curl -sSL https://sdk.cloud.google.com > /tmp/gcl && bash /tmp/gcl --install-dir=/gcloud --disable-prompts \
&& mkdir -p /bazelisk/bin \
&& curl -sSL https://github.com/bazelbuild/bazelisk/releases/download/v1.3.0/bazelisk-linux-amd64 > /bazelisk/bin/bazelisk \
@@ -11,11 +13,11 @@ RUN apt-get update \
&& /gcloud/google-cloud-sdk/bin/gcloud components install \
appctl kpt kubectl bq gsutil docker-credential-gcr alpha beta \
&& rm -rf /var/lib/apt/lists/* \
- && echo "Installation done."
-
-RUN mkdir -p /builder/google-cloud-sdk \
+ && python2 -m pip install --upgrade \
+ pip setuptools wheel \
+ && mkdir -p /builder/google-cloud-sdk \
&& ln -s /gcloud/google-cloud-sdk/bin /builder/google-cloud-sdk/bin \
- && echo "Google Cloud SDK is ready."
+ && echo "Build image ready."
ENV PATH $PATH:/gcloud/google-cloud-sdk/bin:/bazelisk/bin
diff --git a/WORKSPACE b/WORKSPACE
index b4f42118f..df9134605 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -149,31 +149,31 @@ load("@io_bazel_stardoc//:setup.bzl", "stardoc_repositories")
stardoc_repositories()
## Python
-#load("@rules_python//python:repositories.bzl", "py_repositories")
-#py_repositories()
+load("@rules_python//python:repositories.bzl", "py_repositories")
+py_repositories()
-#load("@rules_python//python:pip.bzl", "pip_repositories")
-#pip_repositories()
+load("@rules_python//python:pip.bzl", "pip_repositories")
+pip_repositories()
-#load("@rules_python//python:pip.bzl", pip_import = "pip3_import")
+load("@rules_python//python:pip.bzl", pip_import = "pip3_import")
-#pip_import(
-# name = "py",
-# requirements = "//defs/toolchain/python:requirements_base.txt")
+pip_import(
+ name = "py",
+ requirements = "//defs/toolchain/python:requirements_base.txt")
-#pip_import(
-# name = "werkzeug",
-# requirements = "//defs/toolchain/python:requirements_werkzeug.txt")
+pip_import(
+ name = "werkzeug",
+ requirements = "//defs/toolchain/python:requirements_werkzeug.txt")
-#pip_import(
-# name = "grpc_python_dependencies",
-# requirements = "@com_github_grpc_grpc//:requirements.bazel.txt")
+pip_import(
+ name = "grpc_python_dependencies",
+ requirements = "@com_github_grpc_grpc//:requirements.bazel.txt")
-#load("@grpc_python_dependencies//:requirements.bzl", grpc_pip_install="pip_install")
-#grpc_pip_install()
+load("@grpc_python_dependencies//:requirements.bzl", grpc_pip_install="pip_install")
+grpc_pip_install()
-#load("//defs/toolchain/python:repos.bzl", "gust_python_repositories")
-#gust_python_repositories()
+load("//defs/toolchain/python:repos.bzl", "gust_python_repositories")
+gust_python_repositories()
## gRPC Core
load("@com_github_grpc_grpc//bazel:grpc_deps.bzl", "grpc_deps", "grpc_test_only_deps")
diff --git a/cloudbuild.yaml b/cloudbuild.yaml
index ea14de525..d87fdf537 100644
--- a/cloudbuild.yaml
+++ b/cloudbuild.yaml
@@ -2,7 +2,7 @@
steps:
# Build: Gust Framework
-- name: 'us.gcr.io/elide-tools/tools/gcb:v1g'
+- name: 'us.gcr.io/elide-tools/tools/gcb:v1h'
id: build
args:
- --bazelrc=.bazelrc
@@ -12,7 +12,7 @@ steps:
- //gust/...
# Image build: Todolist App
-- name: 'us.gcr.io/elide-tools/tools/gcb:v1g'
+- name: 'us.gcr.io/elide-tools/tools/gcb:v1h'
id: todolist
args:
- --bazelrc=.bazelrc
@@ -52,7 +52,7 @@ steps:
]
# Deploy: K8S (Envoy)
-- name: 'us.gcr.io/elide-tools/tools/gcb:v1g'
+- name: 'us.gcr.io/elide-tools/tools/gcb:v1h'
id: deploy-envoy
args:
- --bazelrc=.bazelrc
@@ -62,7 +62,7 @@ steps:
- //samples/todolist/src/config:envoy.replace
# Deploy: K8S (Todolist)
-- name: 'us.gcr.io/elide-tools/tools/gcb:v1g'
+- name: 'us.gcr.io/elide-tools/tools/gcb:v1h'
id: deploy-todolist
args:
- --bazelrc=.bazelrc
From 85a237be9fad02e29c45151cbc2d2aefb497bec2 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 17:01:03 -0800
Subject: [PATCH 069/103] Add todolist internal gateway
---
.../todolist/src/config/25-services.k8s.yaml | 29 +++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/samples/todolist/src/config/25-services.k8s.yaml b/samples/todolist/src/config/25-services.k8s.yaml
index c8d18b3e0..fba5e92f8 100644
--- a/samples/todolist/src/config/25-services.k8s.yaml
+++ b/samples/todolist/src/config/25-services.k8s.yaml
@@ -47,6 +47,35 @@ spec:
---
apiVersion: v1
kind: Service
+metadata:
+ name: todolist-gateway
+ namespace: todolist-gateway
+ labels:
+ app: todolist
+ role: server
+ environment: production
+ annotations:
+ cloud.google.com/load-balancer-type: "Internal"
+ networking.gke.io/internal-load-balancer-allow-global-access: "true"
+spec:
+ ports:
+ - name: tls-app
+ port: 8081
+ protocol: TCP
+ targetPort: 8081
+ - name: tls-rpc
+ port: 8082
+ protocol: TCP
+ targetPort: 8082
+ selector:
+ app: todolist
+ role: server
+ environment: production
+ type: LoadBalancer
+ publishNotReadyAddresses: yes
+---
+apiVersion: v1
+kind: Service
metadata:
name: gateway
namespace: todolist
From ba9d64944e0b64f7b6bb542b2b4d4014c40d6272 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 17:25:33 -0800
Subject: [PATCH 070/103] Fix pip issues in CI
---
.ci/Dockerfile | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/.ci/Dockerfile b/.ci/Dockerfile
index cdba49de5..4639fbdc6 100644
--- a/.ci/Dockerfile
+++ b/.ci/Dockerfile
@@ -3,7 +3,7 @@ FROM gcr.io/cloud-marketplace/google/ubuntu1804@sha256:ca6f2441610b5eca910cb7e5d
RUN apt-get update \
&& apt-get upgrade -y \
&& apt-get install --no-install-recommends -y \
- python python-pip python3 build-essential default-jdk git golang unzip \
+ python python-pip python3 python3-pip build-essential default-jdk git golang unzip \
&& apt-get autoremove \
&& apt-get clean \
&& curl -sSL https://sdk.cloud.google.com > /tmp/gcl && bash /tmp/gcl --install-dir=/gcloud --disable-prompts \
@@ -15,6 +15,8 @@ RUN apt-get update \
&& rm -rf /var/lib/apt/lists/* \
&& python2 -m pip install --upgrade \
pip setuptools wheel \
+ && python3 -m pip install --upgrade \
+ pip setuptools wheel \
&& mkdir -p /builder/google-cloud-sdk \
&& ln -s /gcloud/google-cloud-sdk/bin /builder/google-cloud-sdk/bin \
&& echo "Build image ready."
From 84b87b6c716a1b57c94390e75f12c31fb27e7863 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 17:26:44 -0800
Subject: [PATCH 071/103] Remove external LB for Todolist
---
.../todolist/src/config/25-services.k8s.yaml | 26 ++-----------------
1 file changed, 2 insertions(+), 24 deletions(-)
diff --git a/samples/todolist/src/config/25-services.k8s.yaml b/samples/todolist/src/config/25-services.k8s.yaml
index fba5e92f8..e7b8702ca 100644
--- a/samples/todolist/src/config/25-services.k8s.yaml
+++ b/samples/todolist/src/config/25-services.k8s.yaml
@@ -48,8 +48,8 @@ spec:
apiVersion: v1
kind: Service
metadata:
- name: todolist-gateway
- namespace: todolist-gateway
+ name: todolist-usw2
+ namespace: todolist
labels:
app: todolist
role: server
@@ -99,25 +99,3 @@ spec:
environment: production
type: NodePort
publishNotReadyAddresses: yes
----
-apiVersion: v1
-kind: Service
-metadata:
- name: gateway-ext
- namespace: todolist
- labels:
- app: todolist
- role: gateway
- environment: production
-spec:
- ports:
- - name: tls-ext
- port: 443
- protocol: TCP
- targetPort: 443
- selector:
- app: todolist
- role: gateway
- environment: production
- type: LoadBalancer
- publishNotReadyAddresses: yes
From 233f489b05893df3150447b2cfdcd10f1a52716c Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 17:28:08 -0800
Subject: [PATCH 072/103] Always use latest GCB builder
---
cloudbuild.yaml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/cloudbuild.yaml b/cloudbuild.yaml
index d87fdf537..13b6a40e3 100644
--- a/cloudbuild.yaml
+++ b/cloudbuild.yaml
@@ -2,7 +2,7 @@
steps:
# Build: Gust Framework
-- name: 'us.gcr.io/elide-tools/tools/gcb:v1h'
+- name: 'us.gcr.io/elide-tools/tools/gcb'
id: build
args:
- --bazelrc=.bazelrc
@@ -12,7 +12,7 @@ steps:
- //gust/...
# Image build: Todolist App
-- name: 'us.gcr.io/elide-tools/tools/gcb:v1h'
+- name: 'us.gcr.io/elide-tools/tools/gcb'
id: todolist
args:
- --bazelrc=.bazelrc
@@ -52,7 +52,7 @@ steps:
]
# Deploy: K8S (Envoy)
-- name: 'us.gcr.io/elide-tools/tools/gcb:v1h'
+- name: 'us.gcr.io/elide-tools/tools/gcb'
id: deploy-envoy
args:
- --bazelrc=.bazelrc
@@ -62,7 +62,7 @@ steps:
- //samples/todolist/src/config:envoy.replace
# Deploy: K8S (Todolist)
-- name: 'us.gcr.io/elide-tools/tools/gcb:v1h'
+- name: 'us.gcr.io/elide-tools/tools/gcb'
id: deploy-todolist
args:
- --bazelrc=.bazelrc
From 54bbda77845ed915e3b95b8bfa76bd5bae7d8356 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 17:34:23 -0800
Subject: [PATCH 073/103] Cleanup Python deps, add pypandoc to build env
---
.ci/Dockerfile | 4 ++++
defs/toolchain/python/requirements_base.txt | 3 +--
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/.ci/Dockerfile b/.ci/Dockerfile
index 4639fbdc6..f030e1374 100644
--- a/.ci/Dockerfile
+++ b/.ci/Dockerfile
@@ -17,6 +17,10 @@ RUN apt-get update \
pip setuptools wheel \
&& python3 -m pip install --upgrade \
pip setuptools wheel \
+ && python2 -m pip install --upgrade \
+ pypandoc \
+ && python3 -m pip install --upgrade \
+ pypandoc \
&& mkdir -p /builder/google-cloud-sdk \
&& ln -s /gcloud/google-cloud-sdk/bin /builder/google-cloud-sdk/bin \
&& echo "Build image ready."
diff --git a/defs/toolchain/python/requirements_base.txt b/defs/toolchain/python/requirements_base.txt
index 230fb9c41..7c0f8346d 100644
--- a/defs/toolchain/python/requirements_base.txt
+++ b/defs/toolchain/python/requirements_base.txt
@@ -1,2 +1 @@
-protobuf==3.11.2
-selenium_unittest==0.2.3
\ No newline at end of file
+protobuf==3.11.2
\ No newline at end of file
From 80cf2daf91aaf61b534e76c00a2093e9c526c07b Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 19:21:37 -0800
Subject: [PATCH 074/103] Support for ibazel-based development flow
- Call ibazel from Makefile when `m dev` is used
- Tweak flags and invocation to work
- Flush out issue with Soy render context
---
Makefile | 12 ++++++----
defs/conditions/BUILD.bazel | 17 +++++++++++++-
defs/config.bzl | 10 ++++++++
defs/toolchain/java/repos.bzl | 7 ++++--
defs/toolchain/java/rules.bzl | 23 ++++++++++++++++++-
samples/todolist/src/logback.xml | 1 +
samples/todolist/src/server/HomeController.kt | 14 ++++++++++-
tools/bazel.rc | 3 +++
8 files changed, 78 insertions(+), 9 deletions(-)
diff --git a/Makefile b/Makefile
index 4e2a228b0..3db66d5bc 100644
--- a/Makefile
+++ b/Makefile
@@ -55,11 +55,11 @@ COVERABLE ?= //javatests:suite
TAG ?=
TEST_ARGS ?= --test_output=errors
TEST_ARGS_WITH_COVERAGE ?= --combined_report=lcov --nocache_test_results
-BUILD_ARGS ?=
+BUILD_ARGS ?= --define project=$(PROJECT)
POSIX_FLAGS ?=
BAZELISK_ARGS ?=
-BASE_ARGS ?= --google_default_credentials=true --define project=$(PROJECT)
+BASE_ARGS ?=
# Flag: `FORCE_COVERAGE`
@@ -100,6 +100,7 @@ BAZELISK ?= /bin/bazelisk
GENHTML ?= /bin/genhtml
else
TAG += --config=dev
+IBAZEL ?= $(shell which ibazel)
BAZELISK ?= $(shell which bazelisk)
GENHTML ?= $(shell which genhtml)
endif
@@ -108,14 +109,14 @@ endif
ifeq ($(VERBOSE),yes)
BASE_ARGS += -s --verbose_failures
POSIX_FLAGS += -v
+_RULE =
else
-_RULE = @
-endif
# Flag: `QUIET`
ifeq ($(QUIET),yes)
_RULE = @
endif
+endif
all: devtools build test
@@ -127,6 +128,9 @@ b build: ## Build all framework targets.
r run: ## Run the specified target.
$(_RULE)$(BAZELISK) $(BAZELISK_ARGS) run $(TAG) $(BASE_ARGS) $(BUILD_ARGS) -- $(APP)
+d dev: ## Develop against the specified target.
+ $(_RULE)$(IBAZEL) run $(TAG) $(APP)
+
c clean: ## Clean ephemeral targets.
$(_RULE)$(BAZELISK) $(BAZELISK_ARGS) clean
diff --git a/defs/conditions/BUILD.bazel b/defs/conditions/BUILD.bazel
index 74f50ec5d..d15369232 100644
--- a/defs/conditions/BUILD.bazel
+++ b/defs/conditions/BUILD.bazel
@@ -3,11 +3,26 @@ package(
)
+## Condition: `debug`
+## ------------------------
+## Activates when running or building with Bazel's main debug mode active.
+config_setting(
+ name = "debug",
+ values = {"compilation_mode": "dbg"},
+)
+
+## Condition: `release`
+## ------------------------
+## Activates when running or building with Bazel's release mode active.
+config_setting(
+ name = "release",
+ values = {"compilation_mode": "opt"},
+)
+
## Condition: `zulu`
## ------------------------
## Activates when we are running in IntelliJ/locally.
config_setting(
name = "zulu",
values = {"define": "jdk=zulu"},
- visibility = ["//visibility:public"],
)
diff --git a/defs/config.bzl b/defs/config.bzl
index 9caaeb8f8..901998484 100644
--- a/defs/config.bzl
+++ b/defs/config.bzl
@@ -98,3 +98,13 @@ KOTLIN_LANGUAGE_LEVEL = "1.3"
## ------------------------------------
## Sets the version for the Kubectl tool, etc.
K8S_VERSION = "1.15.9"
+
+## Protobuf toolchain version.
+## ------------------------------------
+## Sets the version enforced throughout for Protobuf.
+PROTOBUF_VERSION = "3.11.4"
+
+## JVM-based app debug port.
+## ------------------------------------
+## Sets the port to wait/listen for remote JVM tools on (for launching a debugger).
+JVM_DEBUG_PORT = "5005"
diff --git a/defs/toolchain/java/repos.bzl b/defs/toolchain/java/repos.bzl
index 205770dc0..765715de7 100644
--- a/defs/toolchain/java/repos.bzl
+++ b/defs/toolchain/java/repos.bzl
@@ -16,7 +16,8 @@ load(
load(
"//defs:config.bzl",
- "GRAALVM_VERSION",
+ _GRAALVM_VERSION = "GRAALVM_VERSION",
+ _PROTOBUF_VERSION = "PROTOBUF_VERSION",
)
FETCH_SOURCES = True
@@ -25,7 +26,9 @@ STRICT_DEPENDENCIES = True
ASM_VERSION = "7.0"
SLF4J_VERSION = "1.7.26"
-PROTOBUF_VERSION = "3.11.4"
+GRAALVM_VERSION = _GRAALVM_VERSION
+
+PROTOBUF_VERSION = _PROTOBUF_VERSION
GCLOUD_API_VERSION = "3.4.0"
GCLOUD_FIRESTORE_VERSION = "1.32.4"
diff --git a/defs/toolchain/java/rules.bzl b/defs/toolchain/java/rules.bzl
index c316eaabf..f94f5e0a8 100644
--- a/defs/toolchain/java/rules.bzl
+++ b/defs/toolchain/java/rules.bzl
@@ -1,4 +1,9 @@
+load(
+ "//defs:config.bzl",
+ _JVM_DEBUG_PORT = "JVM_DEBUG_PORT",
+)
+
load(
"@rules_pkg//pkg:pkg.bzl",
_pkg_tar = "pkg_tar",
@@ -119,6 +124,15 @@ INJECTED_CONTROLLER_DEPS = [
]
+_JVM_APP_DEBUG_FLAGS = [
+ "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:%s" % _JVM_DEBUG_PORT,
+]
+
+_JVM_APP_RELEASE_FLAGS = [
+ # None yet.
+]
+
+
def _dedupe_deps(deps):
""" Deduplicate a set of string labels in a deps argument. """
@@ -337,6 +351,7 @@ def _micronaut_application(name,
jvm_flags = [],
defs = {},
ports = [],
+ tags = [],
inject_main = True,
reflection_configuration = None,
**kwargs):
@@ -488,7 +503,13 @@ def _micronaut_application(name,
resources = resources,
classpath_resources = [config, logging_config],
main_class = main_class or "gust.backend.Application",
- jvm_flags = computed_jvm_flags,
+ jvm_flags = computed_jvm_flags + select({
+ "//defs/conditions:release": _JVM_APP_RELEASE_FLAGS,
+ "//defs/conditions:debug": _JVM_APP_DEBUG_FLAGS,
+ }),
+ tags = (tags or []) + [
+ "ibazel_notify_changes",
+ ],
**kwargs
)
diff --git a/samples/todolist/src/logback.xml b/samples/todolist/src/logback.xml
index 9f668f300..984cb1cfb 100644
--- a/samples/todolist/src/logback.xml
+++ b/samples/todolist/src/logback.xml
@@ -11,4 +11,5 @@
+
diff --git a/samples/todolist/src/server/HomeController.kt b/samples/todolist/src/server/HomeController.kt
index 4cbe32b1d..9c96689c3 100644
--- a/samples/todolist/src/server/HomeController.kt
+++ b/samples/todolist/src/server/HomeController.kt
@@ -9,6 +9,7 @@ import io.micronaut.http.annotation.Get
import io.micronaut.http.annotation.QueryValue
import io.micronaut.security.annotation.Secured
import io.micronaut.views.View
+import org.slf4j.LoggerFactory
import javax.inject.Inject
@@ -20,6 +21,15 @@ import javax.inject.Inject
@Controller
@Secured("isAnonymous()")
class HomeController @Inject constructor (ctx: PageContextManager): AppController(ctx) {
+ companion object {
+ // Logging pipe.
+ @JvmStatic
+ private val logging = LoggerFactory.getLogger(HomeController::class.java)
+
+ // Default name to show.
+ private const val defaultName = "World"
+ }
+
/**
* `/` (`HTTP GET`): Handler for the root homepage for Todolist - i.e. `/`. Serves the preview page if the user isn't
* logged in, or the regular app page & container if they are.
@@ -35,7 +45,9 @@ class HomeController @Inject constructor (ctx: PageContextManager): AppControlle
*/
@Get("/", produces = [MediaType.TEXT_HTML])
@View("todolist.home.page")
- fun home(@QueryValue("name", defaultValue = "World") name: String): PageContext {
+ fun home(@QueryValue("name", defaultValue = defaultName) name: String): PageContext {
+ if (name != defaultName)
+ logging.info("Greeting user with name '$name'...")
return this.context
.put("name", name)
.render()
diff --git a/tools/bazel.rc b/tools/bazel.rc
index de34b81c2..890a84c71 100644
--- a/tools/bazel.rc
+++ b/tools/bazel.rc
@@ -18,6 +18,9 @@ common --experimental_allow_incremental_repository_updates
run --incompatible_depset_union=false
build --incompatible_depset_union=false
+build:dev --define=project=bloom-sandbox
+build:dev --google_default_credentials=true
+
build --watchfs
build --symlink_prefix=dist/
build --nolegacy_external_runfiles
From e682b1582d5969fc89610fe6dc3df25266fe3b18 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 19:22:31 -0800
Subject: [PATCH 075/103] Update Micronaut/Soy packages with context fix
---
defs/build.bzl | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/defs/build.bzl b/defs/build.bzl
index caf6d27ed..827fcaa6e 100644
--- a/defs/build.bzl
+++ b/defs/build.bzl
@@ -366,8 +366,8 @@ DEPS = {
"io_micronaut_micronaut_views": {
"type": "java",
"licenses": ["notice"],
- "targets": ["https://storage.googleapis.com/bloom-software/micronaut-views-core-1.3.2.BUILD.jar"],
- "seal": "e896ef7612ecfc9e62f400e4ab994a6868f9ec64206c3eaf16265801a3ca2300",
+ "targets": ["https://storage.googleapis.com/bloom-software/micronaut/b1/views-core-1.3.2.BUILD-SNAPSHOT.jar"],
+ "seal": "fbebc71ff66cc18513f45dcc200fc79bda23fabcba3a5c57db435a1985dc2e84",
"deps": [
maven("io.micronaut:micronaut-runtime"),
maven("io.micronaut:micronaut-http-client"),
@@ -380,8 +380,8 @@ DEPS = {
"io_micronaut_micronaut_views_soy": {
"type": "java",
"licenses": ["notice"],
- "targets": ["https://storage.googleapis.com/bloom-software/micronaut-views-soy-1.3.2.BUILD.jar"],
- "seal": "b4f94328ab0416c395eab55d5f8743f49ba66b7b514c5ffb4b3837fb36edc2d1",
+ "targets": ["https://storage.googleapis.com/bloom-software/micronaut/b1/views-soy-1.3.2.BUILD-SNAPSHOT.jar"],
+ "seal": "88b3e8f3eae9aef80377a0a98f9057acf716e8c65a9810c335423151949ba29e",
"deps": [
"@com_google_template_soy",
"@com_google_common_html_types",
From 9be87419b857885a58dd77608806cb3f4dfa5d0e Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 19:31:15 -0800
Subject: [PATCH 076/103] Fix access to ADC
---
Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
index 3db66d5bc..99edd67c0 100644
--- a/Makefile
+++ b/Makefile
@@ -77,7 +77,7 @@ endif
# Flag: `CACHE`.
ifeq ($(CACHE),yes)
-BASE_ARGS += --remote_cache=grpcs://remotebuildexecution.googleapis.com \
+BASE_ARGS += --remote_cache=grpcs://remotebuildexecution.googleapis.com --google_default_credentials=true \
--remote_instance_name=projects/$(PROJECT)/instances/$(RBE_INSTANCE) \
--host_platform_remote_properties_override='properties:{name:"cache-silo-key" value:"$(CACHE_KEY)"}'
endif
From 2f3bdb4fd18da895bb28d813fde7d62a6237e956 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 19:45:12 -0800
Subject: [PATCH 077/103] Add ibazel_live_reload to Java app targets
---
defs/toolchain/java/rules.bzl | 1 +
1 file changed, 1 insertion(+)
diff --git a/defs/toolchain/java/rules.bzl b/defs/toolchain/java/rules.bzl
index f94f5e0a8..1162be5dd 100644
--- a/defs/toolchain/java/rules.bzl
+++ b/defs/toolchain/java/rules.bzl
@@ -509,6 +509,7 @@ def _micronaut_application(name,
}),
tags = (tags or []) + [
"ibazel_notify_changes",
+ "ibazel_live_reload",
],
**kwargs
)
From 1eb24c5379de2d99ba5fd4aaae7bd928869257d3 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 19:49:38 -0800
Subject: [PATCH 078/103] Support Java-side live reload
---
defs/toolchain/java/rules.bzl | 1 -
1 file changed, 1 deletion(-)
diff --git a/defs/toolchain/java/rules.bzl b/defs/toolchain/java/rules.bzl
index 1162be5dd..34d8e62d4 100644
--- a/defs/toolchain/java/rules.bzl
+++ b/defs/toolchain/java/rules.bzl
@@ -508,7 +508,6 @@ def _micronaut_application(name,
"//defs/conditions:debug": _JVM_APP_DEBUG_FLAGS,
}),
tags = (tags or []) + [
- "ibazel_notify_changes",
"ibazel_live_reload",
],
**kwargs
From 8a072fa0a3996f614ad38150ee33aec13ae9e5f1 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 19:58:04 -0800
Subject: [PATCH 079/103] Re-enable test reporting, add Travis env vars
---
Makefile | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
index 99edd67c0..f0515fdb9 100644
--- a/Makefile
+++ b/Makefile
@@ -19,6 +19,7 @@ REGISTRY ?= bloomworks
PROJECT_NAME ?= GUST
ENABLE_REPORTCI ?= yes
JS_COVERAGE_REPORT ?= no
+CI_REPO ?= sgammon/GUST
SAMPLES ?= //samples/rest_mvc/java:MicronautMVCSample //samples/soy_ssr/src:MicronautSSRSample
@@ -193,7 +194,14 @@ report-tests: ## Report test results to Report.CI.
$(_RULE)cd reports && python -m junit2htmlreport tests.xml
ifeq ($(ENABLE_REPORTCI),yes)
@echo "Reporting test results..."
- $(_RULE)-curl -s https://raw.githubusercontent.com/report-ci/scripts/master/upload.py | python - --include='reports/tests.xml' --framework=junit
+ TRAVIS=true \
+ TRAVIS_COMMIT=$$BUILDKITE_COMMIT \
+ TRAVIS_BRANCH=$$BUILDKITE_BRANCH \
+ TRAVIS_COMMIT_MESSAGE=$$BUILDKITE_MESSAGE \
+ TRAVIS_PULL_REQUEST=$$BUILDKITE_PULL_REQUEST \
+ TRAVIS_PULL_REQUEST_BRANCH=$$BUILDKITE_PULL_REQUEST_BASE_BRANCH \
+ TRAVIS_REPO_SLUG=$(CI_REPO) \
+ $(_RULE)-curl -s https://raw.githubusercontent.com/report-ci/scripts/master/upload.py | python - --include='reports/tests.xml' --framework=junit
endif
report-coverage: ## Report coverage results to Codecov.
From 1210b1be21b555590501aef7e7677999a808a526 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 20:06:00 -0800
Subject: [PATCH 080/103] Stop upgrading deps in CI image
---
.ci/Dockerfile | 1 -
1 file changed, 1 deletion(-)
diff --git a/.ci/Dockerfile b/.ci/Dockerfile
index f030e1374..6f61eebd1 100644
--- a/.ci/Dockerfile
+++ b/.ci/Dockerfile
@@ -1,7 +1,6 @@
FROM gcr.io/cloud-marketplace/google/ubuntu1804@sha256:ca6f2441610b5eca910cb7e5d8494df11e539743d57e87abfc71f85f3d634d94
RUN apt-get update \
- && apt-get upgrade -y \
&& apt-get install --no-install-recommends -y \
python python-pip python3 python3-pip build-essential default-jdk git golang unzip \
&& apt-get autoremove \
From c315a42a445c1d985071c8a3dbf283e1c92b121a Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 20:07:33 -0800
Subject: [PATCH 081/103] Add Makefile task to build builder image
---
Makefile | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/Makefile b/Makefile
index f0515fdb9..25a2f930c 100644
--- a/Makefile
+++ b/Makefile
@@ -178,6 +178,10 @@ devtools: ## Install local development dependencies.
@echo "Installing devtools..."
$(_RULE)git submodule update --init --recursive
+builder-image: ## Build a new version of the CI builder image for Gust.
+ @echo "Building CI image..."
+ $(_RULE)gcloud builds submit ./.ci -t us.gcr.io/$(IMAGE_PROJECT)/tools/gcb
+
update-deps: ## Re-seal and update all dependencies.
@echo "Re-pinning Maven dependencies..."
$(_RULE)$(BAZELISK) $(BAZELISK_ARGS) run @unpinned_maven//:pin
From 2be97bae460620bb15c85c8d0df14a30d596c9fa Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 20:56:29 -0800
Subject: [PATCH 082/103] Major README and licensing cleanup/improvements
---
LICENSES.txt | 56 ++++++++++++++++++++-------
LICENSES/grpc-gateway.txt | 27 -------------
README.md | 81 ++++++++++++++++++++++++++++++++++++++-
3 files changed, 123 insertions(+), 41 deletions(-)
delete mode 100644 LICENSES/grpc-gateway.txt
diff --git a/LICENSES.txt b/LICENSES.txt
index cbc1951be..6e1fc2cee 100644
--- a/LICENSES.txt
+++ b/LICENSES.txt
@@ -10,16 +10,46 @@ Specifically, the following code elements were used:
---- Licenses ----
`rules_closure`:
-# Copyright 2016 The Closure Rules Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
+Copyright 2016 The Closure Rules Authors. All rights reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+`grpc-gateway`:
+Copyright (c) 2015, Gengo, Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ * Neither the name of Gengo, Inc. nor the names of its
+ contributors may be used to endorse or promote products derived from this
+ software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/LICENSES/grpc-gateway.txt b/LICENSES/grpc-gateway.txt
deleted file mode 100644
index 364516251..000000000
--- a/LICENSES/grpc-gateway.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-Copyright (c) 2015, Gengo, Inc.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- * Neither the name of Gengo, Inc. nor the names of its
- contributors may be used to endorse or promote products derived from this
- software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/README.md b/README.md
index 7376985d2..dcb02e8c5 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,87 @@
-
## `@elide-tools/elide` [![Build status](https://badge.buildkite.com/7a69b0fadb7d08b691e96177f589971a7646217b1a8b4a269e.svg)](https://buildkite.com/bloomworks/elide)
+Elide is a polyglot software application development framework. Bring the most road-tested toolchain on the planet to your development process, with [Bazel](https://bazel.build), [Protobuf](https://developers.google.com/protocol-buffers), [gRPC](https://grpc.io), [Soy](https://github.com/google/closure-templates), and more, all pre-integrated and tested out of the box. Early support is included for Java, Kotlin, Python, and NodeJS on the backend; Closure, TypeScript, or even Java on the frontend (transpiled to highly-optimized and type-checked JS); and Java, Kotlin, Swift, Objective-C and C/C++ for mobile applications.
+
+Runtime libraries are also published to support easy development of _web applications_ (in Java and Python using Soy), and _mobile applications_ (in Java and Swift). The framework is also capable of leveraging [GraalVM](https://graalvm.org) to build your app into a [native application](https://www.graalvm.org/docs/reference-manual/native-image/) (where supported), alleviating the need entirely for a JVM or Python runtime in your app containers. Native apps also have the nice benefit of _way_ shorter startup times (try `30ms`, lol!), and, in some cases, significant latency and memory use improvements.
+
+### Sample Apps
+
+As part of the framework code, a few sample apps are included. Each of these is usable as its own project, simply by copying the files in that directory to another location on disk, and then running `bazel build //...` from inside the new directory. Each sample app demonstrates diverse functionality supported by Elide, including supported languages and use cases, and at least one holistic application:
+
+- `rest_mvc` (Java): Example of RESTful servers with Micronaut.
+- `soy_ssr` (Java): Server-side-rendered pages with Soy and Micronaut.
+- `node_mvc` (TypeScript/JS): Server-side MVC app running in Node
+- `todolist` (Java/Closure): Full holistic app example (see below for more)
+
+### Todolist App ([Demo](https://todolist.apps.bloomworks.io))
+
+The richest and best example app is *Todolist*, which is designed to be an example SaaS startup in a box. This includes a server app, a web app, mobile apps (for Android and iOS), and full-blown declarative infrastructure to support it all. The app includes the following components and features:
+- **Devops toolkit**
+ - Support for testing in each language, with coverage
+ - Easy support for debugging the backend or frontend apps
+ - Coverage reporting to [Codecov](https://codecov.io)
+ - CI with [Buildkite](https://buildkite.com) and [GCB](https://cloud.google.com/cloud_build)
+ - Support for Google Cloud's RBE/RCE tools for shared build caching
+- **Hosting and serving via GKE/GCLB**
+ - Seamless production deployment from CI
+ - All-declarative infrastructure, from scratch
+ - Anycast hosting (IPv4 and IPv6) with [Cloud CDN](https://cloud.google.com/cdn) support
+ - Canary and blue/green deployment support
+ - Rich error reporting and production debugging/logging
+- **Server-side app written in Java and Micronaut**
+ - Central schema via [Protobuf](https://developers.google.com/protocol-buffers)
+ - SSR-based page serving with [Soy](https://github.com/google/closure-templates)
+ - Schema-driven [gRPC](https://grpc.io) services with [seamless Firebase auth](https://firebase.google.com/docs/auth)
+ - JSON/REST and Protobuf service invocation, via [Endpoints Service Proxy (ESP)](https://github.com/cloudendpoints/esp) and [Envoy](https://www.envoyproxy.io/)
+ - Automatic schema-driven object storage and querying via [Firestore](https://firebase.google.com/docs/firestore)
+ - Caching support via JSR-107 (JCache) and Redis
+ - Packaging via Docker with intelligent layering
+ - Native image support via [GraalVM](https://www.graalvm.org/)
+ - Rich support for frontend security and performance features
+ - Content Security Policy (CSP), with automatic JS nonces
+ - Style rewriting for CSS classes and IDs via Soy
+- **Client-side app written in Closure and J2CL**
+ - Strict type-checking of all frontend code
+ - Shared critical code between frontend and backend (via Java/[J2CL](https://github.com/google/j2cl)/[Elemental2](https://github.com/google/elemental2))
+ - [Re-hydrated Hybrid S3R/CSR](https://developers.google.com/web/updates/2019/02/rendering-on-the-web#rehydration) with [Incremental DOM](https://github.com/google/incremental-dom)
+ - Automatic, individual browser-tailored styles and scripts, built/served on the fly and aggressively cached
+ - Scripts compiled and bundled via [Closure Compiler](https://developers.google.com/closure/compiler)
+ - Styles compiled and bundled via [SCSS/SASS](https://sass-lang.com/), [GSS](https://github.com/google/closure-stylesheets), and [PostCSS](https://postcss.org/)
+- **Android and iOS apps**
+ - Generated workspace support via Bazel (Xcode/IntelliJ IDEA/Android Studio)
+ - Secure and declarative signing key material, via [Cloud KMS](https://cloud.google.com/kms)
+ - Seamless CI, CD, and release deployment (via App Store Connect and the Playstore)
+ - Automatic service invocation wiring via [Dagger](https://dagger.dev/) and [SwiftGRPC](https://github.com/grpc/grpc-swift)
+
+### Contributing
+
+To build the framework, you'll need Bazel/Bazelisk and a standard toolchain of stuff (C/C++ compilers, Docker, JDK 11+, Git, and so on). Bazel should tell you what you need if it can't fetch it for you. Otherwise, file a bug on this repo if you have trouble building the framework itself.
+
+Most development tasks on the framework involve the `Makefile`, which offers convenient invocation of common dev tools, including Bazelisk and `ibazel`. Running `make help` shows the commands supported, and generally returns something like this:
+```
+GUST Framework Tools:
+bases Build base images and push them.
+builder-image Build a new version of the CI builder image for Gust.
+devtools Install local development dependencies.
+distclean Clean targets, caches and dependencies.
+docs Build documentation for the framework.
+forceclean Clean everything, and sanitize the codebase (DANGEROUS).
+help Show this help text.
+release-images Pull, tag, and release Docker images.
+report-coverage Report coverage results to Codecov.
+report-tests Report test results to Report.CI.
+samples Build and push sample app images.
+serve-coverage Serve the current coverage report (must generate first).
+test Run all framework testsuites.
+update-deps Re-seal and update all dependencies.
+```
+
+Obviously, decrypting keys or pushing release images may require permissions, however there should be no barrier to simple dev tasks like building the framework, building sample apps, and so on.
### Licensing
Below we specify licensing details for the Gust/Elide framework, including pointers to licenses for any dependent software. Gust/Elide itself is licensed under the Apache 2.0 License, which is enclosed in the `LICENSE.txt` file. Licenses for any dependent software (as required/applicable) are embedded in the `LICENSES/` directory, each within their own text file named for the software or framework.
+- Gust/Elide: [Apache 2.0 License](https://github.com/sgammon/GUST/blob/master/LICENSE.txt)
+- `rules_closure`: Apache 2.0 (Entry 1 in `LICENSES.txt`)
+- gRPC Gateway: Roughly Apache 2.0 (Entry 2 in `LICENSES.txt`)
From 68acc273fe3301c90719b8e566ea402125b38cb3 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 21:01:56 -0800
Subject: [PATCH 083/103] Refactor app boot logic
---
java/gust/backend/Application.java | 78 +------------------
java/gust/backend/ApplicationBoot.java | 85 +++++++++++++++++++++
java/gust/backend/BUILD.bazel | 16 ++++
javatests/gust/backend/ApplicationTest.java | 14 ++--
4 files changed, 111 insertions(+), 82 deletions(-)
create mode 100644 java/gust/backend/ApplicationBoot.java
diff --git a/java/gust/backend/Application.java b/java/gust/backend/Application.java
index 2453b5ce0..c0a755eab 100644
--- a/java/gust/backend/Application.java
+++ b/java/gust/backend/Application.java
@@ -16,80 +16,6 @@
*/
@SuppressWarnings("WeakerAccess")
public final class Application {
- private Application() { /* Disallow instantiation. */ }
-
- /** Root configuration for a Micronaut app. */
- public static final String rootConfig = "/application.yml";
-
- /** Default configuration provided by Gust. */
- public static final String defaultConfig = "/gust" + rootConfig;
-
- /** Root logging configuration for a Micronaut app. */
- public static final String loggingConfig = "/logback.xml";
-
- /** Default configuration provided by Gust. */
- public static final String defaultLoggingConfig = "/gust" + loggingConfig;
-
- /**
- * Attempt to load a given global config file, failing if we can't find it in the expected spot, or the backup spot,
- * optionally provided as the second param.
- *
- * @param role Role description for this file.
- * @param name Configuration file name.
- * @param alt Alternate configuration file name.
- * @throws RuntimeException Wrapping an {@link IOException}, If the configuration can't be loaded.
- */
- public static void loadConfig(@Nonnull String role, @Nonnull String name, @Nullable String alt) {
- try (final InputStream configStream = Application.class.getResourceAsStream(name)) {
- if (configStream == null) {
- if (alt != null) {
- try (final InputStream defaultConfigStream = Application.class.getResourceAsStream(alt)) {
- if (defaultConfigStream == null)
- throw new IOException("Loaded config was `null` (for configuration '" + role + "').");
- return; // we loaded it at the alternate location: good to go
- }
- }
- throw new IOException("Config stream was `null` when loaded (for configuration '" + role + "').");
- }
-
- } catch (IOException ioe) {
- System.out.println("Failed to load server configuration '" + role + "'. Failing.");
- throw new RuntimeException(ioe);
- }
- }
-
- /**
- * Load main application configs, including the `app` config (usually `application.yml`), containing configuration for
- * Micronaut, and `logback.xml` which contains configuration for logging. If either config file cannot be loaded, then
- * an error is thrown which prevents server startup.
- *
- * @param exitOnFail Whether to exit the program if a failure occurs.
- */
- public static void load(boolean exitOnFail) {
- try {
- // validate config & start the server
- loadConfig("app", rootConfig, defaultConfig);
- loadConfig("logging", loggingConfig, defaultLoggingConfig);
- } catch (Throwable ex) {
- reportStartupError(ex, exitOnFail);
- if (!exitOnFail) throw ex;
- }
- }
-
- /**
- * Report an error that occurred during server startup, which prevented the server from starting. Errors encountered
- * and reported in this manner are fatal.
- *
- * @param err Fatal error that occurred and prevented server startup.
- * @param exitOnFail Whether to exit the program if a failure occurs.
- */
- public static void reportStartupError(@Nonnull Throwable err, boolean exitOnFail) {
- System.err.println("Uncaught exception: " + err.getMessage());
- err.printStackTrace(System.err);
- if (exitOnFail) System.exit(1);
- else throw new RuntimeException(err);
- }
-
/**
* Main entrypoint into a Gust backend application, powered by Micronaut. This function will pre-load any static stuff
* that needs to be bootstrapped, and then it initializes the app via Micronaut.
@@ -97,7 +23,9 @@ public static void reportStartupError(@Nonnull Throwable err, boolean exitOnFail
* @param args Arguments passed on the command line.
*/
public static void main(String[] args) {
- load(true);
+ ApplicationBoot.load(true);
Micronaut.run(Application.class);
}
+
+ private Application() { /* Disallow instantiation. */ }
}
diff --git a/java/gust/backend/ApplicationBoot.java b/java/gust/backend/ApplicationBoot.java
new file mode 100644
index 000000000..deed693d5
--- /dev/null
+++ b/java/gust/backend/ApplicationBoot.java
@@ -0,0 +1,85 @@
+package gust.backend;
+
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * Responsible for any testable functionality that occurs when bootstrapping a Java-based application, including
+ * force-resolving critical configuration files, setting up logging, and so on.
+ */
+public final class ApplicationBoot {
+ /** Root configuration for a Micronaut app. */
+ public static final String rootConfig = "/application.yml";
+
+ /** Default configuration provided by Gust. */
+ public static final String defaultConfig = "/gust" + rootConfig;
+
+ /** Root logging configuration for a Micronaut app. */
+ private static final String loggingConfig = "/logback.xml";
+
+ /** Default configuration provided by Gust. */
+ private static final String defaultLoggingConfig = "/gust" + loggingConfig;
+
+ /**
+ * Report an error that occurred during server startup, which prevented the server from starting. Errors encountered
+ * and reported in this manner are fatal.
+ *
+ * @param err Fatal error that occurred and prevented server startup.
+ * @param exitOnFail Whether to exit the program if a failure occurs.
+ */
+ public static void reportStartupError(@Nonnull Throwable err, boolean exitOnFail) {
+ System.err.println("Uncaught exception: " + err.getMessage());
+ err.printStackTrace(System.err);
+ if (exitOnFail) System.exit(1);
+ else throw new RuntimeException(err);
+ }
+
+ /**
+ * Attempt to load a given global config file, failing if we can't find it in the expected spot, or the backup spot,
+ * optionally provided as the second param.
+ *
+ * @param role Role description for this file.
+ * @param name Configuration file name.
+ * @param alt Alternate configuration file name.
+ * @throws RuntimeException Wrapping an {@link IOException}, If the configuration can't be loaded.
+ */
+ public static void loadConfig(@Nonnull String role, @Nonnull String name, @Nullable String alt) {
+ try (final InputStream configStream = ApplicationBoot.class.getResourceAsStream(name)) {
+ if (configStream == null) {
+ if (alt != null) {
+ try (final InputStream defaultConfigStream = ApplicationBoot.class.getResourceAsStream(alt)) {
+ if (defaultConfigStream == null)
+ throw new IOException("Loaded config was `null` (for configuration '" + role + "').");
+ return; // we loaded it at the alternate location: good to go
+ }
+ }
+ throw new IOException("Config stream was `null` when loaded (for configuration '" + role + "').");
+ }
+
+ } catch (IOException ioe) {
+ System.out.println("Failed to load server configuration '" + role + "'. Failing.");
+ throw new RuntimeException(ioe);
+ }
+ }
+
+ /**
+ * Load main application configs, including the `app` config (usually `application.yml`), containing configuration for
+ * Micronaut, and `logback.xml` which contains configuration for logging. If either config file cannot be loaded, then
+ * an error is thrown which prevents server startup.
+ *
+ * @param exitOnFail Whether to exit the program if a failure occurs.
+ */
+ public static void load(boolean exitOnFail) {
+ try {
+ // validate config & start the server
+ loadConfig("app", rootConfig, defaultConfig);
+ loadConfig("logging", loggingConfig, defaultLoggingConfig);
+ } catch (Throwable ex) {
+ reportStartupError(ex, exitOnFail);
+ if (!exitOnFail) throw ex;
+ }
+ }
+}
diff --git a/java/gust/backend/BUILD.bazel b/java/gust/backend/BUILD.bazel
index 40b6dcbe0..74fe2049a 100644
--- a/java/gust/backend/BUILD.bazel
+++ b/java/gust/backend/BUILD.bazel
@@ -79,10 +79,20 @@ micronaut_library(
deps = [maven("io.micronaut:micronaut-views-soy")],
)
+jdk_library(
+ name = "ApplicationBoot",
+ srcs = ["ApplicationBoot.java"],
+ deps = [
+ "@com_google_code_findbugs_jsr305",
+ maven("io.micronaut:micronaut-runtime"),
+ ],
+)
+
jdk_library(
name = "Application",
srcs = ["Application.java"],
deps = [
+ ":ApplicationBoot",
"@com_google_code_findbugs_jsr305",
maven("io.micronaut:micronaut-runtime"),
],
@@ -94,9 +104,15 @@ jdk_library(
jdk_library(
name = "backend",
runtime_deps = [
+ ":BaseController",
+ ":TemplateProvider",
+ ":ApplicationBoot",
":Application",
],
exports = [
+ ":BaseController",
+ ":TemplateProvider",
+ ":ApplicationBoot",
":Application",
],
)
diff --git a/javatests/gust/backend/ApplicationTest.java b/javatests/gust/backend/ApplicationTest.java
index bf029144d..e0c14fb57 100644
--- a/javatests/gust/backend/ApplicationTest.java
+++ b/javatests/gust/backend/ApplicationTest.java
@@ -1,35 +1,35 @@
package javatests.gust.backend;
-import gust.backend.Application;
+import gust.backend.ApplicationBoot;
import org.junit.Test;
import java.io.IOException;
-/** Test the default Micronaut application runner class. */
+/** Test the default Micronaut application boot class. */
public final class ApplicationTest {
/** Try loading a known-bad application yaml. */
@Test(expected = RuntimeException.class) public void testLoadApplicationYamlError() {
- Application.loadConfig("app", "bad.yml", "bad.yml");
+ ApplicationBoot.loadConfig("app", "bad.yml", "bad.yml");
}
/** Try loading a known-good application yaml. */
@Test public void testLoadApplicationYamlValid() {
- Application.loadConfig("app", Application.rootConfig, Application.defaultConfig);
+ ApplicationBoot.loadConfig("app", ApplicationBoot.rootConfig, ApplicationBoot.defaultConfig);
}
/** Try running the config-load routine which runs on server startup. It shouldn't fail. */
@Test public void testBasicConfigLoad() {
- Application.load(false);
+ ApplicationBoot.load(false);
}
/** Try reporting a fatal error that occurred during startup. This also shouldn't fail. */
@Test(expected = RuntimeException.class) public void testBasicReportErrorStderr() {
- Application.reportStartupError(new IOException("Something happened"), false);
+ ApplicationBoot.reportStartupError(new IOException("Something happened"), false);
}
/** Test fallback configuration loading. Should not produce an error, even though the first file doesn't exist. */
@Test public void testLoadConfigDoesNotExist() {
- Application.loadConfig("bunk", "some-nonexistent-name.yml", Application.rootConfig);
+ ApplicationBoot.loadConfig("bunk", "some-nonexistent-name.yml", ApplicationBoot.rootConfig);
}
}
From 8e761c193d0e413e91b2bcf6d1fe1b596a34ca4b Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 21:07:33 -0800
Subject: [PATCH 084/103] Cleanup after refactor, fix various issues reported
by Codacy
---
java/gust/backend/ApplicationBoot.java | 4 +++-
javatests/gust/backend/BUILD.bazel | 4 ++--
javatests/gust/backend/NoConfigTest.java | 8 ++++----
javatests/gust/backend/PageContextTest.java | 6 +++++-
4 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/java/gust/backend/ApplicationBoot.java b/java/gust/backend/ApplicationBoot.java
index deed693d5..fe3b86e1a 100644
--- a/java/gust/backend/ApplicationBoot.java
+++ b/java/gust/backend/ApplicationBoot.java
@@ -33,7 +33,9 @@ public final class ApplicationBoot {
public static void reportStartupError(@Nonnull Throwable err, boolean exitOnFail) {
System.err.println("Uncaught exception: " + err.getMessage());
err.printStackTrace(System.err);
- if (exitOnFail) System.exit(1);
+ if (exitOnFail)
+ throw new IllegalStateException(
+ String.format("Catastrophic startup error thrown: %s.", err.getMessage()));
else throw new RuntimeException(err);
}
diff --git a/javatests/gust/backend/BUILD.bazel b/javatests/gust/backend/BUILD.bazel
index 8ed99c1bb..ac0fdbd8c 100644
--- a/javatests/gust/backend/BUILD.bazel
+++ b/javatests/gust/backend/BUILD.bazel
@@ -12,7 +12,7 @@ load(
jdk_test(
name = "ApplicationTest",
srcs = ["ApplicationTest.java"],
- deps = ["//java/gust/backend:Application"],
+ deps = ["//java/gust/backend:ApplicationBoot"],
test_class = "javatests.gust.backend.ApplicationTest",
testonly = True,
classpath_resources = [
@@ -24,7 +24,7 @@ jdk_test(
jdk_test(
name = "NoConfigTest",
srcs = ["NoConfigTest.java"],
- deps = ["//java/gust/backend:Application"],
+ deps = ["//java/gust/backend:ApplicationBoot"],
test_class = "javatests.gust.backend.NoConfigTest",
testonly = True,
)
diff --git a/javatests/gust/backend/NoConfigTest.java b/javatests/gust/backend/NoConfigTest.java
index e7c5f0137..e3ee16c12 100644
--- a/javatests/gust/backend/NoConfigTest.java
+++ b/javatests/gust/backend/NoConfigTest.java
@@ -1,6 +1,6 @@
package javatests.gust.backend;
-import gust.backend.Application;
+import gust.backend.ApplicationBoot;
import org.junit.Test;
@@ -8,16 +8,16 @@
public final class NoConfigTest {
/** Test loading the app when no required configs are present at all. This should fail. */
@Test(expected = RuntimeException.class) public void testLoadAppNoConfigs() {
- Application.load(false);
+ ApplicationBoot.load(false);
}
/** Test force-loading a specific config that does not exist. */
@Test(expected = RuntimeException.class) public void testLoadConfigDoesNotExist() {
- Application.loadConfig("bunk", "some-nonexistent-name.yml", "hi-i-also-dont-exist.yml");
+ ApplicationBoot.loadConfig("bunk", "some-nonexistent-name.yml", "hi-i-also-dont-exist.yml");
}
/** Test force-loading a specific config that does not exist, with no fallback. */
@Test(expected = RuntimeException.class) public void testLoadConfigDoesNotExistNoFallback() {
- Application.loadConfig("bunk", "some-nonexistent-name.yml", null);
+ ApplicationBoot.loadConfig("bunk", "some-nonexistent-name.yml", null);
}
}
diff --git a/javatests/gust/backend/PageContextTest.java b/javatests/gust/backend/PageContextTest.java
index 3d20a49f3..696b832f6 100644
--- a/javatests/gust/backend/PageContextTest.java
+++ b/javatests/gust/backend/PageContextTest.java
@@ -12,7 +12,11 @@
import javax.annotation.Nullable;
import java.util.Collections;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertNotNull;
/** Tests the {@link PageContext} class for various behavioral contracts. */
From c7f59c36fafe1f2372960330fff40c14c8f31240 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 21:12:05 -0800
Subject: [PATCH 085/103] Cleanup startup exception flow
---
java/gust/backend/ApplicationBoot.java | 11 ++++-------
javatests/gust/backend/ApplicationTest.java | 4 ++--
2 files changed, 6 insertions(+), 9 deletions(-)
diff --git a/java/gust/backend/ApplicationBoot.java b/java/gust/backend/ApplicationBoot.java
index fe3b86e1a..bad44f2ee 100644
--- a/java/gust/backend/ApplicationBoot.java
+++ b/java/gust/backend/ApplicationBoot.java
@@ -28,15 +28,12 @@ public final class ApplicationBoot {
* and reported in this manner are fatal.
*
* @param err Fatal error that occurred and prevented server startup.
- * @param exitOnFail Whether to exit the program if a failure occurs.
*/
- public static void reportStartupError(@Nonnull Throwable err, boolean exitOnFail) {
+ public static void reportStartupError(@Nonnull Throwable err) {
System.err.println("Uncaught exception: " + err.getMessage());
err.printStackTrace(System.err);
- if (exitOnFail)
- throw new IllegalStateException(
- String.format("Catastrophic startup error thrown: %s.", err.getMessage()));
- else throw new RuntimeException(err);
+ throw new IllegalStateException(
+ String.format("Catastrophic startup error thrown: %s.", err.getMessage()));
}
/**
@@ -80,7 +77,7 @@ public static void load(boolean exitOnFail) {
loadConfig("app", rootConfig, defaultConfig);
loadConfig("logging", loggingConfig, defaultLoggingConfig);
} catch (Throwable ex) {
- reportStartupError(ex, exitOnFail);
+ reportStartupError(ex);
if (!exitOnFail) throw ex;
}
}
diff --git a/javatests/gust/backend/ApplicationTest.java b/javatests/gust/backend/ApplicationTest.java
index e0c14fb57..6531b912d 100644
--- a/javatests/gust/backend/ApplicationTest.java
+++ b/javatests/gust/backend/ApplicationTest.java
@@ -24,8 +24,8 @@ public final class ApplicationTest {
}
/** Try reporting a fatal error that occurred during startup. This also shouldn't fail. */
- @Test(expected = RuntimeException.class) public void testBasicReportErrorStderr() {
- ApplicationBoot.reportStartupError(new IOException("Something happened"), false);
+ @Test(expected = IllegalStateException.class) public void testBasicReportErrorStderr() {
+ ApplicationBoot.reportStartupError(new IOException("Something happened"));
}
/** Test fallback configuration loading. Should not produce an error, even though the first file doesn't exist. */
From 51128cc7087709d071e3a0a9edd0c9c241d1c2db Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 21:17:38 -0800
Subject: [PATCH 086/103] Add GraphQL to readme
---
README.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/README.md b/README.md
index dcb02e8c5..4d4731d58 100644
--- a/README.md
+++ b/README.md
@@ -33,6 +33,7 @@ The richest and best example app is *Todolist*, which is designed to be an examp
- SSR-based page serving with [Soy](https://github.com/google/closure-templates)
- Schema-driven [gRPC](https://grpc.io) services with [seamless Firebase auth](https://firebase.google.com/docs/auth)
- JSON/REST and Protobuf service invocation, via [Endpoints Service Proxy (ESP)](https://github.com/cloudendpoints/esp) and [Envoy](https://www.envoyproxy.io/)
+ - Seamless [GraphQL](https://graphql.org/) support atop Protobuf/gRPC with [Rejoiner](https://github.com/google/rejoiner)
- Automatic schema-driven object storage and querying via [Firestore](https://firebase.google.com/docs/firestore)
- Caching support via JSR-107 (JCache) and Redis
- Packaging via Docker with intelligent layering
From 98a8127d60d1de433b5053636bff460998172585 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 21:20:41 -0800
Subject: [PATCH 087/103] Root folder cleanup
---
.bazelci/presubmit.yml | 16 --
.github/CODEOWNERS | 1 +
Makefile | 6 +-
build.gradle | 223 ------------------------
gradle.properties | 28 ---
gradlew | 183 -------------------
gradlew.bat | 100 -----------
{base => images/base}/alpine/Dockerfile | 0
{base => images/base}/node/Dockerfile | 0
{.ci => images/ci}/Dockerfile | 0
{.ci => images/ci}/Dockerfile.alpine | 0
settings.gradle | 11 --
12 files changed, 4 insertions(+), 564 deletions(-)
delete mode 100644 .bazelci/presubmit.yml
create mode 100644 .github/CODEOWNERS
delete mode 100644 build.gradle
delete mode 100644 gradle.properties
delete mode 100755 gradlew
delete mode 100644 gradlew.bat
rename {base => images/base}/alpine/Dockerfile (100%)
rename {base => images/base}/node/Dockerfile (100%)
rename {.ci => images/ci}/Dockerfile (100%)
rename {.ci => images/ci}/Dockerfile.alpine (100%)
delete mode 100644 settings.gradle
diff --git a/.bazelci/presubmit.yml b/.bazelci/presubmit.yml
deleted file mode 100644
index 1b3d0d41a..000000000
--- a/.bazelci/presubmit.yml
+++ /dev/null
@@ -1,16 +0,0 @@
----
-buildifier:
- version: 0.29.0
- warnings: "attr-cfg,attr-license,attr-non-empty,attr-output-default,attr-single-file,confusing-name,constant-glob,ctx-actions,ctx-args,depset-iteration,depset-union,dict-concatenation,duplicated-name,filetype,function-docstring,git-repository,http-archive,integer-division,load,load-on-top,module-docstring,name-conventions,native-build,native-package,no-effect,output-group,package-name,package-on-top,positional-args,redefined-variable,repository-name,same-origin-load,string-iteration,unreachable,unused-variable"
-tasks:
- build:
- platform: rbe_ubuntu1604
- test_targets:
- - "--"
- - "//javatests/..."
- test_flags:
- - "--action_env=RBE_AUTOCONF_ROOT=/workdir"
- - "--action_env=PATH"
- - "--test_output=errors"
- - "--verbose_failures"
-
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
new file mode 100644
index 000000000..e84bec6a2
--- /dev/null
+++ b/.github/CODEOWNERS
@@ -0,0 +1 @@
+*.* @sgammon
diff --git a/Makefile b/Makefile
index 25a2f930c..cf838b0bf 100644
--- a/Makefile
+++ b/Makefile
@@ -137,9 +137,9 @@ c clean: ## Clean ephemeral targets.
bases: ## Build base images and push them.
@echo "Building Alpine base ('$(BASE_VERSION)')..."
- $(_RULE)docker build -t us.gcr.io/$(IMAGE_PROJECT)/base/alpine:$(BASE_VERSION) ./base/alpine
+ $(_RULE)docker build -t us.gcr.io/$(IMAGE_PROJECT)/base/alpine:$(BASE_VERSION) ./images/base/alpine
@echo "Building Node base ('$(BASE_VERSION)')..."
- $(_RULE)docker build -t us.gcr.io/$(IMAGE_PROJECT)/base/node:$(BASE_VERSION) ./base/node
+ $(_RULE)docker build -t us.gcr.io/$(IMAGE_PROJECT)/base/node:$(BASE_VERSION) ./images/base/node
@echo "Pushing bases..."
$(_RULE)docker push us.gcr.io/$(IMAGE_PROJECT)/base/alpine:$(BASE_VERSION)
$(_RULE)docker push us.gcr.io/$(IMAGE_PROJECT)/base/node:$(BASE_VERSION)
@@ -180,7 +180,7 @@ devtools: ## Install local development dependencies.
builder-image: ## Build a new version of the CI builder image for Gust.
@echo "Building CI image..."
- $(_RULE)gcloud builds submit ./.ci -t us.gcr.io/$(IMAGE_PROJECT)/tools/gcb
+ $(_RULE)gcloud builds submit ./images/ci -t us.gcr.io/$(IMAGE_PROJECT)/tools/gcb
update-deps: ## Re-seal and update all dependencies.
@echo "Re-pinning Maven dependencies..."
diff --git a/build.gradle b/build.gradle
deleted file mode 100644
index 4af5886c5..000000000
--- a/build.gradle
+++ /dev/null
@@ -1,223 +0,0 @@
-
-plugins {
- id 'org.jetbrains.kotlin.jvm' version '1.3.61'
- id 'java-library'
- id 'maven-publish'
- id 'signing'
-}
-
-repositories {
- mavenCentral()
- jcenter()
-}
-
-dependencies {
- /* Dependencies: Kotlin */
- implementation platform('org.jetbrains.kotlin:kotlin-bom')
- implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
- testImplementation 'org.jetbrains.kotlin:kotlin-test'
- testImplementation 'org.jetbrains.kotlin:kotlin-test-junit'
-
- /* Dependencies: Micronaut */
- api platform("io.micronaut:micronaut-bom:$micronautVersion")
- implementation "io.micronaut:micronaut-aop"
- implementation "io.micronaut:micronaut-core"
- implementation "io.micronaut:micronaut-http-client"
- implementation "io.micronaut:micronaut-inject"
- implementation "io.micronaut:micronaut-inject-java"
- implementation "io.micronaut:micronaut-runtime"
- implementation "io.micronaut:micronaut-validation"
- implementation "io.micronaut:micronaut-http-server"
- implementation "io.micronaut:micronaut-http-server-netty"
- implementation "io.micronaut:micronaut-graal"
- implementation "io.micronaut:micronaut-views"
- implementation "io.micronaut:micronaut-router"
- implementation "io.micronaut:micronaut-session"
- implementation "io.micronaut:micronaut-tracing"
- implementation "io.micronaut:micronaut-multitenancy"
- implementation "io.micronaut:micronaut-security:$micronautSecurityVersion"
- implementation "io.micronaut.configuration:micronaut-redis-lettuce:$micronautRedisVersion"
-
- /* Dependencies: Google */
- api "com.google.guava:guava:$guavaVersion"
- api "com.google.template:soy:$soyVersion"
- api "com.google.protobuf:protobuf-java:$protobufVersion"
- implementation "com.google.code.findbugs:jsr305:$findbugsVersion"
- implementation "com.google.template:soy:$soyVersion"
-
- /* Dependencies: Testing */
- testImplementation "org.seleniumhq.selenium:selenium-api:$seleniumVersion"
- testImplementation "org.seleniumhq.selenium:selenium-remote-driver:$seleniumVersion"
-}
-
-version project.projectVersion
-group projectGroupId
-
-subprojects {
- group projectGroupId
- version project.projectVersion
-}
-
-sourceSets {
- main.java.srcDirs = ['java']
-}
-
-signing {
- if ("$signing" == "true") {
- if (gpg2 == "true") {
- useGpgCmd()
- }
- sign configurations.archives
- }
-}
-
-task sourceJar(type: Jar) {
- classifier "sources"
- from sourceSets.main.allJava
-}
-
-task javadocJar(type: Jar, dependsOn: javadoc) {
- classifier "javadoc"
- from javadoc.destinationDir
-}
-
-artifacts {
- archives jar
- archives sourceJar
- archives javadocJar
-}
-
-compileKotlin {
- kotlinOptions.jvmTarget = "11"
-}
-
-compileTestKotlin {
- kotlinOptions.jvmTarget = "11"
-}
-
-publishing {
- publications {
- mavenJava(MavenPublication) {
- customizePom(pom)
- groupId = projectGroupId
- artifactId = project.name
- version = project.projectVersion
-
- from components.java
-
- artifact(sourceJar) {
- classifier = 'sources'
- }
-
- artifact(javadocJar) {
- classifier = 'javadoc'
- }
-
- pom.withXml {
- def pomFile = file("${project.buildDir}/generated-pom.xml")
- writeTo(pomFile)
- if ("$signing" == "true") {
- def pomAscFile = signing.sign(pomFile).signatureFiles[0]
-
- artifact(pomAscFile) {
- classifier = null
- extension = 'pom.asc'
- }
- }
- }
-
- if ("$signing" == "true") {
- project.tasks.signArchives.signatureFiles.each {
- artifact(it) {
- def matcher = it.file =~ /-(sources|javadoc)\.jar\.asc$/
- if (matcher.find()) {
- classifier = matcher.group(1)
- } else {
- classifier = null
- }
- extension = 'jar.asc'
- }
- }
- }
- }
- }
-
- repositories {
- maven {
- if (github == "true") {
- url = "https://maven.pkg.github.com/sgammon/gust"
- credentials {
- username "$githubUsername"
- password "$githubToken"
- }
- } else {
- url = "https://oss.sonatype.org/service/local/staging/deploy/maven2"
- credentials {
- username "$sonatypeUsername"
- password "$sonatypePassword"
- }
- }
- }
- }
-}
-
-javadoc {
- if(JavaVersion.current().isJava9Compatible()) {
- options.addBooleanOption('html5', true)
- }
-}
-
-
-def customizePom(pom) {
- pom.withXml {
- def root = asNode()
-
- root.dependencies.removeAll { dep ->
- dep.scope == "test"
- }
-
- root.children().last() + {
- name "Gust Framework"
- description "Holistic app development framework. Be deliberate with every byte"
- url "https://github.com/sgammon/gust"
-
- licenses {
- license {
- name "The Apache License, Version 2.0"
- url "http://www.apache.org/licenses/LICENSE-2.0.txt"
- }
- }
-
- developers {
- developer {
- id "sgammon"
- name "Sam Gammon"
- email "sam@bloomworks.io"
- }
- }
-
- scm {
- connection "scm:git:git://github.com/sgammon/gust.git"
- }
- }
- }
-}
-
-model {
- tasks.generatePomFileForMavenJavaPublication {
- destination = file("$buildDir/generated-pom.xml")
- }
-
-}
-
-if ("$signing" == "true") {
- model {
- tasks.publishMavenJavaPublicationToMavenLocal {
- dependsOn project.tasks.signArchives
- }
-
- tasks.publishMavenJavaPublicationToMavenRepository {
- dependsOn project.tasks.signArchives
- }
- }
-}
diff --git a/gradle.properties b/gradle.properties
deleted file mode 100644
index f1eb2385d..000000000
--- a/gradle.properties
+++ /dev/null
@@ -1,28 +0,0 @@
-# Root Properties
-projectVersion=1.0.0-alpha1
-projectGroupId=io.bloombox
-title=Elide
-projectDesc=Superpowers for your next app.
-projectUrl=https://github.com/sgammon/gust
-developers=Sam Gammon
-github=false
-gpg2=false
-signing=false
-
-# Dependency Versions
-annotationsVersion = 1.3.2
-asmVersion = 7.0
-guavaVersion = 28.0-jre
-findbugsVersion = 3.0.2
-protobufVersion = 3.11.3
-seleniumVersion = 3.141.59
-soyVersion = 2019-10-08
-slf4jVersion = 1.7.26
-svmVersion = 19.2.1
-
-# Dependency Versions: Micronaut
-micronautVersion = 1.3.1
-micronautTestVersion = 1.1.2
-micronautRedisVersion = 1.2.0
-micronautSecurityVersion = 1.3.0
-
diff --git a/gradlew b/gradlew
deleted file mode 100755
index 2fe81a7d9..000000000
--- a/gradlew
+++ /dev/null
@@ -1,183 +0,0 @@
-#!/usr/bin/env sh
-
-#
-# Copyright 2015 the original author or authors.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-##############################################################################
-##
-## Gradle start up script for UN*X
-##
-##############################################################################
-
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG=`dirname "$PRG"`"/$link"
- fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
-
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
-
-warn () {
- echo "$*"
-}
-
-die () {
- echo
- echo "$*"
- echo
- exit 1
-}
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-nonstop=false
-case "`uname`" in
- CYGWIN* )
- cygwin=true
- ;;
- Darwin* )
- darwin=true
- ;;
- MINGW* )
- msys=true
- ;;
- NONSTOP* )
- nonstop=true
- ;;
-esac
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
- # IBM's JDK on AIX uses strange locations for the executables
- JAVACMD="$JAVA_HOME/jre/sh/java"
- else
- JAVACMD="$JAVA_HOME/bin/java"
- fi
- if [ ! -x "$JAVACMD" ] ; then
- die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
- fi
-else
- JAVACMD="java"
- which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
- MAX_FD_LIMIT=`ulimit -H -n`
- if [ $? -eq 0 ] ; then
- if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
- MAX_FD="$MAX_FD_LIMIT"
- fi
- ulimit -n $MAX_FD
- if [ $? -ne 0 ] ; then
- warn "Could not set maximum file descriptor limit: $MAX_FD"
- fi
- else
- warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
- fi
-fi
-
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
- GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
-
-# For Cygwin or MSYS, switch paths to Windows format before running java
-if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
- APP_HOME=`cygpath --path --mixed "$APP_HOME"`
- CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
- JAVACMD=`cygpath --unix "$JAVACMD"`
-
- # We build the pattern for arguments to be converted via cygpath
- ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
- SEP=""
- for dir in $ROOTDIRSRAW ; do
- ROOTDIRS="$ROOTDIRS$SEP$dir"
- SEP="|"
- done
- OURCYGPATTERN="(^($ROOTDIRS))"
- # Add a user-defined pattern to the cygpath arguments
- if [ "$GRADLE_CYGPATTERN" != "" ] ; then
- OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
- fi
- # Now convert the arguments - kludge to limit ourselves to /bin/sh
- i=0
- for arg in "$@" ; do
- CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
- CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
-
- if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
- eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
- else
- eval `echo args$i`="\"$arg\""
- fi
- i=`expr $i + 1`
- done
- case $i in
- 0) set -- ;;
- 1) set -- "$args0" ;;
- 2) set -- "$args0" "$args1" ;;
- 3) set -- "$args0" "$args1" "$args2" ;;
- 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
- 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
- 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
- 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
- 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
- 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
- esac
-fi
-
-# Escape application args
-save () {
- for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
- echo " "
-}
-APP_ARGS=`save "$@"`
-
-# Collect all arguments for the java command, following the shell quoting and substitution rules
-eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
-
-exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
deleted file mode 100644
index 9618d8d96..000000000
--- a/gradlew.bat
+++ /dev/null
@@ -1,100 +0,0 @@
-@rem
-@rem Copyright 2015 the original author or authors.
-@rem
-@rem Licensed under the Apache License, Version 2.0 (the "License");
-@rem you may not use this file except in compliance with the License.
-@rem You may obtain a copy of the License at
-@rem
-@rem https://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-@rem
-
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto init
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:init
-@rem Get command-line arguments, handling Windows variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/base/alpine/Dockerfile b/images/base/alpine/Dockerfile
similarity index 100%
rename from base/alpine/Dockerfile
rename to images/base/alpine/Dockerfile
diff --git a/base/node/Dockerfile b/images/base/node/Dockerfile
similarity index 100%
rename from base/node/Dockerfile
rename to images/base/node/Dockerfile
diff --git a/.ci/Dockerfile b/images/ci/Dockerfile
similarity index 100%
rename from .ci/Dockerfile
rename to images/ci/Dockerfile
diff --git a/.ci/Dockerfile.alpine b/images/ci/Dockerfile.alpine
similarity index 100%
rename from .ci/Dockerfile.alpine
rename to images/ci/Dockerfile.alpine
diff --git a/settings.gradle b/settings.gradle
deleted file mode 100644
index 6a900cbf4..000000000
--- a/settings.gradle
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- * This file was generated by the Gradle 'init' task.
- *
- * The settings file is used to specify which projects to include in your build.
- *
- * Detailed information about configuring a multi-project build in Gradle can be found
- * in the user manual at https://docs.gradle.org/6.1.1/userguide/multi_project_builds.html
- */
-
-rootProject.name = 'gust'
-
From f80251fd228ddc5449cb2ca44d48f10b109c57b9 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 21:24:20 -0800
Subject: [PATCH 088/103] Add new badges to README
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 4d4731d58..68b5c3feb 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-## `@elide-tools/elide` [![Build status](https://badge.buildkite.com/7a69b0fadb7d08b691e96177f589971a7646217b1a8b4a269e.svg)](https://buildkite.com/bloomworks/elide)
+## `@elide-tools/elide` [![Build status](https://badge.buildkite.com/7a69b0fadb7d08b691e96177f589971a7646217b1a8b4a269e.svg)](https://buildkite.com/bloomworks/elide) [![codecov](https://codecov.io/gh/sgammon/GUST/branch/master/graph/badge.svg)](https://codecov.io/gh/sgammon/GUST) [![Maintainability](https://api.codeclimate.com/v1/badges/3216f45caac250619f4f/maintainability)](https://codeclimate.com/github/sgammon/GUST/maintainability) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/61aeb894c7914e3cac651d5eb2d86954)](https://www.codacy.com/manual/samuel-gammon/GUST?utm_source=github.com&utm_medium=referral&utm_content=sgammon/GUST&utm_campaign=Badge_Grade)
Elide is a polyglot software application development framework. Bring the most road-tested toolchain on the planet to your development process, with [Bazel](https://bazel.build), [Protobuf](https://developers.google.com/protocol-buffers), [gRPC](https://grpc.io), [Soy](https://github.com/google/closure-templates), and more, all pre-integrated and tested out of the box. Early support is included for Java, Kotlin, Python, and NodeJS on the backend; Closure, TypeScript, or even Java on the frontend (transpiled to highly-optimized and type-checked JS); and Java, Kotlin, Swift, Objective-C and C/C++ for mobile applications.
From fd44552771445c629848242045d3bd5bd289bd65 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 21:28:25 -0800
Subject: [PATCH 089/103] Tweaks to README
---
.develop/readme.md | 1 +
README.md | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
create mode 120000 .develop/readme.md
diff --git a/.develop/readme.md b/.develop/readme.md
new file mode 120000
index 000000000..32d46ee88
--- /dev/null
+++ b/.develop/readme.md
@@ -0,0 +1 @@
+../README.md
\ No newline at end of file
diff --git a/README.md b/README.md
index 68b5c3feb..e745e03cd 100644
--- a/README.md
+++ b/README.md
@@ -15,7 +15,7 @@ As part of the framework code, a few sample apps are included. Each of these is
### Todolist App ([Demo](https://todolist.apps.bloomworks.io))
-The richest and best example app is *Todolist*, which is designed to be an example SaaS startup in a box. This includes a server app, a web app, mobile apps (for Android and iOS), and full-blown declarative infrastructure to support it all. The app includes the following components and features:
+The richest and best example app is _Todolist_, which is designed to be an example SaaS startup in a box. This includes a server app, a web app, mobile apps (for Android and iOS), and full-blown declarative infrastructure to support it all. The app includes the following components and features:
- **Devops toolkit**
- Support for testing in each language, with coverage
- Easy support for debugging the backend or frontend apps
From 4dce4f068585b37a36bb274339fdf07ede806462 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 21:28:44 -0800
Subject: [PATCH 090/103] Remove .develop aliases
---
.develop/BUILD.bazel | 1 -
.develop/LICENSES.txt | 1 -
.develop/Makefile | 1 -
.develop/WORKSPACE | 1 -
.develop/bazelrc | 1 -
.develop/cloudbuild.yml | 1 -
.develop/codecov.yml | 1 -
.develop/package.json | 1 -
.develop/readme.md | 1 -
.gitignore | 1 +
10 files changed, 1 insertion(+), 9 deletions(-)
delete mode 120000 .develop/BUILD.bazel
delete mode 120000 .develop/LICENSES.txt
delete mode 120000 .develop/Makefile
delete mode 120000 .develop/WORKSPACE
delete mode 120000 .develop/bazelrc
delete mode 120000 .develop/cloudbuild.yml
delete mode 120000 .develop/codecov.yml
delete mode 120000 .develop/package.json
delete mode 120000 .develop/readme.md
diff --git a/.develop/BUILD.bazel b/.develop/BUILD.bazel
deleted file mode 120000
index c92c043c7..000000000
--- a/.develop/BUILD.bazel
+++ /dev/null
@@ -1 +0,0 @@
-../BUILD.bazel
\ No newline at end of file
diff --git a/.develop/LICENSES.txt b/.develop/LICENSES.txt
deleted file mode 120000
index 0d3fea16f..000000000
--- a/.develop/LICENSES.txt
+++ /dev/null
@@ -1 +0,0 @@
-../LICENSES.txt
\ No newline at end of file
diff --git a/.develop/Makefile b/.develop/Makefile
deleted file mode 120000
index d0b0e8e00..000000000
--- a/.develop/Makefile
+++ /dev/null
@@ -1 +0,0 @@
-../Makefile
\ No newline at end of file
diff --git a/.develop/WORKSPACE b/.develop/WORKSPACE
deleted file mode 120000
index 9b51a50e4..000000000
--- a/.develop/WORKSPACE
+++ /dev/null
@@ -1 +0,0 @@
-../WORKSPACE
\ No newline at end of file
diff --git a/.develop/bazelrc b/.develop/bazelrc
deleted file mode 120000
index adb61980d..000000000
--- a/.develop/bazelrc
+++ /dev/null
@@ -1 +0,0 @@
-../.bazelrc
\ No newline at end of file
diff --git a/.develop/cloudbuild.yml b/.develop/cloudbuild.yml
deleted file mode 120000
index 4c52c11e4..000000000
--- a/.develop/cloudbuild.yml
+++ /dev/null
@@ -1 +0,0 @@
-../cloudbuild.yaml
\ No newline at end of file
diff --git a/.develop/codecov.yml b/.develop/codecov.yml
deleted file mode 120000
index 223d1ba8f..000000000
--- a/.develop/codecov.yml
+++ /dev/null
@@ -1 +0,0 @@
-../codecov.yml
\ No newline at end of file
diff --git a/.develop/package.json b/.develop/package.json
deleted file mode 120000
index 4e26811d4..000000000
--- a/.develop/package.json
+++ /dev/null
@@ -1 +0,0 @@
-../package.json
\ No newline at end of file
diff --git a/.develop/readme.md b/.develop/readme.md
deleted file mode 120000
index 32d46ee88..000000000
--- a/.develop/readme.md
+++ /dev/null
@@ -1 +0,0 @@
-../README.md
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index e3e045a79..6dee926e0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
+.develop/
.gradle
build/
node_modules/
From 0e83380d54570b51d3746933ef927c6efaf01572 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 21:40:55 -0800
Subject: [PATCH 091/103] Adjust coverage config to be lenient until it settles
---
codecov.yml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/codecov.yml b/codecov.yml
index b61ac21d9..33ffc743e 100644
--- a/codecov.yml
+++ b/codecov.yml
@@ -1,8 +1,7 @@
-
codecov:
max_report_age: off
- require_ci_to_pass: yes
- strict_yaml_branch: master
+ wait_for_ci: no
+ require_ci_to_pass: no
coverage:
precision: 2
@@ -11,9 +10,10 @@ coverage:
status:
project:
default:
- target: 80
+ target: 80%
threshold: 15%
base: auto
+ informational: true
parsers:
pass
From 398cd1af22bdc2b4e55f934d182ca22150ed978c Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 21:42:51 -0800
Subject: [PATCH 092/103] Remove Makefile aliases
---
Makefile | 8 ++++----
samples/todolist/src/server/HomeController.kt | 3 +--
2 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/Makefile b/Makefile
index cf838b0bf..d82c38518 100644
--- a/Makefile
+++ b/Makefile
@@ -122,17 +122,17 @@ endif
all: devtools build test
-b build: ## Build all framework targets.
+build: ## Build all framework targets.
$(info Building $(PROJECT_NAME)...)
$(_RULE)$(BAZELISK) $(BAZELISK_ARGS) build $(TAG) $(BASE_ARGS) $(BUILD_ARGS) -- $(TARGETS)
-r run: ## Run the specified target.
+run: ## Run the specified target.
$(_RULE)$(BAZELISK) $(BAZELISK_ARGS) run $(TAG) $(BASE_ARGS) $(BUILD_ARGS) -- $(APP)
-d dev: ## Develop against the specified target.
+dev: ## Develop against the specified target.
$(_RULE)$(IBAZEL) run $(TAG) $(APP)
-c clean: ## Clean ephemeral targets.
+clean: ## Clean ephemeral targets.
$(_RULE)$(BAZELISK) $(BAZELISK_ARGS) clean
bases: ## Build base images and push them.
diff --git a/samples/todolist/src/server/HomeController.kt b/samples/todolist/src/server/HomeController.kt
index 9c96689c3..05eff67f9 100644
--- a/samples/todolist/src/server/HomeController.kt
+++ b/samples/todolist/src/server/HomeController.kt
@@ -23,8 +23,7 @@ import javax.inject.Inject
class HomeController @Inject constructor (ctx: PageContextManager): AppController(ctx) {
companion object {
// Logging pipe.
- @JvmStatic
- private val logging = LoggerFactory.getLogger(HomeController::class.java)
+ @JvmStatic private val logging = LoggerFactory.getLogger(HomeController::class.java)
// Default name to show.
private const val defaultName = "World"
From 897fdd379526f7c9c4ed81e794c440589585e707 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 21:43:48 -0800
Subject: [PATCH 093/103] Fix Makefile command list in README
---
README.md | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index e745e03cd..fb4255bcb 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-## `@elide-tools/elide` [![Build status](https://badge.buildkite.com/7a69b0fadb7d08b691e96177f589971a7646217b1a8b4a269e.svg)](https://buildkite.com/bloomworks/elide) [![codecov](https://codecov.io/gh/sgammon/GUST/branch/master/graph/badge.svg)](https://codecov.io/gh/sgammon/GUST) [![Maintainability](https://api.codeclimate.com/v1/badges/3216f45caac250619f4f/maintainability)](https://codeclimate.com/github/sgammon/GUST/maintainability) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/61aeb894c7914e3cac651d5eb2d86954)](https://www.codacy.com/manual/samuel-gammon/GUST?utm_source=github.com&utm_medium=referral&utm_content=sgammon/GUST&utm_campaign=Badge_Grade)
+## `@elide-tools/elide` [![Build status](https://badge.buildkite.com/7a69b0fadb7d08b691e96177f589971a7646217b1a8b4a269e.svg)](https://buildkite.com/bloomworks/elide) [![codecov](https://codecov.io/gh/sgammon/GUST/branch/master/graph/badge.svg)](https://codecov.io/gh/sgammon/GUST) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/61aeb894c7914e3cac651d5eb2d86954)](https://www.codacy.com/manual/samuel-gammon/GUST?utm_source=github.com&utm_medium=referral&utm_content=sgammon/GUST&utm_campaign=Badge_Grade) [![Maintainability](https://api.codeclimate.com/v1/badges/3216f45caac250619f4f/maintainability)](https://codeclimate.com/github/sgammon/GUST/maintainability)
Elide is a polyglot software application development framework. Bring the most road-tested toolchain on the planet to your development process, with [Bazel](https://bazel.build), [Protobuf](https://developers.google.com/protocol-buffers), [gRPC](https://grpc.io), [Soy](https://github.com/google/closure-templates), and more, all pre-integrated and tested out of the box. Early support is included for Java, Kotlin, Python, and NodeJS on the backend; Closure, TypeScript, or even Java on the frontend (transpiled to highly-optimized and type-checked JS); and Java, Kotlin, Swift, Objective-C and C/C++ for mobile applications.
@@ -62,7 +62,10 @@ Most development tasks on the framework involve the `Makefile`, which offers con
```
GUST Framework Tools:
bases Build base images and push them.
+build Build all framework targets.
builder-image Build a new version of the CI builder image for Gust.
+clean Clean ephemeral targets.
+dev Develop against the specified target.
devtools Install local development dependencies.
distclean Clean targets, caches and dependencies.
docs Build documentation for the framework.
@@ -71,6 +74,7 @@ help Show this help text.
release-images Pull, tag, and release Docker images.
report-coverage Report coverage results to Codecov.
report-tests Report test results to Report.CI.
+run Run the specified target.
samples Build and push sample app images.
serve-coverage Serve the current coverage report (must generate first).
test Run all framework testsuites.
From f5c16f49949dd4b68567812085ec99be4d665af0 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 21:48:34 -0800
Subject: [PATCH 094/103] Small nits
---
README.md | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/README.md b/README.md
index fb4255bcb..c21cb93fe 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,18 @@
-## `@elide-tools/elide` [![Build status](https://badge.buildkite.com/7a69b0fadb7d08b691e96177f589971a7646217b1a8b4a269e.svg)](https://buildkite.com/bloomworks/elide) [![codecov](https://codecov.io/gh/sgammon/GUST/branch/master/graph/badge.svg)](https://codecov.io/gh/sgammon/GUST) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/61aeb894c7914e3cac651d5eb2d86954)](https://www.codacy.com/manual/samuel-gammon/GUST?utm_source=github.com&utm_medium=referral&utm_content=sgammon/GUST&utm_campaign=Badge_Grade) [![Maintainability](https://api.codeclimate.com/v1/badges/3216f45caac250619f4f/maintainability)](https://codeclimate.com/github/sgammon/GUST/maintainability)
+## `@elide-tools/gust` [![Build status](https://badge.buildkite.com/7a69b0fadb7d08b691e96177f589971a7646217b1a8b4a269e.svg)](https://buildkite.com/bloomworks/elide) [![codecov](https://codecov.io/gh/sgammon/GUST/branch/master/graph/badge.svg)](https://codecov.io/gh/sgammon/GUST) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/61aeb894c7914e3cac651d5eb2d86954)](https://www.codacy.com/manual/samuel-gammon/GUST?utm_source=github.com&utm_medium=referral&utm_content=sgammon/GUST&utm_campaign=Badge_Grade) [![Maintainability](https://api.codeclimate.com/v1/badges/3216f45caac250619f4f/maintainability)](https://codeclimate.com/github/sgammon/GUST/maintainability)
-Elide is a polyglot software application development framework. Bring the most road-tested toolchain on the planet to your development process, with [Bazel](https://bazel.build), [Protobuf](https://developers.google.com/protocol-buffers), [gRPC](https://grpc.io), [Soy](https://github.com/google/closure-templates), and more, all pre-integrated and tested out of the box. Early support is included for Java, Kotlin, Python, and NodeJS on the backend; Closure, TypeScript, or even Java on the frontend (transpiled to highly-optimized and type-checked JS); and Java, Kotlin, Swift, Objective-C and C/C++ for mobile applications.
+| Language & Package System | Coordinate | Latest Version |
+| ------------------------- | ---------- | :------------: |
+| | | |
+| | | |
+| | | |
+
+Gust is a polyglot software application development framework. Bring the most road-tested toolchain on the planet to your development process, with [Bazel](https://bazel.build), [Protobuf](https://developers.google.com/protocol-buffers), [gRPC](https://grpc.io), [Soy](https://github.com/google/closure-templates), and more, all pre-integrated and tested out of the box. Early support is included for Java, Kotlin, Python, and NodeJS on the backend; Closure, TypeScript, or even Java on the frontend (transpiled to highly-optimized and type-checked JS); and Java, Kotlin, Swift, Objective-C and C/C++ for mobile applications.
Runtime libraries are also published to support easy development of _web applications_ (in Java and Python using Soy), and _mobile applications_ (in Java and Swift). The framework is also capable of leveraging [GraalVM](https://graalvm.org) to build your app into a [native application](https://www.graalvm.org/docs/reference-manual/native-image/) (where supported), alleviating the need entirely for a JVM or Python runtime in your app containers. Native apps also have the nice benefit of _way_ shorter startup times (try `30ms`, lol!), and, in some cases, significant latency and memory use improvements.
### Sample Apps
-As part of the framework code, a few sample apps are included. Each of these is usable as its own project, simply by copying the files in that directory to another location on disk, and then running `bazel build //...` from inside the new directory. Each sample app demonstrates diverse functionality supported by Elide, including supported languages and use cases, and at least one holistic application:
+As part of the framework code, a few sample apps are included. Each of these is usable as its own project, simply by copying the files in that directory to another location on disk, and then running `bazel build //...` from inside the new directory. Each sample app demonstrates diverse functionality supported by Gust, including supported languages and use cases, and at least one holistic application:
- `rest_mvc` (Java): Example of RESTful servers with Micronaut.
- `soy_ssr` (Java): Server-side-rendered pages with Soy and Micronaut.
From ee6ff22b209a2de9202ef047cb2143a3e740c78f Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 21:57:39 -0800
Subject: [PATCH 095/103] Fix spaces-in-tags in Soy templates
---
gust/dom/assets.soy | 18 +++++++-----------
gust/page/page.soy | 9 ++++-----
java/gust/backend/page.soy | 2 +-
3 files changed, 12 insertions(+), 17 deletions(-)
diff --git a/gust/dom/assets.soy b/gust/dom/assets.soy
index b31389ece..12bc5660a 100644
--- a/gust/dom/assets.soy
+++ b/gust/dom/assets.soy
@@ -18,16 +18,12 @@
+ {if isNonnull($id)} id="{$id}" {/if}
+ {if isNonnull($module) and $module} module{else}{if isNonnull($nomodule) and $nomodule}{sp} nomodule{/if}{/if}
+ {if isNonnull($async) and $async} async{/if}
+ {if isNonnull($defer) and $defer} defer{/if}
+ {if isNonnull($integrity)} integrity="{$integrity}"{/if}
+ {if isNonnull($crossorigin)} crossorigin="{$crossorigin}"{/if}>
{/template}
@@ -40,6 +36,6 @@
{@param? media: string} /** Media attribute to specify for the stylesheet. */
{if isNonnull($sheet)}
-
+
{/if}
{/template}
diff --git a/gust/page/page.soy b/gust/page/page.soy
index d5dbecb05..c8aa15145 100644
--- a/gust/page/page.soy
+++ b/gust/page/page.soy
@@ -21,7 +21,7 @@
{/if}
{/let}
-
{$inner}
@@ -59,7 +59,7 @@
{/let}
-
+
@@ -70,8 +70,7 @@
{if isNonnull($preconnect)}
{for $preconnectDirective in $preconnect}
+ rel="preconnect"{if $preconnectDirective.crossorigin} crossorigin{/if}>
{/for}
{/if}
{if isNonnull($contentSecurity)}
@@ -172,7 +171,7 @@
{$ogTags}
{/if}
-
+
{call .contentRoot}
{param pageId: $pageId /}
{param mobile: $mobile /}
diff --git a/java/gust/backend/page.soy b/java/gust/backend/page.soy
index 868b4a393..354834828 100644
--- a/java/gust/backend/page.soy
+++ b/java/gust/backend/page.soy
@@ -21,7 +21,7 @@
{$head}
{/if}
-
+
{$content}
From 42906deeb2651a5e61dacd6e34051ff1fae3c173 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 21:57:59 -0800
Subject: [PATCH 096/103] Add interface to set page title
---
java/gust/backend/PageContextManager.java | 17 +++++++++++++++++
samples/todolist/src/server/HomeController.kt | 1 +
2 files changed, 18 insertions(+)
diff --git a/java/gust/backend/PageContextManager.java b/java/gust/backend/PageContextManager.java
index 562a40884..3fc0b1604 100644
--- a/java/gust/backend/PageContextManager.java
+++ b/java/gust/backend/PageContextManager.java
@@ -93,6 +93,23 @@ public class PageContextManager implements Closeable, AutoCloseable {
return this.builtContext;
}
+ // -- Page-level Interface (Context) -- //
+
+ /**
+ * Set the page title for the current render flow. If the app makes use of the framework's built-in page frame, the
+ * title will automatically be used.
+ *
+ * @param title Title to set for the current page. Do not pass `null`.
+ * @return Current page context manager (for call chain-ability).
+ * @throws IllegalArgumentException If `null` is passed for the title.
+ */
+ public @Nonnull PageContextManager title(@Nonnull String title) {
+ //noinspection ConstantConditions
+ if (title == null) throw new IllegalArgumentException("Cannot pass `null` for page title.");
+ this.context.getMetaBuilder().setTitle(title);
+ return this;
+ }
+
// -- Map-like Interface (Props) -- //
/**
diff --git a/samples/todolist/src/server/HomeController.kt b/samples/todolist/src/server/HomeController.kt
index 05eff67f9..d656e5f56 100644
--- a/samples/todolist/src/server/HomeController.kt
+++ b/samples/todolist/src/server/HomeController.kt
@@ -48,6 +48,7 @@ class HomeController @Inject constructor (ctx: PageContextManager): AppControlle
if (name != defaultName)
logging.info("Greeting user with name '$name'...")
return this.context
+ .title("Todolist - Homepage - Manage personal todo-lists across devices")
.put("name", name)
.render()
}
From 25193f95bf90a6dbbfe08b79c30695d3036c2a4d Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 23:00:06 -0800
Subject: [PATCH 097/103] Remove old page root
---
java/gust/backend/page.soy | 28 ----------------------------
1 file changed, 28 deletions(-)
delete mode 100644 java/gust/backend/page.soy
diff --git a/java/gust/backend/page.soy b/java/gust/backend/page.soy
deleted file mode 100644
index 354834828..000000000
--- a/java/gust/backend/page.soy
+++ /dev/null
@@ -1,28 +0,0 @@
-
-{namespace gust.backend}
-
-
-/**
- * Base template for a generic HTML5 page. Content can be injected into the body or the head. The page title is also
- * lifted as its own argument. This makes it a required parameter for render.
- */
-{template .page}
- {@param title: string} /** Page title to specify in the head. */
- {@param content: html} /** HTML content to inject into the page body. */
- {@param? head: html} /** Head content to provide. */
- {@param? pageClass: string} /** CSS class string to apply to the body. */
-
-
-
-
-
- {$title}
- {if isNonnull($head)}
- {$head}
- {/if}
-
-
- {$content}
-
-
-{/template}
From 83a69d14ebc039a8ea6d79d4d3142c209a84a847 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 23:19:39 -0800
Subject: [PATCH 098/103] Install logback as the underlying log implementation
---
defs/toolchain/java/repos.bzl | 4 +-
defs/toolchain/java/rules.bzl | 2 +-
maven_install.json | 130 ++++++++++++++++++++++------------
3 files changed, 89 insertions(+), 47 deletions(-)
diff --git a/defs/toolchain/java/repos.bzl b/defs/toolchain/java/repos.bzl
index 765715de7..40aed654a 100644
--- a/defs/toolchain/java/repos.bzl
+++ b/defs/toolchain/java/repos.bzl
@@ -28,7 +28,9 @@ SLF4J_VERSION = "1.7.26"
GRAALVM_VERSION = _GRAALVM_VERSION
+LOGBACK_VERSION = "1.2.3"
PROTOBUF_VERSION = _PROTOBUF_VERSION
+
GCLOUD_API_VERSION = "3.4.0"
GCLOUD_FIRESTORE_VERSION = "1.32.4"
@@ -151,7 +153,7 @@ MICRONAUT_BUILD_ARTIFACTS = [
RUNTIME_ARTIFACTS = [
# No base runtime artifacts yet.
- "org.slf4j:slf4j-jdk14:%s" % SLF4J_VERSION,
+ "ch.qos.logback:logback-classic:%s" % LOGBACK_VERSION,
]
MICRONAUT_RUNTIME_ARTIFACTS = [
diff --git a/defs/toolchain/java/rules.bzl b/defs/toolchain/java/rules.bzl
index 34d8e62d4..4e26f5bb1 100644
--- a/defs/toolchain/java/rules.bzl
+++ b/defs/toolchain/java/rules.bzl
@@ -112,7 +112,7 @@ INJECTED_GAPI_DEPS = [
]
INJECTED_MICRONAUT_RUNTIME_DEPS = [
- maven("org.slf4j:slf4j-jdk14"),
+ maven("ch.qos.logback:logback-classic"),
maven("io.micronaut:micronaut-runtime"),
]
diff --git a/maven_install.json b/maven_install.json
index e96dd3006..41b557e6d 100644
--- a/maven_install.json
+++ b/maven_install.json
@@ -1,10 +1,94 @@
{
"dependency_tree": {
- "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": -2025541304,
+ "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": 2063931894,
"conflict_resolution": {
"com.google.guava:guava:28.0-jre": "com.google.guava:guava:28.1-android"
},
"dependencies": [
+ {
+ "coord": "ch.qos.logback:logback-classic:1.2.3",
+ "dependencies": [
+ "ch.qos.logback:logback-core:1.2.3",
+ "org.slf4j:slf4j-api:1.7.26"
+ ],
+ "directDependencies": [
+ "ch.qos.logback:logback-core:1.2.3",
+ "org.slf4j:slf4j-api:1.7.26"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar",
+ "https://maven.google.com/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar",
+ "https://repo1.maven.org/maven2/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar"
+ ],
+ "sha256": "fb53f8539e7fcb8f093a56e138112056ec1dc809ebb020b59d8a36a5ebac37e0",
+ "url": "https://jcenter.bintray.com/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar"
+ },
+ {
+ "coord": "ch.qos.logback:logback-classic:jar:sources:1.2.3",
+ "dependencies": [
+ "org.slf4j:slf4j-api:jar:sources:1.7.26",
+ "ch.qos.logback:logback-core:jar:sources:1.2.3"
+ ],
+ "directDependencies": [
+ "ch.qos.logback:logback-core:jar:sources:1.2.3",
+ "org.slf4j:slf4j-api:jar:sources:1.7.26"
+ ],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3-sources.jar",
+ "https://maven.google.com/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3-sources.jar",
+ "https://repo1.maven.org/maven2/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3-sources.jar"
+ ],
+ "sha256": "480cb5e99519271c9256716d4be1a27054047435ff72078d9deae5c6a19f63eb",
+ "url": "https://jcenter.bintray.com/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3-sources.jar"
+ },
+ {
+ "coord": "ch.qos.logback:logback-core:1.2.3",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar",
+ "https://maven.google.com/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar",
+ "https://repo1.maven.org/maven2/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar"
+ ],
+ "sha256": "5946d837fe6f960c02a53eda7a6926ecc3c758bbdd69aa453ee429f858217f22",
+ "url": "https://jcenter.bintray.com/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar"
+ },
+ {
+ "coord": "ch.qos.logback:logback-core:jar:sources:1.2.3",
+ "dependencies": [],
+ "directDependencies": [],
+ "exclusions": [
+ "com.google.template:soy",
+ "com.google.common.html.types:types"
+ ],
+ "file": "v1/https/jcenter.bintray.com/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3-sources.jar",
+ "mirror_urls": [
+ "https://jcenter.bintray.com/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3-sources.jar",
+ "https://maven.google.com/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3-sources.jar",
+ "https://repo1.maven.org/maven2/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3-sources.jar",
+ "https://dl.bintray.com/micronaut/core-releases-local/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3-sources.jar"
+ ],
+ "sha256": "1f69b6b638ec551d26b10feeade5a2b77abe347f9759da95022f0da9a63a9971",
+ "url": "https://jcenter.bintray.com/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3-sources.jar"
+ },
{
"coord": "com.fasterxml.jackson.core:jackson-annotations:2.10.1",
"dependencies": [],
@@ -9403,50 +9487,6 @@
"sha256": "9e25ad98a324e6685752fd01fbbd0588ceec5df564e53c49486946a2d19dc482",
"url": "https://jcenter.bintray.com/org/slf4j/slf4j-api/1.7.26/slf4j-api-1.7.26-sources.jar"
},
- {
- "coord": "org.slf4j:slf4j-jdk14:1.7.26",
- "dependencies": [
- "org.slf4j:slf4j-api:1.7.26"
- ],
- "directDependencies": [
- "org.slf4j:slf4j-api:1.7.26"
- ],
- "exclusions": [
- "com.google.template:soy",
- "com.google.common.html.types:types"
- ],
- "file": "v1/https/jcenter.bintray.com/org/slf4j/slf4j-jdk14/1.7.26/slf4j-jdk14-1.7.26.jar",
- "mirror_urls": [
- "https://jcenter.bintray.com/org/slf4j/slf4j-jdk14/1.7.26/slf4j-jdk14-1.7.26.jar",
- "https://maven.google.com/org/slf4j/slf4j-jdk14/1.7.26/slf4j-jdk14-1.7.26.jar",
- "https://repo1.maven.org/maven2/org/slf4j/slf4j-jdk14/1.7.26/slf4j-jdk14-1.7.26.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/org/slf4j/slf4j-jdk14/1.7.26/slf4j-jdk14-1.7.26.jar"
- ],
- "sha256": "eaecf0184b014c9c6831cde91b0f405207a3578156aa4efe0d8f140b445ecd78",
- "url": "https://jcenter.bintray.com/org/slf4j/slf4j-jdk14/1.7.26/slf4j-jdk14-1.7.26.jar"
- },
- {
- "coord": "org.slf4j:slf4j-jdk14:jar:sources:1.7.26",
- "dependencies": [
- "org.slf4j:slf4j-api:jar:sources:1.7.26"
- ],
- "directDependencies": [
- "org.slf4j:slf4j-api:jar:sources:1.7.26"
- ],
- "exclusions": [
- "com.google.template:soy",
- "com.google.common.html.types:types"
- ],
- "file": "v1/https/jcenter.bintray.com/org/slf4j/slf4j-jdk14/1.7.26/slf4j-jdk14-1.7.26-sources.jar",
- "mirror_urls": [
- "https://jcenter.bintray.com/org/slf4j/slf4j-jdk14/1.7.26/slf4j-jdk14-1.7.26-sources.jar",
- "https://maven.google.com/org/slf4j/slf4j-jdk14/1.7.26/slf4j-jdk14-1.7.26-sources.jar",
- "https://repo1.maven.org/maven2/org/slf4j/slf4j-jdk14/1.7.26/slf4j-jdk14-1.7.26-sources.jar",
- "https://dl.bintray.com/micronaut/core-releases-local/org/slf4j/slf4j-jdk14/1.7.26/slf4j-jdk14-1.7.26-sources.jar"
- ],
- "sha256": "ba5565b6d633b56d72d0e72250eb316fbffb24912fd696548847b90ab16537e2",
- "url": "https://jcenter.bintray.com/org/slf4j/slf4j-jdk14/1.7.26/slf4j-jdk14-1.7.26-sources.jar"
- },
{
"coord": "org.threeten:threetenbp:1.4.1",
"dependencies": [],
From f59f5dc5faafbca5ea5982aeda4afcc3b620cb48 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sat, 29 Feb 2020 23:56:18 -0800
Subject: [PATCH 099/103] Add sugar for page context, title, assets
- Add ability to change page title, inject stylesheets/scripts
- Add ability to easily generate trusted URI protos
- Rename SoyProtoContextMediator > PageRender
- Make PageContextManager usable as a PageRender
- Use new fluent interface in HomeController
---
java/gust/backend/AppController.java | 35 ++++++
java/gust/backend/BUILD.bazel | 18 ++-
java/gust/backend/PageContext.java | 2 +-
java/gust/backend/PageContextManager.java | 107 +++++++++++++++++-
...toContextMediator.java => PageRender.java} | 2 +-
javatests/gust/backend/PageContextTest.java | 4 +-
samples/todolist/src/server/HomeController.kt | 27 ++++-
7 files changed, 174 insertions(+), 21 deletions(-)
rename java/gust/backend/{SoyProtoContextMediator.java => PageRender.java} (92%)
diff --git a/java/gust/backend/AppController.java b/java/gust/backend/AppController.java
index 130aa4818..28d9f0e07 100644
--- a/java/gust/backend/AppController.java
+++ b/java/gust/backend/AppController.java
@@ -1,8 +1,14 @@
package gust.backend;
+import com.google.common.html.types.TrustedResourceUrlProto;
+import com.google.template.soy.data.SanitizedContent;
+import com.google.template.soy.data.UnsafeSanitizedContentOrdainer;
+
import javax.annotation.Nonnull;
import javax.inject.Inject;
+import java.net.URI;
+import java.net.URL;
/**
@@ -19,6 +25,7 @@
* To make use of this controller, simply inherit from it in your own
@Controller -annotated class. When a
* request method is invoked, the logic provided by this object will have been initialized and will be ready to use.
*/
+@SuppressWarnings("unused")
public class AppController extends BaseController {
/**
* Private constructor, which accepts injected manager objects. Some or all of these are passed up to
@@ -29,4 +36,32 @@ public class AppController extends BaseController {
@Inject public AppController(@Nonnull PageContextManager pageContextManager) {
super(pageContextManager);
}
+
+ // -- API: Trusted Resources -- //
+
+ /**
+ * Generate a trusted resource URL for the provided Java URL.
+ *
+ * @param url Pre-ordained trusted resource URL.
+ * @return Trusted resource URL specification proto.
+ */
+ public TrustedResourceUrlProto trustedResource(@Nonnull URL url) {
+ return UnsafeSanitizedContentOrdainer.ordainAsSafe(
+ url.toString(),
+ SanitizedContent.ContentKind.TRUSTED_RESOURCE_URI)
+ .toTrustedResourceUrlProto();
+ }
+
+ /**
+ * Generate a trusted resource URL for the provided Java URI.
+ *
+ * @param uri Pre-ordained trusted resource URI.
+ * @return Trusted resource URL specification proto.
+ */
+ public TrustedResourceUrlProto trustedResource(@Nonnull URI uri) {
+ return UnsafeSanitizedContentOrdainer.ordainAsSafe(
+ uri.toString(),
+ SanitizedContent.ContentKind.TRUSTED_RESOURCE_URI)
+ .toTrustedResourceUrlProto();
+ }
}
diff --git a/java/gust/backend/BUILD.bazel b/java/gust/backend/BUILD.bazel
index 74fe2049a..f390d6422 100644
--- a/java/gust/backend/BUILD.bazel
+++ b/java/gust/backend/BUILD.bazel
@@ -30,11 +30,6 @@ alias(
actual = "@native_base//image",
)
-template_library(
- name = "page",
- srcs = ["page.soy"],
-)
-
micronaut_library(
name = "AppController",
srcs = ["AppController.java"],
@@ -54,28 +49,31 @@ micronaut_library(
)
micronaut_library(
- name = "SoyProtoContextMediator",
- srcs = ["SoyProtoContextMediator.java"],
+ name = "PageRender",
+ srcs = ["PageRender.java"],
proto_deps = ["//gust/page:page_proto"],
)
micronaut_library(
name = "PageContext",
srcs = ["PageContext.java"],
- deps = [":SoyProtoContextMediator"],
+ deps = [":PageRender"],
proto_deps = ["//gust/page:page_proto"],
)
micronaut_library(
name = "PageContextManager",
srcs = ["PageContextManager.java"],
- deps = [":PageContext"],
+ deps = [
+ ":PageContext",
+ ":PageRender",
+ ],
)
micronaut_library(
name = "TemplateProvider",
srcs = ["TemplateProvider.java"],
- templates = [":page"],
+ templates = ["//gust/page:page_soy"],
deps = [maven("io.micronaut:micronaut-views-soy")],
)
diff --git a/java/gust/backend/PageContext.java b/java/gust/backend/PageContext.java
index b8243d0c9..670268fa3 100644
--- a/java/gust/backend/PageContext.java
+++ b/java/gust/backend/PageContext.java
@@ -23,7 +23,7 @@
*/
@Immutable
@SuppressWarnings("unused")
-public final class PageContext implements SoyProtoContextMediator {
+public final class PageContext implements PageRender {
/** Name at which proto-context is injected. */
private static final String CONTEXT_PROPERTY_NAME = "context";
diff --git a/java/gust/backend/PageContextManager.java b/java/gust/backend/PageContextManager.java
index 3fc0b1604..d2f7d31df 100644
--- a/java/gust/backend/PageContextManager.java
+++ b/java/gust/backend/PageContextManager.java
@@ -11,6 +11,7 @@
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.io.Closeable;
+import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.ConcurrentSkipListMap;
@@ -25,7 +26,7 @@
*/
@RequestScope
@SuppressWarnings("unused")
-public class PageContextManager implements Closeable, AutoCloseable {
+public class PageContextManager implements Closeable, AutoCloseable, PageRender {
private static final Logger LOG = LoggerFactory.getLogger(PageContextManager.class);
/** Page context builder. */
@@ -79,7 +80,7 @@ public class PageContextManager implements Closeable, AutoCloseable {
if (this.closed) {
assert this.builtContext != null;
} else {
- this.close();
+ this.closed = true;
if (LOG.isDebugEnabled())
LOG.debug("Exporting page context...");
this.builtContext = PageContext.fromProto(
@@ -88,7 +89,8 @@ public class PageContextManager implements Closeable, AutoCloseable {
this.injected,
this.namingMapProvider.orElse(null));
if (LOG.isDebugEnabled())
- LOG.debug(String.format("Exported page context: %s", this.builtContext));
+ LOG.debug(String.format("Exported page context proto: %s",
+ this.builtContext.getPageContext()));
}
return this.builtContext;
}
@@ -110,6 +112,46 @@ public class PageContextManager implements Closeable, AutoCloseable {
return this;
}
+ /**
+ * Include the specified JavaScript resource in the rendered page, according to enclosed settings (i.e. respecting
+ * defer , async , and other attributes). If the script asset has an ID, it will not be
+ * passed through ID rewriting before being rendered.
+ *
+ * Behavior: Script assets included in this manner are always loaded in the document head, so be judicious
+ * with
defer if you are loading a significant amount of JavaScript. There are no default script assets.
+ * Scripts are emitted in the order in which they are attached to the page context (i.e. via this method).
+ *
+ * @param script Script asset to load in the rendered page output. Do not pass `null`.
+ * @return Current page context manager (for call chain-ability).
+ * @throws IllegalArgumentException If `null` is passed for the script.
+ */
+ public @Nonnull PageContextManager script(@Nonnull Context.Scripts.JavaScript.Builder script) {
+ //noinspection ConstantConditions
+ if (script == null) throw new IllegalArgumentException("Cannot pass `null` for script.");
+ this.context.getScriptsBuilder().addLink(script);
+ return this;
+ }
+
+ /**
+ * Include the specified CSS stylesheet resource in the rendered page, according to the enclosed settings (i.e.
+ * respecting properties like media ). If the stylesheet has an ID, it will not be passed through ID
+ * rewriting before being rendered.
+ *
+ * Stylesheets included in this manner are always loaded in the head, via a link tag. If you want to defer loading
+ * of styles, you'll have to do so from JS. Stylesheet links are emitted in the order in which they are attached to
+ * the page context (i.e. via this method).
+ *
+ * @param stylesheet Stylesheet asset to load in the rendered page output. Do not pass `null`.
+ * @return Current page context manager (for call chain-ability).
+ * @throws IllegalArgumentException If `null` is passed for the stylesheet.
+ */
+ public @Nonnull PageContextManager stylesheet(@Nonnull Context.Styles.Stylesheet.Builder stylesheet) {
+ //noinspection ConstantConditions
+ if (stylesheet == null) throw new IllegalArgumentException("Cannot pass `null` for stylesheet.");
+ this.context.getStylesBuilder().addLink(stylesheet);
+ return this;
+ }
+
// -- Map-like Interface (Props) -- //
/**
@@ -218,6 +260,63 @@ public class PageContextManager implements Closeable, AutoCloseable {
*/
@Override
public void close() {
- this.closed = true;
+ if (!this.closed) {
+ this.render();
+ }
+ }
+
+ // -- Interface: Delegated Context -- //
+
+ /**
+ * Retrieve serializable server-side-rendered page context, which should be assigned to the render flow bound to this
+ * context mediator.
+ *
+ * @return Server-side rendered page context.
+ */
+ @Override
+ public @Nonnull Context getPageContext() {
+ this.close();
+ if (this.builtContext == null) throw new IllegalStateException("Unable to read page context.");
+ return this.builtContext.getPageContext();
+ }
+
+ /**
+ * Retrieve properties which should be made available via regular, declared `@param` statements.
+ *
+ * @return Map of regular template properties.
+ */
+ @Nonnull
+ @Override
+ public Map getProperties() {
+ this.close();
+ if (this.builtContext == null) throw new IllegalStateException("Unable to read page context.");
+ return this.builtContext.getProperties();
+ }
+
+ /**
+ * Retrieve properties and values that should be made available via `@inject`.
+ *
+ * @return Map of injected properties and their values.
+ */
+ @Nonnull
+ @Override
+ public Map getInjectedProperties() {
+ this.close();
+ if (this.builtContext == null) throw new IllegalStateException("Unable to read page context.");
+ return this.builtContext.getInjectedProperties();
+ }
+
+ /**
+ * Specify a Soy renaming map which overrides the globally-installed map, if any. Renaming must still be activated via
+ * config, or manually, for the return value of this method to have any effect.
+ *
+ * @return {@link SoyNamingMapProvider} that should be used for this render routine.
+ */
+ @Nonnull
+ @Override
+ public Optional overrideNamingMap() {
+ this.close();
+ if (this.builtContext == null) throw new IllegalStateException("Unable to read page context.");
+ return this.builtContext.overrideNamingMap();
}
}
diff --git a/java/gust/backend/SoyProtoContextMediator.java b/java/gust/backend/PageRender.java
similarity index 92%
rename from java/gust/backend/SoyProtoContextMediator.java
rename to java/gust/backend/PageRender.java
index ca6ff6c8a..bcb40cb45 100644
--- a/java/gust/backend/SoyProtoContextMediator.java
+++ b/java/gust/backend/PageRender.java
@@ -14,7 +14,7 @@
* @author Sam Gammon (sam@momentum.io)
* @see PageContext Default implementation of this interface
*/
-public interface SoyProtoContextMediator extends SoyContextMediator {
+public interface PageRender extends SoyContextMediator {
/**
* Retrieve serializable server-side-rendered page context, which should be assigned to the render flow bound to this
* context mediator.
diff --git a/javatests/gust/backend/PageContextTest.java b/javatests/gust/backend/PageContextTest.java
index 696b832f6..0e519552a 100644
--- a/javatests/gust/backend/PageContextTest.java
+++ b/javatests/gust/backend/PageContextTest.java
@@ -4,7 +4,7 @@
import com.google.template.soy.shared.SoyCssRenamingMap;
import com.google.template.soy.shared.SoyIdRenamingMap;
import gust.backend.PageContext;
-import gust.backend.SoyProtoContextMediator;
+import gust.backend.PageRender;
import io.micronaut.views.soy.SoyNamingMapProvider;
import org.junit.Test;
import tools.elide.page.Context;
@@ -94,7 +94,7 @@ public SoyIdRenamingMap idRenamingMap() {
((Context)ctx.getInjectedProperties().get("context")).getMeta().getTitle());
assertEquals("proto context should be valid through interface or object",
- ((SoyProtoContextMediator)ctx).getPageContext(),
+ ((PageRender)ctx).getPageContext(),
ctx.getPageContext());
}
diff --git a/samples/todolist/src/server/HomeController.kt b/samples/todolist/src/server/HomeController.kt
index d656e5f56..d0982c8f2 100644
--- a/samples/todolist/src/server/HomeController.kt
+++ b/samples/todolist/src/server/HomeController.kt
@@ -1,8 +1,8 @@
package server
import gust.backend.AppController
-import gust.backend.PageContext
import gust.backend.PageContextManager
+import gust.backend.PageRender
import io.micronaut.http.MediaType
import io.micronaut.http.annotation.Controller
import io.micronaut.http.annotation.Get
@@ -10,6 +10,9 @@ import io.micronaut.http.annotation.QueryValue
import io.micronaut.security.annotation.Secured
import io.micronaut.views.View
import org.slf4j.LoggerFactory
+import tools.elide.page.Context.Styles.Stylesheet
+import tools.elide.page.Context.Scripts.JavaScript
+import java.net.URI
import javax.inject.Inject
@@ -27,6 +30,15 @@ class HomeController @Inject constructor (ctx: PageContextManager): AppControlle
// Default name to show.
private const val defaultName = "World"
+
+ // CDN at which to access MDC.
+ private const val materialCDN = "https://unpkg.com/material-components-web@latest/dist"
+
+ // Material JS.
+ private const val materialJS = "$materialCDN/material-components-web.min.js"
+
+ // Material CSS.
+ private const val materialCSS = "$materialCDN/material-components-web.min.css"
}
/**
@@ -44,12 +56,21 @@ class HomeController @Inject constructor (ctx: PageContextManager): AppControlle
*/
@Get("/", produces = [MediaType.TEXT_HTML])
@View("todolist.home.page")
- fun home(@QueryValue("name", defaultValue = defaultName) name: String): PageContext {
+ fun home(@QueryValue("name", defaultValue = defaultName) name: String): PageRender {
if (name != defaultName)
logging.info("Greeting user with name '$name'...")
+ if (logging.isDebugEnabled)
+ logging.debug("Serving home page...")
return this.context
.title("Todolist - Homepage - Manage personal todo-lists across devices")
.put("name", name)
- .render()
+
+ .script(JavaScript.newBuilder()
+ .setDefer(true)
+ .setUri(this.trustedResource(URI.create(materialJS))))
+
+ .stylesheet(Stylesheet.newBuilder()
+ .setMedia("screen")
+ .setUri(this.trustedResource(URI.create(materialCSS))))
}
}
From 6b04186c3488e7556f96bda1eacbd04d35c7fcd7 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sun, 1 Mar 2020 00:17:12 -0800
Subject: [PATCH 100/103] :rocket: Fix Soy render with injected context
- Working injected context. Yay!
- Logback is working too
- Cleaned up page context manager with improved log messages
---
README.md | 5 +-
gust/page/page.soy | 78 +++++++++++------------
java/gust/backend/PageContextManager.java | 9 +--
java/gust/logback.xml | 2 -
javatests/gust/backend/BUILD.bazel | 2 +-
samples/todolist/src/logback.xml | 1 -
6 files changed, 49 insertions(+), 48 deletions(-)
diff --git a/README.md b/README.md
index c21cb93fe..69e293637 100644
--- a/README.md
+++ b/README.md
@@ -65,8 +65,11 @@ The richest and best example app is _Todolist_, which is designed to be an examp
To build the framework, you'll need Bazel/Bazelisk and a standard toolchain of stuff (C/C++ compilers, Docker, JDK 11+, Git, and so on). Bazel should tell you what you need if it can't fetch it for you. Otherwise, file a bug on this repo if you have trouble building the framework itself.
Most development tasks on the framework involve the `Makefile`, which offers convenient invocation of common dev tools, including Bazelisk and `ibazel`. Running `make help` shows the commands supported, and generally returns something like this:
-```
+```bash
+$ make help
+
GUST Framework Tools:
+
bases Build base images and push them.
build Build all framework targets.
builder-image Build a new version of the CI builder image for Gust.
diff --git a/gust/page/page.soy b/gust/page/page.soy
index c8aa15145..d0fca28b3 100644
--- a/gust/page/page.soy
+++ b/gust/page/page.soy
@@ -35,7 +35,7 @@
* already exists when rendering occurs.
*/
{template .wrap}
- {@inject page: page.Context} /** Main page-level context, provided to include metadata and page assets. */
+ {@inject context: page.Context} /** Main page-level context, provided to include metadata and page assets. */
{@param? pageId: string} /** CSS ID to apply to the whole page, optionally. */
{@param? base: trusted_resource_uri} /** Optional page base to apply. */
{@param? pageClass: string} /** Class name(s) to apply to the whole page, optionally. */
@@ -51,9 +51,9 @@
{@inject? contentSecurity: [header: string, policy: string]} /** Injected CSP to apply via meta tags. */
{let $languageSpec kind="text"}
- {if isNonnull($page) and isNonnull($page.meta) and isNonnull($page.meta.language)}
+ {if isNonnull($context) and isNonnull($context.meta) and isNonnull($context.meta.language)}
{call gust.base.languageSpec}
- {param spec: $page.meta.language /}
+ {param spec: $context.meta.language /}
{/call}
{else}en-US{/if}
{/let}
@@ -79,24 +79,24 @@
{if isNonnull($liftedCSS)}
{/if}
- {if isNonnull($page) and isNonnull($page.styles) and isNonnull($page.styles.linkList)}
- {for $styleDirective in $page.styles.linkList}
+ {if isNonnull($context) and isNonnull($context.styles) and isNonnull($context.styles.linkList)}
+ {for $styleDirective in $context.styles.linkList}
{call gust.dom.assets.stylesheet}
{param sheet: $styleDirective.uri /}
{param media: $styleDirective.media /}
{/call}
{/for}
{/if}
- {if isNonnull($page) and isNonnull($page.meta) and $page.meta.viewport}
-
+ {if isNonnull($context) and isNonnull($context.meta) and $context.meta.viewport}
+
{else}
{/if}
- {if isNonnull($page) and isNonnull($page.meta) and $page.meta.favicon}
-
+ {if isNonnull($context) and isNonnull($context.meta) and $context.meta.favicon}
+
{/if}
- {if isNonnull($page) and isNonnull($page.meta) and $page.meta.manifest}
-
+ {if isNonnull($context) and isNonnull($context.meta) and $context.meta.manifest}
+
{/if}
{if isNonnull($liftedJS)}
{/if}
- {if isNonnull($page) and isNonnull($page.scripts) and $page.scripts.linkList}
- {for $scriptDirective in $page.scripts.linkList}
+ {if isNonnull($context) and isNonnull($context.scripts) and $context.scripts.linkList}
+ {for $scriptDirective in $context.scripts.linkList}
{call gust.dom.assets.script}
{param script: $scriptDirective.uri /}
{param id: $scriptDirective.id /}
@@ -116,21 +116,21 @@
{/call}
{/for}
{/if}
- {if isNonnull($page) and isNonnull($page.meta) and $page.meta.theme}
-
+ {if isNonnull($context) and isNonnull($context.meta) and $context.meta.theme}
+
{/if}
- {if isNonnull($page) and isNonnull($page.meta) and $page.meta.touchIcon}
-
+ {if isNonnull($context) and isNonnull($context.meta) and $context.meta.touchIcon}
+
{/if}
- {if isNonnull($page) and isNonnull($page.meta) and $page.meta.startupImage}
-
+ {if isNonnull($context) and isNonnull($context.meta) and $context.meta.startupImage}
+
{/if}
- {if isNonnull($page) and isNonnull($page.meta) and $page.meta.description}
-
+ {if isNonnull($context) and isNonnull($context.meta) and $context.meta.description}
+
{/if}
- {if isNonnull($page) and isNonnull($page.meta) and $page.meta.keywordList}
+ {if isNonnull($context) and isNonnull($context.meta) and $context.meta.keywordList}
{let $metaKeywords kind="text"}
- {for $keyword in $page.meta.keywordList}
+ {for $keyword in $context.meta.keywordList}
{if not isFirst($keyword)}, {/if}
{$keyword}
{/for}
@@ -138,30 +138,30 @@
{/if}
{if $additionalHead}{$additionalHead}{/if}
- {if isNonnull($page) and isNonnull($page.meta) and isNonnull($page.meta.title)}
- {$page.meta.title}
+ {if isNonnull($context) and isNonnull($context.meta) and isNonnull($context.meta.title)}
+ {$context.meta.title}
{/if}
- {if isNonnull($page) and isNonnull($page.meta) and isNonnull($page.meta.openGraph)}
- {if $page.meta.openGraph.url}
-
+ {if isNonnull($context) and isNonnull($context.meta) and isNonnull($context.meta.openGraph)}
+ {if $context.meta.openGraph.url}
+
{/if}
- {if $page.meta.openGraph.title}
-
-
+ {if $context.meta.openGraph.title}
+
+
{/if}
- {if $page.meta.openGraph.description}
-
-
+ {if $context.meta.openGraph.description}
+
+
{/if}
- {if $page.meta.openGraph.image}
-
-
+ {if $context.meta.openGraph.image}
+
+
{/if}
{if $languageSpec}
{/if}
- {if $page.meta.openGraph.type}
-
+ {if $context.meta.openGraph.type}
+
{/if}
diff --git a/java/gust/backend/PageContextManager.java b/java/gust/backend/PageContextManager.java
index d2f7d31df..197d45b08 100644
--- a/java/gust/backend/PageContextManager.java
+++ b/java/gust/backend/PageContextManager.java
@@ -81,16 +81,17 @@ public class PageContextManager implements Closeable, AutoCloseable, PageRender
assert this.builtContext != null;
} else {
this.closed = true;
- if (LOG.isDebugEnabled())
- LOG.debug("Exporting page context...");
this.builtContext = PageContext.fromProto(
this.context.build(),
this.props,
this.injected,
this.namingMapProvider.orElse(null));
- if (LOG.isDebugEnabled())
- LOG.debug(String.format("Exported page context proto: %s",
+ if (LOG.isDebugEnabled()) {
+ LOG.debug(String.format("Exported page context with: %s props, %s injecteds, and proto follows \n%s",
+ this.props.size(),
+ this.injected.size(),
this.builtContext.getPageContext()));
+ }
}
return this.builtContext;
}
diff --git a/java/gust/logback.xml b/java/gust/logback.xml
index 9f668f300..84bcb73fe 100644
--- a/java/gust/logback.xml
+++ b/java/gust/logback.xml
@@ -9,6 +9,4 @@
-
-
diff --git a/javatests/gust/backend/BUILD.bazel b/javatests/gust/backend/BUILD.bazel
index ac0fdbd8c..356d9fc00 100644
--- a/javatests/gust/backend/BUILD.bazel
+++ b/javatests/gust/backend/BUILD.bazel
@@ -34,7 +34,7 @@ jdk_test(
srcs = ["PageContextTest.java"],
deps = [
"//java/gust/backend:PageContext",
- "//java/gust/backend:SoyProtoContextMediator",
+ "//java/gust/backend:PageRender",
"@com_google_guava",
"@com_google_template_soy",
"@io_micronaut_micronaut_views_soy",
diff --git a/samples/todolist/src/logback.xml b/samples/todolist/src/logback.xml
index 984cb1cfb..800a5ed52 100644
--- a/samples/todolist/src/logback.xml
+++ b/samples/todolist/src/logback.xml
@@ -9,7 +9,6 @@
-
From 71a5dc6ce0a64272bec548385571c1918425fd99 Mon Sep 17 00:00:00 2001
From: Sam Gammon
Date: Sun, 1 Mar 2020 00:23:06 -0800
Subject: [PATCH 101/103] Fix render bugs on homepage
---
gust/dom/assets.soy | 2 +-
gust/page/page.soy | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/gust/dom/assets.soy b/gust/dom/assets.soy
index 12bc5660a..896aadc79 100644
--- a/gust/dom/assets.soy
+++ b/gust/dom/assets.soy
@@ -18,7 +18,7 @@
{/if}
- {if isNonnull($context) and isNonnull($context.scripts) and $context.scripts.linkList}
- {for $scriptDirective in $context.scripts.linkList}
+ {if isNonnull($page) and isNonnull($page.scripts) and $page.scripts.linkList}
+ {for $scriptDirective in $page.scripts.linkList}
{call gust.dom.assets.script}
{param script: $scriptDirective.uri /}
{param id: $scriptDirective.id /}
@@ -116,21 +127,21 @@
{/call}
{/for}
{/if}
- {if isNonnull($context) and isNonnull($context.meta) and $context.meta.theme}
-
+ {if isNonnull($page) and isNonnull($page.meta) and $page.meta.theme}
+
{/if}
- {if isNonnull($context) and isNonnull($context.meta) and $context.meta.touchIcon}
-
+ {if isNonnull($page) and isNonnull($page.meta) and $page.meta.touchIcon}
+
{/if}
- {if isNonnull($context) and isNonnull($context.meta) and $context.meta.startupImage}
-
+ {if isNonnull($page) and isNonnull($page.meta) and $page.meta.startupImage}
+
{/if}
- {if isNonnull($context) and isNonnull($context.meta) and $context.meta.description}
-
+ {if isNonnull($page) and isNonnull($page.meta) and $page.meta.description}
+
{/if}
- {if isNonnull($context) and isNonnull($context.meta) and length($context.meta.keywordList) > 0}
+ {if isNonnull($page) and isNonnull($page.meta) and length($page.meta.keywordList) > 0}
{let $metaKeywords kind="text"}
- {for $keyword in $context.meta.keywordList}
+ {for $keyword in $page.meta.keywordList}
{if not isFirst($keyword)}, {/if}
{$keyword}
{/for}
@@ -138,30 +149,30 @@
{/if}
{if $additionalHead}{$additionalHead}{/if}
- {if isNonnull($context) and isNonnull($context.meta) and isNonnull($context.meta.title)}
- {$context.meta.title}
+ {if isNonnull($page) and isNonnull($page.meta) and isNonnull($page.meta.title)}
+ {$page.meta.title}
{/if}
- {if isNonnull($context) and isNonnull($context.meta) and isNonnull($context.meta.openGraph)}
- {if $context.meta.openGraph.url}
-
+ {if isNonnull($page) and isNonnull($page.meta) and isNonnull($page.meta.openGraph)}
+ {if $page.meta.openGraph.url}
+
{/if}
- {if $context.meta.openGraph.title}
-
-
+ {if $page.meta.openGraph.title}
+
+
{/if}
- {if $context.meta.openGraph.description}
-
-
+ {if $page.meta.openGraph.description}
+
+
{/if}
- {if $context.meta.openGraph.image}
-
-
+ {if $page.meta.openGraph.image}
+
+
{/if}
{if $languageSpec}
{/if}
- {if $context.meta.openGraph.type}
-
+ {if $page.meta.openGraph.type}
+
{/if}
diff --git a/gust/page/semantic.proto b/gust/page/semantic.proto
index 9bbaebe1d..989050ceb 100644
--- a/gust/page/semantic.proto
+++ b/gust/page/semantic.proto
@@ -1,3 +1,16 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+
/**
* Defines models related to semantic page metadata, which define such structure as the type/role of the page itself,
* the organization it belongs to, and so on.
diff --git a/java/BUILD.bazel b/java/BUILD.bazel
index c3e6f81c0..9c185ef42 100644
--- a/java/BUILD.bazel
+++ b/java/BUILD.bazel
@@ -1,19 +1,38 @@
+##
+# Copyright © 2020, The Gust Framework Authors. All rights reserved.
+#
+# The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+# are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+# this code in object or source form requires and implies consent and agreement to that license in principle and
+# practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+# Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+# Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+# by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+# is strictly forbidden except in adherence with assigned license requirements.
+##
+
package(
default_visibility = ["//visibility:public"],
)
load(
- "@rules_java//java:defs.bzl",
- "java_library",
+ "//defs/toolchain/java:rules.bzl",
+ "jdk_library",
)
-java_library(
- name = "gustlib",
+
+jdk_library(
+ name = "gust",
exports = [
"//java/gust:Core",
],
)
+alias(
+ name = "javadoc",
+ actual = "//java/gust:javadoc",
+)
+
alias(
name = "entrypoint",
actual = "//java/gust/backend:backend",
@@ -21,5 +40,10 @@ alias(
alias(
name = "framework",
- actual = ":gustlib",
+ actual = ":gust",
+)
+
+alias(
+ name = "framework-javadoc",
+ actual = ":javadoc",
)
diff --git a/java/gust/BUILD.bazel b/java/gust/BUILD.bazel
index d6684d7f0..38bd30b31 100644
--- a/java/gust/BUILD.bazel
+++ b/java/gust/BUILD.bazel
@@ -1,3 +1,16 @@
+##
+# Copyright © 2020, The Gust Framework Authors. All rights reserved.
+#
+# The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+# are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+# this code in object or source form requires and implies consent and agreement to that license in principle and
+# practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+# Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+# Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+# by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+# is strictly forbidden except in adherence with assigned license requirements.
+##
+
package(
default_visibility = ["//visibility:public"],
)
@@ -22,6 +35,23 @@ load(
"java_library",
)
+load(
+ "//defs/toolchain/java:docs.bzl",
+ "javadoc_library",
+ "javadoc_zipfile",
+)
+
+load(
+ "//defs/toolchain/java:repos.bzl",
+ "ALL_DEPENDENCIES",
+)
+
+load(
+ "//defs/toolchain:deps.bzl",
+ "maven",
+ "javaproto",
+)
+
exports_files([
"application.yml",
@@ -49,7 +79,7 @@ cross_lib(
],
jsdeps = [
":CoreModule",
- ]
+ ],
)
js_module(
@@ -57,5 +87,39 @@ js_module(
exports = [
":Core-j2cl",
":CoreModule",
+ ],
+)
+
+filegroup(
+ name = "sources",
+ srcs = glob([
+ "*.java"
+ ]) + [
+ "//java/gust/backend:sources",
]
)
+
+javadoc_library(
+ name = "javadoc",
+ srcs = [
+ ":sources",
+ ],
+ deps = ALL_DEPENDENCIES + [
+ javaproto("//gust/core:datamodel"),
+ javaproto("//gust/page:page_proto"),
+ ],
+ bottom_text = "Copyright (©) 2020, The Gust Framework Authors",
+ doctitle = "GUST Framework",
+ extra_args = [
+ "-html5",
+ "-author",
+ "-charset", "UTF8",
+ "-docencoding", "UTF8",
+ "-keywords",
+ "-docfilessubdirs",
+ "-linksource",
+ ],
+ exclude_packages = [
+ "javatests",
+ ],
+)
diff --git a/java/gust/Core.java b/java/gust/Core.java
index a607722ca..0f805ea3c 100644
--- a/java/gust/Core.java
+++ b/java/gust/Core.java
@@ -1,4 +1,15 @@
-
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
package gust;
import jsinterop.annotations.JsType;
@@ -7,8 +18,8 @@
/**
* Provides core values, utility methods, etc, which can be used throughout the back- and front-end of a Gust-based
* application. Some of these methods or properties will return different values based on where the application is
- * executed. So, accessing, say, {@link #getEngine()} will return browser when invoked from JavaScript on the
- * front-end, and one of jvm or native when running on the backend.
+ * executed. So, accessing, say, {@link #getEngine()} will return {@code browser} when invoked from JavaScript on the
+ * front-end, and one of {@code jvm} or {@code native} when running on the backend.
*/
@JsType
@SuppressWarnings("WeakerAccess")
diff --git a/java/gust/Core.native.js b/java/gust/Core.native.js
index 5e2deef25..b60affb44 100644
--- a/java/gust/Core.native.js
+++ b/java/gust/Core.native.js
@@ -1,2 +1,14 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
goog.require('gust');
diff --git a/java/gust/application.yml b/java/gust/application.yml
index 0f34a7f41..4cdc00ba1 100644
--- a/java/gust/application.yml
+++ b/java/gust/application.yml
@@ -1,3 +1,15 @@
+##
+# Copyright © 2020, The Gust Framework Authors. All rights reserved.
+#
+# The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+# are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+# this code in object or source form requires and implies consent and agreement to that license in principle and
+# practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+# Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+# Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+# by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+# is strictly forbidden except in adherence with assigned license requirements.
+##
micronaut:
views:
diff --git a/java/gust/backend/AppController.java b/java/gust/backend/AppController.java
index 28d9f0e07..96c91dff8 100644
--- a/java/gust/backend/AppController.java
+++ b/java/gust/backend/AppController.java
@@ -1,6 +1,17 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
package gust.backend;
-
import com.google.common.html.types.TrustedResourceUrlProto;
import com.google.template.soy.data.SanitizedContent;
import com.google.template.soy.data.UnsafeSanitizedContentOrdainer;
@@ -26,7 +37,7 @@
* request method is invoked, the logic provided by this object will have been initialized and will be ready to use.
*/
@SuppressWarnings("unused")
-public class AppController extends BaseController {
+public abstract class AppController extends BaseController {
/**
* Private constructor, which accepts injected manager objects. Some or all of these are passed up to
* {@link BaseController}.
diff --git a/java/gust/backend/Application.java b/java/gust/backend/Application.java
index c0a755eab..95581561e 100644
--- a/java/gust/backend/Application.java
+++ b/java/gust/backend/Application.java
@@ -1,3 +1,15 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
package gust.backend;
import io.micronaut.runtime.Micronaut;
@@ -23,8 +35,12 @@ public final class Application {
* @param args Arguments passed on the command line.
*/
public static void main(String[] args) {
- ApplicationBoot.load(true);
- Micronaut.run(Application.class);
+ try {
+ ApplicationBoot.load();
+ Micronaut.run(Application.class);
+ } catch (Throwable thr) {
+ ApplicationBoot.reportStartupError(thr);
+ }
}
private Application() { /* Disallow instantiation. */ }
diff --git a/java/gust/backend/ApplicationBoot.java b/java/gust/backend/ApplicationBoot.java
index bad44f2ee..081a24bbb 100644
--- a/java/gust/backend/ApplicationBoot.java
+++ b/java/gust/backend/ApplicationBoot.java
@@ -1,15 +1,28 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
package gust.backend;
-
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.io.IOException;
import java.io.InputStream;
+
/**
* Responsible for any testable functionality that occurs when bootstrapping a Java-based application, including
* force-resolving critical configuration files, setting up logging, and so on.
*/
+@SuppressWarnings("WeakerAccess")
public final class ApplicationBoot {
/** Root configuration for a Micronaut app. */
public static final String rootConfig = "/application.yml";
@@ -23,6 +36,8 @@ public final class ApplicationBoot {
/** Default configuration provided by Gust. */
private static final String defaultLoggingConfig = "/gust" + loggingConfig;
+ private ApplicationBoot() { /* Disallow instantiation. */ }
+
/**
* Report an error that occurred during server startup, which prevented the server from starting. Errors encountered
* and reported in this manner are fatal.
@@ -68,17 +83,10 @@ public static void loadConfig(@Nonnull String role, @Nonnull String name, @Nulla
* Load main application configs, including the `app` config (usually `application.yml`), containing configuration for
* Micronaut, and `logback.xml` which contains configuration for logging. If either config file cannot be loaded, then
* an error is thrown which prevents server startup.
- *
- * @param exitOnFail Whether to exit the program if a failure occurs.
*/
- public static void load(boolean exitOnFail) {
- try {
- // validate config & start the server
- loadConfig("app", rootConfig, defaultConfig);
- loadConfig("logging", loggingConfig, defaultLoggingConfig);
- } catch (Throwable ex) {
- reportStartupError(ex);
- if (!exitOnFail) throw ex;
- }
+ public static void load() {
+ // validate config & start the server
+ loadConfig("app", rootConfig, defaultConfig);
+ loadConfig("logging", loggingConfig, defaultLoggingConfig);
}
}
diff --git a/java/gust/backend/BUILD.bazel b/java/gust/backend/BUILD.bazel
index f390d6422..9ac7a344f 100644
--- a/java/gust/backend/BUILD.bazel
+++ b/java/gust/backend/BUILD.bazel
@@ -1,3 +1,15 @@
+##
+# Copyright © 2020, The Gust Framework Authors. All rights reserved.
+#
+# The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+# are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+# this code in object or source form requires and implies consent and agreement to that license in principle and
+# practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+# Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+# Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+# by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+# is strictly forbidden except in adherence with assigned license requirements.
+##
package(
default_visibility = ["//visibility:public"],
@@ -20,6 +32,16 @@ load(
)
+filegroup(
+ name = "sources",
+ srcs = glob(["*.java"]) + [
+ "//java/gust/backend/driver:sources",
+ "//java/gust/backend/model:sources",
+ "//java/gust/backend/runtime:sources",
+ "//java/gust/backend/transport:sources",
+ ]
+)
+
alias(
name = "base",
actual = "@java_base//image",
@@ -30,6 +52,11 @@ alias(
actual = "@native_base//image",
)
+jdk_library(
+ name = "package-info",
+ srcs = ["package-info.java"],
+)
+
micronaut_library(
name = "AppController",
srcs = ["AppController.java"],
@@ -108,9 +135,20 @@ jdk_library(
":Application",
],
exports = [
+ # Base Package
+ ":package-info",
":BaseController",
":TemplateProvider",
":ApplicationBoot",
":Application",
+
+ # Model Tooling
+ "//java/gust/backend/model:model",
+
+ # Built-in Drivers
+ "//java/gust/backend/driver:driver",
+
+ # Transport Tooling
+ "//java/gust/backend/transport:transport",
],
)
diff --git a/java/gust/backend/BaseController.java b/java/gust/backend/BaseController.java
index 1f43d7713..fa3163715 100644
--- a/java/gust/backend/BaseController.java
+++ b/java/gust/backend/BaseController.java
@@ -1,6 +1,17 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
package gust.backend;
-
import javax.annotation.Nonnull;
diff --git a/java/gust/backend/PageContext.java b/java/gust/backend/PageContext.java
index 670268fa3..d0b29bd71 100644
--- a/java/gust/backend/PageContext.java
+++ b/java/gust/backend/PageContext.java
@@ -1,3 +1,15 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
package gust.backend;
import com.google.common.collect.ImmutableMap;
@@ -24,9 +36,6 @@
@Immutable
@SuppressWarnings("unused")
public final class PageContext implements PageRender {
- /** Name at which proto-context is injected. */
- private static final String CONTEXT_PROPERTY_NAME = "context";
-
/** Shared singleton instance of an empty page context. */
private static final PageContext _EMPTY = new PageContext(
Context.getDefaultInstance(),
@@ -229,7 +238,7 @@ public Map getProperties() {
public Map getInjectedProperties() {
return ImmutableMap
.builder()
- .put(CONTEXT_PROPERTY_NAME, protoContext)
+ .put(PAGE_CONTEXT_IJ_NAME, protoContext)
.putAll(rawContext.getInjectedProperties())
.build();
}
diff --git a/java/gust/backend/PageContextManager.java b/java/gust/backend/PageContextManager.java
index 197d45b08..984865b44 100644
--- a/java/gust/backend/PageContextManager.java
+++ b/java/gust/backend/PageContextManager.java
@@ -1,11 +1,23 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
package gust.backend;
+import gust.backend.runtime.Logging;
import io.micronaut.http.HttpRequest;
import io.micronaut.http.context.ServerRequestContext;
import io.micronaut.runtime.http.scope.RequestScope;
import io.micronaut.views.soy.SoyNamingMapProvider;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import tools.elide.page.Context;
import javax.annotation.Nonnull;
@@ -27,7 +39,7 @@
@RequestScope
@SuppressWarnings("unused")
public class PageContextManager implements Closeable, AutoCloseable, PageRender {
- private static final Logger LOG = LoggerFactory.getLogger(PageContextManager.class);
+ private static final Logger LOG = Logging.logger(PageContextManager.class);
/** Page context builder. */
private final @Nonnull Context.Builder context;
diff --git a/java/gust/backend/PageRender.java b/java/gust/backend/PageRender.java
index bcb40cb45..0965bae38 100644
--- a/java/gust/backend/PageRender.java
+++ b/java/gust/backend/PageRender.java
@@ -1,3 +1,15 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
package gust.backend;
import io.micronaut.views.soy.SoyContextMediator;
@@ -15,6 +27,9 @@
* @see PageContext Default implementation of this interface
*/
public interface PageRender extends SoyContextMediator {
+ /** Name at which proto-context is injected. */
+ String PAGE_CONTEXT_IJ_NAME = "page";
+
/**
* Retrieve serializable server-side-rendered page context, which should be assigned to the render flow bound to this
* context mediator.
diff --git a/java/gust/backend/TemplateProvider.java b/java/gust/backend/TemplateProvider.java
index e64bc6fc7..df5f0c157 100644
--- a/java/gust/backend/TemplateProvider.java
+++ b/java/gust/backend/TemplateProvider.java
@@ -1,3 +1,15 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
package gust.backend;
import com.google.template.soy.SoyFileSet;
diff --git a/java/gust/backend/driver/BUILD.bazel b/java/gust/backend/driver/BUILD.bazel
new file mode 100644
index 000000000..a6a66612e
--- /dev/null
+++ b/java/gust/backend/driver/BUILD.bazel
@@ -0,0 +1,56 @@
+##
+# Copyright © 2020, The Gust Framework Authors. All rights reserved.
+#
+# The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+# are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+# this code in object or source form requires and implies consent and agreement to that license in principle and
+# practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+# Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+# Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+# by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+# is strictly forbidden except in adherence with assigned license requirements.
+##
+
+package(
+ default_visibility = ["//visibility:public"],
+)
+
+load(
+ "//defs/toolchain/java:rules.bzl",
+ java_library = "jdk_library",
+)
+
+
+java_library(
+ name = "package-info",
+ srcs = ["package-info.java"],
+)
+
+alias(
+ name = "inmemory",
+ actual = "//java/gust/backend/driver/inmemory:inmemory",
+)
+
+alias(
+ name = "firestore",
+ actual = "//java/gust/backend/driver/firestore:firestore",
+)
+
+java_library(
+ name = "driver",
+ exports = [
+ ":package-info",
+
+ # Built-in Drivers
+ ":inmemory",
+ ":firestore",
+ ],
+)
+
+filegroup(
+ name = "sources",
+ srcs = glob(["*.java"]) + [
+ "//java/gust/backend/driver/inmemory:sources",
+ "//java/gust/backend/driver/firestore:sources",
+ ]
+)
diff --git a/java/gust/backend/driver/firestore/BUILD.bazel b/java/gust/backend/driver/firestore/BUILD.bazel
new file mode 100644
index 000000000..c60cbe83b
--- /dev/null
+++ b/java/gust/backend/driver/firestore/BUILD.bazel
@@ -0,0 +1,119 @@
+##
+# Copyright © 2020, The Gust Framework Authors. All rights reserved.
+#
+# The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+# are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+# this code in object or source form requires and implies consent and agreement to that license in principle and
+# practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+# Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+# Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+# by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+# is strictly forbidden except in adherence with assigned license requirements.
+##
+
+package(
+ default_visibility = ["//visibility:public"],
+)
+
+load(
+ "//defs/toolchain/java:rules.bzl",
+ java_library = "jdk_library",
+)
+
+load(
+ "//defs/toolchain:deps.bzl",
+ "maven",
+)
+
+_COMMON_DEPS = [
+ "@javax_annotation_api",
+ "@com_google_code_findbugs_jsr305",
+ "@com_google_protobuf//:protobuf_java",
+ "//java/gust/backend/runtime:runtime",
+ maven("org.slf4j:slf4j-api"),
+ maven("com.google.cloud:google-cloud-firestore"),
+ maven("com.google.guava:guava"),
+ maven("io.micronaut:micronaut-inject"),
+ maven("io.micronaut:micronaut-runtime"),
+ maven("org.reactivestreams:reactive-streams"),
+ maven("javax.validation:validation-api"),
+]
+
+
+java_library(
+ name = "package-info",
+ srcs = ["package-info.java"],
+)
+
+java_library(
+ name = "FirestoreAdapter",
+ srcs = ["FirestoreAdapter.java"],
+ deps = [
+ ":FirestoreDriver",
+ "//java/gust/backend/model:CollapsedMessage",
+ "//java/gust/backend/model:CollapsedMessageCodec",
+ "//java/gust/backend/model:CacheDriver",
+ "//java/gust/backend/model:DatabaseAdapter",
+ "//java/gust/backend/model:DatabaseDriver",
+ "//java/gust/backend/model:ModelCodec",
+ "//java/gust/backend/model:ModelMetadata",
+ "//java/gust/backend/model:PersistenceDriver",
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "FirestoreDriver",
+ srcs = ["FirestoreDriver.java"],
+ deps = [
+ "//java/gust/backend/model:CollapsedMessage",
+ "//java/gust/backend/model:CollapsedMessageCodec",
+ "//java/gust/backend/model:DatabaseDriver",
+ "//java/gust/backend/model:DeleteOptions",
+ "//java/gust/backend/model:FetchOptions",
+ "//java/gust/backend/model:ModelCodec",
+ "//java/gust/backend/model:ModelMetadata",
+ "//java/gust/backend/model:UpdateOptions",
+ "//java/gust/backend/model:WriteOptions",
+ "//java/gust/backend/transport:GoogleService",
+ "//java/gust/backend/transport:GoogleTransportManager",
+ maven("io.grpc:grpc-api"),
+ maven("com.google.api:gax"),
+ maven("com.google.api:gax-grpc"),
+ maven("com.google.api:api-common"),
+ maven("com.google.cloud:google-cloud-core-grpc"),
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "FirestoreManager",
+ srcs = ["FirestoreManager.java"],
+ deps = [
+ ":FirestoreDriver",
+ "//java/gust/backend/model:DatabaseManager",
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "FirestoreTransportConfig",
+ srcs = ["FirestoreTransportConfig.java"],
+ deps = [
+ "//java/gust/backend/transport:GoogleTransportManager",
+ "//java/gust/backend/transport:GrpcTransportConfig",
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "firestore",
+ exports = [
+ ":package-info",
+ ":FirestoreAdapter",
+ ":FirestoreDriver",
+ ":FirestoreManager",
+ ":FirestoreTransportConfig",
+ ],
+)
+
+filegroup(
+ name = "sources",
+ srcs = glob(["*.java"]),
+)
diff --git a/java/gust/backend/driver/firestore/FirestoreAdapter.java b/java/gust/backend/driver/firestore/FirestoreAdapter.java
new file mode 100644
index 000000000..2178f47cf
--- /dev/null
+++ b/java/gust/backend/driver/firestore/FirestoreAdapter.java
@@ -0,0 +1,173 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+package gust.backend.driver.firestore;
+
+import com.google.common.util.concurrent.ListeningScheduledExecutorService;
+import com.google.protobuf.Message;
+import gust.backend.model.*;
+import gust.backend.runtime.Logging;
+import io.micronaut.context.annotation.Context;
+import io.micronaut.context.annotation.Factory;
+import io.micronaut.runtime.context.scope.Refreshable;
+import org.slf4j.Logger;
+
+import javax.annotation.Nonnull;
+import javax.annotation.concurrent.Immutable;
+import javax.annotation.concurrent.ThreadSafe;
+import java.util.Optional;
+
+
+/**
+ * Defines a built-in database adapter for interacting with Google Cloud Firestore, using business-data models defined
+ * through Protobuf annotated with framework-provided metadata.
+ *
+ * This adapter makes use of a specialized {@link DatabaseDriver} ({@link FirestoreDriver}), and supports a custom
+ * configuration class ({@link FirestoreTransportConfig}) which is loaded from application config during service channel
+ * initialization. Connections are pooled and cached against a caching executor by the active transport manager.
+ *
+ * Instantiation is disallowed to facilitate restriction of the active {@link ModelCodec} to Firestore's own model
+ * codec, which uses {@link gust.backend.model.ObjectModelCodec} to produce generic collapsed messages during
+ * serialization, and to translate from proto-maps during deserialization. Optionally, a compliant instance of
+ * {@link CacheDriver} may be provided at construction time, which enables caching against that driver for calls that
+ * are eligible (according, again, to settings from {@link FirestoreTransportConfig}).
+ *
+ * @param Model type which this adapter adapts to Firestore.
+ * @see FirestoreDriver Driver for speaking to Firestore.
+ * @see FirestoreTransportConfig Transport configuration for Firestore.
+ */
+@Immutable
+@ThreadSafe
+@SuppressWarnings({"WeakerAccess", "unused", "UnstableApiUsage"})
+public final class FirestoreAdapter
+ implements DatabaseAdapter {
+ /** Private log pipe. */
+ private static final Logger logging = Logging.logger(FirestoreAdapter.class);
+
+ /** Firestore database driver. */
+ private final @Nonnull FirestoreDriver driver;
+
+ /** Serializer and deserializer for this model. */
+ private final @Nonnull ModelCodec codec;
+
+ /** Cache to use for model interactions through this adapter (optional). */
+ private final @Nonnull Optional> cache;
+
+ /**
+ * Setup a new Firestore adapter from scratch. Generally instances of this class are acquired through injection, or
+ * static factory methods also listed on this class.
+ *
+ * @param driver Database driver to use when speaking to Firestore.
+ * @param codec Serializer and deserializer to use.
+ * @param cache Cache to use when reading data from Firestore (optional).
+ */
+ private FirestoreAdapter(@Nonnull FirestoreDriver driver,
+ @Nonnull ModelCodec codec,
+ @Nonnull Optional> cache) {
+ this.driver = driver;
+ this.codec = codec;
+ this.cache = cache;
+ }
+
+ /**
+ * Create or otherwise resolve a {@link FirestoreAdapter} for the provided model type and builder. This additionally
+ * resolves a model codec, driver, and optionally a caching engine as well (although one may be provided explicitly at
+ * the invoking developer's discretion - see {@link #forModel(Message.Builder, FirestoreDriver, Optional)}).
+ *
+ * The resulting adapter may not be created fresh for the task at hand, but it is threadsafe and shares no direct
+ * state with any other operation.
+ *
+ * @see #forModel(Message.Builder, FirestoreDriver, Optional) To provide an explicit cache driver for this type.
+ * @param Model type for which we are requesting a Firestore adapter instance.
+ * @param builder Model builder instance, which the engine will clone for each retrieve operation.
+ * @param driver Driver which we should use when handling instances of M
.
+ * @return Pre-fabricated (or otherwise resolved) Firestore adapter for the requested model.
+ */
+ public static @Nonnull FirestoreAdapter forModel(
+ @Nonnull Message.Builder builder,
+ @Nonnull FirestoreDriver driver) {
+ return forModel(builder, driver, Optional.empty());
+ }
+
+ /**
+ * Create or otherwise resolve a {@link FirestoreAdapter} for the provided model type and builder. This additionally
+ * resolves a model codec, driver, and optionally a caching engine as well.
+ *
+ * The resulting adapter may not be created fresh for the task at hand, but it is threadsafe and shares no direct
+ * state with any other operation.
+ *
+ * @param Model type for which we are requesting a Firestore adapter instance.
+ * @param driver Driver which we should use when handling instances of M
.
+ * @param builder Model builder instance, which the engine will clone for each retrieve operation.
+ * @return Pre-fabricated (or otherwise resolved) Firestore adapter for the requested model.
+ */
+ public static @Nonnull FirestoreAdapter forModel(
+ @Nonnull Message.Builder builder,
+ @Nonnull FirestoreDriver driver,
+ @Nonnull Optional> cacheDriver) {
+ return new FirestoreAdapter<>(
+ driver,
+ CollapsedMessageCodec.forModel(builder),
+ cacheDriver);
+ }
+
+ /** Factory responsible for creating {@link FirestoreAdapter} instances from injected dependencies. */
+ @Factory
+ final static class FirestoreAdapterFactory {
+ /**
+ * Acquire a new instance of the Firestore adapter, using the specified component objects to facilitate model
+ * serialization/deserialization, and transport communication with Firestore.
+ *
+ * @param messageInstance Empty message instance to infer type information from.
+ * @param driver Driver with which we should talk to Firestore.
+ * @param cache Driver with which we should cache eligible data.
+ * @return Firestore driver instance.
+ */
+ @Context
+ @Refreshable
+ public static @Nonnull FirestoreAdapter acquire(
+ @Nonnull Message messageInstance,
+ @Nonnull FirestoreDriver driver,
+ @Nonnull Optional> cache) {
+ // resolve model builder from type
+ return FirestoreAdapter.forModel(
+ messageInstance.newBuilderForType(),
+ driver,
+ cache);
+ }
+ }
+
+ // -- Components -- //
+ /** {@inheritDoc} */
+ @Override
+ public @Nonnull ModelCodec codec() {
+ return this.codec;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public @Nonnull Optional> cache() {
+ return this.cache;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public @Nonnull DatabaseDriver engine() {
+ return this.driver;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public @Nonnull ListeningScheduledExecutorService executorService() {
+ return driver.executorService();
+ }
+}
diff --git a/java/gust/backend/driver/firestore/FirestoreDriver.java b/java/gust/backend/driver/firestore/FirestoreDriver.java
new file mode 100644
index 000000000..45219f312
--- /dev/null
+++ b/java/gust/backend/driver/firestore/FirestoreDriver.java
@@ -0,0 +1,205 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+package gust.backend.driver.firestore;
+
+import com.google.api.gax.core.CredentialsProvider;
+import com.google.api.gax.rpc.TransportChannelProvider;
+import com.google.cloud.firestore.DocumentSnapshot;
+import com.google.cloud.grpc.GrpcTransportOptions;
+import com.google.cloud.firestore.Firestore;
+import com.google.cloud.firestore.FirestoreOptions;
+import com.google.common.base.Function;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListeningScheduledExecutorService;
+import com.google.protobuf.Message;
+import gust.backend.model.*;
+import gust.backend.runtime.Logging;
+import gust.backend.runtime.ReactiveFuture;
+import gust.backend.transport.GoogleAPIChannel;
+import gust.backend.transport.GoogleService;
+import io.micronaut.context.annotation.Context;
+import io.micronaut.context.annotation.Factory;
+import io.micronaut.runtime.context.scope.Refreshable;
+import org.slf4j.Logger;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.Immutable;
+import javax.annotation.concurrent.ThreadSafe;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.concurrent.ExecutorService;
+
+
+/**
+ * Defines a built-in framework {@link DatabaseDriver} for interacting seamlessly with Google Cloud Firestore. This
+ * enables Firestore-based persistence for any {@link Message}-derived (schema-driven) business model in a given Gust
+ * app's ecosystem.
+ *
+ * Model storage can be deeply customized on a per-model basis, thanks to the built-in proto annotations available
+ * in gust.core
. The Firestore adapter supports basic persistence (i.e. as a regular
+ *
PersistenceDriver ), but also supports generic, object index-style queries.
+ *
+ * Caching may be facilitated by any compliant cache driver, via the main Firestore adapter.
+ *
+ * @see FirestoreAdapter main adapter interface for Firestore.
+ * @see FirestoreManager logic and connection manager for Firestore.
+ * @see FirestoreTransportConfig configuration class for Firestore access.
+ */
+@Immutable
+@ThreadSafe
+@SuppressWarnings("UnstableApiUsage")
+public final class FirestoreDriver
+ implements DatabaseDriver {
+ /** Private log pipe. */
+ private static final Logger logging = Logging.logger(FirestoreDriver.class);
+
+ /** Executor service to use for async calls. */
+ private final ListeningScheduledExecutorService executorService;
+
+ /** Codec to use for serializing/de-serializing models. */
+ private final ModelCodec codec;
+
+ /** Firestore client engine. */
+ private final Firestore engine;
+
+ /** Factory responsible for creating {@link FirestoreDriver} instances from injected dependencies. */
+ @Factory
+ final static class FirestoreDriverFactory {
+ /**
+ * Acquire a new instance of the Firestore driver, using the specified configuration settings, and the specified
+ * injected channel.
+ *
+ * @param firestoreChannel Managed gRPC channel provider.
+ * @param credentialsProvider Transport credentials provider. Generally calls into ADC.
+ * @param transportOptions Options to apply to the Firestore channel.
+ * @param executorService Executor service to use when executing calls.
+ * @return Firestore driver instance.
+ */
+ @Context
+ @Refreshable
+ public static @Nonnull FirestoreDriver acquireDriver(
+ @Nonnull @GoogleAPIChannel(service = GoogleService.FIRESTORE) TransportChannelProvider firestoreChannel,
+ @Nonnull CredentialsProvider credentialsProvider,
+ @Nonnull GrpcTransportOptions transportOptions,
+ @Nonnull ListeningScheduledExecutorService executorService,
+ @Nonnull Message.Builder builder) {
+ return new FirestoreDriver<>(
+ firestoreChannel,
+ credentialsProvider,
+ transportOptions,
+ executorService,
+ CollapsedMessageCodec.forModel(builder));
+ }
+ }
+
+ /**
+ * Construct a new Firestore driver from scratch.
+ *
+ * @param channelProvider Managed gRPC channel to use for Firestore RPCAPI interactions.
+ * @param credentialsProvider Transport credentials provider.
+ * @param transportOptions Options to apply to the transport layer.
+ * @param executorService Executor service to use when executing calls.
+ * @param codec Model codec to use with this driver.
+ */
+ private FirestoreDriver(TransportChannelProvider channelProvider,
+ CredentialsProvider credentialsProvider,
+ GrpcTransportOptions transportOptions,
+ ListeningScheduledExecutorService executorService,
+ ModelCodec codec) {
+ this.codec = codec;
+ this.executorService = executorService;
+ FirestoreOptions firestoreOptions = FirestoreOptions.newBuilder()
+ .setChannelProvider(channelProvider)
+ .setCredentialsProvider(credentialsProvider)
+ .setTransportOptions(transportOptions)
+ .build();
+
+ if (logging.isDebugEnabled())
+ logging.debug(String.format("Initializing Firestore driver with options:\n%s", firestoreOptions));
+ this.engine = firestoreOptions.getService();
+ }
+
+ /**
+ * Deserialize the provided document snapshot, into an instance of the message we manage through this instance of the
+ * {@link FirestoreDriver}.
+ *
+ * @param snapshot Document snapshot to de-serialize.
+ * @return Inflated object record, or {@link Optional#empty()}.
+ */
+ private @Nonnull Model deserialize(@Nonnull DocumentSnapshot snapshot) {
+ throw new IllegalStateException("not yet implemented: " + snapshot.toString());
+ }
+
+ // -- Getters -- //
+ /** {@inheritDoc} */
+ @Override
+ public @Nonnull ListeningScheduledExecutorService executorService() {
+ return this.executorService;
+ }
+
+ /** {@inheritDoc} */
+ @Nonnull
+ @Override
+ public ModelCodec codec() {
+ return this.codec;
+ }
+
+ // -- API: Key Generation -- //
+ /** {@inheritDoc} */
+ @Override
+ public @Nonnull Key generateKey(@Nonnull Message instance) {
+ return null;
+ }
+
+ // -- API: Fetch -- //
+ /** {@inheritDoc} */
+ @Override
+ public @Nonnull ReactiveFuture> retrieve(@Nonnull Key key, @Nonnull FetchOptions opts) {
+ ExecutorService exec = opts.executorService().orElseGet(this::executorService);
+ return ReactiveFuture.wrap(Futures.transform(ReactiveFuture.wrap(engine.getAll(), exec), new Function<>() {
+ @Override
+ public @Nonnull Optional apply(@Nullable List documentSnapshots) {
+ if (documentSnapshots == null || documentSnapshots.isEmpty()) {
+ return Optional.empty();
+
+ } else if (documentSnapshots.size() > 1) {
+ throw new IllegalStateException("Unexpectedly encountered more than 1 result.");
+
+ } else {
+ return Optional.of(deserialize(
+ Objects.requireNonNull(
+ documentSnapshots.get(0),
+ "Unexpected null `DocumentReference`.")));
+ }
+ }
+ }, exec), exec);
+ }
+
+ // -- API: Persist -- //
+ /** {@inheritDoc} */
+ @Override
+ public @Nonnull ReactiveFuture persist(@Nonnull Key documentReference,
+ @Nonnull Model model,
+ @Nonnull WriteOptions options) {
+ return null;
+ }
+
+ // -- API: Delete -- //
+ /** {@inheritDoc} */
+ @Override
+ public @Nonnull ReactiveFuture delete(@Nonnull Key key, @Nonnull DeleteOptions options) {
+ return null;
+ }
+}
diff --git a/java/gust/backend/driver/firestore/FirestoreManager.java b/java/gust/backend/driver/firestore/FirestoreManager.java
new file mode 100644
index 000000000..43e464638
--- /dev/null
+++ b/java/gust/backend/driver/firestore/FirestoreManager.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+package gust.backend.driver.firestore;
+
+import gust.backend.model.DatabaseManager;
+import io.micronaut.context.annotation.Factory;
+
+
+/**
+ *
+ */
+@Factory
+public final class FirestoreManager implements DatabaseManager {
+}
diff --git a/java/gust/backend/driver/firestore/FirestoreTransportConfig.java b/java/gust/backend/driver/firestore/FirestoreTransportConfig.java
new file mode 100644
index 000000000..2015f758e
--- /dev/null
+++ b/java/gust/backend/driver/firestore/FirestoreTransportConfig.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+package gust.backend.driver.firestore;
+
+import gust.backend.transport.GoogleTransportManager;
+import gust.backend.transport.GrpcTransportConfig;
+import io.micronaut.context.annotation.ConfigurationProperties;
+
+import java.time.Duration;
+import javax.annotation.Nonnull;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+
+
+/**
+ * Specifies configuration property bindings for a managed transport channel interacting with Cloud Firestore. Also in
+ * charge of supplying a sensible set of defaults, if no config properties are specified.
+ *
+ * Configurable aspects of the framework's connection to Firestore include keepalive timings, retries, connection
+ * pooling, connection refreshing, and more. All of these may be customized via a number of code paths:
+ *
+ */
+@SuppressWarnings({"WeakerAccess", "FieldCanBeLocal"})
+@ConfigurationProperties(FirestoreTransportConfig.CONFIG_PREFIX) // `transport.google.firestore`
+public final class FirestoreTransportConfig implements GrpcTransportConfig {
+ // -- Paths -- //
+
+ /** Token under `transport.google` to look for Firestore config. */
+ private final static String CONFIG_TOKEN = "firestore";
+
+ /** Path prefix at which the Firestore transport layer may be configured. */
+ public final static String CONFIG_PREFIX = GoogleTransportManager.CONFIG_PREFIX + "." + CONFIG_TOKEN;
+
+ // -- Defaults -- //
+
+ /** Specifies the default number of connections to maintain to Firestore. */
+ public final static int DEFAULT_POOL_SIZE = 2;
+
+ /** Whether to enable keepalive features by default. */
+ public final static boolean DEFAULT_ENABLE_KEEPALIVE = true;
+
+ /** Length of time in between keepalive pings. */
+ public final static Duration DEFAULT_KEEPALIVE_TIME = Duration.ofMinutes(3);
+
+ /** Amount of time to wait before ending the keepalive stream. */
+ public final static Duration DEFAULT_KEEPALIVE_TIMEOUT = Duration.ofMinutes(15);
+
+ /** Whether to keep the connection alive, even if there is no activity. */
+ public final static boolean DEFAULT_KEEPALIVE_NO_ACTIVITY = true;
+
+ /** Default Firestore endpoint. */
+ public final static String DEFAULT_FIRESTORE_ENDPOINT = "firestore.googleapis.com";
+
+ // -- Configuration Properties -- //
+
+ /** Size of the connection pool for Firestore. */
+ private @Min(1) int poolSize = DEFAULT_POOL_SIZE;
+
+ /** Whether to enable keepalive features. */
+ private boolean keepaliveEnabled = DEFAULT_ENABLE_KEEPALIVE;
+
+ /** Length of time in between keepalive pings. */
+ private @Nonnull Duration keepaliveTime = DEFAULT_KEEPALIVE_TIME;
+
+ /** Amount of time to wait before ending the keepalive stream. */
+ private @Nonnull Duration keepaliveTimeout = DEFAULT_KEEPALIVE_TIMEOUT;
+
+ /** Whether to keep the connection alive, even if there is no activity. */
+ private boolean keepaliveNoActivity = DEFAULT_KEEPALIVE_NO_ACTIVITY;
+
+ /** Endpoint at which to connect to Firestore. */
+ private @NotBlank @Nonnull String firestoreEndpoint = DEFAULT_FIRESTORE_ENDPOINT;
+
+ // -- Interface Compliance -- //
+ /** @return gRPC endpoint at which to connect to the target service. */
+ @Override
+ public @Nonnull String endpoint() {
+ return firestoreEndpoint;
+ }
+
+ /** @return Retrieve the desired connection pool size. */
+ @Override
+ public @Nonnull Integer getPoolSize() {
+ return poolSize;
+ }
+
+ /** @return Whether to enable keepalive features. */
+ @Override
+ public @Nonnull Boolean getKeepaliveEnabled() {
+ return keepaliveEnabled;
+ }
+
+ /** @return Keep-alive time. */
+ @Override
+ public @Nonnull Duration getKeepaliveTime() {
+ return keepaliveTime;
+ }
+
+ /** @return Keep-alive timeout. */
+ @Override
+ public @Nonnull Duration getKeepaliveTimeout() {
+ return keepaliveTimeout;
+ }
+
+ /** @return Whether to keep-alive even when there is no activity. */
+ @Override
+ public @Nonnull Boolean getKeepAliveNoActivity() {
+ return keepaliveNoActivity;
+ }
+}
diff --git a/java/gust/backend/driver/firestore/package-info.java b/java/gust/backend/driver/firestore/package-info.java
new file mode 100644
index 000000000..5b523daa7
--- /dev/null
+++ b/java/gust/backend/driver/firestore/package-info.java
@@ -0,0 +1,15 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+
+/** Provides a {@link gust.backend.model.DatabaseDriver} implementation, using Google Cloud Firestore. */
+package gust.backend.driver.firestore;
diff --git a/java/gust/backend/driver/inmemory/BUILD.bazel b/java/gust/backend/driver/inmemory/BUILD.bazel
new file mode 100644
index 000000000..f6d4d4ad7
--- /dev/null
+++ b/java/gust/backend/driver/inmemory/BUILD.bazel
@@ -0,0 +1,124 @@
+##
+# Copyright © 2020, The Gust Framework Authors. All rights reserved.
+#
+# The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+# are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+# this code in object or source form requires and implies consent and agreement to that license in principle and
+# practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+# Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+# Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+# by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+# is strictly forbidden except in adherence with assigned license requirements.
+##
+
+package(
+ default_visibility = ["//visibility:public"],
+)
+
+load(
+ "//defs/toolchain/java:rules.bzl",
+ java_library = "jdk_library",
+)
+
+load(
+ "//defs/toolchain:deps.bzl",
+ "maven",
+ "javaproto",
+)
+
+_COMMON_DEPS = [
+ "@javax_annotation_api",
+ "@com_google_code_findbugs_jsr305",
+ "@com_google_protobuf//:protobuf_java",
+ "//java/gust/backend/runtime:runtime",
+ maven("org.slf4j:slf4j-api"),
+]
+
+
+java_library(
+ name = "package-info",
+ srcs = ["package-info.java"],
+)
+
+java_library(
+ name = "InMemoryCache",
+ srcs = ["InMemoryCache.java"],
+ deps = [
+ "//java/gust/backend/model:CacheDriver",
+ "//java/gust/backend/model:CacheOptions",
+ "//java/gust/backend/model:DeleteOptions",
+ "//java/gust/backend/model:FetchOptions",
+ "//java/gust/backend/model:ModelCodec",
+ "//java/gust/backend/model:ModelMetadata",
+ "//java/gust/backend/model:UpdateOptions",
+ "//java/gust/backend/model:WriteOptions",
+ maven("com.google.guava:guava"),
+ maven("org.reactivestreams:reactive-streams"),
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "InMemoryAdapter",
+ srcs = ["InMemoryAdapter.java"],
+ deps = [
+ ":InMemoryDriver",
+ "//java/gust/backend/model:CacheDriver",
+ "//java/gust/backend/model:EncodingMode",
+ "//java/gust/backend/model:EncodedModel",
+ "//java/gust/backend/model:InvalidModelType",
+ "//java/gust/backend/model:ModelAdapter",
+ "//java/gust/backend/model:ModelCodec",
+ "//java/gust/backend/model:ModelMetadata",
+ "//java/gust/backend/model:PersistenceDriver",
+ "//java/gust/backend/model:ProtoModelCodec",
+ maven("com.google.guava:guava"),
+ maven("org.reactivestreams:reactive-streams"),
+ javaproto("//gust/core:datamodel"),
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "InMemoryDriver",
+ srcs = ["InMemoryDriver.java"],
+ deps = [
+ "//java/gust/backend/model:DeleteOptions",
+ "//java/gust/backend/model:EncodedModel",
+ "//java/gust/backend/model:FetchOptions",
+ "//java/gust/backend/model:ModelCodec",
+ "//java/gust/backend/model:ModelWriteConflict",
+ "//java/gust/backend/model:ModelWriteFailure",
+ "//java/gust/backend/model:ModelMetadata",
+ "//java/gust/backend/model:PersistenceDriver",
+ "//java/gust/backend/model:PersistenceException",
+ "//java/gust/backend/model:UpdateOptions",
+ "//java/gust/backend/model:WriteOptions",
+ maven("com.google.guava:guava"),
+ javaproto("//gust/core:datamodel"),
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "InMemoryManager",
+ srcs = ["InMemoryManager.java"],
+ deps = [
+ ":InMemoryDriver",
+ "//java/gust/backend/model:PersistenceManager",
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "inmemory",
+ exports = [
+ ":package-info",
+ ":InMemoryAdapter",
+ ":InMemoryCache",
+ ":InMemoryDriver",
+ ":InMemoryManager",
+ ]
+)
+
+
+filegroup(
+ name = "sources",
+ srcs = glob(["*.java"]),
+)
diff --git a/java/gust/backend/driver/inmemory/InMemoryAdapter.java b/java/gust/backend/driver/inmemory/InMemoryAdapter.java
new file mode 100644
index 000000000..ccda9e242
--- /dev/null
+++ b/java/gust/backend/driver/inmemory/InMemoryAdapter.java
@@ -0,0 +1,137 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+package gust.backend.driver.inmemory;
+
+import com.google.common.util.concurrent.ListeningScheduledExecutorService;
+import com.google.protobuf.Message;
+import gust.backend.model.*;
+
+import javax.annotation.Nonnull;
+import java.util.Optional;
+import java.util.concurrent.ExecutorService;
+
+
+/**
+ * Reference implementation of a {@link ModelAdapter}. Stores persisted models in a static concurrent hash map. It is
+ * not a good idea to use this in production, under any circumstances (especially because there is no persistence across
+ * restarts or between hosts).
+ *
+ * This adapter can use any model codec, and any cache driver, in front of its storage operations. The backing map
+ * stores entities as opaque blobs, so it doesn't care how they are serialized or inflated. Queries are not supported by
+ * this engine.
+ */
+@SuppressWarnings("UnstableApiUsage")
+public final class InMemoryAdapter
+ implements ModelAdapter {
+ /** Specifies the format to use. One of `BINARY`, `JSON`, or `TEXT`. */
+ private static final EncodingMode FORMAT = EncodingMode.BINARY;
+
+ /** Driver for this in-memory adapter. */
+ private final @Nonnull InMemoryDriver driver;
+
+ /** Codec in use for model serialization/de-serialization activities. */
+ private final @Nonnull ModelCodec codec;
+
+ /** Cache to use for model interactions through this adapter (optional). */
+ private final @Nonnull Optional> cache;
+
+ /**
+ * Private constructor - create an in-memory adapter from scratch.
+ *
+ * @param keyInstance Empty instance of the attached model's key.
+ * @param codec Model codec to use with this adapter (when serializing/de-serializing instances).
+ * @param cache Caching driver to use with this adapter (optional).
+ * @param executorService Executor service to use for storage operations.
+ */
+ @SuppressWarnings("unused")
+ private InMemoryAdapter(@Nonnull Key keyInstance,
+ @Nonnull ModelCodec codec,
+ @Nonnull Optional> cache,
+ @Nonnull ListeningScheduledExecutorService executorService) {
+ this.cache = cache;
+ this.codec = codec;
+ this.driver = InMemoryDriver.acquire(codec, executorService);
+ }
+
+ /**
+ * Acquire an instance of the {@link InMemoryAdapter}, specialized for the provided empty model instance.
+ *
+ * An empty instance can easily be acquired for any given model, via {@link Message#getDefaultInstanceForType()}.
+ * The instance is used only for builder-spawning and type information. The provided {@link ExecutorService} is used
+ * for model codec activities and callback dispatch.
+ *
+ * @param keyInstance Empty instance of the key type for instance .
+ * @param instance Empty model instance with which to spawn new builders, and resolve type information.
+ * @param executorService Executor to use for callbacks and model codec activities.
+ * @param Type of model for which an {@link InMemoryAdapter} is being requested.
+ * @return Instance of an in-memory data adapter for the provided model.
+ * @throws InvalidModelType If the specified model is not meant to be used for storage.
+ */
+ public static @Nonnull InMemoryAdapter acquire(
+ @Nonnull K keyInstance,
+ @Nonnull M instance,
+ @Nonnull ListeningScheduledExecutorService executorService) throws InvalidModelType {
+ return acquire(keyInstance, instance, Optional.empty(), executorService);
+ }
+
+ /**
+ * Acquire an instance of the {@link InMemoryAdapter}, specialized for the provided empty model instance, optionally
+ * specifying a {@link CacheDriver} to use.
+ *
+ * An empty instance can easily be acquired for any given model, via {@link Message#getDefaultInstanceForType()}.
+ * The instance is used only for builder-spawning and type information. The provided {@link ExecutorService} is used
+ * for model codec activities and callback dispatch.
+ *
+ * If {@link Optional#empty()}
is passed as the {@code cache}, no caching will take place. If a valid
+ * {@link CacheDriver} instance is provided, it will be used only if {@code options} on a request allow for it
+ * (caching defaults to being active).
+ *
+ * @param keyInstance Empty instance of the key type for instance .
+ * @param instance Empty model instance with which to spawn new builders, and resolve type information.
+ * @param cache Cache driver to use for read-path code in the adapter.
+ * @param executorService Executor to use for callbacks and model codec activities.
+ * @param Type of model for which an {@link InMemoryAdapter} is being requested.
+ * @return Instance of an in-memory data adapter for the provided model.
+ * @throws InvalidModelType If the specified model is not meant to be used for storage.
+ */
+ public static @Nonnull InMemoryAdapter acquire(
+ @Nonnull K keyInstance,
+ @Nonnull M instance,
+ @Nonnull Optional> cache,
+ @Nonnull ListeningScheduledExecutorService executorService) throws InvalidModelType {
+ return new InMemoryAdapter<>(
+ keyInstance,
+ ProtoModelCodec.forModel(instance, FORMAT),
+ cache,
+ executorService);
+ }
+
+ // -- Components -- //
+ /** {@inheritDoc} */
+ @Override
+ public @Nonnull ModelCodec codec() {
+ return this.codec;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public @Nonnull Optional> cache() {
+ return this.cache;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public @Nonnull InMemoryDriver engine() {
+ return this.driver;
+ }
+}
diff --git a/java/gust/backend/driver/inmemory/InMemoryCache.java b/java/gust/backend/driver/inmemory/InMemoryCache.java
new file mode 100644
index 000000000..dd4f9d38b
--- /dev/null
+++ b/java/gust/backend/driver/inmemory/InMemoryCache.java
@@ -0,0 +1,126 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+package gust.backend.driver.inmemory;
+
+import com.google.common.cache.Cache;
+import com.google.common.cache.CacheBuilder;
+import com.google.common.util.concurrent.ListeningScheduledExecutorService;
+import com.google.protobuf.Message;
+import gust.backend.model.*;
+import gust.backend.runtime.ReactiveFuture;
+
+import javax.annotation.Nonnull;
+import javax.annotation.concurrent.ThreadSafe;
+import java.time.Duration;
+import java.util.Optional;
+
+
+/**
+ * Defines a {@link CacheDriver} backed by a Guava in-memory cache, which statically holds onto cached full model
+ * instances, potentially on behalf of some other persistence driver (via use with a {@link ModelAdapter}).
+ *
+ * Cache options may be adjusted based on the operation being memoized, using the {@link CacheOptions} interface,
+ * which is supported by various other higher-order options interfaces (i.e. {@link FetchOptions}).
+ *
+ * @param Type of key used with the cache and model.
+ * @param Type of model supported by this cache facade.
+ */
+@ThreadSafe
+@SuppressWarnings("UnstableApiUsage")
+public final class InMemoryCache implements CacheDriver {
+ /** Static in-memory instance cache. */
+ private final static @Nonnull InMemoryCaching CACHE = new InMemoryCaching();
+
+ /** Responsible for managing static cache access. */
+ private final static class InMemoryCaching {
+ /** Internal backing cache storage. */
+ private final @Nonnull Cache inMemoryCache;
+
+ /** Initialize in-memory caching from scratch. */
+ private InMemoryCaching() {
+ inMemoryCache = CacheBuilder.newBuilder()
+ .concurrencyLevel(2)
+ .maximumSize(50)
+ .expireAfterWrite(Duration.ofHours(1))
+ .weakKeys()
+ .recordStats()
+ .build();
+ }
+
+ /**
+ * Acquire the in-memory static cache, which holds onto model instances without requiring serialization. In-memory
+ * caching may be used transparently with any backing {@link PersistenceDriver}.
+ *
+ * @return In-memory static model cache.
+ */
+ @Nonnull Cache acquire() {
+ return inMemoryCache;
+ }
+ }
+
+ /**
+ * Acquire an instance of the in-memory caching driver, generalized to support the provided key type {@code K} and
+ * model instance type {@code M}.
+ *
+ * @param Generic type for the key associated with model type {@code M}.
+ * @param Generic model type managed by this cache.
+ * @return Instance of the acquired cache engine.
+ */
+ static @Nonnull InMemoryCache acquire() {
+ return new InMemoryCache<>();
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public @Nonnull ReactiveFuture put(@Nonnull Message key,
+ @Nonnull Message model,
+ @Nonnull ListeningScheduledExecutorService executor) {
+ final String id = (
+ ModelMetadata.id(key).orElseThrow(() -> new IllegalArgumentException("Cannot add to cache with empty key.")));
+ return ReactiveFuture.wrap(executor.submit(() -> CACHE.acquire().put(id, model)), executor);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public @Nonnull ReactiveFuture> fetch(@Nonnull K key,
+ @Nonnull FetchOptions options,
+ @Nonnull ListeningScheduledExecutorService executor) {
+ final String id = (
+ ModelMetadata.id(key).orElseThrow(() -> new IllegalArgumentException("Cannot fetch empty key.")));
+
+ return ReactiveFuture.wrap(options.executorService().orElse(executor).submit(() -> {
+ Message cached = (CACHE.acquire().getIfPresent(id));
+
+ //noinspection unchecked
+ return cached == null ? Optional.empty() : Optional.of((M)cached);
+ }), executor);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public @Nonnull ReactiveFuture evict(@Nonnull K key, @Nonnull ListeningScheduledExecutorService executor) {
+ final String id = (
+ ModelMetadata.id(key).orElseThrow(() -> new IllegalArgumentException("Cannot expire with empty key.")));
+
+ return ReactiveFuture.wrap(executor.submit(() -> CACHE.acquire().invalidate(id)), executor);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public @Nonnull ReactiveFuture flush(@Nonnull ListeningScheduledExecutorService executor) {
+ return ReactiveFuture.wrap(executor.submit(() -> {
+ CACHE.acquire().invalidateAll();
+ CACHE.acquire().cleanUp();
+ }), executor);
+ }
+}
diff --git a/java/gust/backend/driver/inmemory/InMemoryDriver.java b/java/gust/backend/driver/inmemory/InMemoryDriver.java
new file mode 100644
index 000000000..76ee13144
--- /dev/null
+++ b/java/gust/backend/driver/inmemory/InMemoryDriver.java
@@ -0,0 +1,261 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+package gust.backend.driver.inmemory;
+
+import com.google.common.util.concurrent.ListeningScheduledExecutorService;
+import com.google.errorprone.annotations.CanIgnoreReturnValue;
+import com.google.protobuf.Message;
+import gust.backend.model.*;
+import gust.backend.runtime.Logging;
+import gust.backend.runtime.ReactiveFuture;
+import org.slf4j.Logger;
+import tools.elide.core.DatapointType;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.Immutable;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ConcurrentSkipListMap;
+
+import static java.lang.String.format;
+import static gust.backend.model.ModelMetadata.*;
+
+
+/**
+ * Proxies calls to a static concurrent map, held by a private singleton. This nicely supplies local entity storage for
+ * simple testing and mocking purposes. Please do not use this in production. The in-memory data engine does not support
+ * queries, persistence, or nearly anything except get/put/delete.
+ *
+ * @param Model/message type which we are storing with this driver.
+ */
+@SuppressWarnings("UnstableApiUsage")
+public final class InMemoryDriver
+ implements PersistenceDriver {
+ /** Private logging pipe. */
+ private static final Logger logging = Logging.logger(InMemoryStorage.class);
+
+ /** Codec to use for model serialization/de-serialization. */
+ private final @Nonnull ModelCodec codec;
+
+ /** Executor service to use for storage calls. */
+ private final @Nonnull ListeningScheduledExecutorService executorService;
+
+ /** Holds private "data storage" via in-memory concurrent map. */
+ @Immutable
+ private final static class InMemoryStorage {
+ /** Storage singleton instance. */
+ private final static InMemoryStorage INSTANCE;
+
+ /** Backing storage map. */
+ private final @Nonnull ConcurrentMap storageMap;
+
+ static {
+ INSTANCE = new InMemoryStorage();
+ }
+
+ /** Private constructor. Acquire via {@link #acquire()}. */
+ private InMemoryStorage() {
+ storageMap = new ConcurrentSkipListMap<>();
+ }
+
+ /** @return In-memory storage window singleton. */
+ @CanIgnoreReturnValue
+ private static @Nonnull ConcurrentMap acquire() {
+ return INSTANCE.storageMap;
+ }
+ }
+
+ /**
+ * Construct a new in-memory driver from scratch. This constructor is private to force use of static factory methods
+ * also defined on this class.
+ *
+ * @param codec Codec to use when serializing and de-serializing models with this driver.
+ * @param executorService Executor service to run against.
+ */
+ private InMemoryDriver(@Nonnull ModelCodec codec,
+ @Nonnull ListeningScheduledExecutorService executorService) {
+ this.codec = codec;
+ this.executorService = executorService;
+ }
+
+ /**
+ * Acquire an in-memory driver instance for the provided model type and builder. Although the driver object itself is
+ * created for the purpose, it accesses a static concurrent map backing all in-memory driver instances to facilitate
+ * storage.
+ *
+ * It is generally recommended to acquire an instance of this driver through the adapter instead. This can be
+ * accomplished via {@link InMemoryAdapter#acquire(Message, Message, Optional, ListeningScheduledExecutorService)},
+ * followed by {@link InMemoryAdapter#engine()}.
+ *
+ * @see InMemoryAdapter#acquire(Message, Message, ListeningScheduledExecutorService) to acquire a full adapter.
+ * @param Key type to specify for the attached model type.
+ * @param Model/message type for which we should return an in-memory storage driver.
+ * @param codec Codec to use when serializing and de-serializing models with this driver.
+ * @param executorService Executor service to use for storage calls.
+ * @return In-memory driver instance created for the specified message type.
+ */
+ static @Nonnull InMemoryDriver acquire(
+ @Nonnull ModelCodec codec,
+ @Nonnull ListeningScheduledExecutorService executorService) {
+ return new InMemoryDriver<>(codec, executorService);
+ }
+
+ // -- Getters -- //
+ /** {@inheritDoc} */
+ @Override
+ public @Nonnull ModelCodec codec() {
+ return this.codec;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public @Nonnull ListeningScheduledExecutorService executorService() {
+ return this.executorService;
+ }
+
+ // -- API: Fetch -- //
+ /** {@inheritDoc} */
+ @Override
+ public @Nonnull ReactiveFuture> retrieve(final @Nonnull Key key,
+ final @Nonnull FetchOptions options) {
+ Objects.requireNonNull(key, "Cannot fetch model with `null` for key.");
+ Objects.requireNonNull(options, "Cannot fetch model without `options`.");
+ enforceRole(key, DatapointType.OBJECT_KEY);
+ final var id = id(key).orElseThrow(() -> new IllegalArgumentException("Cannot fetch model with empty key."));
+
+ if (logging.isDebugEnabled())
+ logging.debug(format("Retrieving model at ID '%s' from in-memory storage.", id));
+
+ return ReactiveFuture.wrap(this.executorService.submit(() -> {
+ if (logging.isTraceEnabled())
+ logging.trace(format("Began async task to retrieve model at ID '%s' from in-memory storage.", id));
+
+ EncodedModel data = InMemoryStorage.acquire().get(id);
+ if (data != null) {
+ if (logging.isTraceEnabled())
+ logging.trace(format("Model found at ID '%s'. Sending to deserializer...", id));
+
+ var deserialized = this.codec.deserialize(data);
+ if (logging.isDebugEnabled())
+ logging.debug(format("Found and deserialized model at ID '%s'. Record follows:\n%s", id, deserialized));
+ if (logging.isInfoEnabled())
+ logging.info(format("Retrieved record at ID '%s' from in-memory storage.", id));
+
+ // we found encoded data at the provided key. inflate it with the codec.
+ return Optional.of(spliceKey(applyMask(deserialized, options), Optional.of(key)));
+ } else {
+ if (logging.isWarnEnabled())
+ logging.warn(format("Model not found at ID '%s'.", id));
+
+ // the model was not found.
+ return Optional.empty();
+ }
+ }), options.executorService().orElse(this.executorService));
+ }
+
+ // -- API: Persist -- //
+ /** {@inheritDoc} */
+ @Override
+ public @Nonnull ReactiveFuture persist(final @Nullable Key key,
+ final @Nonnull Model model,
+ final @Nonnull WriteOptions options) {
+ Objects.requireNonNull(model, "Cannot persist `null` model.");
+ Objects.requireNonNull(options, "Cannot persist model without `options`.");
+
+ // resolve target key, and then write mode
+ final @Nonnull Key targetKey = key != null ? key : generateKey(model);
+ //noinspection OptionalGetWithoutIsPresent
+ final @Nonnull Object targetId = id(targetKey).get();
+
+ if (logging.isDebugEnabled())
+ logging.debug(format("Persisting model at ID '%s' using in-memory storage.", targetId));
+
+ return ReactiveFuture.wrap(this.executorService.submit(() -> {
+ WriteOptions.WriteDisposition writeMode = (
+ key == null ? WriteOptions.WriteDisposition.MUST_NOT_EXIST : options.writeMode()
+ .orElse(WriteOptions.WriteDisposition.BLIND));
+
+ if (logging.isTraceEnabled())
+ logging.trace(format(
+ "Began async task to write model at ID '%s' to in-memory storage. Write disposition: '%s'.",
+ targetId,
+ writeMode.name()));
+
+ // enforce write mode
+ boolean conflictFailure = false;
+ switch (writeMode) {
+ case MUST_NOT_EXIST: conflictFailure = InMemoryStorage.acquire().containsKey(targetId); break;
+ case MUST_EXIST: conflictFailure = !InMemoryStorage.acquire().containsKey(targetId); break;
+ case BLIND: break;
+ }
+ if (conflictFailure) {
+ logging.error(format("Encountered conflict failure: key collision at ID '%s'.", targetId));
+ throw new ModelWriteConflict(targetId, model, writeMode);
+ }
+
+ // if we make it this far, we're ready to write. serialize and put.
+ InMemoryStorage
+ .acquire()
+ .put(targetId, codec.serialize(model));
+
+ if (logging.isTraceEnabled())
+ logging.trace(format(
+ "No conflict failure encountered, model was written at ID '%s'.",
+ targetId));
+
+ var rval = ModelMetadata.spliceKey(model, Optional.of(targetKey));
+ if (logging.isInfoEnabled())
+ logging.info(format(
+ "Wrote record to in-memory storage at ID '%s'.",
+ targetId));
+ if (logging.isDebugEnabled())
+ logging.debug(format(
+ "Returning written model at ID '%s' after write to in-memory storage. Record follows:\n%s",
+ targetId,
+ rval));
+
+ return rval;
+
+ }), options.executorService().orElse(this.executorService));
+ }
+
+ // -- API: Delete -- //
+ /** {@inheritDoc} */
+ @Override
+ public @Nonnull ReactiveFuture delete(@Nonnull Key key, @Nonnull DeleteOptions options) {
+ Objects.requireNonNull(key, "Cannot delete `null` key.");
+ Objects.requireNonNull(options, "Cannot delete model without `options`.");
+
+ final @Nonnull Object targetId = id(key)
+ .orElseThrow(() -> new IllegalStateException("Cannot delete record with empty key/ID."));
+
+ if (logging.isDebugEnabled())
+ logging.debug(format("Deleting model at ID '%s' from in-memory storage.", targetId));
+
+ return ReactiveFuture.wrap(this.executorService.submit(() -> {
+ if (logging.isTraceEnabled())
+ logging.trace(format("Began async task to delete model at ID '%s' from in-memory storage.", targetId));
+
+ InMemoryStorage
+ .acquire()
+ .remove(targetId);
+
+ if (logging.isInfoEnabled())
+ logging.info(format("Model at ID '%s' deleted from in-memory storage.", targetId));
+
+ return key;
+ }));
+ }
+}
diff --git a/java/gust/backend/driver/inmemory/InMemoryManager.java b/java/gust/backend/driver/inmemory/InMemoryManager.java
new file mode 100644
index 000000000..5e7a3107f
--- /dev/null
+++ b/java/gust/backend/driver/inmemory/InMemoryManager.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+package gust.backend.driver.inmemory;
+
+import gust.backend.model.PersistenceManager;
+
+
+/**
+ *
+ */
+public final class InMemoryManager implements PersistenceManager {
+}
diff --git a/java/gust/backend/driver/inmemory/package-info.java b/java/gust/backend/driver/inmemory/package-info.java
new file mode 100644
index 000000000..42ea2a918
--- /dev/null
+++ b/java/gust/backend/driver/inmemory/package-info.java
@@ -0,0 +1,15 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+
+/** Provides a reference implementation of a persistence driver, backed by a concurrent map. */
+package gust.backend.driver.inmemory;
diff --git a/java/gust/backend/driver/package-info.java b/java/gust/backend/driver/package-info.java
new file mode 100644
index 000000000..714fb6edd
--- /dev/null
+++ b/java/gust/backend/driver/package-info.java
@@ -0,0 +1,15 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+
+/** Provides built-in drivers for Gust application backends. */
+package gust.backend.driver;
diff --git a/java/gust/backend/model/BUILD.bazel b/java/gust/backend/model/BUILD.bazel
new file mode 100644
index 000000000..c85c1d7bf
--- /dev/null
+++ b/java/gust/backend/model/BUILD.bazel
@@ -0,0 +1,438 @@
+##
+# Copyright © 2020, The Gust Framework Authors. All rights reserved.
+#
+# The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+# are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+# this code in object or source form requires and implies consent and agreement to that license in principle and
+# practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+# Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+# Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+# by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+# is strictly forbidden except in adherence with assigned license requirements.
+##
+
+package(
+ default_visibility = ["//visibility:public"],
+)
+
+load(
+ "//defs/toolchain/java:rules.bzl",
+ java_library = "jdk_library",
+)
+
+load(
+ "//defs/toolchain:deps.bzl",
+ "maven",
+ "javaproto",
+)
+
+_COMMON_DEPS = [
+ "@javax_annotation_api",
+ "@com_google_code_findbugs_jsr305",
+ "@com_google_protobuf//:protobuf_java",
+ "//java/gust/backend/runtime:runtime",
+ maven("com.google.guava:guava"),
+ maven("org.slf4j:slf4j-api"),
+]
+
+
+java_library(
+ name = "package-info",
+ srcs = ["package-info.java"],
+)
+
+java_library(
+ name = "CacheDriver",
+ srcs = ["CacheDriver.java"],
+ deps = [
+ ":FetchOptions",
+ ":ModelCodec",
+ ":PersistenceDriver",
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "CacheOptions",
+ srcs = ["CacheOptions.java"],
+ deps = [
+ ":OperationOptions",
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "CollapsedMessage",
+ srcs = ["CollapsedMessage.java"],
+ deps = [
+ # None yet.
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "CollapsedMessageCodec",
+ srcs = ["CollapsedMessageCodec.java"],
+ deps = [
+ ":CollapsedMessage",
+ ":ModelCodec",
+ ":ModelDeserializer",
+ ":ModelDeflateException",
+ ":ModelInflateException",
+ ":ModelSerializer",
+ maven("io.micronaut:micronaut-inject"),
+ maven("io.micronaut:micronaut-runtime"),
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "CollapsedMessageSerializer",
+ srcs = ["CollapsedMessageSerializer.java"],
+ deps = [
+ ":CollapsedMessage",
+ ":ModelSerializer",
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "DatabaseAdapter",
+ srcs = ["DatabaseAdapter.java"],
+ deps = [
+ ":ModelAdapter",
+ ":DatabaseDriver",
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "DatabaseDriver",
+ srcs = ["DatabaseDriver.java"],
+ deps = [
+ ":PersistenceDriver",
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "DatabaseManager",
+ srcs = ["DatabaseManager.java"],
+ deps = [
+ ":DatabaseDriver",
+ ":PersistenceManager",
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "DeleteOptions",
+ srcs = ["DeleteOptions.java"],
+ deps = [
+ ":CacheOptions",
+ ":OperationOptions",
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "EncodedModel",
+ srcs = ["EncodedModel.java"],
+ deps = [
+ ":EncodingMode",
+ "@com_google_protobuf//:protobuf_java_util",
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "EncodingMode",
+ srcs = ["EncodingMode.java"],
+ deps = [
+ # No deps.
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "FetchOptions",
+ srcs = ["FetchOptions.java"],
+ deps = [
+ ":CacheOptions",
+ ":OperationOptions",
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "InvalidModelType",
+ srcs = ["InvalidModelType.java"],
+ deps = [
+ ":PersistenceException",
+ javaproto("//gust/core:datamodel"),
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "MissingAnnotatedField",
+ srcs = ["MissingAnnotatedField.java"],
+ deps = [
+ ":PersistenceException",
+ javaproto("//gust/core:datamodel"),
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "ModelAdapter",
+ srcs = ["ModelAdapter.java"],
+ deps = [
+ ":CacheDriver",
+ ":DeleteOptions",
+ ":FetchOptions",
+ ":ModelCodec",
+ ":ModelMetadata",
+ ":PersistenceDriver",
+ ":WriteOptions",
+ javaproto("//gust/core:datamodel"),
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "ModelCodec",
+ srcs = ["ModelCodec.java"],
+ deps = [
+ ":ModelDeserializer",
+ ":ModelDeflateException",
+ ":ModelInflateException",
+ ":ModelSerializer",
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "ModelDeflateException",
+ srcs = ["ModelDeflateException.java"],
+ deps = [
+ ":PersistenceException",
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "ModelDeserializer",
+ srcs = ["ModelDeserializer.java"],
+ deps = [
+ ":ModelInflateException",
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "ModelInflateException",
+ srcs = ["ModelInflateException.java"],
+ deps = [
+ ":PersistenceException",
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "ModelMetadata",
+ srcs = ["ModelMetadata.java"],
+ deps = [
+ ":InvalidModelType",
+ ":MissingAnnotatedField",
+ javaproto("//gust/core:datamodel"),
+ "@com_google_protobuf//:protobuf_java_util",
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "ModelSerializer",
+ srcs = ["ModelSerializer.java"],
+ deps = [
+ ":CollapsedMessage",
+ ":ModelDeflateException",
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "ModelWriteConflict",
+ srcs = ["ModelWriteConflict.java"],
+ deps = [
+ ":ModelWriteFailure",
+ ":WriteOptions",
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "ModelWriteFailure",
+ srcs = ["ModelWriteFailure.java"],
+ deps = [
+ ":PersistenceException",
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "ObjectModelCodec",
+ srcs = ["ObjectModelCodec.java"],
+ deps = [
+ ":ModelCodec",
+ ":ModelSerializer",
+ ":ModelDeserializer",
+ ":ObjectModelDeserializer",
+ ":ObjectModelSerializer",
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "ObjectModelDeserializer",
+ srcs = ["ObjectModelDeserializer.java"],
+ deps = [
+ ":ModelDeserializer",
+ ":ModelInflateException",
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "ObjectModelSerializer",
+ srcs = ["ObjectModelSerializer.java"],
+ deps = [
+ ":CollapsedMessage",
+ ":ModelDeflateException",
+ ":ModelSerializer",
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "OperationOptions",
+ srcs = ["OperationOptions.java"],
+ deps = [
+ # None yet.
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "PersistenceDriver",
+ srcs = ["PersistenceDriver.java"],
+ deps = [
+ ":DeleteOptions",
+ ":FetchOptions",
+ ":MissingAnnotatedField",
+ ":ModelCodec",
+ ":ModelMetadata",
+ ":PersistenceException",
+ ":PersistenceFailure",
+ ":PersistenceOperationFailed",
+ ":UpdateOptions",
+ ":WriteOptions",
+ javaproto("//gust/core:datamodel"),
+ maven("com.google.guava:guava"),
+ maven("org.reactivestreams:reactive-streams"),
+ maven("io.reactivex.rxjava2:rxjava"),
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "PersistenceException",
+ srcs = ["PersistenceException.java"],
+ deps = [
+ # None yet.
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "PersistenceFailure",
+ srcs = ["PersistenceFailure.java"],
+ deps = [
+ # None yet.
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "PersistenceManager",
+ srcs = ["PersistenceManager.java"],
+ deps = [
+ ":PersistenceDriver",
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "PersistenceOperationFailed",
+ srcs = ["PersistenceOperationFailed.java"],
+ deps = [
+ ":PersistenceException",
+ ":PersistenceFailure",
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "ProtoModelCodec",
+ srcs = ["ProtoModelCodec.java"],
+ deps = [
+ ":EncodedModel",
+ ":EncodingMode",
+ ":ModelCodec",
+ ":ModelDeserializer",
+ ":ModelDeflateException",
+ ":ModelInflateException",
+ ":ModelSerializer",
+ "@com_google_protobuf//:protobuf_java_util",
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "Transaction",
+ srcs = ["Transaction.java"],
+ deps = [
+ # None yet.
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "UpdateOptions",
+ srcs = ["UpdateOptions.java"],
+ deps = [
+ ":WriteOptions",
+ ] + _COMMON_DEPS,
+)
+
+java_library(
+ name = "WriteOptions",
+ srcs = ["WriteOptions.java"],
+ deps = [
+ ":OperationOptions",
+ ] + _COMMON_DEPS,
+)
+
+
+java_library(
+ name = "model",
+ exports = [
+ ":package-info",
+ ":CacheDriver",
+ ":CacheOptions",
+ ":CollapsedMessage",
+ ":CollapsedMessageCodec",
+ ":CollapsedMessageSerializer",
+ ":DatabaseAdapter",
+ ":DatabaseDriver",
+ ":DatabaseManager",
+ ":DeleteOptions",
+ ":EncodedModel",
+ ":EncodingMode",
+ ":FetchOptions",
+ ":InvalidModelType",
+ ":MissingAnnotatedField",
+ ":ModelAdapter",
+ ":ModelCodec",
+ ":ModelDeflateException",
+ ":ModelDeserializer",
+ ":ModelInflateException",
+ ":ModelSerializer",
+ ":ModelWriteConflict",
+ ":ModelWriteFailure",
+ ":ObjectModelCodec",
+ ":ObjectModelDeserializer",
+ ":ObjectModelSerializer",
+ ":OperationOptions",
+ ":PersistenceDriver",
+ ":PersistenceException",
+ ":PersistenceFailure",
+ ":PersistenceManager",
+ ":PersistenceOperationFailed",
+ ":ProtoModelCodec",
+ ":Transaction",
+ ":UpdateOptions",
+ ":WriteOptions",
+ ]
+)
+
+filegroup(
+ name = "sources",
+ srcs = glob(["*.java"]),
+)
diff --git a/java/gust/backend/model/CacheDriver.java b/java/gust/backend/model/CacheDriver.java
new file mode 100644
index 000000000..1c28db33d
--- /dev/null
+++ b/java/gust/backend/model/CacheDriver.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+
+package gust.backend.model;
+
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ListeningScheduledExecutorService;
+import com.google.protobuf.Message;
+import gust.backend.runtime.ReactiveFuture;
+
+import javax.annotation.Nonnull;
+import java.util.*;
+
+
+/**
+ * Describes the surface of a cache driver , which is a partner object to a {@link PersistenceDriver} specifically
+ * tailored to deal with caching engines. Cache drivers may be used with any {@link ModelAdapter} implementation for
+ * transparent read-through caching support.
+ *
+ * Caches implemented in this manner are expected to adhere to options defined on {@link CacheOptions}, particularly
+ * with regard to eviction and timeouts. Specific implementations may extend that interface to define custom options,
+ * which may be provided to the implementation at runtime either via stubbed options parameters or app config.
+ */
+@SuppressWarnings("UnstableApiUsage")
+public interface CacheDriver {
+ /**
+ * Flush the entire cache managed by this driver. This should drop all keys related to model instance caching that are
+ * currently held by the cache.
+ *
+ * @param executor Executor to use for any async operations.
+ * @return Future, which simply completes when the flush is done.
+ */
+ @Nonnull ReactiveFuture flush(@Nonnull ListeningScheduledExecutorService executor);
+
+ /**
+ * Write a record ({@code model}) at {@code key} into the cache, overwriting any model currently stored at the same
+ * key, if applicable. The resulting future completes with no value, when the cache write has finished, to let the
+ * framework know the cache is done following up.
+ *
+ * @param key Key for the record we should inject into the cache.
+ * @param model Record data to inject into the cache.
+ * @param executor Executor to use for any async operations.
+ * @return Future, which simply completes when the write is done.
+ */
+ @Nonnull ReactiveFuture put(@Nonnull Key key,
+ @Nonnull Model model,
+ @Nonnull ListeningScheduledExecutorService executor);
+
+ /**
+ * Force-evict any cached record at the provided {@code key} in the cache managed by this driver. This operation is
+ * expected to succeed in all cases and perform its work in an idempotent manner.
+ *
+ * @param key Key for the record to force-evict from the cache.
+ * @param executor Executor to use for any async operations.
+ * @return Future, which resolves to the evicted key when the operation completes.
+ */
+ @Nonnull ReactiveFuture evict(@Nonnull Key key, @Nonnull ListeningScheduledExecutorService executor);
+
+ /**
+ * Force-evict the set of cached records specified by {@code keys}, in the cache managed by this driver. This
+ * operation is expected to succeed in all cases and perform its work in an idempotent manner, similar to the single-
+ * key version of this method (see: {@link #evict(Message, ListeningScheduledExecutorService)}).
+ *
+ * @param keys Set of keys to evict from the cache.
+ * @param executor Executor to sue for any async operations.
+ * @return Future, which simply completes when the bulk-evict operation is done.
+ */
+ default @Nonnull ReactiveFuture evict(@Nonnull Iterable keys,
+ @Nonnull ListeningScheduledExecutorService executor) {
+ List> evictions = new ArrayList<>();
+ keys.forEach((key) -> evictions.add(evict(key, executor)));
+ return ReactiveFuture.wrap(Futures.allAsList(evictions));
+ }
+
+ /**
+ * Attempt to resolve a known model, addressed by {@code key}, from the cache powered/backed by this driver, according
+ * to {@code options} and making use of {@code executor}.
+ *
+ * If no value is available in the cache, {@link Optional#empty()} must be returned, which triggers a call to the
+ * driver to resolve the record. If the record can be fetched originally, it will later be added to the cache by a
+ * separate call to {@link #put(Message, Message, ListeningScheduledExecutorService)}.
+ *
+ * @param key Key for the record which we should look for in the cache.
+ * @param options Options to apply to the fetch routine taking place.
+ * @param executor Executor to use for async tasks. Provided by the driver or adapter.
+ * @return Future value, which resolves either to {@link Optional#empty()} or a wrapped result value.
+ */
+ @Nonnull ReactiveFuture> fetch(@Nonnull Key key,
+ @Nonnull FetchOptions options,
+ @Nonnull ListeningScheduledExecutorService executor);
+}
diff --git a/java/gust/backend/model/CacheOptions.java b/java/gust/backend/model/CacheOptions.java
new file mode 100644
index 000000000..544bee80b
--- /dev/null
+++ b/java/gust/backend/model/CacheOptions.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+
+package gust.backend.model;
+
+import javax.annotation.Nonnull;
+import java.util.Optional;
+import java.util.concurrent.TimeUnit;
+
+
+/**
+ * Specifies operational options related to caching. These options are usable orthogonally to the main
+ * {@link OperationOptions} tree. See below for a description of each configurable property.
+ *
+ * Cache configuration (defaults in parens):
+ *
+ * {@link #enableCache()} ({@code true}): Whether to allow caching at all.
+ * {@link #cacheTimeout()} ({@code 1}): Amount of time to give the cache before falling back to storage.
+ * {@link #cacheTimeoutUnit()} ({@code SECONDS}): Time unit to correspond with {@code cacheTimeoutValue}.
+ * {@link #cacheDefaultTTL()}: Default amount of time to let things stick around in the cache.
+ * {@link #cacheDefaultTTLUnit()}: Time unit to correspond with {@code cacheDefaultTTL}.
+ * {@link #cacheEvictionMode()}: Eviction mode to operate in.
+ *
+ */
+public interface CacheOptions extends OperationOptions {
+ /** Describes operating modes with regard to cache eviction. */
+ enum EvictionMode {
+ /** Flag to enable TTL enforcement. */
+ TTL("Time-to-Live"),
+
+ /** Least-Frequently-Used mode for cache eviction. */
+ LFU("Least-Frequently Used"),
+
+ /** Least-Recently-Used mode for cache eviction. */
+ LRU("Least-Recently Used");
+
+ /** Pretty label for this mode. */
+ private final @Nonnull String label;
+
+ EvictionMode(@Nonnull String label) {
+ this.label = label;
+ }
+
+ @Override
+ public String toString() {
+ return String.format("EvictionMode(%s - %s)", this.name(), this.label);
+ }
+
+ /** @return Human-readable label for this eviction mode. */
+ public @Nonnull String getLabel() {
+ return label;
+ }
+ }
+
+ /** @return Whether the cache should be enabled, if installed. Defaults to `true`. */
+ default @Nonnull Boolean enableCache() {
+ return true;
+ }
+
+ /** @return Value to apply to the cache timeout. If left unspecified, the global default is used. */
+ default @Nonnull Optional cacheTimeout() {
+ return Optional.of(2L);
+ }
+
+ /** @return Unit to apply to the cache timeout. If left unspecified, the global default is used. */
+ default @Nonnull TimeUnit cacheTimeoutUnit() {
+ return TimeUnit.SECONDS;
+ }
+
+ /** @return Default amount of time to let things remain in the cache. */
+ default @Nonnull Optional cacheDefaultTTL() {
+ return Optional.of(1L);
+ }
+
+ /** @return Unit to apply to the default cache lifetime (TTL) value. */
+ default @Nonnull TimeUnit cacheDefaultTTLUnit() {
+ return TimeUnit.HOURS;
+ }
+
+ /** @return Specifier describing the cache eviction mode to apply, if any. */
+ default @Nonnull Optional cacheEvictionMode() {
+ return Optional.of(EvictionMode.TTL);
+ }
+}
diff --git a/java/gust/backend/model/CollapsedMessage.java b/java/gust/backend/model/CollapsedMessage.java
new file mode 100644
index 000000000..176560107
--- /dev/null
+++ b/java/gust/backend/model/CollapsedMessage.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+package gust.backend.model;
+
+
+/**
+ *
+ */
+public final class CollapsedMessage {
+ private CollapsedMessage() { /* Disallow empty instantiation. */ }
+
+ static CollapsedMessage wrap() {
+ throw new IllegalStateException("not yet supported");
+ }
+}
diff --git a/java/gust/backend/model/CollapsedMessageCodec.java b/java/gust/backend/model/CollapsedMessageCodec.java
new file mode 100644
index 000000000..dbfe0fefb
--- /dev/null
+++ b/java/gust/backend/model/CollapsedMessageCodec.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+package gust.backend.model;
+
+import com.google.protobuf.Message;
+import io.micronaut.context.annotation.Context;
+import io.micronaut.context.annotation.Factory;
+
+import javax.annotation.Nonnull;
+import javax.annotation.concurrent.Immutable;
+import javax.annotation.concurrent.ThreadSafe;
+
+
+/**
+ *
+ * @param
+ */
+@Factory
+@Immutable
+@ThreadSafe
+public final class CollapsedMessageCodec implements ModelCodec {
+ /** Builder proto-type used to spawn new instances. */
+ private final Message.Builder builder;
+
+ /** Singleton access to serializer. */
+ private final CollapsedMessageSerializer serializer = new CollapsedMessageSerializer();
+
+ /** Singleton access to de-serializer. */
+ private final CollapsedMessageDeserializer deserializer = new CollapsedMessageDeserializer();
+
+ private CollapsedMessageCodec(@Nonnull Message.Builder builder) { this.builder = builder; }
+
+ /**
+ * Create a collapsed message codec which adapts the provided builder to {@link CollapsedMessage} and back. These
+ * "collapsed" messages follow the framework-defined protocol for serializing hierarchical data.
+ *
+ * @param Model type for which we will constructor or otherwise resolve a collapsed message codec.
+ * @return Collapsed message codec bound to the provided message type.
+ */
+ @Context
+ public static @Nonnull CollapsedMessageCodec forModel(Message.Builder builder) {
+ return new CollapsedMessageCodec<>(builder);
+ }
+
+ /**
+ * Acquire an instance of the {@link ModelSerializer} attached to this adapter. The instance is not guaranteed to be
+ * created fresh for this invocation.
+ *
+ * @return Serializer instance.
+ * @see #deserializer() For the inverse of this method.
+ * @see #deserialize(Object) To call into de-serialization directly.
+ */
+ @Override
+ public @Nonnull ModelSerializer serializer() {
+ return serializer;
+ }
+
+ /**
+ * Acquire an instance of the {@link ModelDeserializer} attached to this adapter. The instance is not guaranteed to be
+ * created fresh for this invocation.
+ *
+ * @return Deserializer instance.
+ * @see #serializer() For the inverse of this method.
+ * @see #serialize(Message) To call into serialization directly.
+ */
+ @Override
+ public @Nonnull ModelDeserializer deserializer() {
+ return deserializer;
+ }
+
+ /** Serializes model instances into {@link CollapsedMessage} objects. */
+ private final class CollapsedMessageSerializer implements ModelSerializer {
+ /**
+ * Serialize a model instance from the provided object type to the specified output type, throwing exceptions
+ * verbosely if we are unable to correctly, verifiably, and properly export the record.
+ *
+ * @param input Input record object to serialize.
+ * @return Serialized record data, of the specified output type.
+ * @throws ModelDeflateException If the model fails to export or serialize for any reason.
+ */
+ @Override
+ public @Nonnull CollapsedMessage deflate(@Nonnull Message input) throws ModelDeflateException {
+ return null;
+ }
+ }
+
+ /** De-serializes model instances from {@link CollapsedMessage} objects. */
+ private final class CollapsedMessageDeserializer implements ModelDeserializer {
+ /**
+ * De-serialize a model instance from the provided input type, throwing exceptions verbosely if we are unable to
+ * correctly, verifiably, and properly load the record.
+ *
+ * @param model Input data or object from which to load the model instance.
+ * @return De-serialized and inflated model instance. Always a {@link Message}.
+ * @throws ModelInflateException If the model fails to load for any reason.
+ */
+ @Override
+ public @Nonnull Model inflate(@Nonnull CollapsedMessage model) throws ModelInflateException {
+ return null;
+ }
+ }
+
+ /** @return Builder for the model handled by this codec. */
+ public Message.Builder getBuilder() {
+ return builder;
+ }
+}
diff --git a/java/gust/backend/model/CollapsedMessageSerializer.java b/java/gust/backend/model/CollapsedMessageSerializer.java
new file mode 100644
index 000000000..c7804225e
--- /dev/null
+++ b/java/gust/backend/model/CollapsedMessageSerializer.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+package gust.backend.model;
+
+import com.google.protobuf.Message;
+
+
+/**
+ *
+ * @param
+ */
+public interface CollapsedMessageSerializer extends ModelSerializer {
+ /* This space left intentionally blank. */
+}
diff --git a/java/gust/backend/model/DatabaseAdapter.java b/java/gust/backend/model/DatabaseAdapter.java
new file mode 100644
index 000000000..bfa898809
--- /dev/null
+++ b/java/gust/backend/model/DatabaseAdapter.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+package gust.backend.model;
+
+import com.google.protobuf.Message;
+
+import javax.annotation.Nonnull;
+
+
+/**
+ * Extends the standard {@link ModelAdapter} interface with rich persistence features, including querying, indexing, and
+ * other stuff one would expect when interacting with a full database.
+ *
+ * @param Type of key used to uniquely address models.
+ * @param Message type which this database adapter is handling.
+ */
+public interface DatabaseAdapter
+ extends ModelAdapter {
+ /**
+ * Return the lower-level {@link DatabaseDriver} powering this adapter. The driver is responsible for communicating
+ * with the actual database or storage service, either via local stubs/emulators or a production API.
+ *
+ * @return Database driver instance currently in use by this model adapter.
+ */
+ @Nonnull DatabaseDriver engine();
+
+ /** {@inheritDoc} */
+ @Override
+ default @Nonnull Key generateKey(@Nonnull Message instance) {
+ return engine().generateKey(instance);
+ }
+}
diff --git a/java/gust/backend/model/DatabaseDriver.java b/java/gust/backend/model/DatabaseDriver.java
new file mode 100644
index 000000000..314fd2ba0
--- /dev/null
+++ b/java/gust/backend/model/DatabaseDriver.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+package gust.backend.model;
+
+import com.google.protobuf.Message;
+
+
+/**
+ *
+ */
+public interface DatabaseDriver
+ extends PersistenceDriver {
+}
diff --git a/java/gust/backend/model/DatabaseManager.java b/java/gust/backend/model/DatabaseManager.java
new file mode 100644
index 000000000..7d69211bd
--- /dev/null
+++ b/java/gust/backend/model/DatabaseManager.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+package gust.backend.model;
+
+
+/**
+ *
+ */
+public interface DatabaseManager extends PersistenceManager {
+ /* Nothing yet. */
+}
diff --git a/java/gust/backend/model/DeleteOptions.java b/java/gust/backend/model/DeleteOptions.java
new file mode 100644
index 000000000..a76b47956
--- /dev/null
+++ b/java/gust/backend/model/DeleteOptions.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+package gust.backend.model;
+
+
+/** Describes options specifically involved with deleting existing model entities. */
+public interface DeleteOptions extends CacheOptions, OperationOptions {
+ /** Default set of delete operation options. */
+ DeleteOptions DEFAULTS = new DeleteOptions() {};
+}
diff --git a/java/gust/backend/model/EncodedModel.java b/java/gust/backend/model/EncodedModel.java
new file mode 100644
index 000000000..d0cedcd7c
--- /dev/null
+++ b/java/gust/backend/model/EncodedModel.java
@@ -0,0 +1,233 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+package gust.backend.model;
+
+import com.google.protobuf.ByteString;
+import com.google.protobuf.Descriptors;
+import com.google.protobuf.InvalidProtocolBufferException;
+import com.google.protobuf.Message;
+import com.google.protobuf.util.JsonFormat;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.Immutable;
+import javax.annotation.concurrent.ThreadSafe;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
+import java.util.Objects;
+
+
+/**
+ * Container class for an encoded Protocol Buffer model. Holds raw encoded model data, in any of Protobuf's built-in
+ * well-defined serialization formats (for instance {@code BINARY} or {@code JSON}).
+ *
+ * Raw model data is encoded before being held by this record. In addition to holding the raw data, it also keeps
+ * the fully-qualified path to the model that the data came from, and the serialization format the data lives in. After
+ * being wrapped in this class, a batch of model data is additionally compliant with {@link Serializable}.
+ */
+@Immutable
+@ThreadSafe
+@SuppressWarnings({"unused", "WeakerAccess"})
+public final class EncodedModel implements Serializable, Cloneable {
+ private static final long serialVersionUID = 1L;
+
+ /** Raw bytes of the enclosed model. */
+ private @Nonnull byte[] rawBytes;
+
+ /** Type of model held by this entity. */
+ private @Nonnull String type;
+
+ /** Operating mode for the underlying data. Always {@code BINARY} unless manually constructed. */
+ private @Nonnull EncodingMode dataMode;
+
+ /**
+ * Initialize a new encoded model directly from a {@link Message}.
+ *
+ * @param rawBytes Raw bytes to hold.
+ * @param mode Operating data mode (usually {@code BINARY}).
+ * @param type Fully-qualified model type name.
+ */
+ private EncodedModel(@Nonnull byte[] rawBytes, @Nonnull EncodingMode mode, @Nonnull String type) {
+ this.type = type;
+ this.dataMode = mode;
+ this.rawBytes = rawBytes;
+ }
+
+ /**
+ * Write the attached encoded Protocol Buffer data to the specified object stream, such that this object is fully
+ * packed for Java serialization purposes.
+ *
+ * @param out Output stream to write this encoded model object to.
+ * @throws IOException If an IO error of some kind occurs.
+ */
+ private void writeObject(@Nonnull ObjectOutputStream out) throws IOException {
+ out.writeObject(type);
+ out.writeObject(dataMode);
+ out.write(rawBytes.length);
+ out.write(rawBytes);
+ }
+
+ /**
+ * Re-inflate an encoded model from a Java serialization context. Read the stream to install local properties, such
+ * that the object is re-constituted.
+ *
+ * @param in Input stream to read object data from.
+ * @throws IOException If an IO error of some kind occurs.
+ * @throws ClassNotFoundException If the specified Protobuf model cannot be found or resolved.
+ */
+ private void readObject(@Nonnull ObjectInputStream in) throws IOException,ClassNotFoundException {
+ this.type = Objects.requireNonNull((String)in.readObject(),
+ "Cannot deserialize EncodedModel with empty type.");
+ this.dataMode = Objects.requireNonNull((EncodingMode)in.readObject(),
+ "Cannot deserialize EncodedModel with empty data mode.");
+
+ // read length-prefixed raw bytes
+ int datasize = in.read();
+ byte[] data = new byte[datasize];
+ int read = in.read(data);
+ assert datasize == read;
+ this.rawBytes = data;
+ }
+
+ /**
+ * Return an encoded representation of the provided message. This method is rather heavy-weight: it fully encodes the
+ * provided Protobuf message into the Protocol Buffers binary format.
+ *
+ * Note that this method must access the message's descriptor. If a descriptor is already on-hand, use the other
+ * variant of this method.
+ *
+ * @see #from(Message, Descriptors.Descriptor) If a descriptor is already on-hand for the provided message.
+ * @param message Message to encode as binary.
+ * @return Java-serializable wrapper including the encoded Protobuf model.
+ */
+ public static EncodedModel from(@Nonnull Message message) {
+ return from(message, null);
+ }
+
+ /**
+ * Return an encoded representation of the provided message. This method is rather heavy-weight: it fully encodes the
+ * provided Protobuf message into the Protocol Buffers binary format.
+ *
+ * If a descriptor is not already on-hand, use the other variant of this method, which accesses the
+ * descriptor directly from the message.
+ *
+ * @see #from(Message, Descriptors.Descriptor) If no descriptor is on-hand.
+ * @param message Message to encode as binary.
+ * @return Java-serializable wrapper including the encoded Protobuf model.
+ */
+ public static EncodedModel from(@Nonnull Message message, @Nullable Descriptors.Descriptor descriptor) {
+ return new EncodedModel(
+ message.toByteArray(),
+ EncodingMode.BINARY,
+ (descriptor != null ? descriptor : message.getDescriptorForType()).getFullName());
+ }
+
+ /**
+ * Wrap a blob of opaque data, asserting that it is actually an encoded model record. Using this factory method, any
+ * of the Protobuf serialization formats may be used safely with this class.
+ *
+ * All details must be provided manually to this method variant. It is incumbent on the developer that they line
+ * up properly. For safer options, see the other factory methods on this class.
+ *
+ * @see #from(Message) To encode a model instance.
+ * @see #from(Message, Descriptors.Descriptor) To encode a model instance with a descriptor already in-hand.
+ * @param type Fully-qualified type name, for the encoded instance we are storing.
+ * @param data Raw data for the encoded model to be wrapped.
+ * @return Encoded model instance.
+ */
+ public static EncodedModel wrap(@Nonnull String type, @Nonnull EncodingMode mode, @Nonnull byte[] data) {
+ return new EncodedModel(data, mode, type);
+ }
+
+ // -- Equals/Hash -- //
+
+ /** {@inheritDoc} */
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ EncodedModel that = (EncodedModel) o;
+ return com.google.common.base.Objects.equal(type, that.type) &&
+ dataMode == that.dataMode &&
+ com.google.common.base.Objects.equal(
+ Arrays.hashCode(rawBytes),
+ Arrays.hashCode(that.rawBytes));
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public int hashCode() {
+ return com.google.common.base.Objects
+ .hashCode(type, dataMode, Arrays.hashCode(rawBytes));
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public String toString() {
+ return "EncodedModel{" +
+ "dataMode='" + dataMode + '\'' +
+ ", type=" + type +
+ '}';
+ }
+
+ // -- Getters -- //
+
+ /** @return Raw bytes held by this encoded model. */
+ public @Nonnull ByteString getRawBytes() {
+ return ByteString.copyFrom(this.rawBytes);
+ }
+
+ /** @return Fully-qualified path to the type of model backing this encoded instance. */
+ public @Nonnull String getType() {
+ return type;
+ }
+
+ /** @return Operating mode for the underlying model instance data. */
+ public @Nonnull EncodingMode getDataMode() {
+ return dataMode;
+ }
+
+ // -- Inflate -- //
+
+ /**
+ * Re-inflate the encoded model data held by this object, into an instance of {@code Model}, via the provided
+ * {@code builder}.
+ *
+ * Note: before the model is returned from this method, it will be casted to match the generic type the user
+ * is looking for. It is incumbent on the invoking developer to make sure the generic access that occurs won't produce
+ * a {@link ClassCastException}. {@link #getType()} can be interrogated to resolve types before inflation.
+ *
+ * @param model Empty model instance from which to resolve a parser.
+ * @param Generic model type inflated and returned by this method.
+ * @return Instance of the model, inflated from the encoded data.
+ * @throws InvalidProtocolBufferException If the held data is incorrectly formatted.
+ */
+ public @Nonnull Model inflate(@Nonnull Message model) throws InvalidProtocolBufferException {
+ if (dataMode == EncodingMode.JSON) {
+ Message.Builder builder = model.newBuilderForType();
+ JsonFormat.parser().merge(
+ new String(this.rawBytes, StandardCharsets.UTF_8),
+ builder);
+
+ //noinspection unchecked
+ return (Model)builder.build();
+ } else {
+ //noinspection unchecked
+ return (Model)model.getParserForType().parseFrom(this.rawBytes);
+ }
+ }
+}
diff --git a/java/gust/backend/model/EncodingMode.java b/java/gust/backend/model/EncodingMode.java
new file mode 100644
index 000000000..24b111638
--- /dev/null
+++ b/java/gust/backend/model/EncodingMode.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+package gust.backend.model;
+
+
+/** Wire format mode to apply when serializing or de-serializing. */
+public enum EncodingMode {
+ /** Use Protobuf binary serialization. */
+ BINARY,
+
+ /** Use Protobuf JSON serialization. */
+ JSON
+}
diff --git a/java/gust/backend/model/FetchOptions.java b/java/gust/backend/model/FetchOptions.java
new file mode 100644
index 000000000..64ffea643
--- /dev/null
+++ b/java/gust/backend/model/FetchOptions.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+package gust.backend.model;
+
+
+import com.google.protobuf.FieldMask;
+
+import javax.annotation.Nonnull;
+import java.util.Optional;
+
+
+/**
+ * Specifies options which may be applied, generically, to model instance fetch operations implemented through the
+ * {@link PersistenceDriver} interface.
+ */
+public interface FetchOptions extends CacheOptions, OperationOptions {
+ /** Default set of fetch options. */
+ FetchOptions DEFAULTS = new FetchOptions() {};
+
+ /** Enumerates ways the {@code FieldMask} may be applied. */
+ enum MaskMode {
+ /** Only include fields mentioned in the field mask. */
+ INCLUDE,
+
+ /** Omit fields mentioned in the field mask. */
+ EXCLUDE,
+
+ /** Treat the field mask as a projection, for query purposes only. */
+ PROJECTION
+ }
+
+ /** @return Field mask to apply when fetching properties. Fields not mentioned in the mask will be omitted. */
+ default @Nonnull Optional fieldMask() {
+ return Optional.empty();
+ }
+
+ /** @return Mode to operate in when applying the affixed field mask, if any. */
+ default @Nonnull MaskMode fieldMaskMode() {
+ return MaskMode.INCLUDE;
+ }
+}
diff --git a/java/gust/backend/model/InvalidModelType.java b/java/gust/backend/model/InvalidModelType.java
new file mode 100644
index 000000000..fc5bc8f65
--- /dev/null
+++ b/java/gust/backend/model/InvalidModelType.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+package gust.backend.model;
+
+import com.google.common.base.Joiner;
+import com.google.protobuf.Descriptors.Descriptor;
+import com.google.protobuf.Message;
+import tools.elide.core.DatapointType;
+
+import javax.annotation.Nonnull;
+import java.util.Set;
+
+
+/**
+ * Specifies an error, wherein a user has requested a data adapter or some other database object, for a model which is
+ * not usable with data storage systems (via annotations).
+ */
+public final class InvalidModelType extends PersistenceException {
+ /** Message that violated some type expectation. */
+ private final Descriptor violatingSchema;
+
+ /** Set of allowed types that the message didn't match. */
+ private final Set datapointTypes;
+
+ /**
+ * Create a persistence exception from scratch.
+ *
+ * @param type Descriptor type.
+ * @param expectedTypes Available types, any one of which it can conform to.
+ */
+ InvalidModelType(@Nonnull Descriptor type, @Nonnull Set expectedTypes) {
+ super(String.format("Invalid model type: '%s' is not one of the allowed types '%s'.",
+ type.getName(),
+ Joiner.on(", ").join(expectedTypes)));
+ this.violatingSchema = type;
+ this.datapointTypes = expectedTypes;
+ }
+
+ /**
+ * Factory to create a new `InvalidModelType` exception directly from a model descriptor.
+ *
+ * @param type Type of model to create this exception for.
+ * @param expectedTypes Available types, any one of which it can conform to.
+ * @return Created `InvalidModelType` exception.
+ */
+ static @Nonnull InvalidModelType from(@Nonnull Descriptor type, @Nonnull Set expectedTypes) {
+ return new InvalidModelType(type, expectedTypes);
+ }
+
+ /**
+ * Factory to create a new `InvalidModelType` exception from a model instance.
+ *
+ * @param type Type of model to create this exception for.
+ * @param expectedTypes Available types, any one of which it can conform to.
+ * @return Created `InvalidModelType` exception.
+ */
+ static @Nonnull InvalidModelType from(@Nonnull Message type, @Nonnull Set expectedTypes) {
+ return from(type.getDescriptorForType(), expectedTypes);
+ }
+
+ // -- Getters -- //
+
+ /** @return Message instance that violated this type constraint. */
+ public Descriptor getViolatingSchema() {
+ return violatingSchema;
+ }
+
+ /** @return Allowed types which the violating message did not match. */
+ public Set getDatapointTypes() {
+ return datapointTypes;
+ }
+}
diff --git a/java/gust/backend/model/MissingAnnotatedField.java b/java/gust/backend/model/MissingAnnotatedField.java
new file mode 100644
index 000000000..d78cac60a
--- /dev/null
+++ b/java/gust/backend/model/MissingAnnotatedField.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+package gust.backend.model;
+
+import com.google.protobuf.Descriptors;
+import tools.elide.core.FieldType;
+
+import javax.annotation.Nonnull;
+
+
+/** Specifies that a model was missing a required annotated-field for a given operation. */
+@SuppressWarnings("WeakerAccess")
+public final class MissingAnnotatedField extends PersistenceException {
+ /** Specifies the descriptor that violated the required field constraint. */
+ private final @Nonnull Descriptors.Descriptor violatingSchema;
+
+ /** Field type that was required but not found. */
+ private final @Nonnull FieldType requiredField;
+
+ /**
+ * Create an exception describing a missing, but required, annotated schema field.
+ *
+ * @param descriptor Descriptor for the message type in question.
+ * @param type Field type that was required but missing.
+ */
+ MissingAnnotatedField(@Nonnull Descriptors.Descriptor descriptor, @Nonnull FieldType type) {
+ super(String.format(
+ "Model type '%s' failed to be processed, because it is missing the annotated field '%s', " +
+ "which was required for the requested operation.",
+ descriptor.getName(),
+ type.name()));
+
+ this.violatingSchema = descriptor;
+ this.requiredField = type;
+ }
+
+ // -- Getters -- //
+
+ /** @return Descriptor for the schema type which violated the required-field constraint. */
+ public @Nonnull Descriptors.Descriptor getViolatingSchema() {
+ return violatingSchema;
+ }
+
+ /** @return The type of field that must be added to pass the failing constraint. */
+ public @Nonnull FieldType getRequiredField() {
+ return requiredField;
+ }
+}
diff --git a/java/gust/backend/model/ModelAdapter.java b/java/gust/backend/model/ModelAdapter.java
new file mode 100644
index 000000000..bd4d2cae8
--- /dev/null
+++ b/java/gust/backend/model/ModelAdapter.java
@@ -0,0 +1,203 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+package gust.backend.model;
+
+import com.google.common.base.Function;
+import com.google.common.util.concurrent.AsyncFunction;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ListeningScheduledExecutorService;
+import com.google.protobuf.Message;
+import gust.backend.runtime.ReactiveFuture;
+import tools.elide.core.DatapointType;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import java.util.Objects;
+import java.util.Optional;
+
+import static java.lang.String.format;
+import static gust.backend.model.ModelMetadata.*;
+
+
+/**
+ * Specifies an adapter for data models. "Adapters" are responsible for handling data storage and recall, and generic
+ * model serialization and deserialization activities. Adapters are composed of a handful of components, which together
+ * define the functionality that composes the adapter writ-large.
+ *
+ * Major components of functionality are described below:
+ *
+ * Codec: The {@link ModelCodec} is responsible for serialization and deserialization. In some cases,
+ * codecs can be mixed with other objects to customize how data is stored. For example, the Redis cache layer supports
+ * using ProtoJSON, Protobuf binary, or JVM serialization, optionally with compression. On the other hand, the
+ * Firestore adapter specifies its own codecs which serialize into Firestore models.
+ * Driver: The {@link PersistenceDriver} is responsible for persisting serialized/collapsed models into
+ * underlying storage, deleting data recalling data via key fetches, and querying indexes to produce result-sets.
+ *
+ *
+ * @see PersistenceDriver Interface which defines basic driver functionality.
+ * @see CacheDriver Cache-specific persistence driver support, included in this object.
+ * @see DatabaseAdapter Extends this interface with richer data engine features.
+ * @param Key type, instances of which uniquely address instances of {@code Model}.
+ * @param Model type which this adapter is responsible for adapting.
+ * @param Intermediate record format used by the implementation when de-serializing model instances.
+ */
+@SuppressWarnings("UnstableApiUsage")
+public interface ModelAdapter
+ extends PersistenceDriver {
+ // -- Interface: Drivers -- //
+ /**
+ * Return the cache driver in use for this particular model adapter. If a cache driver is present, and active/enabled
+ * according to database driver settings, it will be used on read-paths (such as fetching objects by ID).
+ *
+ * @return Cache driver currently in use by this model adapter.
+ */
+ @Nonnull Optional> cache();
+
+ /**
+ * Return the lower-level {@link PersistenceDriver} powering this adapter. The driver is responsible for communicating
+ * with the actual backing storage service, either via local stubs/emulators or a production API.
+ *
+ * @return Persistence driver instance currently in use by this model adapter.
+ */
+ @Nonnull PersistenceDriver engine();
+
+ // -- Interface: Execution -- //
+ /** {@inheritDoc} */
+ @Override
+ default @Nonnull ListeningScheduledExecutorService executorService() {
+ return engine().executorService();
+ }
+
+ // -- Interface: Key Generation -- //
+ /** {@inheritDoc} */
+ @Override
+ default @Nonnull Key generateKey(@Nonnull Message instance) {
+ return engine().generateKey(instance);
+ }
+
+ // -- Interface: Fetch -- //
+ /** {@inheritDoc} */
+ @Override
+ default @Nonnull ReactiveFuture> retrieve(@Nonnull Key key, @Nonnull FetchOptions options) {
+ enforceRole(key, DatapointType.OBJECT_KEY);
+ final ListeningScheduledExecutorService exec = options.executorService().orElseGet(this::executorService);
+ if (Internals.logging.isTraceEnabled())
+ Internals.logging.trace(format("Retrieving record '%s' from storage (executor: '%s')...", id(key), exec));
+
+ final Optional> cache = this.cache();
+ if (options.enableCache() && cache.isPresent()) {
+ if (Internals.logging.isDebugEnabled())
+ Internals.logging.debug(
+ format("Caching enabled with object of type '%s'.", cache.get().getClass().getSimpleName()));
+
+ // cache result future
+ final ReactiveFuture> cacheFetchFuture = Objects.requireNonNull(
+ cache.get().fetch(key, options, exec), "Cache cannot return `null` for `retrieve`.");
+
+ // wrap in a future, with a non-propagating cancelling timeout, which handles any nulls from the cache.
+ final ListenableFuture> cacheFuture = (Futures.nonCancellationPropagating(
+ Futures.transform(cacheFetchFuture, new Function<>() {
+ @Override
+ public @Nonnull Optional apply(@Nullable Optional cacheResult) {
+ if (Internals.logging.isDebugEnabled()) {
+ //noinspection OptionalAssignedToNull
+ Internals.logging.debug(
+ format("Received response from cache (value present: '%s').",
+ cacheResult == null ? "null" : cacheResult.isPresent()));
+ }
+ if (cacheResult != null && cacheResult.isPresent()) {
+ return cacheResult;
+ }
+ return Optional.empty(); // not found
+ }
+ }, exec)));
+
+ // wrap the cache future in a timeout function, which enforces the configured (or default) cache timeout
+ final ListenableFuture> limitedCacheFuture = Futures.withTimeout(
+ cacheFuture,
+ options.cacheTimeout().orElse(PersistenceDriver.DEFAULT_CACHE_TIMEOUT),
+ options.cacheTimeoutUnit(),
+ exec);
+
+ // finally, respond to a cache miss by deferring to the driver directly. this must be separate from `cacheFuture`
+ // to allow separate cancellation of the cache future and the future which backstops it.
+ return ReactiveFuture.wrap(Futures.transformAsync(limitedCacheFuture, new AsyncFunction<>() {
+ @Override
+ public @Nonnull ListenableFuture> apply(@Nullable Optional cacheResult) {
+ if (Internals.logging.isTraceEnabled()) {
+ //noinspection OptionalAssignedToNull
+ Internals.logging.debug(
+ format("Returning response from cache (value present: '%s')",
+ cacheResult == null ? "null" : cacheResult.isPresent()));
+ }
+
+ if (cacheResult != null && cacheResult.isPresent()) {
+ return Futures.immediateFuture(cacheResult);
+ } else {
+ var record = engine().retrieve(key, options);
+ record.addListener(() -> {
+ if (Internals.logging.isDebugEnabled()) {
+ Internals.logging.debug("Response was NOT cached. Storing in cache...");
+ }
+
+ Internals.swallowExceptions(() -> {
+ Optional fetchResult = record.get();
+ if (fetchResult.isPresent()) {
+ cache.get().put(
+ key,
+ fetchResult.get(),
+ options.executorService().orElseGet(ModelAdapter.this::executorService));
+ }
+ });
+ }, options.executorService().orElseGet(ModelAdapter.this::executorService));
+ return record;
+ }
+ }
+ }, exec), exec);
+ } else {
+ if (Internals.logging.isDebugEnabled()) {
+ Internals.logging.debug("Caching is disabled. Deferring to driver.");
+ }
+ return engine().retrieve(key, options);
+ }
+ }
+
+ // -- Interface: Persist -- //
+ /** {@inheritDoc} */
+ @Override
+ default @Nonnull ReactiveFuture persist(@Nullable Key key,
+ @Nonnull Model model,
+ @Nonnull WriteOptions options) {
+ return engine().persist(key, model, options);
+ }
+
+ // -- Interface: Delete -- //
+ /** {@inheritDoc} */
+ @Override
+ default @Nonnull ReactiveFuture delete(@Nonnull Key key,
+ @Nonnull DeleteOptions options) {
+ ReactiveFuture op = engine().delete(key, options);
+ if (options.enableCache()) {
+ // if caching is enabled and a cache driver is present, make sure to evict any cached record behind this key.
+ Optional> cacheDriver = this.cache();
+ if (cacheDriver.isPresent()) {
+ ListeningScheduledExecutorService exec = options.executorService().orElseGet(this::executorService);
+ ReactiveFuture storageDelete = engine().delete(key, options);
+ ReactiveFuture cacheEvict = cacheDriver.get().evict(key, exec);
+ return ReactiveFuture.wrap(Futures.whenAllComplete(storageDelete, cacheEvict).call(() -> key, exec));
+ }
+ }
+ return op;
+ }
+}
diff --git a/java/gust/backend/model/ModelCodec.java b/java/gust/backend/model/ModelCodec.java
new file mode 100644
index 000000000..982c9d6ae
--- /dev/null
+++ b/java/gust/backend/model/ModelCodec.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+package gust.backend.model;
+
+import com.google.protobuf.Message;
+
+import javax.annotation.Nonnull;
+import java.io.IOException;
+
+
+/**
+ * Specifies the requisite interface for a data codec implementation. These objects are responsible for performing model
+ * serialization and deserialization, within different circumstances. For example, models are used with databases via
+ * adapters that serialize each model into a corresponding database object, or series of database calls.
+ *
+ * Adapters are bi-directional , i.e., they must support transitioning both to and from message
+ * representations, based on circumstance. Services are the only case where this is generally not necessary, because
+ * gRPC handles serialization automatically.
+ *
+ * @see ModelSerializer Surface definition for a model serializer.
+ * @see ModelDeserializer Surface definition for a model de-serializer.
+ * @param Model type which this codec is responsible for serializing and de-serializing.
+ * @param Intermediate record type which this codec converts model instances into.
+ */
+@SuppressWarnings("unused")
+public interface ModelCodec {
+ // -- Components -- //
+ /**
+ * Acquire an instance of the {@link ModelSerializer} attached to this adapter. The instance is not guaranteed to be
+ * created fresh for this invocation.
+ *
+ * @see #deserializer() For the inverse of this method.
+ * @see #deserialize(Object) To call into de-serialization directly.
+ * @return Serializer instance.
+ */
+ @Nonnull ModelSerializer serializer();
+
+ /**
+ * Acquire an instance of the {@link ModelDeserializer} attached to this adapter. The instance is not guaranteed to be
+ * created fresh for this invocation.
+ *
+ * @see #serializer() For the inverse of this method.
+ * @see #serialize(Message) To call into serialization directly.
+ * @return Deserializer instance.
+ */
+ @Nonnull ModelDeserializer deserializer();
+
+ // -- Proxies -- //
+ /**
+ * Sugar shortcut to serialize a model through the current codec's installed {@link ModelSerializer}.
+ *
+ * This method just proxies to that object (which can be acquired via {@link #serializer()}). If any error occurs
+ * while serializing, {@link ModelDeflateException} is thrown.
+ *
+ * @param instance Input model to serialize.
+ * @return Serialized output data or object.
+ * @throws ModelDeflateException If some error occurs while serializing the model.
+ * @throws IOException If some IO error occurs.
+ */
+ default @Nonnull Intermediate serialize(Model instance) throws ModelDeflateException, IOException {
+ return serializer().deflate(instance);
+ }
+
+ /**
+ * Sugar shortcut to de-serialize a model through the current codec's installed {@link ModelDeserializer}.
+ *
+ * This method just proxies to that object (which can be acquired via {@link #deserializer()}). If any error occurs
+ * while de-serializing, {@link ModelInflateException} is thrown.
+ *
+ * @param input Input data to de-serialize into a model instance.
+ * @return Model instance, deserialized from the input data.
+ * @throws ModelInflateException If some error occurs while de-serializing the model.
+ * @throws IOException If some IO error occurs.
+ */
+ default @Nonnull Model deserialize(Intermediate input) throws ModelInflateException, IOException {
+ return deserializer().inflate(input);
+ }
+}
diff --git a/java/gust/backend/model/ModelDeflateException.java b/java/gust/backend/model/ModelDeflateException.java
new file mode 100644
index 000000000..427c5d664
--- /dev/null
+++ b/java/gust/backend/model/ModelDeflateException.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+package gust.backend.model;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+
+/** Describes an error that occurred while serializing a model. */
+public final class ModelDeflateException extends PersistenceException {
+ /**
+ * Main package-private constructor.
+ *
+ * @param message Error message to apply.
+ * @param cause Optional cause.
+ */
+ ModelDeflateException(@Nonnull String message, @Nullable Throwable cause) {
+ super(message, cause);
+ }
+
+ /**
+ * Create a persistence exception with a throwable as a cause.
+ *
+ * @param cause Cause for the error.
+ */
+ ModelDeflateException(@Nonnull Throwable cause) {
+ super(cause);
+ }
+}
diff --git a/java/gust/backend/model/ModelDeserializer.java b/java/gust/backend/model/ModelDeserializer.java
new file mode 100644
index 000000000..8ec9841fa
--- /dev/null
+++ b/java/gust/backend/model/ModelDeserializer.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+package gust.backend.model;
+
+import com.google.protobuf.Message;
+
+import javax.annotation.Nonnull;
+import java.io.IOException;
+
+
+/**
+ * Describes the interface for a de-serializer, which is responsible for transitioning (adapting) objects from a given
+ * type (or tree of types) to {@link Message} instances, corresponding with the data record type managed by this object.
+ *
+ * Deserializers are part of a wider set of objects, including the inverse of this object, which is called a
+ * {@link ModelSerializer}. Generally these objects come in matching pairs, but sometimes they are mixed and matched as
+ * needed. Pairs of serializers/de-serializers are grouped by a {@link ModelCodec}.
+ *
+ * @see ModelSerializer The inverse of this object, which is responsible for adapting {@link Message} instances to some
+ * other type of object or data.
+ * @param Input data type, which this de-serializer will convert into a message instance.
+ * @param Message object type, which is the output of this de-serializer.
+ */
+public interface ModelDeserializer {
+ /**
+ * De-serialize a model instance from the provided input type, throwing exceptions verbosely if we are unable to
+ * correctly, verifiably, and properly load the record.
+ *
+ * @param input Input data or object from which to load the model instance.
+ * @return De-serialized and inflated model instance. Always a {@link Message}.
+ * @throws ModelInflateException If the model fails to load for any reason.
+ * @throws IOException If some IO error occurs.
+ */
+ @Nonnull Model inflate(@Nonnull Input input) throws ModelInflateException, IOException;
+}
diff --git a/java/gust/backend/model/ModelInflateException.java b/java/gust/backend/model/ModelInflateException.java
new file mode 100644
index 000000000..35d2b9a22
--- /dev/null
+++ b/java/gust/backend/model/ModelInflateException.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+package gust.backend.model;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+
+/** Describes an error that occurred while de-serializing a model. */
+public final class ModelInflateException extends PersistenceException {
+ /**
+ * Main package-private constructor.
+ *
+ * @param message Error message to apply.
+ * @param cause Optional cause.
+ */
+ ModelInflateException(@Nonnull String message, @Nullable Throwable cause) {
+ super(message, cause);
+ }
+
+ /**
+ * Create a persistence exception with a throwable as a cause.
+ *
+ * @param cause Cause for the error.
+ */
+ ModelInflateException(@Nonnull Throwable cause) {
+ super(cause);
+ }
+}
diff --git a/java/gust/backend/model/ModelMetadata.java b/java/gust/backend/model/ModelMetadata.java
new file mode 100644
index 000000000..774368c72
--- /dev/null
+++ b/java/gust/backend/model/ModelMetadata.java
@@ -0,0 +1,1320 @@
+/*
+ * Copyright © 2020, The Gust Framework Authors. All rights reserved.
+ *
+ * The Gust/Elide framework and tools, and all associated source or object computer code, except where otherwise noted,
+ * are licensed under the Zero Prosperity license, which is enclosed in this repository, in the file LICENSE.txt. Use of
+ * this code in object or source form requires and implies consent and agreement to that license in principle and
+ * practice. Source or object code not listing this header, or unless specified otherwise, remain the property of
+ * Elide LLC and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to
+ * Elide LLC and its suppliers and may be covered by U.S. and Foreign Patents, or patents in process, and are protected
+ * by trade secret and copyright law. Dissemination of this information, or reproduction of this material, in any form,
+ * is strictly forbidden except in adherence with assigned license requirements.
+ */
+package gust.backend.model;
+
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.CharMatcher;
+import com.google.common.collect.ImmutableSortedSet;
+import com.google.errorprone.annotations.CanIgnoreReturnValue;
+import com.google.protobuf.DescriptorProtos.FieldOptions;
+import com.google.protobuf.DescriptorProtos.MessageOptions;
+import com.google.protobuf.Descriptors.Descriptor;
+import com.google.protobuf.Descriptors.FieldDescriptor;
+import com.google.protobuf.FieldMask;
+import com.google.protobuf.GeneratedMessage.GeneratedExtension;
+import com.google.protobuf.Message;
+import com.google.protobuf.util.FieldMaskUtil;
+import tools.elide.core.Datamodel;
+import tools.elide.core.DatapointType;
+import tools.elide.core.FieldType;
+
+import javax.annotation.Nonnull;
+import javax.annotation.concurrent.Immutable;
+import javax.annotation.concurrent.ThreadSafe;
+import java.io.Serializable;
+import java.util.*;
+import java.util.concurrent.ConcurrentSkipListSet;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+
+/**
+ * Utility helper class, which is responsible for resolving metadata (based on the core framework annotations) from
+ * arbitrary model definitions.
+ *
+ * Model "metadata," in this case, refers to annotation-based declarations on the protocol buffer definitions
+ * themselves. As such, the source for most (if not all) of the data provided by this helper is the {@link Descriptor}
+ * that accompanies a Java-side protobuf model.
+ *
+ * Note: Using this class, or the model layer writ-large, requires the full runtime Protobuf library (the lite
+ * runtime for Protobuf in Java does not include descriptors at all, which this class relies on).
+ */
+@ThreadSafe
+@SuppressWarnings({"WeakerAccess", "unused"})
+public final class ModelMetadata {
+ private ModelMetadata() { /* Disallow construction. */ }
+
+ /** Utility class that points to a specific field, in a specific context. */
+ @Immutable
+ @ThreadSafe
+ public final static class FieldPointer implements Serializable, Comparable {
+ /** Depth of this field, based on the number of dots in the path. */
+ private final @Nonnull Integer depth;
+
+ /** Access path to the field in some context. */
+ private final @Nonnull String path;
+
+ /** Base model type. */
+ private final @Nonnull Descriptor base;
+
+ /** Field descriptor for the field in question. */
+ private final @Nonnull FieldDescriptor field;
+
+ /**
+ * Setup a new field pointer - generally kept private and resolved via {@link ModelMetadata}.
+ *
+ * @param base Base model type where {@code path} begins.
+ * @param path Dotted-path to the field in question.
+ * @param field Field descriptor for the field in question.
+ */
+ FieldPointer(@Nonnull Descriptor base,
+ @Nonnull String path,
+ @Nonnull FieldDescriptor field) {
+ this.path = path;
+ this.base = base;
+ this.field = field;
+ this.depth = CharMatcher.is('.').countIn(path);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ FieldPointer that = (FieldPointer) o;
+ return this.depth.equals(that.depth)
+ && com.google.common.base.Objects.equal(path, that.path)
+ && com.google.common.base.Objects.equal(base.getFullName(), that.base.getFullName());
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public int hashCode() {
+ return com.google.common.base.Objects
+ .hashCode(path, base.getFullName());
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public int compareTo(@Nonnull FieldPointer other) {
+ return this.path.compareTo(other.path);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public String toString() {
+ return "FieldPointer{" +
+ "base='" + base.getName() + '\'' +
+ ", path=" + path +
+ '}';
+ }
+
+ /** @return Path to the specified field. */
+ public @Nonnull String getPath() {
+ return path;
+ }
+
+ /** @return Simple proto name for the field. */
+ public @Nonnull String getName() {
+ return field.getName();
+ }
+
+ /** @return Simple JSON name for the field. */
+ public @Nonnull String getJsonName() {
+ return field.getJsonName();
+ }
+
+ /** @return Base model type where the specified path begins. */
+ public @Nonnull Descriptor getBase() {
+ return base;
+ }
+
+ /** @return Descriptor for the targeted field. */
+ public @Nonnull FieldDescriptor getField() {
+ return field;
+ }
+ }
+
+ /** Utility class that holds a {@link FieldPointer} and matching field value. */
+ public final static class FieldContainer implements Serializable, Comparable> {
+ /** Pointer to the field which holds this value. */
+ private final @Nonnull FieldPointer field;
+
+ /** Value for the field, if found. */
+ private final @Nonnull Optional value;
+
+ /**
+ * Setup a new field pointer - generally kept private and resolved via {@link ModelMetadata}.
+ *
+ * @param field Pointer to the field that holds this value.
+ * @param value Value extracted for the specified field.
+ */
+ FieldContainer(@Nonnull FieldPointer field,
+ @Nonnull Optional value) {
+ this.field = field;
+ this.value = value;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ FieldContainer> that = (FieldContainer>) o;
+ return field.equals(that.field)
+ && (value.isPresent() == that.value.isPresent())
+ && (value.equals(that.value));
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public int hashCode() {
+ return com.google.common.base.Objects
+ .hashCode(field, value);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public int compareTo(@Nonnull FieldContainer other) {
+ return this.field.compareTo(other.field);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public String toString() {
+ return "FieldContainer{" +
+ "" + field.base.getName() +
+ ", path=" + field.path +
+ ", hasValue=" + value.isPresent() +
+ '}';
+ }
+
+ /** Pointer to the field holding the specified value. */
+ public @Nonnull FieldPointer getField() {
+ return field;
+ }
+
+ /** Value associated with the specified field, or {@link Optional#empty()} if the field has no initialized value. */
+ public @Nonnull Optional getValue() {
+ return value;
+ }
+ }
+
+ // -- Internals -- //
+
+ /**
+ * Resolve a model field within the tree of {@code descriptor}, where an instance of annotation data of type
+ * {@code ext} is affixed to the field. If the (optional) provided {@code filter} function agrees, the item is
+ * returned to the caller in a {@link FieldPointer}.
+ *
+ * If the field cannot be found, no exception is raised, and {@link Optional#empty()} is returned. The search may
+ * also be conducted in {@code recursive} mode, which proceeds to examine sub-messages if the requested field cannot
+ * be located on the top-level {@code descriptor}.
+ *
+ * @param descriptor Descriptor where we should begin our search for the desired property.
+ * @param ext Extension the field is annotated with. Only fields annotated with this extension are eligible.
+ * @param recursive Whether to search recursively, or just on the top-level instance.
+ * @param filter Filter function to dispatch per-found-field. The first one to return {@code true} wins.
+ * @param stack Property stack, filled out as we recursively descend.
+ * @param Generic type of the model extension object.
+ * @return Optional, containing either a resolved {@link FieldPointer}, or empty.
+ */
+ @VisibleForTesting
+ static @Nonnull Optional resolveAnnotatedField(@Nonnull Descriptor descriptor,
+ @Nonnull GeneratedExtension ext,
+ @Nonnull Boolean recursive,
+ @Nonnull Optional> filter,
+ @Nonnull String stack) {
+ Objects.requireNonNull(descriptor, "Cannot resolve field from `null` descriptor.");
+ Objects.requireNonNull(ext, "Cannot resolve field from `null` descriptor.");
+ Objects.requireNonNull(recursive, "Cannot pass `null` for `recursive` flag.");
+ Objects.requireNonNull(filter, "Pass empty optional, not `null`, for field filter parameter.");
+ Objects.requireNonNull(stack, "Recursive property stack should not be `null`.");
+
+ for (FieldDescriptor field : descriptor.getFields()) {
+ if (field.getOptions().hasExtension(ext)) {
+ var extension = field.getOptions().getExtension(ext);
+ if (!filter.isPresent() || filter.get().apply(extension))
+ return Optional.of(new FieldPointer(
+ descriptor,
+ stack.isEmpty() ? field.getName() : stack + "." + field.getName(),
+ field));
+ }
+
+ // should we recurse?
+ if (recursive && field.getType() == FieldDescriptor.Type.MESSAGE) {
+ // if so, append the current prop to the stack and give it a shot
+ //noinspection ConstantConditions
+ var sub = resolveAnnotatedField(
+ field.getMessageType(),
+ ext,
+ recursive,
+ filter,
+ stack.isEmpty() ? field.getName() : stack + "." + field.getName());
+ if (sub.isPresent())
+ return sub;
+ }
+ }
+ return Optional.empty();
+ }
+
+ /**
+ * Resolve a model field within the tree of {@code descriptor}, identified by the specified deep {@code path}. If the
+ * (optional) provided {@code filter} function agrees, the item is returned to the caller in a {@link FieldPointer}.
+ *
+ * If the field cannot be found, no exception is raised, and {@link Optional#empty()} is returned. The search may
+ * also be conducted in {@code recursive} mode, which proceeds to examine sub-messages if the requested field cannot
+ * be located on the top-level {@code descriptor}.
+ *
+ * @param original Top-level descriptor where we should begin our search for the desired property.
+ * @param descriptor Current-level descriptor we are scanning (for recursion).
+ * @param path Deep dotted-path to the field we are being asked to resolve.
+ * @param remaining Remaining segments of {@code path} to follow/compute.
+ * @return Optional, containing either a resolved {@link FieldPointer}, or empty.
+ * @throws IllegalArgumentException If the provided path is syntactically invalid.
+ * @throws IllegalArgumentException If an attempt is made to access a property on a primitive field.
+ */
+ @VisibleForTesting
+ static @Nonnull Optional resolveArbitraryField(@Nonnull Descriptor original,
+ @Nonnull Descriptor descriptor,
+ @Nonnull String path,
+ @Nonnull String remaining) {
+ Objects.requireNonNull(original, "Cannot resolve field from `null` descriptor.");
+ Objects.requireNonNull(descriptor, "Cannot resolve field from `null` descriptor.");
+ Objects.requireNonNull(path, "Cannot resolve field from `null` path.");
+ Objects.requireNonNull(remaining, "Recursive remaining stack should not be `null`.");
+
+ if (remaining.startsWith(".") || remaining.endsWith(".") || remaining.contains(" "))
+ throw new IllegalArgumentException(String.format("Invalid deep-field path '%s'.", path));
+ if (!remaining.contains(".")) {
+ // maybe we're lucky and don't need to recurse
+ for (FieldDescriptor field : descriptor.getFields()) {
+ if (remaining.equals(field.getName())) {
+ return Optional.of(new FieldPointer(
+ original,
+ path,
+ field));
+ }
+ }
+ } else {
+ // need to recurse
+ String segment = remaining.substring(0, remaining.indexOf("."));
+ var messageField = descriptor.findFieldByName(segment);
+ if (messageField != null && messageField.getType() == FieldDescriptor.Type.MESSAGE) {
+ // found the next tier
+ var subType = messageField.getMessageType();
+ String newRemainder = remaining.substring(remaining.indexOf(".") + 1);
+ return resolveArbitraryField(
+ original,
+ subType,
+ path,
+ newRemainder);
+ } else if (messageField != null) {
+ // it's not a message :(
+ throw new IllegalArgumentException(
+ String.format(
+ "Cannot access sub-field of primitive leaf field, at '%s' on model type '%s'.",
+ path,
+ original.getName()));
+ }
+ }
+ // property not found
+ return Optional.empty();
+ }
+
+ /**
+ * Splice an arbitrary field {@code value} at {@code path} into the provided {@code builder}. If an empty value
+ * ({@link Optional#empty()}) is provided, clear any existing value residing at {@code path}. In all cases, mutate the
+ * existing {@code builder} rather than returning a copy.
+ *
+ * @param original Top-level builder, which we hand back at the end.
+ * @param builder Builder to splice the value into and return.
+ * @param path Path at which the target property resides.
+ * @param value Value which we should set the target property to, or clear (if passed {@link Optional#empty()}).
+ * @param remaining Remaining properties to recurse down to. Internal use only.
+ * @param Builder type which we are operating on for this splice.
+ * @param Value type which we are operating with for this splice.
+ * @return Provided {@code builder} after being mutated with the specified property value.
+ */
+ @VisibleForTesting
+ static Builder spliceArbitraryField(@Nonnull Message.Builder original,
+ @Nonnull Message.Builder builder,
+ @Nonnull String path,
+ @Nonnull Optional value,
+ @Nonnull String remaining) {
+ Objects.requireNonNull(builder, "Cannot splice field into `null` builder.");
+ Objects.requireNonNull(path, "Cannot resolve field from `null` path.");
+ Objects.requireNonNull(remaining, "Recursive remaining stack should not be `null`.");
+ Objects.requireNonNull(value, "Pass an empty optional, not `null`, for value.");
+
+ var descriptor = builder.getDescriptorForType();
+ if (!remaining.isEmpty() && !remaining.contains(".")) {
+ // thankfully, no need to recurse
+ var field = Objects.requireNonNull(descriptor.findFieldByName(remaining));
+ if (value.isPresent()) {
+ try {
+ builder.setField(field, value.get());
+ } catch (IllegalArgumentException iae) {
+ throw new ClassCastException(String.format(
+ "Failed to set field '%s': value type mismatch.",
+ path));
+ }
+ } else {
+ builder.clearField(field);
+ }
+ //noinspection unchecked
+ return (Builder)original;
+ } else {
+ // we have a sub-message that is initialized, so we need to recurse.
+ String segment = remaining.substring(0, remaining.indexOf("."));
+ String newRemainder = remaining.substring(remaining.indexOf(".") + 1);
+ return spliceArbitraryField(
+ original,
+ builder.getFieldBuilder(Objects.requireNonNull(descriptor.findFieldByName(segment))),
+ path,
+ value,
+ newRemainder);
+ }
+ }
+
+ @VisibleForTesting
+ static @Nonnull FieldContainer pluckFieldRecursive(@Nonnull Message original,
+ @Nonnull Message instance,
+ @Nonnull String path,
+ @Nonnull String remaining) {
+ Objects.requireNonNull(original, "Cannot resolve field from `null` descriptor.");
+ Objects.requireNonNull(instance, "Cannot resolve field from `null` instance.");
+ Objects.requireNonNull(path, "Cannot resolve field from `null` path.");
+ Objects.requireNonNull(remaining, "Recursive remaining stack should not be `null`.");
+
+ var descriptor = instance.getDescriptorForType();
+ if (remaining.startsWith(".") || remaining.endsWith(".") || remaining.contains(" ")) {
+ throw new IllegalArgumentException("Cannot begin or end model property path with `.`");
+ } else if (!remaining.isEmpty() && !remaining.contains(".")) {
+ // we got lucky, no need to recurse
+ var field = descriptor.findFieldByName(remaining);
+ if (field != null) {
+ if (field.getType() == FieldDescriptor.Type.MESSAGE) {
+ Message modelInstance = (Message)instance.getField(field);
+ //noinspection unchecked
+ return new FieldContainer<>(
+ new FieldPointer(descriptor, path, field),
+ !modelInstance.getAllFields().isEmpty() ? Optional.of((V)modelInstance) : Optional.empty());
+ } else {
+ //noinspection unchecked
+ return new FieldContainer<>(
+ new FieldPointer(descriptor, path, field),
+ Optional.of((V) instance.getField(field)));
+ }
+ }
+ } else {
+ // find next segment
+ String segment = remaining.substring(0, remaining.indexOf("."));
+ var messageField = descriptor.findFieldByName(segment);
+ if (messageField != null && messageField.getType() == FieldDescriptor.Type.MESSAGE) {
+ if (!instance.hasField(messageField)) {
+ // there is a sub-message that is not initialized. so the field is technically empty.
+ return new FieldContainer<>(
+ new FieldPointer(original.getDescriptorForType(), path, messageField),
+ Optional.empty());
+ } else {
+ // we have a sub-message that is initialized, so we need to recurse.
+ String newRemainder = remaining.substring(remaining.indexOf(".") + 1);
+ return pluckFieldRecursive(
+ original,
+ (Message)instance.getField(messageField),
+ path,
+ newRemainder);
+ }
+ } else if (messageField != null) {
+ // it's not a message :(
+ throw new IllegalArgumentException(
+ String.format(
+ "Cannot access sub-field of primitive leaf field, at '%s' on model type '%s'.",
+ path,
+ original.getDescriptorForType().getName()));
+ }
+ }
+ throw new IllegalArgumentException(
+ String.format("Failed to locate field '%s' on model type '%s'.", path, descriptor.getName()));
+ }
+
+ // -- Metadata: Qualified Names -- //
+
+ /**
+ * Resolve the fully-qualified type path, or name, for the provided datamodel type descriptor. This is essentially
+ * syntactic sugar.
+ *
+ * @param descriptor Model descriptor to resolve a fully-qualified name for.
+ * @return Fully-qualified model type name.
+ */
+ public static @Nonnull String fullyQualifiedName(@Nonnull Descriptor descriptor) {
+ return descriptor.getFullName();
+ }
+
+ /**
+ * Resolve the fully-qualified type path, or name, for the provided datamodel instance. This method is essentially
+ * syntactic sugar for accessing the model instance's descriptor, and then grabbing the fully-qualified name.
+ *
+ * @param model Model instance to resolve a fully-qualified name for.
+ * @return Fully-qualified model type name.
+ */
+ public static @Nonnull String fullyQualifiedName(@Nonnull Message model) {
+ return fullyQualifiedName(model.getDescriptorForType());
+ }
+
+ // -- Metadata: Role Annotations -- //
+
+ /**
+ * Resolve the general type for a given datamodel type descriptor. The type is either set by default, or set by an
+ * explicit annotation affixed to the protocol buffer definition that backs the model.
+ *
+ * {@link DatapointType} annotations describe the general use case for a given model definition. Is it a database
+ * model? A wire model? {@link DatapointType} will tell you.
+ *
+ * @param descriptor Model descriptor to retrieve a type for.
+ * @return Type of the provided datamodel.
+ */
+ public static @Nonnull DatapointType role(@Nonnull Descriptor descriptor) {
+ var ext = modelAnnotation(descriptor, Datamodel.role, false);
+ if (ext.isPresent())
+ return ext.get();
+ return DatapointType.OBJECT;
+ }
+
+ /**
+ * Resolve the general type for a given datamodel. The type is either set by default, or set by an explicit annotation
+ * affixed to the protocol buffer definition that backs the model.
+ *
+ * {@link DatapointType} annotations describe the general use case for a given model definition. Is it a database
+ * model? A wire model? {@link DatapointType} will tell you.
+ *
+ * @param model Model to retrieve a type for.
+ * @return Type of the provided datamodel.
+ */
+ public static @Nonnull DatapointType role(@Nonnull Message model) {
+ Objects.requireNonNull(model, "Cannot resolve type for `null` model.");
+ return role(model.getDescriptorForType());
+ }
+
+ /**
+ * Enforce that a particular datamodel type matches any of the provided {@link DatapointType} annotations.
+ *
+ * {@link DatapointType} annotations describe the general use case for a given model definition. Is it a database
+ * model? A wire model? {@link DatapointType} will tell you, and this model will sweetly enforce membership amongst
+ * a set of types for you.
+ *
+ * @param model Model to validate against the provided set of types.
+ * @param type Type to enforce for the provided model.
+ * @return Whether the provided model is a member-of (annotated-by) any of the provided {@code types}.
+ */
+ public static boolean matchRole(@Nonnull Message model, @Nonnull DatapointType type) {
+ Objects.requireNonNull(type, "Cannot match `null` model type.");
+ return type.equals(role(model));
+ }
+
+ /**
+ * Enforce that a particular datamodel schema {@code descriptor} matches any of the provided
+ * {@link DatapointType} annotations.
+ *
+ * {@link DatapointType} annotations describe the general use case for a given model definition. Is it a database
+ * model? A wire model? {@link DatapointType} will tell you, and this model will sweetly enforce membership amongst
+ * a set of types for you.
+ *
+ * @param descriptor Schema descriptor to validate against the provided set of types.
+ * @param type Type to enforce for the provided model.
+ * @return Whether the provided model is a member-of (annotated-by) any of the provided {@code types}.
+ */
+ public static boolean matchRole(@Nonnull Descriptor descriptor, @Nonnull DatapointType type) {
+ Objects.requireNonNull(type, "Cannot match `null` descriptor type.");
+ return type.equals(role(descriptor));
+ }
+
+ /**
+ * Check that a particular datamodel type matches any of the provided {@link DatapointType} annotations.
+ *
+ * {@link DatapointType} annotations describe the general use case for a given model definition. Is it a database
+ * model? A wire model? {@link DatapointType} will tell you, and this model will sweetly enforce membership amongst
+ * a set of types for you.
+ *
+ * @param model Model to validate against the provided set of types.
+ * @param types Types to validate the model against. If any of the provided types match, the check passes.
+ * @return Whether the provided model is a member-of (annotated-by) any of the provided {@code types}.
+ */
+ public static boolean matchAnyRole(@Nonnull Message model, @Nonnull DatapointType ...types) {
+ Objects.requireNonNull(types, "Cannot match `null` model types.");
+ return EnumSet.copyOf(Arrays.asList(types)).contains(role(model));
+ }
+
+ /**
+ * Check that a particular schema {@code descriptor} matches any of the provided {@link DatapointType}
+ * annotations.
+ *
+ * {@link DatapointType} annotations describe the general use case for a given model definition. Is it a database
+ * model? A wire model? {@link DatapointType} will tell you, and this model will sweetly enforce membership amongst
+ * a set of types for you.
+ *
+ * @param descriptor Schema descriptor to validate against the provided set of types.
+ * @param types Types to validate the model against. If any of the provided types match, the check passes.
+ * @return Whether the provided model is a member-of (annotated-by) any of the provided {@code types}.
+ */
+ public static boolean matchAnyRole(@Nonnull Descriptor descriptor, @Nonnull DatapointType ...types) {
+ Objects.requireNonNull(types, "Cannot match `null` model types.");
+ return EnumSet.copyOf(Arrays.asList(types)).contains(role(descriptor));
+ }
+
+ /**
+ * Enforce that a particular {@code model} instance matches the provided {@link DatapointType} annotation.
+ *
+ * {@link DatapointType} annotations describe the general use case for a given model definition. Is it a database
+ * model? A wire model? {@link DatapointType} will tell you, and this model will sweetly enforce membership amongst
+ * a set of types for you.
+ *
+ * @param model Model to validate against the provided set of types.
+ * @param type Types to validate the model against. If any of the provided types match, the check passes.
+ * @throws InvalidModelType If the specified model's type is not included in {@code types}.
+ */
+ public static void enforceRole(@Nonnull Message model, @Nonnull DatapointType type) throws InvalidModelType {
+ if (!matchRole(model, type)) throw InvalidModelType.from(model, EnumSet.of(type));
+ }
+
+ /**
+ * Enforce that a particular datamodel schema {@code descriptor} matches the provided {@link DatapointType}
+ * annotation.
+ *
+ * {@link DatapointType} annotations describe the general use case for a given model definition. Is it a database
+ * model? A wire model? {@link DatapointType} will tell you, and this model will sweetly enforce membership amongst
+ * a set of types for you.
+ *
+ * @param descriptor Descriptor to validate against the provided set of types.
+ * @param type Types to validate the model against. If any of the provided types match, the check passes.
+ * @throws InvalidModelType If the specified model's type is not included in {@code types}.
+ */
+ public static void enforceRole(@Nonnull Descriptor descriptor, @Nonnull DatapointType type) throws InvalidModelType {
+ if (!matchRole(descriptor, type)) throw InvalidModelType.from(descriptor, EnumSet.of(type));
+ }
+
+ /**
+ * Enforce that a particular datamodel type matches any of the provided {@link DatapointType}
+ * annotations.
+ *
+ * {@link DatapointType} annotations describe the general use case for a given model definition. Is it a database
+ * model? A wire model? {@link DatapointType} will tell you, and this model will sweetly enforce membership amongst
+ * a set of types for you.
+ *
+ * @param model Model to validate against the provided set of types.
+ * @param types Types to validate the model against. If any of the provided types match, the check passes.
+ * @throws InvalidModelType If the specified model's type is not included in {@code types}.
+ */
+ public static void enforceAnyRole(@Nonnull Message model, @Nonnull DatapointType ...types) throws InvalidModelType {
+ if (!matchAnyRole(model, types)) throw InvalidModelType.from(model, EnumSet.copyOf(Arrays.asList(types)));
+ }
+
+ /**
+ * Enforce that a particular schema {@code descriptor} matches any of the provided {@link DatapointType}
+ * annotations.
+ *
+ * {@link DatapointType} annotations describe the general use case for a given model definition. Is it a database
+ * model? A wire model? {@link DatapointType} will tell you, and this model will sweetly enforce membership amongst
+ * a set of types for you.
+ *
+ * @param descriptor Schema descriptor to validate against the provided set of types.
+ * @param types Types to validate the model against. If any of the provided types match, the check passes.
+ * @throws InvalidModelType If the specified model's type is not included in {@code types}.
+ */
+ public static void enforceAnyRole(@Nonnull Descriptor descriptor,
+ @Nonnull DatapointType ...types) throws InvalidModelType {
+ if (!matchAnyRole(descriptor, types)) throw InvalidModelType.from(descriptor, EnumSet.copyOf(Arrays.asList(types)));
+ }
+
+ // -- Metadata: Field Resolution -- //
+
+ /**
+ * Resolve an arbitrary field pointer from the provided model {@code instance}, specified by the given {@code path} to
+ * the property. If the property cannot be found, {@link Optional#empty()} is returned.
+ *
+ * This method is safe , in that, unlike other util methods for model metadata, it will not throw if the
+ * provided {@code path} is invalid.
+ *
+ * @param instance Model instance on which to resolve the specified field.
+ * @param path Dotted deep-path to the desired field.
+ * @return Resolved field pointer for the requested field, or {@link Optional#empty()}.
+ */
+ public static @Nonnull Optional resolveField(@Nonnull Message instance, @Nonnull String path) {
+ return resolveField(instance.getDescriptorForType(), path);
+ }
+
+ /**
+ * Resolve an arbitrary field pointer from the provided model type {@code escriptor}, specified by the given
+ * {@code path} to the property. If the property cannot be found, {@link Optional#empty()} is returned.
+ *
+ * This method is safe , in that, unlike other util methods for model metadata, it will not throw if the
+ * provided {@code path} is invalid.
+ *
+ * @param descriptor Model type descriptor on which to resolve the specified field.
+ * @param path Dotted deep-path to the desired field.
+ * @return Resolved field pointer for the requested field, or {@link Optional#empty()}.
+ */
+ public static @Nonnull Optional resolveField(@Nonnull Descriptor descriptor, @Nonnull String path) {
+ return resolveArbitraryField(descriptor, descriptor, path, path);
+ }
+
+ // -- Metadata: Model Annotations -- //
+
+ /**
+ * Retrieve a model-level annotation, from {@code instance}, structured by {@code ext}. If no instance of the
+ * requested model annotation can be found, {@link Optional#empty()} is returned. Search recursively is supported as
+ * well, which descends the search to sub-messages to search for the desired annotation.
+ *
+ * @param instance Message instance to scan for the specified annotation.
+ * @param ext Extension to fetch from the subject model, or any sub-model (if {@code recursive} is {@code true}).
+ * @param recursive Whether to search recursively for the desired extension.
+ * @param Generic type of extension we are looking for.
+ * @return Optional, either {@link Optional#empty()}, or wrapping the found extension data instance.
+ */
+ public static @Nonnull Optional modelAnnotation(@Nonnull Message instance,
+ @Nonnull GeneratedExtension ext,
+ @Nonnull Boolean recursive) {
+ return modelAnnotation(instance.getDescriptorForType(), ext, recursive);
+ }
+
+ /**
+ * Retrieve a model-level annotation, from the provided model schema {@code descriptor}, structured by {@code ext}. If
+ * no instance of the requested model annotation can be found, {@link Optional#empty()} is returned. Search
+ * recursively is supported as well, which descends the search to sub-messages to search for the desired annotation.
+ *
+ * @param descriptor Schema descriptor for a model type.
+ * @param ext Extension to fetch from the subject model, or any sub-model (if {@code recursive} is {@code true}).
+ * @param recursive Whether to search recursively for the desired extension.
+ * @param Generic type of extension we are looking for.
+ * @return Optional, either {@link Optional#empty()}, or wrapping the found extension data instance.
+ */
+ public static @Nonnull Optional modelAnnotation(@Nonnull Descriptor descriptor,
+ @Nonnull GeneratedExtension ext,
+ @Nonnull Boolean recursive) {
+ Objects.requireNonNull(descriptor, "Cannot resolve type for `null` descriptor.");
+ if (descriptor.getOptions().hasExtension(ext))
+ return Optional.of(descriptor.getOptions().getExtension(ext));
+ if (recursive) {
+ // loop through fields. gather any sub-messages, and check procedurally if any of them match. if we find one that
+ // does, we return immediately.
+ for (FieldDescriptor field : descriptor.getFields()) {
+ if (field.getType() == FieldDescriptor.Type.MESSAGE) {
+ //noinspection ConstantConditions
+ var subresult = modelAnnotation(field.getMessageType(), ext, recursive);
+ if (subresult.isPresent())
+ return subresult;
+ }
+ }
+ }
+ return Optional.empty();
+ }
+
+ // -- Metadata: Field Annotations -- //
+
+ /**
+ * Resolve a {@link FieldPointer} within the scope of {@code instance}, that holds values for the specified metadata
+ * annotation {@code ext}. By default, this method searches recursively.
+ *
+ * @see #annotatedField(Descriptor, GeneratedExtension) variant if a descriptor is on-hand
+ * @see #annotatedField(Descriptor, GeneratedExtension, Boolean, Optional) full-spec variant.
+ * @param instance Model instance to search for the specified annotated field on.
+ * @param ext Extension (annotation) which should be affixed to the field we are searching for.
+ * @param Extension generic type.
+ * @return Optional-wrapped field pointer, or {@link Optional#empty()}.
+ */
+ public static @Nonnull Optional annotatedField(@Nonnull Message instance,
+ @Nonnull GeneratedExtension ext) {
+ return annotatedField(instance, ext, true);
+ }
+
+ /**
+ * Resolve a {@link FieldPointer} within the scope of {@code instance}, that holds values for the specified metadata
+ * annotation {@code ext}.
+ *
+ * This method variant also allows specifying a recursive flag, which, if specified, causes the search to
+ * proceed to sub-models (recursively) until a matching field is found. If recursive is passed as {@code false}
+ * then the search will only occur at the top-level of {@code instance}.
+ *
+ * @see #annotatedField(Message, GeneratedExtension, Boolean, Optional) Variant that supports a filter
+ * @see #annotatedField(Descriptor, GeneratedExtension, Boolean, Optional) full-spec variant.
+ * @param instance Model instance to search for the specified annotated field on.
+ * @param ext Extension (annotation) which should be affixed to the field we are searching for.
+ * @param recursive Whether to conduct this search recursively, or just at the top-level.
+ * @param Extension generic type.
+ * @return Optional-wrapped field pointer, or {@link Optional#empty()}.
+ */
+ public static @Nonnull Optional annotatedField(@Nonnull Message instance,
+ @Nonnull GeneratedExtension ext,
+ @Nonnull Boolean recursive) {
+ return annotatedField(instance, ext, recursive, Optional.empty());
+ }
+
+ /**
+ * Resolve a {@link FieldPointer} within the scope of {@code instance}, that holds values for the specified metadata
+ * annotation {@code ext}.
+ *
+ * This method variant also allows specifying a filter , which will be run for each property encountered with
+ * the annotation present. If the filter returns {@code true}, the field will be selected, otherwise, the search
+ * continues until all properties are exhausted (depending on {@code recursive}).
+ *
+ * @param instance Model instance to search for the specified annotated field on.
+ * @param ext Extension (annotation) which should be affixed to the field we are searching for.
+ * @param recursive Whether to conduct this search recursively, or just at the top-level.
+ * @param Extension generic type.
+ * @return Optional-wrapped field pointer, or {@link Optional#empty()}.
+ */
+ public static @Nonnull Optional annotatedField(@Nonnull Message instance,
+ @Nonnull GeneratedExtension ext,
+ @Nonnull Boolean recursive,
+ @Nonnull Optional> filter) {
+ return annotatedField(instance.getDescriptorForType(), ext, recursive, filter);
+ }
+
+ /**
+ * Resolve a {@link FieldPointer} within the scope of the provided model {@code descriptor}, that holds values for the
+ * specified metadata annotation {@code ext}. By default, this search occurs recursively, examining all nested sub-
+ * models on the provided instance.
+ *
+ * @param descriptor Model object descriptor to search for the specified annotated field on.
+ * @param ext Extension (annotation) which should be affixed to the field we are searching for.
+ * @param Extension generic type.
+ * @return Optional-wrapped field pointer, or {@link Optional#empty()}.
+ */
+ public static @Nonnull Optional annotatedField(@Nonnull Descriptor descriptor,
+ @Nonnull GeneratedExtension ext) {
+ return annotatedField(descriptor, ext, Optional.empty());
+ }
+
+ /**
+ * Resolve a {@link FieldPointer} within the scope of the provided model {@code descriptor}, that holds values for the
+ * specified metadata annotation {@code ext}. By default, this search occurs recursively, examining all nested sub-
+ * models on the provided instance.
+ *
+ * This method variant also allows specifying a filter , which will be run for each property encountered with
+ * the annotation present. If the filter returns {@code true}, the field will be selected, otherwise, the search
+ * continues until all properties are exhausted (depending on {@code recursive}).
+ *
+ * @param descriptor Model object descriptor to search for the specified annotated field on.
+ * @param ext Extension (annotation) which should be affixed to the field we are searching for.
+ * @param Extension generic type.
+ * @return Optional-wrapped field pointer, or {@link Optional#empty()}.
+ */
+ public static @Nonnull Optional annotatedField(@Nonnull Descriptor descriptor,
+ @Nonnull GeneratedExtension ext,
+ @Nonnull Optional> filter) {
+ return annotatedField(descriptor, ext, true, filter);
+ }
+
+ /**
+ * Resolve a {@link FieldPointer} within the scope of the provided model {@code descriptor}, that holds values for the
+ * specified metadata annotation {@code ext}. Using the {@code recursive} parameter, the invoking developer may opt to
+ * search for the annotated field recursively.
+ *
+ * This method variant also allows specifying a filter , which will be run for each property encountered with
+ * the annotation present. If the filter returns {@code true}, the field will be selected, otherwise, the search
+ * continues until all properties are exhausted (depending on {@code recursive}).
+ *
+ * @param descriptor Model object descriptor to search for the specified annotated field on.
+ * @param ext Extension (annotation) which should be affixed to the field we are searching for.
+ * @param Extension generic type.
+ * @return Optional-wrapped field pointer, or {@link Optional#empty()}.
+ */
+ public static @Nonnull Optional annotatedField(@Nonnull Descriptor descriptor,
+ @Nonnull GeneratedExtension