express-cassandra
Advanced tools
Comparing version 2.6.0 to 2.7.0
@@ -9,2 +9,15 @@ # Changelog | ||
## [2.7.0] - 2021-12-20 | ||
### Added | ||
- Support confirmation for cassandra 4.x | ||
- Support for ES6 based model definition | ||
- Node 14 now officially supported | ||
### Changed | ||
- Removed support for Node version 6 | ||
### Security | ||
- Upgraded package dependencies to resolve vulnerability in dependent packages | ||
## [2.6.0] - 2021-04-16 | ||
@@ -549,3 +562,4 @@ | ||
[Unreleased]: https://github.com/masumsoft/express-cassandra/compare/v2.6.0...master | ||
[Unreleased]: https://github.com/masumsoft/express-cassandra/compare/v2.7.0...master | ||
[2.7.0]: https://github.com/masumsoft/express-cassandra/compare/v2.6.0...v2.7.0 | ||
[2.6.0]: https://github.com/masumsoft/express-cassandra/compare/v2.5.0...v2.6.0 | ||
@@ -552,0 +566,0 @@ [2.5.0]: https://github.com/masumsoft/express-cassandra/compare/v2.4.0...v2.5.0 |
@@ -27,3 +27,3 @@ # Advanced Datatypes and Operations | ||
module.exports = { | ||
export default { | ||
@@ -30,0 +30,0 @@ "fields": { |
@@ -66,3 +66,3 @@ # Datatypes and Utility Functions | ||
```js | ||
module.exports = { | ||
export default { | ||
"fields": { | ||
@@ -69,0 +69,0 @@ "user_id": "bigint", |
@@ -16,3 +16,3 @@ # Elassandra Support (elassandra 5.5.x) | ||
class: 'NetworkTopologyStrategy', | ||
DC1: 1 | ||
datacenter1: 1 | ||
}, | ||
@@ -25,3 +25,3 @@ migration: 'alter', | ||
Elassandra does not work with the `SimpleStrategy` replication class. You can still have a single Elassandra node. The `DC1` parameter is the **case sensitive** name of the _Data Center_ as defined in your `elassandra/conf/cassandra-rackdc.properties` file. You may also have to edit your `elassandra/conf/cassandra-topology.properties` file to match the rack data center declarations. If you did not edit those files, the default is `DC1`. These parameters are used with the [CREATE KEYSPACE](https://docs.datastax.com/en/cql/3.3/cql/cql_reference/cqlCreateKeyspace.html) CQL command. | ||
Elassandra does not work with the `SimpleStrategy` replication class. You can still have a single Elassandra node. The `datacenter1` parameter is the **case sensitive** name of the _Data Center_ as defined in your `elassandra/conf/cassandra-rackdc.properties` file. You may also have to edit your `elassandra/conf/cassandra-topology.properties` file to match the rack data center declarations. If you did not edit those files, the default is `datacenter1`. These parameters are used with the [CREATE KEYSPACE](https://docs.datastax.com/en/cql/3.3/cql/cql_reference/cqlCreateKeyspace.html) CQL command. | ||
@@ -44,3 +44,3 @@ Note that you can optionally provide connection options for elasticsearch in the `clientOptions` like the following. If omitted, then the cassandra `contactPoints` are used as default host addresses with `sniffOnStart: true` as default configuration for the elasticsearch client. | ||
class: 'NetworkTopologyStrategy', | ||
DC1: 1 | ||
datacenter1: 1 | ||
}, | ||
@@ -61,3 +61,3 @@ migration: 'alter', | ||
// User model | ||
module.exports = { | ||
export default { | ||
fields: { | ||
@@ -79,3 +79,3 @@ id: 'varchar', | ||
// User model | ||
module.exports = { | ||
export default { | ||
fields: { | ||
@@ -82,0 +82,0 @@ id: 'varchar', |
@@ -112,3 +112,3 @@ # Querying Data | ||
module.exports = { | ||
export default { | ||
fields: { | ||
@@ -115,0 +115,0 @@ //fields are not shown for clarity |
@@ -15,3 +15,3 @@ # Overview | ||
* supports the latest cassandra 3.x releases | ||
* supports the latest cassandra 4.x and older stable 3.x releases | ||
* support for elassandra index management and search queries | ||
@@ -18,0 +18,0 @@ * support for janusgraph graph management and tinkerpop3 gremlin queries |
@@ -19,2 +19,2 @@ # Installation | ||
Please note that if you use the legacy cassandra 2.x compliant version then please use the corresponding README.md file for that version. The following documentation is for version 3.x and datastax enterprise 5.x only. The materialized view support and several other part of the documentation is strictly applicable for cassandra 3.x / dse 5.x and will not work in earlier versions of cassandra. | ||
Please note that if you use the legacy cassandra 2.x compliant version then please use the corresponding README.md file for that version. The following documentation is for version 4.x/3.x and datastax enterprise 6.x/5.x only. The materialized view support and several other part of the documentation is strictly applicable for cassandra 4.x/3.x or dse 6.x/5.x and will not work in earlier versions of cassandra. |
@@ -65,3 +65,3 @@ # JanusGraph Support (janusgraph 0.2.x) | ||
// User model | ||
module.exports = { | ||
export default { | ||
fields: { | ||
@@ -68,0 +68,0 @@ id: 'int', |
@@ -148,3 +148,3 @@ # Data Management | ||
```js | ||
module.exports = { | ||
export default { | ||
fields: { | ||
@@ -151,0 +151,0 @@ ... |
@@ -77,6 +77,3 @@ # Notes | ||
clientOptions: { | ||
contactPoints: ['127.0.0.1'], | ||
localDataCenter: 'dc1', | ||
keyspace: 'mykeyspace', | ||
queryOptions: {consistency: models.consistencies.one}, | ||
// omitted other options for clarity | ||
graphOptions: { name: 'demo' } | ||
@@ -83,0 +80,0 @@ }, |
@@ -5,3 +5,3 @@ # Schema Reference | ||
module.exports = { | ||
export default { | ||
fields: { | ||
@@ -100,3 +100,3 @@ id: { | ||
- `materialized_views` provides you the ability to define cassandra 3.x materialized views for your model table. You may want to read more about it on the [materialized view documentation](http://docs.datastax.com/en/cql/3.3/cql/cql_using/useCreateMV.html). This is generally suited for querying high cardinality fields. If you need to use select * for the materialized view, you can also use `select: ['*']`. You can also define filters for the data that should be inserted into the materialized view. Only the rows that passes the filter criteria will be available in the materialized view. Note that filters are supported in cassandra 3.10+ only. | ||
- `materialized_views` provides you the ability to define cassandra materialized views for your model table. You may want to read more about it on the [materialized view documentation](http://docs.datastax.com/en/cql/3.3/cql/cql_using/useCreateMV.html). This is generally suited for querying high cardinality fields. If you need to use select * for the materialized view, you can also use `select: ['*']`. You can also define filters for the data that should be inserted into the materialized view. Only the rows that passes the filter criteria will be available in the materialized view. Note that filters are supported in cassandra 3.10+ only. | ||
@@ -103,0 +103,0 @@ - `indexes` are the index of your table. It's always an array of field names. You can read more on the [index documentation](http://docs.datastax.com/en/cql/3.3/cql/cql_using/usePrimaryIndex.html). This is generally suited for querying low cardinality fields, but not as low as boolean fields or fields with very limited number of variants. Very low cardinality fields are not a good separator of large datasets and hence not worthwhile to index. |
@@ -9,3 +9,3 @@ # Usage Tutorial | ||
module.exports = { | ||
export default { | ||
fields:{ | ||
@@ -35,6 +35,7 @@ name : "text", | ||
contactPoints: ['127.0.0.1'], | ||
localDataCenter: 'dc1', | ||
localDataCenter: 'datacenter1', | ||
protocolOptions: { port: 9042 }, | ||
keyspace: 'mykeyspace', | ||
queryOptions: {consistency: models.consistencies.one} | ||
queryOptions: {consistency: models.consistencies.one}, | ||
socketOptions: { readTimeout: 60000 }, | ||
}, | ||
@@ -69,6 +70,7 @@ ormOptions: { | ||
contactPoints: ['127.0.0.1'], | ||
localDataCenter: 'dc1', | ||
localDataCenter: 'datacenter1', | ||
protocolOptions: { port: 9042 }, | ||
keyspace: 'mykeyspace', | ||
queryOptions: {consistency: ExpressCassandra.consistencies.one} | ||
queryOptions: {consistency: ExpressCassandra.consistencies.one}, | ||
socketOptions: { readTimeout: 60000 }, | ||
}, | ||
@@ -187,6 +189,7 @@ ormOptions: { | ||
contactPoints: ['127.0.0.1'], | ||
localDataCenter: 'dc1', | ||
localDataCenter: 'datacenter1', | ||
protocolOptions: { port: 9042 }, | ||
keyspace: 'mykeyspace', | ||
queryOptions: {consistency: models.consistencies.one}, | ||
socketOptions: { readTimeout: 60000 }, | ||
authProvider: new models.driver.auth.PlainTextAuthProvider('my_user', 'my_password') | ||
@@ -193,0 +196,0 @@ } |
@@ -7,3 +7,3 @@ # Validators | ||
module.exports = { | ||
export default { | ||
//... other properties hidden for clarity | ||
@@ -23,3 +23,3 @@ age: { | ||
module.exports = { | ||
export default { | ||
//... other properties hidden for clarity | ||
@@ -41,3 +41,3 @@ age: { | ||
module.exports = { | ||
export default { | ||
//... other properties hidden for clarity | ||
@@ -62,3 +62,3 @@ age: { | ||
module.exports = { | ||
export default { | ||
//... other properties hidden for clarity | ||
@@ -81,3 +81,3 @@ email: { | ||
module.exports = { | ||
export default { | ||
//... other properties hidden for clarity | ||
@@ -98,3 +98,3 @@ email: { | ||
``` | ||
module.exports = { | ||
export default { | ||
//... other properties hidden for clarity | ||
@@ -101,0 +101,0 @@ age: { |
@@ -7,3 +7,3 @@ # Virtual fields | ||
module.exports = { | ||
export default { | ||
"fields": { | ||
@@ -10,0 +10,0 @@ "id" : { "type": "uuid", "default": {"$db_function": "uuid()"} }, |
@@ -56,3 +56,4 @@ 'use strict'; | ||
// eslint-disable-next-line import/no-dynamic-require | ||
var modelSchema = require(fileLocation); | ||
var defaultModelSchema = require(fileLocation); | ||
var modelSchema = defaultModelSchema.default ? defaultModelSchema.default : defaultModelSchema; | ||
CassandraClient.modelInstance[modelName] = CassandraClient.orm.addModel(modelName.toLowerCase(), modelSchema); | ||
@@ -371,2 +372,2 @@ CassandraClient.modelInstance[modelName].syncDB(callback); | ||
module.exports = CassandraClient; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9leHByZXNzQ2Fzc2FuZHJhLmpzIl0sIm5hbWVzIjpbInNlbXZlciIsInJlcXVpcmUiLCJzYXRpc2ZpZXMiLCJwcm9jZXNzIiwidmVyc2lvbiIsIlByb21pc2UiLCJfIiwicGF0aCIsImRzZURyaXZlciIsImUiLCJjcWwiLCJwcm9taXNpZnlBbGwiLCJPUk0iLCJyZWFkZGlycEFzeW5jIiwicHJvbWlzaWZ5IiwiZGVidWciLCJleHBvcnRlciIsImltcG9ydGVyIiwiQ2Fzc2FuZHJhQ2xpZW50IiwiZiIsIm9wdGlvbnMiLCJtb2RlbEluc3RhbmNlIiwib3JtIiwiY2xpZW50T3B0aW9ucyIsIm9ybU9wdGlvbnMiLCJjcmVhdGVDbGllbnQiLCJzZXREaXJlY3RvcnkiLCJkaXJlY3RvcnkiLCJzeW5jTW9kZWxGaWxlVG9EQiIsImZpbGUiLCJjYWxsYmFjayIsIm5hbWUiLCJpbmNsdWRlcyIsIm1vZGVsTmFtZSIsIl90cmFuc2xhdGVGaWxlTmFtZVRvTW9kZWxOYW1lIiwiZmlsZUxvY2F0aW9uIiwiam9pbiIsIm1vZGVsU2NoZW1hIiwiYWRkTW9kZWwiLCJ0b0xvd2VyQ2FzZSIsInN5bmNEQiIsImJpbmQiLCJjYiIsImluaXRBc3luYyIsInRoZW4iLCJyb290IiwiZmlsZUZpbHRlciIsImZpbGVMaXN0Iiwic3luY01vZGVsVGFza3MiLCJzeW5jTW9kZWxGaWxlVG9EQkFzeW5jIiwiZmlsZXMiLCJmb3JFYWNoIiwicHVzaCIsImFsbCIsImNhdGNoIiwiZXJyIiwiaXNBcnJheSIsImxlbmd0aCIsImJpbmRBc3luYyIsInByb3RvdHlwZSIsImluaXQiLCJnZXRUYWJsZUxpc3QiLCJzeXN0ZW1DbGllbnQiLCJnZXRfc3lzdGVtX2NsaWVudCIsImtleXNwYWNlIiwiZ2V0X2tleXNwYWNlX25hbWUiLCJ0YWJsZXMiLCJjb25uZWN0Iiwic3lzdGVtUXVlcnkiLCJleGVjdXRlIiwicmVzdWx0IiwiaSIsInJvd3MiLCJ0YWJsZV9uYW1lIiwic2h1dGRvd24iLCJnZXRUYWJsZUxpc3RBc3luYyIsImV4cG9ydCIsImZpeHR1cmVEaXJlY3RvcnkiLCJlYWNoIiwidGFibGUiLCJwcm9jZXNzVGFibGVFeHBvcnQiLCJleHBvcnRBc3luYyIsImltcG9ydCIsImFyZ3VtZW50cyIsImRlZmF1bHRzIiwiYmF0Y2hTaXplIiwiZGVmYXVsdHNEZWVwIiwicHJvY2Vzc1RhYmxlSW1wb3J0IiwiaW1wb3J0QXN5bmMiLCJsb2FkU2NoZW1hIiwidXVpZCIsInR5cGVzIiwiVXVpZCIsInJhbmRvbSIsInV1aWRGcm9tU3RyaW5nIiwic3RyIiwiZnJvbVN0cmluZyIsInV1aWRGcm9tQnVmZmVyIiwiYnVmIiwidGltZXV1aWQiLCJUaW1lVXVpZCIsIm5vdyIsInRpbWV1dWlkRnJvbURhdGUiLCJkYXRlIiwiZnJvbURhdGUiLCJ0aW1ldXVpZEZyb21TdHJpbmciLCJ0aW1ldXVpZEZyb21CdWZmZXIiLCJtYXhUaW1ldXVpZCIsIm1heCIsIm1pblRpbWV1dWlkIiwibWluIiwiZG9CYXRjaCIsInF1ZXJpZXMiLCJwcmVwYXJlIiwicmFuZG9tTW9kZWwiLCJPYmplY3QiLCJrZXlzIiwiYmVmb3JlSG9va3MiLCJiYXRjaFJlc3VsdCIsImV4ZWN1dGVfYmF0Y2hBc3luYyIsImV4ZWN1dGVfcXVlcnlBc3luYyIsInF1ZXJ5IiwicGFyYW1zIiwicmVzcG9uc2UiLCJhZnRlckhvb2tSZXNwb25zZSIsImFmdGVyX2hvb2siLCJkb0JhdGNoQXN5bmMiLCJjYWxsIiwiZmlsZU5hbWUiLCJzbGljZSIsImxhc3RJbmRleE9mIiwicmVwbGFjZSIsImRlZmluZVByb3BlcnRpZXMiLCJjb25zaXN0ZW5jaWVzIiwiZ2V0IiwiZGF0YXR5cGVzIiwiZHJpdmVyIiwiaW5zdGFuY2UiLCJjbG9zZSIsImNsb3NlQXN5bmMiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOztBQUFBLElBQU1BLFNBQVNDLFFBQVEsUUFBUixDQUFmOztBQUVBLElBQUksQ0FBQ0QsT0FBT0UsU0FBUCxDQUFpQkMsUUFBUUMsT0FB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UUFBMUIsR0FBcUNqRixnQkFBZ0JpRixRQUFyRDtBQUNBakYsZ0JBQWdCeUMsU0FBaEIsQ0FBMEIyQyxnQkFBMUIsR0FBNkNwRixnQkFBZ0JvRixnQkFBN0Q7QUFDQXBGLGdCQUFnQnlDLFNBQWhCLENBQTBCOEMsa0JBQTFCLEdBQStDdkYsZ0JBQWdCdUYsa0JBQS9EO0FBQ0F2RixnQkFBZ0J5QyxTQUFoQixDQUEwQitDLGtCQUExQixHQUErQ3hGLGdCQUFnQndGLGtCQUEvRDtBQUNBeEYsZ0JBQWdCeUMsU0FBaEIsQ0FBMEJnRCxXQUExQixHQUF3Q3pGLGdCQUFnQnlGLFdBQXhEO0FBQ0F6RixnQkFBZ0J5QyxTQUFoQixDQUEwQmtELFdBQTFCLEdBQXdDM0YsZ0JBQWdCMkYsV0FBeEQ7O0FBRUEzRixnQkFBZ0J5QyxTQUFoQixDQUEwQnpCLDZCQUExQixHQUEwRGhCLGdCQUFnQmdCLDZCQUExRTs7QUFFQTBHLE9BQU9DLE9BQVAsR0FBaUIzSCxlQUFqQiIsImZpbGUiOiJleHByZXNzQ2Fzc2FuZHJhLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3Qgc2VtdmVyID0gcmVxdWlyZSgnc2VtdmVyJyk7XG5cbmlmICghc2VtdmVyLnNhdGlzZmllcyhwcm9jZXNzLnZlcnNpb24sICc+PTYuMC4wJykpIHtcbiAgcmVxdWlyZSgnYmFiZWwtcG9seWZpbGwnKTtcbn1cblxuY29uc3QgUHJvbWlzZSA9IHJlcXVpcmUoJ2JsdWViaXJkJyk7XG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5sZXQgZHNlRHJpdmVyO1xudHJ5IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcywgaW1wb3J0L25vLXVucmVzb2x2ZWRcbiAgZHNlRHJpdmVyID0gcmVxdWlyZSgnZHNlLWRyaXZlcicpO1xufSBjYXRjaCAoZSkge1xuICBkc2VEcml2ZXIgPSBudWxsO1xufVxuXG5jb25zdCBjcWwgPSBQcm9taXNlLnByb21pc2lmeUFsbChkc2VEcml2ZXIgfHwgcmVxdWlyZSgnY2Fzc2FuZHJhLWRyaXZlcicpKTtcblxuY29uc3QgT1JNID0gUHJvbWlzZS5wcm9taXNpZnlBbGwocmVxdWlyZSgnLi9vcm0vYXBvbGxvJykpO1xuY29uc3QgcmVhZGRpcnBBc3luYyA9IFByb21pc2UucHJvbWlzaWZ5KHJlcXVpcmUoJ3JlYWRkaXJwJykpO1xuY29uc3QgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdleHByZXNzLWNhc3NhbmRyYScpO1xuXG5jb25zdCBleHBvcnRlciA9IHJlcXVpcmUoJy4vdXRpbHMvZXhwb3J0ZXInKTtcbmNvbnN0IGltcG9ydGVyID0gcmVxdWlyZSgnLi91dGlscy9pbXBvcnRlcicpO1xuXG5jb25zdCBDYXNzYW5kcmFDbGllbnQgPSBmdW5jdGlvbiBmKG9wdGlvbnMpIHtcbiAgdGhpcy5tb2RlbEluc3RhbmNlID0ge307XG4gIHRoaXMub3JtID0gbmV3IE9STShvcHRpb25zLmNsaWVudE9wdGlvbnMsIG9wdGlvbnMub3JtT3B0aW9ucyk7XG4gIHRoaXMub3JtID0gUHJvbWlzZS5wcm9taXNpZnlBbGwodGhpcy5vcm0pO1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LmNyZWF0ZUNsaWVudCA9IChvcHRpb25zKSA9PiAobmV3IENhc3NhbmRyYUNsaWVudChvcHRpb25zKSk7XG5cbkNhc3NhbmRyYUNsaWVudC5zZXREaXJlY3RvcnkgPSAoZGlyZWN0b3J5KSA9PiB7XG4gIENhc3NhbmRyYUNsaWVudC5kaXJlY3RvcnkgPSBkaXJlY3Rvcnk7XG4gIHJldHVybiBDYXNzYW5kcmFDbGllbnQ7XG59O1xuXG5DYXNzYW5kcmFDbGllbnQuc3luY01vZGVsRmlsZVRvREIgPSAoZmlsZSwgY2FsbGJhY2spID0+IHtcbiAgaWYgKCFmaWxlLm5hbWUuaW5jbHVkZXMoJ01vZGVsJykpIHtcbiAgICBjYWxsYmFjaygpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG1vZGVsTmFtZSA9IENhc3NhbmRyYUNsaWVudC5fdHJhbnNsYXRlRmlsZU5hbWVUb01vZGVsTmFtZShmaWxlLm5hbWUpO1xuXG4gIGlmIChtb2RlbE5hbWUpIHtcbiAgICBjb25zdCBmaWxlTG9jYXRpb24gPSBwYXRoLmpvaW4oQ2Fzc2FuZHJhQ2xpZW50LmRpcmVjdG9yeSwgZmlsZS5wYXRoKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWR5bmFtaWMtcmVxdWlyZVxuICAgIGNvbnN0IG1vZGVsU2NoZW1hID0gcmVxdWlyZShmaWxlTG9jYXRpb24pO1xuICAgIENhc3NhbmRyYUNsaWVudC5tb2RlbEluc3RhbmNlW21vZGVsTmFtZV0gPSBDYXNzYW5kcmFDbGllbnQub3JtLmFkZE1vZGVsKG1vZGVsTmFtZS50b0xvd2VyQ2FzZSgpLCBtb2RlbFNjaGVtYSk7XG4gICAgQ2Fzc2FuZHJhQ2xpZW50Lm1vZGVsSW5zdGFuY2VbbW9kZWxOYW1lXS5zeW5jREIoY2FsbGJhY2spO1xuICAgIENhc3NhbmRyYUNsaWVudC5tb2RlbEluc3RhbmNlW21vZGVsTmFtZV0gPSBQcm9taXNlLnByb21pc2lmeUFsbChDYXNzYW5kcmFDbGllbnQubW9kZWxJbnN0YW5jZVttb2RlbE5hbWVdKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjYWxsYmFjaygpO1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LmJpbmQgPSAob3B0aW9ucywgY2IpID0+IHtcbiAgQ2Fzc2FuZHJhQ2xpZW50Lm1vZGVsSW5zdGFuY2UgPSB7fTtcbiAgQ2Fzc2FuZHJhQ2xpZW50Lm9ybSA9IG5ldyBPUk0ob3B0aW9ucy5jbGllbnRPcHRpb25zLCBvcHRpb25zLm9ybU9wdGlvbnMpO1xuICBDYXNzYW5kcmFDbGllbnQub3JtID0gUHJvbWlzZS5wcm9taXNpZnlBbGwoQ2Fzc2FuZHJhQ2xpZW50Lm9ybSk7XG4gIENhc3NhbmRyYUNsaWVudC5vcm0uaW5pdEFzeW5jKClcbiAgICAudGhlbigoKSA9PiByZWFkZGlycEFzeW5jKHtcbiAgICAgIHJvb3Q6IENhc3NhbmRyYUNsaWVudC5kaXJlY3RvcnksXG4gICAgICBmaWxlRmlsdGVyOiBbXG4gICAgICAgICcqLmpzJywgJyouamF2YXNjcmlwdCcsICcqLmpzeCcsICcqLmNvZmZlZScsICcqLmNvZmZlZXNjcmlwdCcsICcqLmljZWQnLFxuICAgICAgICAnKi5zY3JpcHQnLCAnKi50cycsICcqLnRzeCcsICcqLnR5cGVzY3JpcHQnLCAnKi5janN4JywgJyouY28nLCAnKi5qc29uJyxcbiAgICAgICAgJyouanNvbjUnLCAnKi5saXRjb2ZmZWUnLCAnKi5saXRpY2VkJywgJyoubHMnLCAnKi5ub2RlJywgJyoudG9tbCcsICcqLndpc3AnLFxuICAgICAgXSxcbiAgICB9KSlcbiAgICAudGhlbigoZmlsZUxpc3QpID0+IHtcbiAgICAgIGNvbnN0IHN5bmNNb2RlbFRhc2tzID0gW107XG4gICAgICBjb25zdCBzeW5jTW9kZWxGaWxlVG9EQkFzeW5jID0gUHJvbWlzZS5wcm9taXNpZnkoQ2Fzc2FuZHJhQ2xpZW50LnN5bmNNb2RlbEZpbGVUb0RCKTtcbiAgICAgIGZpbGVMaXN0ID0gZmlsZUxpc3QuZmlsZXM7XG4gICAgICBmaWxlTGlzdC5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICAgIHN5bmNNb2RlbFRhc2tzLnB1c2goc3luY01vZGVsRmlsZVRvREJBc3luYyhmaWxlKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChzeW5jTW9kZWxUYXNrcyk7XG4gICAgfSlcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICBpZiAoY2IpIGNiKCk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgaWYgKGNiICYmIF8uaXNBcnJheShlcnIpICYmIGVyci5sZW5ndGggPiAwKSBjYihlcnJbMF0pO1xuICAgICAgZWxzZSBpZiAoY2IpIGNiKGVycik7XG4gICAgfSk7XG59O1xuXG5DYXNzYW5kcmFDbGllbnQuYmluZEFzeW5jID0gUHJvbWlzZS5wcm9taXNpZnkoQ2Fzc2FuZHJhQ2xpZW50LmJpbmQpO1xuXG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiBmKGNhbGxiYWNrKSB7XG4gIHRoaXMub3JtLmluaXQoY2FsbGJhY2spO1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS5pbml0QXN5bmMgPSBQcm9taXNlLnByb21pc2lmeShDYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLmluaXQpO1xuXG5DYXNzYW5kcmFDbGllbnQuZ2V0VGFibGVMaXN0ID0gZnVuY3Rpb24gZihjYWxsYmFjaykge1xuICBjb25zdCBzeXN0ZW1DbGllbnQgPSB0aGlzLm9ybS5nZXRfc3lzdGVtX2NsaWVudCgpO1xuICBjb25zdCBrZXlzcGFjZSA9IHRoaXMub3JtLmdldF9rZXlzcGFjZV9uYW1lKCk7XG4gIGNvbnN0IHRhYmxlcyA9IFtdO1xuXG4gIHN5c3RlbUNsaWVudC5jb25uZWN0KClcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBzeXN0ZW1RdWVyeSA9ICdTRUxFQ1QgdGFibGVfbmFtZSBGUk9NIHN5c3RlbV9zY2hlbWEudGFibGVzIFdIRVJFIGtleXNwYWNlX25hbWUgPSA/JztcbiAgICAgIGRlYnVnKGBGaW5kaW5nIHRhYmxlcyBpbiBrZXlzcGFjZTogJHtrZXlzcGFjZX1gKTtcbiAgICAgIHJldHVybiBzeXN0ZW1DbGllbnQuZXhlY3V0ZShzeXN0ZW1RdWVyeSwgW2tleXNwYWNlXSk7XG4gICAgfSlcbiAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdC5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRhYmxlcy5wdXNoKHJlc3VsdC5yb3dzW2ldLnRhYmxlX25hbWUpO1xuICAgICAgfVxuICAgIH0pXG4gICAgLnRoZW4oKCkgPT4gc3lzdGVtQ2xpZW50LnNodXRkb3duKCkpXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgY2FsbGJhY2sobnVsbCwgdGFibGVzKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgIH0pO1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LmdldFRhYmxlTGlzdEFzeW5jID0gUHJvbWlzZS5wcm9taXNpZnkoQ2Fzc2FuZHJhQ2xpZW50LmdldFRhYmxlTGlzdCk7XG5cbkNhc3NhbmRyYUNsaWVudC5leHBvcnQgPSBmdW5jdGlvbiBmKGZpeHR1cmVEaXJlY3RvcnksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHN5c3RlbUNsaWVudCA9IHRoaXMub3JtLmdldF9zeXN0ZW1fY2xpZW50KCk7XG4gIGNvbnN0IGtleXNwYWNlID0gdGhpcy5vcm0uZ2V0X2tleXNwYWNlX25hbWUoKTtcblxuICBzeXN0ZW1DbGllbnQuY29ubmVjdCgpXG4gICAgLnRoZW4oKCkgPT4gdGhpcy5nZXRUYWJsZUxpc3RBc3luYygpKVxuICAgIC50aGVuKCh0YWJsZXMpID0+XG4gICAgICBQcm9taXNlLmVhY2godGFibGVzLCAodGFibGUpID0+XG4gICAgICAgIGV4cG9ydGVyLnByb2Nlc3NUYWJsZUV4cG9ydChzeXN0ZW1DbGllbnQsIGZpeHR1cmVEaXJlY3RvcnksIGtleXNwYWNlLCB0YWJsZSkpKVxuICAgIC50aGVuKCgpID0+IHN5c3RlbUNsaWVudC5zaHV0ZG93bigpKVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIGRlYnVnKCc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PScpO1xuICAgICAgZGVidWcoYENvbXBsZXRlZCBleHBvcnRpbmcgYWxsIHRhYmxlcyBmcm9tIGtleXNwYWNlOiAke2tleXNwYWNlfWApO1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBkZWJ1ZyhlcnIpO1xuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICB9KTtcbn07XG5cbkNhc3NhbmRyYUNsaWVudC5leHBvcnRBc3luYyA9IFByb21pc2UucHJvbWlzaWZ5KENhc3NhbmRyYUNsaWVudC5leHBvcnQpO1xuXG5DYXNzYW5kcmFDbGllbnQuaW1wb3J0ID0gZnVuY3Rpb24gZihmaXh0dXJlRGlyZWN0b3J5LCBvcHRpb25zLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICBiYXRjaFNpemU6IDEsXG4gIH07XG5cbiAgb3B0aW9ucyA9IF8uZGVmYXVsdHNEZWVwKG9wdGlvbnMsIGRlZmF1bHRzKTtcblxuICBjb25zdCBzeXN0ZW1DbGllbnQgPSB0aGlzLm9ybS5nZXRfc3lzdGVtX2NsaWVudCgpO1xuICBjb25zdCBrZXlzcGFjZSA9IHRoaXMub3JtLmdldF9rZXlzcGFjZV9uYW1lKCk7XG5cbiAgc3lzdGVtQ2xpZW50LmNvbm5lY3QoKVxuICAgIC50aGVuKCgpID0+IHRoaXMuZ2V0VGFibGVMaXN0QXN5bmMoKSlcbiAgICAudGhlbigodGFibGVzKSA9PlxuICAgICAgUHJvbWlzZS5lYWNoKHRhYmxlcywgKHRhYmxlKSA9PlxuICAgICAgICBpbXBvcnRlci5wcm9jZXNzVGFibGVJbXBvcnQoc3lzdGVtQ2xpZW50LCBmaXh0dXJlRGlyZWN0b3J5LCBrZXlzcGFjZSwgdGFibGUsIG9wdGlvbnMuYmF0Y2hTaXplKSkpXG4gICAgLnRoZW4oKCkgPT4gc3lzdGVtQ2xpZW50LnNodXRkb3duKCkpXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgZGVidWcoJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Jyk7XG4gICAgICBkZWJ1ZyhgQ29tcGxldGVkIGltcG9ydGluZyB0byBrZXlzcGFjZTogJHtrZXlzcGFjZX1gKTtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgZGVidWcoZXJyKTtcbiAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgfSk7XG59O1xuXG5DYXNzYW5kcmFDbGllbnQuaW1wb3J0QXN5bmMgPSBQcm9taXNlLnByb21pc2lmeShDYXNzYW5kcmFDbGllbnQuaW1wb3J0KTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS5sb2FkU2NoZW1hID0gZnVuY3Rpb24gZihtb2RlbE5hbWUsIG1vZGVsU2NoZW1hKSB7XG4gIHRoaXMubW9kZWxJbnN0YW5jZVttb2RlbE5hbWVdID0gdGhpcy5vcm0uYWRkTW9kZWwobW9kZWxOYW1lLCBtb2RlbFNjaGVtYSk7XG4gIHRoaXMubW9kZWxJbnN0YW5jZVttb2RlbE5hbWVdID0gUHJvbWlzZS5wcm9taXNpZnlBbGwodGhpcy5tb2RlbEluc3RhbmNlW21vZGVsTmFtZV0pO1xuICByZXR1cm4gdGhpcy5tb2RlbEluc3RhbmNlW21vZGVsTmFtZV07XG59O1xuXG5DYXNzYW5kcmFDbGllbnQudXVpZCA9ICgpID0+IChjcWwudHlwZXMuVXVpZC5yYW5kb20oKSk7XG5cbkNhc3NhbmRyYUNsaWVudC51dWlkRnJvbVN0cmluZyA9IChzdHIpID0+IChjcWwudHlwZXMuVXVpZC5mcm9tU3RyaW5nKHN0cikpO1xuXG5DYXNzYW5kcmFDbGllbnQudXVpZEZyb21CdWZmZXIgPSAoYnVmKSA9PiAobmV3IGNxbC50eXBlcy5VdWlkKGJ1ZikpO1xuXG5DYXNzYW5kcmFDbGllbnQudGltZXV1aWQgPSAoKSA9PiAoY3FsLnR5cGVzLlRpbWVVdWlkLm5vdygpKTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnRpbWV1dWlkRnJvbURhdGUgPSAoZGF0ZSkgPT4gKGNxbC50eXBlcy5UaW1lVXVpZC5mcm9tRGF0ZShkYXRlKSk7XG5cbkNhc3NhbmRyYUNsaWVudC50aW1ldXVpZEZyb21TdHJpbmcgPSAoc3RyKSA9PiAoY3FsLnR5cGVzLlRpbWVVdWlkLmZyb21TdHJpbmcoc3RyKSk7XG5cbkNhc3NhbmRyYUNsaWVudC50aW1ldXVpZEZyb21CdWZmZXIgPSAoYnVmKSA9PiAobmV3IGNxbC50eXBlcy5UaW1lVXVpZChidWYpKTtcblxuQ2Fzc2FuZHJhQ2xpZW50Lm1heFRpbWV1dWlkID0gKGRhdGUpID0+IChjcWwudHlwZXMuVGltZVV1aWQubWF4KGRhdGUpKTtcblxuQ2Fzc2FuZHJhQ2xpZW50Lm1pblRpbWV1dWlkID0gKGRhdGUpID0+IChjcWwudHlwZXMuVGltZVV1aWQubWluKGRhdGUpKTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS5kb0JhdGNoID0gZnVuY3Rpb24gZihxdWVyaWVzLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICBwcmVwYXJlOiB0cnVlLFxuICB9O1xuXG4gIG9wdGlvbnMgPSBfLmRlZmF1bHRzRGVlcChvcHRpb25zLCBkZWZhdWx0cyk7XG5cbiAgY29uc3QgcmFuZG9tTW9kZWwgPSB0aGlzLm1vZGVsSW5zdGFuY2VbT2JqZWN0LmtleXModGhpcy5tb2RlbEluc3RhbmNlKVswXV07XG4gIGNvbnN0IGJlZm9yZUhvb2tzID0gW107XG5cbiAgbGV0IGJhdGNoUmVzdWx0O1xuICBQcm9taXNlLmFsbChiZWZvcmVIb29rcylcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICBpZiAocXVlcmllcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHJldHVybiByYW5kb21Nb2RlbC5leGVjdXRlX2JhdGNoQXN5bmMocXVlcmllcywgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgICBpZiAocXVlcmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGRlYnVnKCdzaW5nbGUgcXVlcnkgcHJvdmlkZWQgZm9yIGJhdGNoIHJlcXVlc3QsIGFwcGx5aW5nIGFzIG5vbiBiYXRjaCBxdWVyeScpO1xuICAgICAgICByZXR1cm4gcmFuZG9tTW9kZWwuZXhlY3V0ZV9xdWVyeUFzeW5jKHF1ZXJpZXNbMF0ucXVlcnksIHF1ZXJpZXNbMF0ucGFyYW1zLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIGRlYnVnKCdubyBxdWVyaWVzIHByb3ZpZGVkIGZvciBiYXRjaCByZXF1ZXN0LCBlbXB0eSBhcnJheSBmb3VuZCwgZG9pbmcgbm90aGluZycpO1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH0pXG4gICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBiYXRjaFJlc3VsdCA9IHJlc3BvbnNlO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBxdWVyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGFmdGVySG9va1Jlc3BvbnNlID0gcXVlcmllc1tpXS5hZnRlcl9ob29rKCk7XG4gICAgICAgIGlmIChhZnRlckhvb2tSZXNwb25zZSAhPT0gdHJ1ZSkge1xuICAgICAgICAgIGNhbGxiYWNrKGFmdGVySG9va1Jlc3BvbnNlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrKG51bGwsIGJhdGNoUmVzdWx0KTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgIH0pO1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS5kb0JhdGNoQXN5bmMgPSBQcm9taXNlLnByb21pc2lmeShDYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLmRvQmF0Y2gpO1xuXG5DYXNzYW5kcmFDbGllbnQuZG9CYXRjaCA9IGZ1bmN0aW9uIGYocXVlcmllcywgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgcHJlcGFyZTogdHJ1ZSxcbiAgfTtcblxuICBvcHRpb25zID0gXy5kZWZhdWx0c0RlZXAob3B0aW9ucywgZGVmYXVsdHMpO1xuXG4gIENhc3NhbmRyYUNsaWVudC5wcm90b3R5cGUuZG9CYXRjaC5jYWxsKENhc3NhbmRyYUNsaWVudCwgcXVlcmllcywgb3B0aW9ucywgY2FsbGJhY2spO1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LmRvQmF0Y2hBc3luYyA9IFByb21pc2UucHJvbWlzaWZ5KENhc3NhbmRyYUNsaWVudC5kb0JhdGNoKTtcblxuQ2Fzc2FuZHJhQ2xpZW50Ll90cmFuc2xhdGVGaWxlTmFtZVRvTW9kZWxOYW1lID0gKGZpbGVOYW1lKSA9PiAoXG4gIGZpbGVOYW1lLnNsaWNlKDAsIGZpbGVOYW1lLmxhc3RJbmRleE9mKCcuJykpLnJlcGxhY2UoJ01vZGVsJywgJycpXG4pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYXNzYW5kcmFDbGllbnQsIHtcbiAgY29uc2lzdGVuY2llczoge1xuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBjcWwudHlwZXMuY29uc2lzdGVuY2llcztcbiAgICB9LFxuICB9LFxuICBkYXRhdHlwZXM6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gY3FsLnR5cGVzO1xuICAgIH0sXG4gIH0sXG4gIGRyaXZlcjoge1xuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBjcWw7XG4gICAgfSxcbiAgfSxcbiAgaW5zdGFuY2U6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gQ2Fzc2FuZHJhQ2xpZW50Lm1vZGVsSW5zdGFuY2U7XG4gICAgfSxcbiAgfSxcbiAgY2xvc2U6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gQ2Fzc2FuZHJhQ2xpZW50Lm9ybS5jbG9zZTtcbiAgICB9LFxuICB9LFxuICBjbG9zZUFzeW5jOiB7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucHJvbWlzaWZ5KENhc3NhbmRyYUNsaWVudC5vcm0uY2xvc2UpO1xuICAgIH0sXG4gIH0sXG59KTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLCB7XG4gIGNvbnNpc3RlbmNpZXM6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gY3FsLnR5cGVzLmNvbnNpc3RlbmNpZXM7XG4gICAgfSxcbiAgfSxcbiAgZGF0YXR5cGVzOiB7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIGNxbC50eXBlcztcbiAgICB9LFxuICB9LFxuICBkcml2ZXI6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gY3FsO1xuICAgIH0sXG4gIH0sXG4gIGluc3RhbmNlOiB7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMubW9kZWxJbnN0YW5jZTtcbiAgICB9LFxuICB9LFxuICBjbG9zZToge1xuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLm9ybS5jbG9zZTtcbiAgICB9LFxuICB9LFxuICBjbG9zZUFzeW5jOiB7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucHJvbWlzaWZ5KHRoaXMub3JtLmNsb3NlKTtcbiAgICB9LFxuICB9LFxufSk7XG5cbkNhc3NhbmRyYUNsaWVudC5wcm90b3R5cGUudXVpZCA9IENhc3NhbmRyYUNsaWVudC51dWlkO1xuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS51dWlkRnJvbVN0cmluZyA9IENhc3NhbmRyYUNsaWVudC51dWlkRnJvbVN0cmluZztcbkNhc3NhbmRyYUNsaWVudC5wcm90b3R5cGUudXVpZEZyb21CdWZmZXIgPSBDYXNzYW5kcmFDbGllbnQudXVpZEZyb21CdWZmZXI7XG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLnRpbWV1dWlkID0gQ2Fzc2FuZHJhQ2xpZW50LnRpbWV1dWlkO1xuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS50aW1ldXVpZEZyb21EYXRlID0gQ2Fzc2FuZHJhQ2xpZW50LnRpbWV1dWlkRnJvbURhdGU7XG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLnRpbWV1dWlkRnJvbVN0cmluZyA9IENhc3NhbmRyYUNsaWVudC50aW1ldXVpZEZyb21TdHJpbmc7XG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLnRpbWV1dWlkRnJvbUJ1ZmZlciA9IENhc3NhbmRyYUNsaWVudC50aW1ldXVpZEZyb21CdWZmZXI7XG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLm1heFRpbWV1dWlkID0gQ2Fzc2FuZHJhQ2xpZW50Lm1heFRpbWV1dWlkO1xuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS5taW5UaW1ldXVpZCA9IENhc3NhbmRyYUNsaWVudC5taW5UaW1ldXVpZDtcblxuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS5fdHJhbnNsYXRlRmlsZU5hbWVUb01vZGVsTmFtZSA9IENhc3NhbmRyYUNsaWVudC5fdHJhbnNsYXRlRmlsZU5hbWVUb01vZGVsTmFtZTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYXNzYW5kcmFDbGllbnQ7XG4iXX0= | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9leHByZXNzQ2Fzc2FuZHJhLmpzIl0sIm5hbWVzIjpbInNlbXZlciIsInJlcXVpcmUiLCJzYXRpc2ZpZXMiLCJwcm9jZXNzIiwidmVyc2lvbiIsIlByb21pc2UiLCJfIiwicGF0aCIsImRzZURyaXZlciIsImUiLCJjcWwiLCJwcm9taXNpZnlBbGwiLCJPUk0iLCJyZWFkZGlycEFzeW5jIiwicHJvbWlzaWZ5IiwiZGVidWciLCJleHBvcnRlciIsImltcG9ydGVyIiwiQ2Fzc2FuZHJhQ2xpZW50IiwiZiIsIm9wdGlvbnMiLCJtb2RlbEluc3RhbmNlIiwib3JtIiwiY2xpZW50T3B0aW9ucyIsIm9ybU9wdGlvbnMiLCJjcmVhdGVDbGllbnQiLCJzZXREaXJlY3RvcnkiLCJkaXJlY3RvcnkiLCJzeW5jTW9kZWxGaWxlVG9EQiIsImZpbGUiLCJjYWxsYmFjayIsIm5hbWUiLCJpbmNsdWRlcyIsIm1vZGVsTmFtZSIsIl90cmFuc2xhdGVGaWxlTmFtZVRvTW9kZWxOYW1lIiwiZmlsZUxvY2F0aW9uIiwiam9pbiIsImRlZmF1bHRNb2RlbFNjaGVtYSIsIm1vZGVsU2NoZW1hIiwiZGVmYXVsdCIsImFkZE1vZGVsIiwidG9Mb3dlckNhc2UiLCJzeW5jREIiLCJiaW5kIiwiY2IiLCJpbml0QXN5bmMiLCJ0aGVuIiwicm9vdCIsImZpbGVGaWx0ZXIiLCJmaWxlTGlzdCIsInN5bmNNb2RlbFRhc2tzIiwic3luY01vZGVsRmlsZVRvREJBc3luYyIsImZpbGVzIiwiZm9yRWFjaCIsInB1c2giLCJhbGwiLCJjYXRjaCIsImVyciIsImlzQXJyYXkiLCJsZW5ndGgiLCJiaW5kQXN5bmMiLCJwcm90b3R5cGUiLCJpbml0IiwiZ2V0VGFibGVMaXN0Iiwic3lzdGVtQ2xpZW50IiwiZ2V0X3N5c3RlbV9jbGllbnQiLCJrZXlzcGFjZSIsImdldF9rZXlzcGFjZV9uYW1lIiwidGFibGVzIiwiY29ubmVjdCIsInN5c3RlbVF1ZXJ5IiwiZXhlY3V0ZSIsInJlc3VsdCIsImkiLCJyb3dzIiwidGFibGVfbmFtZSIsInNodXRkb3duIiwiZ2V0VGFibGVMaXN0QXN5bmMiLCJleHBvcnQiLCJmaXh0dXJlRGlyZWN0b3J5IiwiZWFjaCIsInRhYmxlIiwicHJvY2Vzc1RhYmxlRXhwb3J0IiwiZXhwb3J0QXN5bmMiLCJpbXBvcnQiLCJhcmd1bWVudHMiLCJkZWZhdWx0cyIsImJhdGNoU2l6ZSIsImRlZmF1bHRzRGVlcCIsInByb2Nlc3NUYWJsZUltcG9ydCIsImltcG9ydEFzeW5jIiwibG9hZFNjaGVtYSIsInV1aWQiLCJ0eXBlcyIsIlV1aWQiLCJyYW5kb20iLCJ1dWlkRnJvbVN0cmluZyIsInN0ciIsImZyb21TdHJpbmciLCJ1dWlkRnJvbUJ1ZmZlciIsImJ1ZiIsInRpbWV1dWlkIiwiVGltZVV1aWQiLCJub3ciLCJ0aW1ldXVpZEZyb21EYXRlIiwiZGF0ZSIsImZyb21EYXRlIiwidGltZXV1aWRGcm9tU3RyaW5nIiwidGltZXV1aWRGcm9tQnVmZmVyIiwibWF4VGltZXV1aWQiLCJtYXgiLCJtaW5UaW1ldXVpZCIsIm1pbiIsImRvQmF0Y2giLCJxdWVyaWVzIiwicHJlcGFyZSIsInJhbmRvbU1vZGVsIiwiT2JqZWN0Iiwia2V5cyIsImJlZm9yZUhvb2tzIiwiYmF0Y2hSZXN1bHQiLCJleGVjdXRlX2JhdGNoQXN5bmMiLCJleGVjdXRlX3F1ZXJ5QXN5bmMiLCJxdWVyeSIsInBhcmFtcyIsInJlc3BvbnNlIiwiYWZ0ZXJIb29rUmVzcG9uc2UiLCJhZnRlcl9ob29rIiwiZG9CYXRjaEFzeW5jIiwiY2FsbCIsImZpbGVOYW1lIiwic2xpY2UiLCJsYXN0SW5kZXhPZiIsInJlcGxhY2UiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiY29uc2lzdGVuY2llcyIsImdldCIsImRhdGF0eXBlcyIsImRyaXZlciIsImluc3RhbmNlIiwiY2xvc2UiLCJjbG9zZUFzeW5jIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFNQSxTQUFTQyxRQUFRLFFBQVIsQ0FBZjs7QUFFQSxJQUFJLENB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Z0I4RSxjQUEzRDtBQUNBOUUsZ0JBQWdCMkMsU0FBaEIsQ0FBMEJzQyxjQUExQixHQUEyQ2pGLGdCQUFnQmlGLGNBQTNEO0FBQ0FqRixnQkFBZ0IyQyxTQUFoQixDQUEwQndDLFFBQTFCLEdBQXFDbkYsZ0JBQWdCbUYsUUFBckQ7QUFDQW5GLGdCQUFnQjJDLFNBQWhCLENBQTBCMkMsZ0JBQTFCLEdBQTZDdEYsZ0JBQWdCc0YsZ0JBQTdEO0FBQ0F0RixnQkFBZ0IyQyxTQUFoQixDQUEwQjhDLGtCQUExQixHQUErQ3pGLGdCQUFnQnlGLGtCQUEvRDtBQUNBekYsZ0JBQWdCMkMsU0FBaEIsQ0FBMEIrQyxrQkFBMUIsR0FBK0MxRixnQkFBZ0IwRixrQkFBL0Q7QUFDQTFGLGdCQUFnQjJDLFNBQWhCLENBQTBCZ0QsV0FBMUIsR0FBd0MzRixnQkFBZ0IyRixXQUF4RDtBQUNBM0YsZ0JBQWdCMkMsU0FBaEIsQ0FBMEJrRCxXQUExQixHQUF3QzdGLGdCQUFnQjZGLFdBQXhEOztBQUVBN0YsZ0JBQWdCMkMsU0FBaEIsQ0FBMEIzQiw2QkFBMUIsR0FBMERoQixnQkFBZ0JnQiw2QkFBMUU7O0FBRUE0RyxPQUFPQyxPQUFQLEdBQWlCN0gsZUFBakIiLCJmaWxlIjoiZXhwcmVzc0Nhc3NhbmRyYS5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHNlbXZlciA9IHJlcXVpcmUoJ3NlbXZlcicpO1xuXG5pZiAoIXNlbXZlci5zYXRpc2ZpZXMocHJvY2Vzcy52ZXJzaW9uLCAnPj02LjAuMCcpKSB7XG4gIHJlcXVpcmUoJ2JhYmVsLXBvbHlmaWxsJyk7XG59XG5cbmNvbnN0IFByb21pc2UgPSByZXF1aXJlKCdibHVlYmlyZCcpO1xuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcblxubGV0IGRzZURyaXZlcjtcbnRyeSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMsIGltcG9ydC9uby11bnJlc29sdmVkXG4gIGRzZURyaXZlciA9IHJlcXVpcmUoJ2RzZS1kcml2ZXInKTtcbn0gY2F0Y2ggKGUpIHtcbiAgZHNlRHJpdmVyID0gbnVsbDtcbn1cblxuY29uc3QgY3FsID0gUHJvbWlzZS5wcm9taXNpZnlBbGwoZHNlRHJpdmVyIHx8IHJlcXVpcmUoJ2Nhc3NhbmRyYS1kcml2ZXInKSk7XG5cbmNvbnN0IE9STSA9IFByb21pc2UucHJvbWlzaWZ5QWxsKHJlcXVpcmUoJy4vb3JtL2Fwb2xsbycpKTtcbmNvbnN0IHJlYWRkaXJwQXN5bmMgPSBQcm9taXNlLnByb21pc2lmeShyZXF1aXJlKCdyZWFkZGlycCcpKTtcbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnZXhwcmVzcy1jYXNzYW5kcmEnKTtcblxuY29uc3QgZXhwb3J0ZXIgPSByZXF1aXJlKCcuL3V0aWxzL2V4cG9ydGVyJyk7XG5jb25zdCBpbXBvcnRlciA9IHJlcXVpcmUoJy4vdXRpbHMvaW1wb3J0ZXInKTtcblxuY29uc3QgQ2Fzc2FuZHJhQ2xpZW50ID0gZnVuY3Rpb24gZihvcHRpb25zKSB7XG4gIHRoaXMubW9kZWxJbnN0YW5jZSA9IHt9O1xuICB0aGlzLm9ybSA9IG5ldyBPUk0ob3B0aW9ucy5jbGllbnRPcHRpb25zLCBvcHRpb25zLm9ybU9wdGlvbnMpO1xuICB0aGlzLm9ybSA9IFByb21pc2UucHJvbWlzaWZ5QWxsKHRoaXMub3JtKTtcbn07XG5cbkNhc3NhbmRyYUNsaWVudC5jcmVhdGVDbGllbnQgPSAob3B0aW9ucykgPT4gKG5ldyBDYXNzYW5kcmFDbGllbnQob3B0aW9ucykpO1xuXG5DYXNzYW5kcmFDbGllbnQuc2V0RGlyZWN0b3J5ID0gKGRpcmVjdG9yeSkgPT4ge1xuICBDYXNzYW5kcmFDbGllbnQuZGlyZWN0b3J5ID0gZGlyZWN0b3J5O1xuICByZXR1cm4gQ2Fzc2FuZHJhQ2xpZW50O1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnN5bmNNb2RlbEZpbGVUb0RCID0gKGZpbGUsIGNhbGxiYWNrKSA9PiB7XG4gIGlmICghZmlsZS5uYW1lLmluY2x1ZGVzKCdNb2RlbCcpKSB7XG4gICAgY2FsbGJhY2soKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBtb2RlbE5hbWUgPSBDYXNzYW5kcmFDbGllbnQuX3RyYW5zbGF0ZUZpbGVOYW1lVG9Nb2RlbE5hbWUoZmlsZS5uYW1lKTtcblxuICBpZiAobW9kZWxOYW1lKSB7XG4gICAgY29uc3QgZmlsZUxvY2F0aW9uID0gcGF0aC5qb2luKENhc3NhbmRyYUNsaWVudC5kaXJlY3RvcnksIGZpbGUucGF0aCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1keW5hbWljLXJlcXVpcmVcbiAgICBjb25zdCBkZWZhdWx0TW9kZWxTY2hlbWEgPSByZXF1aXJlKGZpbGVMb2NhdGlvbik7XG4gICAgY29uc3QgbW9kZWxTY2hlbWEgPSBkZWZhdWx0TW9kZWxTY2hlbWEuZGVmYXVsdCA/IGRlZmF1bHRNb2RlbFNjaGVtYS5kZWZhdWx0IDogZGVmYXVsdE1vZGVsU2NoZW1hO1xuICAgIENhc3NhbmRyYUNsaWVudC5tb2RlbEluc3RhbmNlW21vZGVsTmFtZV0gPSBDYXNzYW5kcmFDbGllbnQub3JtLmFkZE1vZGVsKG1vZGVsTmFtZS50b0xvd2VyQ2FzZSgpLCBtb2RlbFNjaGVtYSk7XG4gICAgQ2Fzc2FuZHJhQ2xpZW50Lm1vZGVsSW5zdGFuY2VbbW9kZWxOYW1lXS5zeW5jREIoY2FsbGJhY2spO1xuICAgIENhc3NhbmRyYUNsaWVudC5tb2RlbEluc3RhbmNlW21vZGVsTmFtZV0gPSBQcm9taXNlLnByb21pc2lmeUFsbChDYXNzYW5kcmFDbGllbnQubW9kZWxJbnN0YW5jZVttb2RlbE5hbWVdKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjYWxsYmFjaygpO1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LmJpbmQgPSAob3B0aW9ucywgY2IpID0+IHtcbiAgQ2Fzc2FuZHJhQ2xpZW50Lm1vZGVsSW5zdGFuY2UgPSB7fTtcbiAgQ2Fzc2FuZHJhQ2xpZW50Lm9ybSA9IG5ldyBPUk0ob3B0aW9ucy5jbGllbnRPcHRpb25zLCBvcHRpb25zLm9ybU9wdGlvbnMpO1xuICBDYXNzYW5kcmFDbGllbnQub3JtID0gUHJvbWlzZS5wcm9taXNpZnlBbGwoQ2Fzc2FuZHJhQ2xpZW50Lm9ybSk7XG4gIENhc3NhbmRyYUNsaWVudC5vcm0uaW5pdEFzeW5jKClcbiAgICAudGhlbigoKSA9PiByZWFkZGlycEFzeW5jKHtcbiAgICAgIHJvb3Q6IENhc3NhbmRyYUNsaWVudC5kaXJlY3RvcnksXG4gICAgICBmaWxlRmlsdGVyOiBbXG4gICAgICAgICcqLmpzJywgJyouamF2YXNjcmlwdCcsICcqLmpzeCcsICcqLmNvZmZlZScsICcqLmNvZmZlZXNjcmlwdCcsICcqLmljZWQnLFxuICAgICAgICAnKi5zY3JpcHQnLCAnKi50cycsICcqLnRzeCcsICcqLnR5cGVzY3JpcHQnLCAnKi5janN4JywgJyouY28nLCAnKi5qc29uJyxcbiAgICAgICAgJyouanNvbjUnLCAnKi5saXRjb2ZmZWUnLCAnKi5saXRpY2VkJywgJyoubHMnLCAnKi5ub2RlJywgJyoudG9tbCcsICcqLndpc3AnLFxuICAgICAgXSxcbiAgICB9KSlcbiAgICAudGhlbigoZmlsZUxpc3QpID0+IHtcbiAgICAgIGNvbnN0IHN5bmNNb2RlbFRhc2tzID0gW107XG4gICAgICBjb25zdCBzeW5jTW9kZWxGaWxlVG9EQkFzeW5jID0gUHJvbWlzZS5wcm9taXNpZnkoQ2Fzc2FuZHJhQ2xpZW50LnN5bmNNb2RlbEZpbGVUb0RCKTtcbiAgICAgIGZpbGVMaXN0ID0gZmlsZUxpc3QuZmlsZXM7XG4gICAgICBmaWxlTGlzdC5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICAgIHN5bmNNb2RlbFRhc2tzLnB1c2goc3luY01vZGVsRmlsZVRvREJBc3luYyhmaWxlKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChzeW5jTW9kZWxUYXNrcyk7XG4gICAgfSlcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICBpZiAoY2IpIGNiKCk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgaWYgKGNiICYmIF8uaXNBcnJheShlcnIpICYmIGVyci5sZW5ndGggPiAwKSBjYihlcnJbMF0pO1xuICAgICAgZWxzZSBpZiAoY2IpIGNiKGVycik7XG4gICAgfSk7XG59O1xuXG5DYXNzYW5kcmFDbGllbnQuYmluZEFzeW5jID0gUHJvbWlzZS5wcm9taXNpZnkoQ2Fzc2FuZHJhQ2xpZW50LmJpbmQpO1xuXG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiBmKGNhbGxiYWNrKSB7XG4gIHRoaXMub3JtLmluaXQoY2FsbGJhY2spO1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS5pbml0QXN5bmMgPSBQcm9taXNlLnByb21pc2lmeShDYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLmluaXQpO1xuXG5DYXNzYW5kcmFDbGllbnQuZ2V0VGFibGVMaXN0ID0gZnVuY3Rpb24gZihjYWxsYmFjaykge1xuICBjb25zdCBzeXN0ZW1DbGllbnQgPSB0aGlzLm9ybS5nZXRfc3lzdGVtX2NsaWVudCgpO1xuICBjb25zdCBrZXlzcGFjZSA9IHRoaXMub3JtLmdldF9rZXlzcGFjZV9uYW1lKCk7XG4gIGNvbnN0IHRhYmxlcyA9IFtdO1xuXG4gIHN5c3RlbUNsaWVudC5jb25uZWN0KClcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBzeXN0ZW1RdWVyeSA9ICdTRUxFQ1QgdGFibGVfbmFtZSBGUk9NIHN5c3RlbV9zY2hlbWEudGFibGVzIFdIRVJFIGtleXNwYWNlX25hbWUgPSA/JztcbiAgICAgIGRlYnVnKGBGaW5kaW5nIHRhYmxlcyBpbiBrZXlzcGFjZTogJHtrZXlzcGFjZX1gKTtcbiAgICAgIHJldHVybiBzeXN0ZW1DbGllbnQuZXhlY3V0ZShzeXN0ZW1RdWVyeSwgW2tleXNwYWNlXSk7XG4gICAgfSlcbiAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdC5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRhYmxlcy5wdXNoKHJlc3VsdC5yb3dzW2ldLnRhYmxlX25hbWUpO1xuICAgICAgfVxuICAgIH0pXG4gICAgLnRoZW4oKCkgPT4gc3lzdGVtQ2xpZW50LnNodXRkb3duKCkpXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgY2FsbGJhY2sobnVsbCwgdGFibGVzKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgIH0pO1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LmdldFRhYmxlTGlzdEFzeW5jID0gUHJvbWlzZS5wcm9taXNpZnkoQ2Fzc2FuZHJhQ2xpZW50LmdldFRhYmxlTGlzdCk7XG5cbkNhc3NhbmRyYUNsaWVudC5leHBvcnQgPSBmdW5jdGlvbiBmKGZpeHR1cmVEaXJlY3RvcnksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHN5c3RlbUNsaWVudCA9IHRoaXMub3JtLmdldF9zeXN0ZW1fY2xpZW50KCk7XG4gIGNvbnN0IGtleXNwYWNlID0gdGhpcy5vcm0uZ2V0X2tleXNwYWNlX25hbWUoKTtcblxuICBzeXN0ZW1DbGllbnQuY29ubmVjdCgpXG4gICAgLnRoZW4oKCkgPT4gdGhpcy5nZXRUYWJsZUxpc3RBc3luYygpKVxuICAgIC50aGVuKCh0YWJsZXMpID0+XG4gICAgICBQcm9taXNlLmVhY2godGFibGVzLCAodGFibGUpID0+XG4gICAgICAgIGV4cG9ydGVyLnByb2Nlc3NUYWJsZUV4cG9ydChzeXN0ZW1DbGllbnQsIGZpeHR1cmVEaXJlY3RvcnksIGtleXNwYWNlLCB0YWJsZSkpKVxuICAgIC50aGVuKCgpID0+IHN5c3RlbUNsaWVudC5zaHV0ZG93bigpKVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIGRlYnVnKCc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PScpO1xuICAgICAgZGVidWcoYENvbXBsZXRlZCBleHBvcnRpbmcgYWxsIHRhYmxlcyBmcm9tIGtleXNwYWNlOiAke2tleXNwYWNlfWApO1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBkZWJ1ZyhlcnIpO1xuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICB9KTtcbn07XG5cbkNhc3NhbmRyYUNsaWVudC5leHBvcnRBc3luYyA9IFByb21pc2UucHJvbWlzaWZ5KENhc3NhbmRyYUNsaWVudC5leHBvcnQpO1xuXG5DYXNzYW5kcmFDbGllbnQuaW1wb3J0ID0gZnVuY3Rpb24gZihmaXh0dXJlRGlyZWN0b3J5LCBvcHRpb25zLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICBiYXRjaFNpemU6IDEsXG4gIH07XG5cbiAgb3B0aW9ucyA9IF8uZGVmYXVsdHNEZWVwKG9wdGlvbnMsIGRlZmF1bHRzKTtcblxuICBjb25zdCBzeXN0ZW1DbGllbnQgPSB0aGlzLm9ybS5nZXRfc3lzdGVtX2NsaWVudCgpO1xuICBjb25zdCBrZXlzcGFjZSA9IHRoaXMub3JtLmdldF9rZXlzcGFjZV9uYW1lKCk7XG5cbiAgc3lzdGVtQ2xpZW50LmNvbm5lY3QoKVxuICAgIC50aGVuKCgpID0+IHRoaXMuZ2V0VGFibGVMaXN0QXN5bmMoKSlcbiAgICAudGhlbigodGFibGVzKSA9PlxuICAgICAgUHJvbWlzZS5lYWNoKHRhYmxlcywgKHRhYmxlKSA9PlxuICAgICAgICBpbXBvcnRlci5wcm9jZXNzVGFibGVJbXBvcnQoc3lzdGVtQ2xpZW50LCBmaXh0dXJlRGlyZWN0b3J5LCBrZXlzcGFjZSwgdGFibGUsIG9wdGlvbnMuYmF0Y2hTaXplKSkpXG4gICAgLnRoZW4oKCkgPT4gc3lzdGVtQ2xpZW50LnNodXRkb3duKCkpXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgZGVidWcoJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Jyk7XG4gICAgICBkZWJ1ZyhgQ29tcGxldGVkIGltcG9ydGluZyB0byBrZXlzcGFjZTogJHtrZXlzcGFjZX1gKTtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgZGVidWcoZXJyKTtcbiAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgfSk7XG59O1xuXG5DYXNzYW5kcmFDbGllbnQuaW1wb3J0QXN5bmMgPSBQcm9taXNlLnByb21pc2lmeShDYXNzYW5kcmFDbGllbnQuaW1wb3J0KTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS5sb2FkU2NoZW1hID0gZnVuY3Rpb24gZihtb2RlbE5hbWUsIG1vZGVsU2NoZW1hKSB7XG4gIHRoaXMubW9kZWxJbnN0YW5jZVttb2RlbE5hbWVdID0gdGhpcy5vcm0uYWRkTW9kZWwobW9kZWxOYW1lLCBtb2RlbFNjaGVtYSk7XG4gIHRoaXMubW9kZWxJbnN0YW5jZVttb2RlbE5hbWVdID0gUHJvbWlzZS5wcm9taXNpZnlBbGwodGhpcy5tb2RlbEluc3RhbmNlW21vZGVsTmFtZV0pO1xuICByZXR1cm4gdGhpcy5tb2RlbEluc3RhbmNlW21vZGVsTmFtZV07XG59O1xuXG5DYXNzYW5kcmFDbGllbnQudXVpZCA9ICgpID0+IChjcWwudHlwZXMuVXVpZC5yYW5kb20oKSk7XG5cbkNhc3NhbmRyYUNsaWVudC51dWlkRnJvbVN0cmluZyA9IChzdHIpID0+IChjcWwudHlwZXMuVXVpZC5mcm9tU3RyaW5nKHN0cikpO1xuXG5DYXNzYW5kcmFDbGllbnQudXVpZEZyb21CdWZmZXIgPSAoYnVmKSA9PiAobmV3IGNxbC50eXBlcy5VdWlkKGJ1ZikpO1xuXG5DYXNzYW5kcmFDbGllbnQudGltZXV1aWQgPSAoKSA9PiAoY3FsLnR5cGVzLlRpbWVVdWlkLm5vdygpKTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnRpbWV1dWlkRnJvbURhdGUgPSAoZGF0ZSkgPT4gKGNxbC50eXBlcy5UaW1lVXVpZC5mcm9tRGF0ZShkYXRlKSk7XG5cbkNhc3NhbmRyYUNsaWVudC50aW1ldXVpZEZyb21TdHJpbmcgPSAoc3RyKSA9PiAoY3FsLnR5cGVzLlRpbWVVdWlkLmZyb21TdHJpbmcoc3RyKSk7XG5cbkNhc3NhbmRyYUNsaWVudC50aW1ldXVpZEZyb21CdWZmZXIgPSAoYnVmKSA9PiAobmV3IGNxbC50eXBlcy5UaW1lVXVpZChidWYpKTtcblxuQ2Fzc2FuZHJhQ2xpZW50Lm1heFRpbWV1dWlkID0gKGRhdGUpID0+IChjcWwudHlwZXMuVGltZVV1aWQubWF4KGRhdGUpKTtcblxuQ2Fzc2FuZHJhQ2xpZW50Lm1pblRpbWV1dWlkID0gKGRhdGUpID0+IChjcWwudHlwZXMuVGltZVV1aWQubWluKGRhdGUpKTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS5kb0JhdGNoID0gZnVuY3Rpb24gZihxdWVyaWVzLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICBwcmVwYXJlOiB0cnVlLFxuICB9O1xuXG4gIG9wdGlvbnMgPSBfLmRlZmF1bHRzRGVlcChvcHRpb25zLCBkZWZhdWx0cyk7XG5cbiAgY29uc3QgcmFuZG9tTW9kZWwgPSB0aGlzLm1vZGVsSW5zdGFuY2VbT2JqZWN0LmtleXModGhpcy5tb2RlbEluc3RhbmNlKVswXV07XG4gIGNvbnN0IGJlZm9yZUhvb2tzID0gW107XG5cbiAgbGV0IGJhdGNoUmVzdWx0O1xuICBQcm9taXNlLmFsbChiZWZvcmVIb29rcylcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICBpZiAocXVlcmllcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHJldHVybiByYW5kb21Nb2RlbC5leGVjdXRlX2JhdGNoQXN5bmMocXVlcmllcywgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgICBpZiAocXVlcmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGRlYnVnKCdzaW5nbGUgcXVlcnkgcHJvdmlkZWQgZm9yIGJhdGNoIHJlcXVlc3QsIGFwcGx5aW5nIGFzIG5vbiBiYXRjaCBxdWVyeScpO1xuICAgICAgICByZXR1cm4gcmFuZG9tTW9kZWwuZXhlY3V0ZV9xdWVyeUFzeW5jKHF1ZXJpZXNbMF0ucXVlcnksIHF1ZXJpZXNbMF0ucGFyYW1zLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIGRlYnVnKCdubyBxdWVyaWVzIHByb3ZpZGVkIGZvciBiYXRjaCByZXF1ZXN0LCBlbXB0eSBhcnJheSBmb3VuZCwgZG9pbmcgbm90aGluZycpO1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH0pXG4gICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBiYXRjaFJlc3VsdCA9IHJlc3BvbnNlO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBxdWVyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGFmdGVySG9va1Jlc3BvbnNlID0gcXVlcmllc1tpXS5hZnRlcl9ob29rKCk7XG4gICAgICAgIGlmIChhZnRlckhvb2tSZXNwb25zZSAhPT0gdHJ1ZSkge1xuICAgICAgICAgIGNhbGxiYWNrKGFmdGVySG9va1Jlc3BvbnNlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrKG51bGwsIGJhdGNoUmVzdWx0KTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgIH0pO1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS5kb0JhdGNoQXN5bmMgPSBQcm9taXNlLnByb21pc2lmeShDYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLmRvQmF0Y2gpO1xuXG5DYXNzYW5kcmFDbGllbnQuZG9CYXRjaCA9IGZ1bmN0aW9uIGYocXVlcmllcywgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgcHJlcGFyZTogdHJ1ZSxcbiAgfTtcblxuICBvcHRpb25zID0gXy5kZWZhdWx0c0RlZXAob3B0aW9ucywgZGVmYXVsdHMpO1xuXG4gIENhc3NhbmRyYUNsaWVudC5wcm90b3R5cGUuZG9CYXRjaC5jYWxsKENhc3NhbmRyYUNsaWVudCwgcXVlcmllcywgb3B0aW9ucywgY2FsbGJhY2spO1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LmRvQmF0Y2hBc3luYyA9IFByb21pc2UucHJvbWlzaWZ5KENhc3NhbmRyYUNsaWVudC5kb0JhdGNoKTtcblxuQ2Fzc2FuZHJhQ2xpZW50Ll90cmFuc2xhdGVGaWxlTmFtZVRvTW9kZWxOYW1lID0gKGZpbGVOYW1lKSA9PiAoXG4gIGZpbGVOYW1lLnNsaWNlKDAsIGZpbGVOYW1lLmxhc3RJbmRleE9mKCcuJykpLnJlcGxhY2UoJ01vZGVsJywgJycpXG4pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYXNzYW5kcmFDbGllbnQsIHtcbiAgY29uc2lzdGVuY2llczoge1xuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBjcWwudHlwZXMuY29uc2lzdGVuY2llcztcbiAgICB9LFxuICB9LFxuICBkYXRhdHlwZXM6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gY3FsLnR5cGVzO1xuICAgIH0sXG4gIH0sXG4gIGRyaXZlcjoge1xuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBjcWw7XG4gICAgfSxcbiAgfSxcbiAgaW5zdGFuY2U6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gQ2Fzc2FuZHJhQ2xpZW50Lm1vZGVsSW5zdGFuY2U7XG4gICAgfSxcbiAgfSxcbiAgY2xvc2U6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gQ2Fzc2FuZHJhQ2xpZW50Lm9ybS5jbG9zZTtcbiAgICB9LFxuICB9LFxuICBjbG9zZUFzeW5jOiB7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucHJvbWlzaWZ5KENhc3NhbmRyYUNsaWVudC5vcm0uY2xvc2UpO1xuICAgIH0sXG4gIH0sXG59KTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLCB7XG4gIGNvbnNpc3RlbmNpZXM6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gY3FsLnR5cGVzLmNvbnNpc3RlbmNpZXM7XG4gICAgfSxcbiAgfSxcbiAgZGF0YXR5cGVzOiB7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIGNxbC50eXBlcztcbiAgICB9LFxuICB9LFxuICBkcml2ZXI6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gY3FsO1xuICAgIH0sXG4gIH0sXG4gIGluc3RhbmNlOiB7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMubW9kZWxJbnN0YW5jZTtcbiAgICB9LFxuICB9LFxuICBjbG9zZToge1xuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLm9ybS5jbG9zZTtcbiAgICB9LFxuICB9LFxuICBjbG9zZUFzeW5jOiB7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucHJvbWlzaWZ5KHRoaXMub3JtLmNsb3NlKTtcbiAgICB9LFxuICB9LFxufSk7XG5cbkNhc3NhbmRyYUNsaWVudC5wcm90b3R5cGUudXVpZCA9IENhc3NhbmRyYUNsaWVudC51dWlkO1xuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS51dWlkRnJvbVN0cmluZyA9IENhc3NhbmRyYUNsaWVudC51dWlkRnJvbVN0cmluZztcbkNhc3NhbmRyYUNsaWVudC5wcm90b3R5cGUudXVpZEZyb21CdWZmZXIgPSBDYXNzYW5kcmFDbGllbnQudXVpZEZyb21CdWZmZXI7XG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLnRpbWV1dWlkID0gQ2Fzc2FuZHJhQ2xpZW50LnRpbWV1dWlkO1xuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS50aW1ldXVpZEZyb21EYXRlID0gQ2Fzc2FuZHJhQ2xpZW50LnRpbWV1dWlkRnJvbURhdGU7XG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLnRpbWV1dWlkRnJvbVN0cmluZyA9IENhc3NhbmRyYUNsaWVudC50aW1ldXVpZEZyb21TdHJpbmc7XG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLnRpbWV1dWlkRnJvbUJ1ZmZlciA9IENhc3NhbmRyYUNsaWVudC50aW1ldXVpZEZyb21CdWZmZXI7XG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLm1heFRpbWV1dWlkID0gQ2Fzc2FuZHJhQ2xpZW50Lm1heFRpbWV1dWlkO1xuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS5taW5UaW1ldXVpZCA9IENhc3NhbmRyYUNsaWVudC5taW5UaW1ldXVpZDtcblxuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS5fdHJhbnNsYXRlRmlsZU5hbWVUb01vZGVsTmFtZSA9IENhc3NhbmRyYUNsaWVudC5fdHJhbnNsYXRlRmlsZU5hbWVUb01vZGVsTmFtZTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYXNzYW5kcmFDbGllbnQ7XG4iXX0= |
{ | ||
"name": "express-cassandra", | ||
"version": "2.6.0", | ||
"version": "2.7.0", | ||
"dependencies": { | ||
@@ -5,0 +5,0 @@ "JSONStream": "^1.3.1", |
@@ -1,6 +0,6 @@ | ||
[![Build Status](https://travis-ci.org/masumsoft/express-cassandra.svg)](https://travis-ci.org/masumsoft/express-cassandra) | ||
[![Build Status](https://app.travis-ci.com/masumsoft/express-cassandra.svg?branch=master)](https://app.travis-ci.com/masumsoft/express-cassandra) | ||
[![Download Stats](https://img.shields.io/npm/dm/express-cassandra.svg)](https://www.npmjs.com/package/express-cassandra) | ||
[![Npm Version](https://badge.fury.io/js/express-cassandra.svg)](https://www.npmjs.com/package/express-cassandra) | ||
[![Documentation Status](https://readthedocs.org/projects/express-cassandra/badge/?version=latest)](http://express-cassandra.readthedocs.io/en/latest/?badge=latest) | ||
[![Dependencies Status](https://david-dm.org/masumsoft/express-cassandra/status.svg)](https://david-dm.org/masumsoft/express-cassandra) | ||
[![Dependency Status](https://img.shields.io/librariesio/github/masumsoft/express-cassandra)](https://github.com/masumsoft/express-cassandra/network/dependencies) | ||
[![Mentioned in Awesome Cassandra](https://awesome.re/mentioned-badge.svg)](https://anant.github.io/awesome-cassandra/) | ||
@@ -20,5 +20,10 @@ | ||
## Our Sponsors: ## | ||
<table><tr> | ||
<td align="center" width="300" ><a href="https://astra.dev/3shh4EF"><img src="https://www.datastax.com/sites/default/files/2021-07/astra-negative-square.png" width="90" height="90" alt="Astra DB" /><br />Astra DB</a><br/>Use Node/Express with DataStax Astra DB - built on Apache Cassandra.</td> | ||
</tr></table> | ||
## Supported Features | ||
* supports the latest cassandra 3.x releases | ||
* supports the latest cassandra 4.x and older stable 3.x releases | ||
* support for elassandra index management and search queries | ||
@@ -44,3 +49,3 @@ * support for janusgraph graph management and tinkerpop3 gremlin queries | ||
For apache cassandra version 3.x or datastax enterprise | ||
For apache cassandra version 4.x, 3.x or datastax enterprise | ||
@@ -61,3 +66,3 @@ npm install express-cassandra | ||
Please note that if you use the legacy cassandra 2.x compliant version then please use the corresponding README.md file for that version. The following documentation is for version 3.x and datastax enterprise 5.x only. The materialized view support and several other part of the documentation is strictly applicable for cassandra 3.x / dse 5.x and will not work in earlier versions of cassandra. | ||
Please note that if you use the legacy cassandra 2.x compliant version then please use the corresponding README.md file for that version. The following documentation is for version 4.x, 3.x and datastax enterprise 6.x/5.x only. The materialized view support and several other part of the documentation is strictly applicable for cassandra 4.x/3.x or dse 6.x/5.x and will not work in earlier versions of cassandra. | ||
@@ -80,3 +85,3 @@ # Documentation | ||
* Express-cassandra started off from a highly modified version of [apollo-cassandra](https://github.com/3logic/apollo-cassandra) module. Afterwards major refactoring and new development went on to support missing features of cassandra 3.x and additional functionalities. | ||
* Express-cassandra started off from a highly modified version of [apollo-cassandra](https://github.com/3logic/apollo-cassandra) module. Afterwards major refactoring and new development went on to support missing features of cassandra 3.x and beyond with support for additional functionalities. | ||
@@ -83,0 +88,0 @@ * Apache Cassandra, Apache Lucene, Apache, Lucene, Solr, TinkerPop, and Cassandra are trademarks of the Apache Software Foundation or its subsidiaries in Canada, the United States and/or other countries. |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
2382390
5648
93