breeze-client 2.2.0 → 2.2.1-cjs
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/adapter-ajax-angularjs/{index.d.ts → breeze-client-adapter-ajax-angularjs.d.ts} +0 -1
- package/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.metadata.json +1 -0
- package/adapter-ajax-angularjs/package.json +13 -0
- package/adapter-ajax-fetch/{index.d.ts → breeze-client-adapter-ajax-fetch.d.ts} +0 -1
- package/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.metadata.json +1 -0
- package/adapter-ajax-fetch/package.json +13 -0
- package/adapter-ajax-httpclient/{index.d.ts → breeze-client-adapter-ajax-httpclient.d.ts} +0 -1
- package/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.metadata.json +1 -0
- package/adapter-ajax-httpclient/package.json +13 -0
- package/adapter-ajax-jquery/{index.d.ts → breeze-client-adapter-ajax-jquery.d.ts} +0 -1
- package/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.metadata.json +1 -0
- package/adapter-ajax-jquery/package.json +13 -0
- package/adapter-ajax-post/{index.d.ts → breeze-client-adapter-ajax-post.d.ts} +0 -1
- package/adapter-ajax-post/breeze-client-adapter-ajax-post.metadata.json +1 -0
- package/adapter-ajax-post/package.json +13 -0
- package/adapter-data-service-odata/{index.d.ts → breeze-client-adapter-data-service-odata.d.ts} +0 -1
- package/adapter-data-service-odata/breeze-client-adapter-data-service-odata.metadata.json +1 -0
- package/adapter-data-service-odata/package.json +13 -0
- package/adapter-data-service-webapi/{index.d.ts → breeze-client-adapter-data-service-webapi.d.ts} +0 -1
- package/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.metadata.json +1 -0
- package/adapter-data-service-webapi/package.json +13 -0
- package/adapter-model-library-backing-store/{index.d.ts → breeze-client-adapter-model-library-backing-store.d.ts} +0 -1
- package/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.metadata.json +1 -0
- package/adapter-model-library-backing-store/package.json +13 -0
- package/adapter-model-library-ko/{index.d.ts → breeze-client-adapter-model-library-ko.d.ts} +0 -1
- package/adapter-model-library-ko/breeze-client-adapter-model-library-ko.metadata.json +1 -0
- package/adapter-model-library-ko/package.json +13 -0
- package/adapter-uri-builder-json/{index.d.ts → breeze-client-adapter-uri-builder-json.d.ts} +0 -1
- package/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.metadata.json +1 -0
- package/adapter-uri-builder-json/package.json +13 -0
- package/adapter-uri-builder-odata/{index.d.ts → breeze-client-adapter-uri-builder-odata.d.ts} +0 -1
- package/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.metadata.json +1 -0
- package/adapter-uri-builder-odata/package.json +13 -0
- package/breeze-client.d.ts +8 -0
- package/breeze-client.metadata.json +1 -0
- package/bundles/breeze-client-adapter-ajax-angularjs.umd.js +190 -0
- package/bundles/breeze-client-adapter-ajax-angularjs.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js +2 -0
- package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js.map +1 -0
- package/bundles/breeze-client-adapter-ajax-fetch.umd.js +190 -0
- package/bundles/breeze-client-adapter-ajax-fetch.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js +2 -0
- package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js.map +1 -0
- package/bundles/breeze-client-adapter-ajax-httpclient.umd.js +195 -0
- package/bundles/breeze-client-adapter-ajax-httpclient.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js +2 -0
- package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js.map +1 -0
- package/bundles/breeze-client-adapter-ajax-jquery.umd.js +115 -0
- package/bundles/breeze-client-adapter-ajax-jquery.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js +2 -0
- package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js.map +1 -0
- package/bundles/breeze-client-adapter-ajax-post.umd.js +92 -0
- package/bundles/breeze-client-adapter-ajax-post.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-ajax-post.umd.min.js +2 -0
- package/bundles/breeze-client-adapter-ajax-post.umd.min.js.map +1 -0
- package/bundles/breeze-client-adapter-data-service-odata.umd.js +747 -0
- package/bundles/breeze-client-adapter-data-service-odata.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-data-service-odata.umd.min.js +16 -0
- package/bundles/breeze-client-adapter-data-service-odata.umd.min.js.map +1 -0
- package/bundles/breeze-client-adapter-data-service-webapi.umd.js +333 -0
- package/bundles/breeze-client-adapter-data-service-webapi.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js +16 -0
- package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js.map +1 -0
- package/bundles/breeze-client-adapter-model-library-backing-store.umd.js +280 -0
- package/bundles/breeze-client-adapter-model-library-backing-store.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js +2 -0
- package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js.map +1 -0
- package/bundles/breeze-client-adapter-model-library-ko.umd.js +252 -0
- package/bundles/breeze-client-adapter-model-library-ko.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-model-library-ko.umd.min.js +2 -0
- package/bundles/breeze-client-adapter-model-library-ko.umd.min.js.map +1 -0
- package/bundles/breeze-client-adapter-uri-builder-json.umd.js +96 -0
- package/bundles/breeze-client-adapter-uri-builder-json.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js +2 -0
- package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js.map +1 -0
- package/bundles/breeze-client-adapter-uri-builder-odata.umd.js +262 -0
- package/bundles/breeze-client-adapter-uri-builder-odata.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js +2 -0
- package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js.map +1 -0
- package/bundles/breeze-client-mixin-get-entity-graph.umd.js +258 -0
- package/bundles/breeze-client-mixin-get-entity-graph.umd.js.map +1 -0
- package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js +2 -0
- package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js.map +1 -0
- package/bundles/breeze-client-mixin-save-queuing.umd.js +579 -0
- package/bundles/breeze-client-mixin-save-queuing.umd.js.map +1 -0
- package/bundles/breeze-client-mixin-save-queuing.umd.min.js +16 -0
- package/bundles/breeze-client-mixin-save-queuing.umd.min.js.map +1 -0
- package/bundles/breeze-client.umd.js +14234 -0
- package/bundles/breeze-client.umd.js.map +1 -0
- package/bundles/breeze-client.umd.min.js +16 -0
- package/bundles/breeze-client.umd.min.js.map +1 -0
- package/esm2015/adapter-ajax-angularjs/adapter-ajax-angularjs.js +130 -0
- package/esm2015/adapter-ajax-angularjs/adapter-core.js +49 -0
- package/esm2015/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +5 -0
- package/esm2015/adapter-ajax-fetch/adapter-ajax-fetch.js +130 -0
- package/esm2015/adapter-ajax-fetch/adapter-core.js +49 -0
- package/esm2015/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +5 -0
- package/esm2015/adapter-ajax-httpclient/adapter-ajax-httpclient.js +137 -0
- package/esm2015/adapter-ajax-httpclient/adapter-core.js +49 -0
- package/esm2015/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +5 -0
- package/esm2015/adapter-ajax-jquery/adapter-ajax-jquery.js +103 -0
- package/esm2015/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +5 -0
- package/esm2015/adapter-ajax-post/adapter-ajax-post.js +77 -0
- package/esm2015/adapter-ajax-post/breeze-client-adapter-ajax-post.js +5 -0
- package/esm2015/adapter-data-service-odata/adapter-core.js +49 -0
- package/esm2015/adapter-data-service-odata/adapter-data-service-odata.js +463 -0
- package/esm2015/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +5 -0
- package/esm2015/adapter-data-service-webapi/adapter-data-service-webapi.js +100 -0
- package/esm2015/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +5 -0
- package/esm2015/adapter-model-library-backing-store/adapter-model-library-backing-store.js +268 -0
- package/esm2015/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +5 -0
- package/esm2015/adapter-model-library-ko/adapter-model-library-ko.js +240 -0
- package/esm2015/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +5 -0
- package/esm2015/adapter-uri-builder-json/adapter-core.js +49 -0
- package/esm2015/adapter-uri-builder-json/adapter-uri-builder-json.js +36 -0
- package/esm2015/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +5 -0
- package/esm2015/adapter-uri-builder-odata/adapter-core.js +49 -0
- package/esm2015/adapter-uri-builder-odata/adapter-uri-builder-odata.js +192 -0
- package/esm2015/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +5 -0
- package/esm2015/breeze-client.js +9 -0
- package/esm2015/index.js +2 -0
- package/esm2015/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +5 -0
- package/esm2015/mixin-get-entity-graph/mixin-get-entity-graph.js +269 -0
- package/esm2015/mixin-save-queuing/breeze-client-mixin-save-queuing.js +5 -0
- package/esm2015/mixin-save-queuing/mixin-save-queuing.js +400 -0
- package/esm2015/src/abstract-data-service-adapter.js +327 -0
- package/esm2015/src/array.js +4 -0
- package/esm2015/src/assert-param.js +312 -0
- package/esm2015/src/breeze.js +85 -0
- package/esm2015/src/complex-array.js +119 -0
- package/esm2015/src/config.js +223 -0
- package/esm2015/src/core.js +714 -0
- package/esm2015/src/csdl-metadata-parser.js +385 -0
- package/esm2015/src/data-service.js +203 -0
- package/esm2015/src/data-type.js +506 -0
- package/esm2015/src/default-property-interceptor.js +460 -0
- package/{esm2022/src/entity-action.mjs → esm2015/src/entity-action.js} +25 -25
- package/esm2015/src/entity-aspect.js +804 -0
- package/esm2015/src/entity-group.js +187 -0
- package/esm2015/src/entity-key.js +116 -0
- package/esm2015/src/entity-manager.js +2094 -0
- package/esm2015/src/entity-metadata.js +2109 -0
- package/esm2015/src/entity-query.js +1015 -0
- package/esm2015/src/entity-state.js +107 -0
- package/esm2015/src/enum.js +141 -0
- package/esm2015/src/event.js +256 -0
- package/esm2015/src/interface-registry.js +41 -0
- package/esm2015/src/key-generator.js +108 -0
- package/esm2015/src/local-query-comparison-options.js +65 -0
- package/esm2015/src/mapping-context.js +411 -0
- package/esm2015/src/naming-convention.js +88 -0
- package/esm2015/src/observable-array.js +185 -0
- package/esm2015/src/predicate.js +1242 -0
- package/esm2015/src/primitive-array.js +87 -0
- package/esm2015/src/query-options.js +152 -0
- package/esm2015/src/relation-array.js +175 -0
- package/esm2015/src/save-options.js +41 -0
- package/esm2015/src/unattached-children-map.js +58 -0
- package/esm2015/src/validate.js +991 -0
- package/esm2015/src/validation-options.js +64 -0
- package/esm5/adapter-ajax-angularjs/adapter-ajax-angularjs.js +132 -0
- package/esm5/adapter-ajax-angularjs/adapter-core.js +49 -0
- package/esm5/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +5 -0
- package/esm5/adapter-ajax-fetch/adapter-ajax-fetch.js +132 -0
- package/esm5/adapter-ajax-fetch/adapter-core.js +49 -0
- package/esm5/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +5 -0
- package/esm5/adapter-ajax-httpclient/adapter-ajax-httpclient.js +139 -0
- package/esm5/adapter-ajax-httpclient/adapter-core.js +49 -0
- package/esm5/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +5 -0
- package/esm5/adapter-ajax-jquery/adapter-ajax-jquery.js +105 -0
- package/esm5/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +5 -0
- package/esm5/adapter-ajax-post/adapter-ajax-post.js +81 -0
- package/esm5/adapter-ajax-post/breeze-client-adapter-ajax-post.js +5 -0
- package/esm5/adapter-data-service-odata/adapter-core.js +49 -0
- package/{esm2022/adapter-data-service-odata/adapter-data-service-odata.mjs → esm5/adapter-data-service-odata/adapter-data-service-odata.js} +147 -138
- package/esm5/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +5 -0
- package/esm5/adapter-data-service-webapi/adapter-data-service-webapi.js +105 -0
- package/esm5/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +5 -0
- package/esm5/adapter-model-library-backing-store/adapter-model-library-backing-store.js +270 -0
- package/esm5/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +5 -0
- package/esm5/adapter-model-library-ko/adapter-model-library-ko.js +242 -0
- package/esm5/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +5 -0
- package/esm5/adapter-uri-builder-json/adapter-core.js +49 -0
- package/esm5/adapter-uri-builder-json/adapter-uri-builder-json.js +38 -0
- package/esm5/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +5 -0
- package/esm5/adapter-uri-builder-odata/adapter-core.js +49 -0
- package/esm5/adapter-uri-builder-odata/adapter-uri-builder-odata.js +197 -0
- package/esm5/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +5 -0
- package/esm5/breeze-client.js +9 -0
- package/esm5/index.js +2 -0
- package/esm5/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +5 -0
- package/esm5/mixin-get-entity-graph/mixin-get-entity-graph.js +269 -0
- package/esm5/mixin-save-queuing/breeze-client-mixin-save-queuing.js +5 -0
- package/esm5/mixin-save-queuing/mixin-save-queuing.js +412 -0
- package/esm5/src/abstract-data-service-adapter.js +333 -0
- package/esm5/src/array.js +4 -0
- package/esm5/src/assert-param.js +317 -0
- package/esm5/src/breeze.js +85 -0
- package/esm5/src/complex-array.js +119 -0
- package/esm5/src/config.js +228 -0
- package/esm5/src/core.js +722 -0
- package/esm5/src/csdl-metadata-parser.js +385 -0
- package/esm5/src/data-service.js +207 -0
- package/esm5/src/data-type.js +513 -0
- package/esm5/src/default-property-interceptor.js +460 -0
- package/esm5/src/entity-action.js +52 -0
- package/esm5/src/entity-aspect.js +810 -0
- package/esm5/src/entity-group.js +189 -0
- package/esm5/src/entity-key.js +118 -0
- package/esm5/src/entity-manager.js +2112 -0
- package/esm5/src/entity-metadata.js +2144 -0
- package/esm5/src/entity-query.js +1042 -0
- package/esm5/src/entity-state.js +114 -0
- package/esm5/src/enum.js +144 -0
- package/esm5/src/event.js +259 -0
- package/esm5/src/interface-registry.js +43 -0
- package/esm5/src/key-generator.js +111 -0
- package/esm5/src/local-query-comparison-options.js +67 -0
- package/esm5/src/mapping-context.js +413 -0
- package/esm5/src/naming-convention.js +90 -0
- package/esm5/src/observable-array.js +201 -0
- package/esm5/src/predicate.js +1307 -0
- package/esm5/src/primitive-array.js +87 -0
- package/esm5/src/query-options.js +167 -0
- package/esm5/src/relation-array.js +175 -0
- package/esm5/src/save-options.js +43 -0
- package/esm5/src/unattached-children-map.js +60 -0
- package/{esm2022/src/validate.mjs → esm5/src/validate.js} +110 -116
- package/esm5/src/validation-options.js +66 -0
- package/{fesm2022/breeze-client-adapter-ajax-angularjs.mjs → fesm2015/breeze-client-adapter-ajax-angularjs.js} +1 -6
- package/fesm2015/breeze-client-adapter-ajax-angularjs.js.map +1 -0
- package/{fesm2022/breeze-client-adapter-ajax-fetch.mjs → fesm2015/breeze-client-adapter-ajax-fetch.js} +4 -9
- package/fesm2015/breeze-client-adapter-ajax-fetch.js.map +1 -0
- package/{fesm2022/breeze-client-adapter-ajax-httpclient.mjs → fesm2015/breeze-client-adapter-ajax-httpclient.js} +4 -6
- package/fesm2015/breeze-client-adapter-ajax-httpclient.js.map +1 -0
- package/{fesm2022/breeze-client-adapter-ajax-jquery.mjs → fesm2015/breeze-client-adapter-ajax-jquery.js} +2 -6
- package/fesm2015/breeze-client-adapter-ajax-jquery.js.map +1 -0
- package/{fesm2022/breeze-client-adapter-ajax-post.mjs → fesm2015/breeze-client-adapter-ajax-post.js} +1 -1
- package/fesm2015/breeze-client-adapter-ajax-post.js.map +1 -0
- package/{fesm2022/breeze-client-adapter-data-service-odata.mjs → fesm2015/breeze-client-adapter-data-service-odata.js} +69 -68
- package/fesm2015/breeze-client-adapter-data-service-odata.js.map +1 -0
- package/{fesm2022/breeze-client-adapter-data-service-webapi.mjs → fesm2015/breeze-client-adapter-data-service-webapi.js} +30 -30
- package/fesm2015/breeze-client-adapter-data-service-webapi.js.map +1 -0
- package/{fesm2022/breeze-client-adapter-model-library-backing-store.mjs → fesm2015/breeze-client-adapter-model-library-backing-store.js} +13 -14
- package/fesm2015/breeze-client-adapter-model-library-backing-store.js.map +1 -0
- package/{fesm2022/breeze-client-adapter-model-library-ko.mjs → fesm2015/breeze-client-adapter-model-library-ko.js} +13 -14
- package/fesm2015/breeze-client-adapter-model-library-ko.js.map +1 -0
- package/{fesm2022/breeze-client-adapter-uri-builder-json.mjs → fesm2015/breeze-client-adapter-uri-builder-json.js} +8 -9
- package/fesm2015/breeze-client-adapter-uri-builder-json.js.map +1 -0
- package/{fesm2022/breeze-client-adapter-uri-builder-odata.mjs → fesm2015/breeze-client-adapter-uri-builder-odata.js} +86 -86
- package/fesm2015/breeze-client-adapter-uri-builder-odata.js.map +1 -0
- package/{fesm2022/breeze-client-mixin-get-entity-graph.mjs → fesm2015/breeze-client-mixin-get-entity-graph.js} +1 -1
- package/fesm2015/breeze-client-mixin-get-entity-graph.js.map +1 -0
- package/{fesm2022/breeze-client-mixin-save-queuing.mjs → fesm2015/breeze-client-mixin-save-queuing.js} +2 -23
- package/fesm2015/breeze-client-mixin-save-queuing.js.map +1 -0
- package/{fesm2022/breeze-client.mjs → fesm2015/breeze-client.js} +1543 -2042
- package/fesm2015/breeze-client.js.map +1 -0
- package/fesm5/breeze-client-adapter-ajax-angularjs.js +186 -0
- package/fesm5/breeze-client-adapter-ajax-angularjs.js.map +1 -0
- package/fesm5/breeze-client-adapter-ajax-fetch.js +186 -0
- package/fesm5/breeze-client-adapter-ajax-fetch.js.map +1 -0
- package/fesm5/breeze-client-adapter-ajax-httpclient.js +193 -0
- package/fesm5/breeze-client-adapter-ajax-httpclient.js.map +1 -0
- package/fesm5/breeze-client-adapter-ajax-jquery.js +111 -0
- package/fesm5/breeze-client-adapter-ajax-jquery.js.map +1 -0
- package/fesm5/breeze-client-adapter-ajax-post.js +86 -0
- package/fesm5/breeze-client-adapter-ajax-post.js.map +1 -0
- package/fesm5/breeze-client-adapter-data-service-odata.js +523 -0
- package/fesm5/breeze-client-adapter-data-service-odata.js.map +1 -0
- package/fesm5/breeze-client-adapter-data-service-webapi.js +111 -0
- package/fesm5/breeze-client-adapter-data-service-webapi.js.map +1 -0
- package/fesm5/breeze-client-adapter-model-library-backing-store.js +276 -0
- package/fesm5/breeze-client-adapter-model-library-backing-store.js.map +1 -0
- package/fesm5/breeze-client-adapter-model-library-ko.js +248 -0
- package/fesm5/breeze-client-adapter-model-library-ko.js.map +1 -0
- package/fesm5/breeze-client-adapter-uri-builder-json.js +92 -0
- package/fesm5/breeze-client-adapter-uri-builder-json.js.map +1 -0
- package/fesm5/breeze-client-adapter-uri-builder-odata.js +250 -0
- package/fesm5/breeze-client-adapter-uri-builder-odata.js.map +1 -0
- package/fesm5/breeze-client-mixin-get-entity-graph.js +254 -0
- package/fesm5/breeze-client-mixin-get-entity-graph.js.map +1 -0
- package/fesm5/breeze-client-mixin-save-queuing.js +356 -0
- package/fesm5/breeze-client-mixin-save-queuing.js.map +1 -0
- package/fesm5/breeze-client.js +13956 -0
- package/fesm5/breeze-client.js.map +1 -0
- package/mixin-get-entity-graph/{index.d.ts → breeze-client-mixin-get-entity-graph.d.ts} +0 -1
- package/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.metadata.json +1 -0
- package/mixin-get-entity-graph/package.json +13 -0
- package/mixin-save-queuing/{index.d.ts → breeze-client-mixin-save-queuing.d.ts} +0 -1
- package/mixin-save-queuing/breeze-client-mixin-save-queuing.metadata.json +1 -0
- package/mixin-save-queuing/package.json +13 -0
- package/package.json +12 -94
- package/src/config.d.ts +1 -1
- package/src/core.d.ts +1 -1
- package/src/entity-aspect.d.ts +1 -1
- package/src/entity-metadata.d.ts +6 -8
- package/src/entity-query.d.ts +1 -1
- package/esm2022/adapter-ajax-angularjs/adapter-ajax-angularjs.mjs +0 -135
- package/esm2022/adapter-ajax-angularjs/adapter-core.mjs +0 -49
- package/esm2022/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.mjs +0 -5
- package/esm2022/adapter-ajax-fetch/adapter-ajax-fetch.mjs +0 -135
- package/esm2022/adapter-ajax-fetch/adapter-core.mjs +0 -49
- package/esm2022/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.mjs +0 -5
- package/esm2022/adapter-ajax-httpclient/adapter-ajax-httpclient.mjs +0 -139
- package/esm2022/adapter-ajax-httpclient/adapter-core.mjs +0 -49
- package/esm2022/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.mjs +0 -5
- package/esm2022/adapter-ajax-jquery/adapter-ajax-jquery.mjs +0 -107
- package/esm2022/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.mjs +0 -5
- package/esm2022/adapter-ajax-post/adapter-ajax-post.mjs +0 -77
- package/esm2022/adapter-ajax-post/breeze-client-adapter-ajax-post.mjs +0 -5
- package/esm2022/adapter-data-service-odata/adapter-core.mjs +0 -49
- package/esm2022/adapter-data-service-odata/breeze-client-adapter-data-service-odata.mjs +0 -5
- package/esm2022/adapter-data-service-webapi/adapter-data-service-webapi.mjs +0 -100
- package/esm2022/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.mjs +0 -5
- package/esm2022/adapter-model-library-backing-store/adapter-model-library-backing-store.mjs +0 -269
- package/esm2022/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.mjs +0 -5
- package/esm2022/adapter-model-library-ko/adapter-model-library-ko.mjs +0 -241
- package/esm2022/adapter-model-library-ko/breeze-client-adapter-model-library-ko.mjs +0 -5
- package/esm2022/adapter-uri-builder-json/adapter-core.mjs +0 -49
- package/esm2022/adapter-uri-builder-json/adapter-uri-builder-json.mjs +0 -37
- package/esm2022/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.mjs +0 -5
- package/esm2022/adapter-uri-builder-odata/adapter-core.mjs +0 -49
- package/esm2022/adapter-uri-builder-odata/adapter-uri-builder-odata.mjs +0 -191
- package/esm2022/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.mjs +0 -5
- package/esm2022/breeze-client.mjs +0 -5
- package/esm2022/index.mjs +0 -2
- package/esm2022/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.mjs +0 -5
- package/esm2022/mixin-get-entity-graph/mixin-get-entity-graph.mjs +0 -269
- package/esm2022/mixin-save-queuing/breeze-client-mixin-save-queuing.mjs +0 -5
- package/esm2022/mixin-save-queuing/mixin-save-queuing.mjs +0 -421
- package/esm2022/src/abstract-data-service-adapter.mjs +0 -325
- package/esm2022/src/array.mjs +0 -4
- package/esm2022/src/assert-param.mjs +0 -330
- package/esm2022/src/breeze.mjs +0 -85
- package/esm2022/src/complex-array.mjs +0 -117
- package/esm2022/src/config.mjs +0 -232
- package/esm2022/src/core.mjs +0 -712
- package/esm2022/src/csdl-metadata-parser.mjs +0 -385
- package/esm2022/src/data-service.mjs +0 -239
- package/esm2022/src/data-type.mjs +0 -510
- package/esm2022/src/default-property-interceptor.mjs +0 -460
- package/esm2022/src/entity-aspect.mjs +0 -897
- package/esm2022/src/entity-group.mjs +0 -192
- package/esm2022/src/entity-key.mjs +0 -127
- package/esm2022/src/entity-manager.mjs +0 -2183
- package/esm2022/src/entity-metadata.mjs +0 -2242
- package/esm2022/src/entity-query.mjs +0 -1024
- package/esm2022/src/entity-state.mjs +0 -107
- package/esm2022/src/enum.mjs +0 -143
- package/esm2022/src/event.mjs +0 -264
- package/esm2022/src/interface-registry.mjs +0 -39
- package/esm2022/src/key-generator.mjs +0 -110
- package/esm2022/src/local-query-comparison-options.mjs +0 -75
- package/esm2022/src/mapping-context.mjs +0 -422
- package/esm2022/src/naming-convention.mjs +0 -96
- package/esm2022/src/observable-array.mjs +0 -183
- package/esm2022/src/predicate.mjs +0 -1259
- package/esm2022/src/primitive-array.mjs +0 -85
- package/esm2022/src/query-options.mjs +0 -160
- package/esm2022/src/relation-array.mjs +0 -173
- package/esm2022/src/save-options.mjs +0 -51
- package/esm2022/src/unattached-children-map.mjs +0 -56
- package/esm2022/src/validation-options.mjs +0 -78
- package/fesm2022/breeze-client-adapter-ajax-angularjs.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-ajax-fetch.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-ajax-httpclient.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-ajax-jquery.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-ajax-post.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-data-service-odata.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-data-service-webapi.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-model-library-backing-store.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-model-library-ko.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-uri-builder-json.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-uri-builder-odata.mjs.map +0 -1
- package/fesm2022/breeze-client-mixin-get-entity-graph.mjs.map +0 -1
- package/fesm2022/breeze-client-mixin-save-queuing.mjs.map +0 -1
- package/fesm2022/breeze-client.mjs.map +0 -1
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { assertConfig } from './assert-param';
|
|
2
|
+
import { config } from './config';
|
|
3
|
+
import { core } from './core';
|
|
4
|
+
/**
|
|
5
|
+
A DataService instance is used to encapsulate the details of a single 'service'; this includes a serviceName, a dataService adapterInstance,
|
|
6
|
+
and whether the service has server side metadata.
|
|
7
|
+
|
|
8
|
+
You can construct an EntityManager with either a serviceName or a DataService instance, if you use a serviceName then a DataService
|
|
9
|
+
is constructed for you. (It can also be set via the EntityManager.setProperties method).
|
|
10
|
+
|
|
11
|
+
The same applies to the MetadataStore.fetchMetadata method, i.e. it takes either a serviceName or a DataService instance.
|
|
12
|
+
|
|
13
|
+
Each metadataStore contains a list of DataServices, each accessible via its ‘serviceName’.
|
|
14
|
+
( see MetadataStore.getDataService and MetadataStore.addDataService). The ‘addDataService’ method is called internally
|
|
15
|
+
anytime a MetadataStore.fetchMetadata call occurs with a new dataService ( or service name).
|
|
16
|
+
|
|
17
|
+
**/
|
|
18
|
+
export class DataService {
|
|
19
|
+
/** DataService constructor
|
|
20
|
+
> var dataService = new DataService({
|
|
21
|
+
> serviceName: altServiceName,
|
|
22
|
+
> hasServerMetadata: false
|
|
23
|
+
> });
|
|
24
|
+
|
|
25
|
+
> var metadataStore = new MetadataStore({
|
|
26
|
+
> namingConvention: NamingConvention.camelCase
|
|
27
|
+
> });
|
|
28
|
+
|
|
29
|
+
> return new EntityManager({
|
|
30
|
+
> dataService: dataService,
|
|
31
|
+
> metadataStore: metadataStore
|
|
32
|
+
> });
|
|
33
|
+
@param config - A configuration object.
|
|
34
|
+
**/
|
|
35
|
+
constructor(config) {
|
|
36
|
+
updateWithConfig(this, config);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
Returns a copy of this DataService with the specified properties applied.
|
|
40
|
+
@param config - The configuration object to apply to create a new DataService.
|
|
41
|
+
**/
|
|
42
|
+
using(config) {
|
|
43
|
+
if (!config)
|
|
44
|
+
return this;
|
|
45
|
+
let result = new DataService(this);
|
|
46
|
+
return updateWithConfig(result, config);
|
|
47
|
+
}
|
|
48
|
+
static resolve(dataServices) {
|
|
49
|
+
// final defaults
|
|
50
|
+
// Deliberate use of 'as any' below.
|
|
51
|
+
dataServices.push({
|
|
52
|
+
hasServerMetadata: true,
|
|
53
|
+
useJsonp: false
|
|
54
|
+
});
|
|
55
|
+
let ds = new DataService(core.resolveProperties(dataServices, ["serviceName", "adapterName", "uriBuilderName", "hasServerMetadata", "jsonResultsAdapter", "useJsonp"]));
|
|
56
|
+
if (!ds.serviceName) {
|
|
57
|
+
throw new Error("Unable to resolve a 'serviceName' for this dataService");
|
|
58
|
+
}
|
|
59
|
+
ds.adapterInstance = ds.adapterInstance || config.getAdapterInstance("dataService", ds.adapterName);
|
|
60
|
+
ds.jsonResultsAdapter = ds.jsonResultsAdapter || ds.adapterInstance.jsonResultsAdapter;
|
|
61
|
+
ds.uriBuilder = ds.uriBuilder || config.getAdapterInstance("uriBuilder", ds.uriBuilderName);
|
|
62
|
+
return ds;
|
|
63
|
+
}
|
|
64
|
+
/** @hidden @internal */
|
|
65
|
+
static _normalizeServiceName(serviceName) {
|
|
66
|
+
serviceName = serviceName.trim();
|
|
67
|
+
if (serviceName.substr(-1) !== "/") {
|
|
68
|
+
return serviceName + '/';
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
return serviceName;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/** */
|
|
75
|
+
toJSON() {
|
|
76
|
+
// don't use default value here - because we want to be able to distinguish undefined props for inheritence purposes.
|
|
77
|
+
return core.toJson(this, {
|
|
78
|
+
serviceName: null,
|
|
79
|
+
adapterName: null,
|
|
80
|
+
uriBuilderName: null,
|
|
81
|
+
hasServerMetadata: null,
|
|
82
|
+
jsonResultsAdapter: function (v) {
|
|
83
|
+
return v && v.name;
|
|
84
|
+
},
|
|
85
|
+
useJsonp: null
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
static fromJSON(json) {
|
|
89
|
+
json.jsonResultsAdapter = config._fetchObject(JsonResultsAdapter, json.jsonResultsAdapter);
|
|
90
|
+
return new DataService(json);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
Returns a url for this dataService with the specified suffix. This method handles dataService names either
|
|
94
|
+
with or without trailing '/'s. If the suffix starts with "http" then it will be returned as-is.
|
|
95
|
+
@method qualifyUrl
|
|
96
|
+
@param suffix {String} The resulting url.
|
|
97
|
+
@return {a Url string}
|
|
98
|
+
**/
|
|
99
|
+
qualifyUrl(suffix) {
|
|
100
|
+
if (suffix && suffix.startsWith("http")) {
|
|
101
|
+
return suffix;
|
|
102
|
+
}
|
|
103
|
+
let url = this.serviceName;
|
|
104
|
+
// remove any trailing "/"
|
|
105
|
+
if (core.stringEndsWith(url, "/")) {
|
|
106
|
+
url = url.substr(0, url.length - 1);
|
|
107
|
+
}
|
|
108
|
+
// ensure that it ends with "/" + suffix
|
|
109
|
+
suffix = "/" + suffix;
|
|
110
|
+
if (!core.stringEndsWith(url, suffix)) {
|
|
111
|
+
url = url + suffix;
|
|
112
|
+
}
|
|
113
|
+
return url;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
DataService.prototype._$typeName = "DataService";
|
|
117
|
+
function updateWithConfig(obj, dsConfig) {
|
|
118
|
+
if (dsConfig) {
|
|
119
|
+
assertConfig(dsConfig)
|
|
120
|
+
.whereParam("serviceName").isOptional()
|
|
121
|
+
.whereParam("adapterName").isString().isOptional()
|
|
122
|
+
.whereParam("uriBuilderName").isString().isOptional()
|
|
123
|
+
.whereParam("hasServerMetadata").isBoolean().isOptional()
|
|
124
|
+
.whereParam("jsonResultsAdapter").isInstanceOf(JsonResultsAdapter).isOptional()
|
|
125
|
+
.whereParam("useJsonp").isBoolean().isOptional()
|
|
126
|
+
.applyAll(obj);
|
|
127
|
+
obj.serviceName = obj.serviceName && DataService._normalizeServiceName(obj.serviceName);
|
|
128
|
+
obj.adapterInstance = obj.adapterName ? config.getAdapterInstance("dataService", obj.adapterName) : undefined;
|
|
129
|
+
obj.uriBuilder = obj.uriBuilderName ? config.getAdapterInstance("uriBuilder", obj.uriBuilderName) : undefined;
|
|
130
|
+
}
|
|
131
|
+
return obj;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
A JsonResultsAdapter instance is used to provide custom extraction and parsing logic on the json results returned by any web service.
|
|
135
|
+
This facility makes it possible for breeze to talk to virtually any web service and return objects that will be first class 'breeze' citizens.
|
|
136
|
+
**/
|
|
137
|
+
export class JsonResultsAdapter {
|
|
138
|
+
/**
|
|
139
|
+
JsonResultsAdapter constructor
|
|
140
|
+
|
|
141
|
+
@example
|
|
142
|
+
//
|
|
143
|
+
var jsonResultsAdapter = new JsonResultsAdapter({
|
|
144
|
+
name: "test1e",
|
|
145
|
+
extractResults: function(json) {
|
|
146
|
+
return json.results;
|
|
147
|
+
},
|
|
148
|
+
visitNode: function(node, mappingContext, nodeContext) {
|
|
149
|
+
var entityType = normalizeTypeName(node.$type);
|
|
150
|
+
var propertyName = nodeContext.propertyName;
|
|
151
|
+
var ignore = propertyName && propertyName.substr(0, 1) === "$";
|
|
152
|
+
|
|
153
|
+
return {
|
|
154
|
+
entityType: entityType,
|
|
155
|
+
nodeId: node.$id,
|
|
156
|
+
nodeRefId: node.$ref,
|
|
157
|
+
ignore: ignore,
|
|
158
|
+
passThru: false // default
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
var dataService = new DataService( {
|
|
164
|
+
serviceName: "breeze/foo",
|
|
165
|
+
jsonResultsAdapter: jsonResultsAdapter
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
var entityManager = new EntityManager( {
|
|
169
|
+
dataService: dataService
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
@param config - A configuration object.
|
|
173
|
+
|
|
174
|
+
**/
|
|
175
|
+
constructor(jsConfig) {
|
|
176
|
+
if (arguments.length !== 1) {
|
|
177
|
+
throw new Error("The JsonResultsAdapter ctor should be called with a single argument that is a configuration object.");
|
|
178
|
+
}
|
|
179
|
+
assertConfig(jsConfig)
|
|
180
|
+
.whereParam("name").isNonEmptyString()
|
|
181
|
+
.whereParam("extractResults").isFunction().isOptional().withDefault(extractResultsDefault)
|
|
182
|
+
.whereParam("extractSaveResults").isFunction().isOptional().withDefault(extractSaveResultsDefault)
|
|
183
|
+
.whereParam("extractKeyMappings").isFunction().isOptional().withDefault(extractKeyMappingsDefault)
|
|
184
|
+
.whereParam("extractDeletedKeys").isFunction().isOptional().withDefault(extractDeletedKeysDefault)
|
|
185
|
+
.whereParam("visitNode").isFunction()
|
|
186
|
+
.applyAll(this);
|
|
187
|
+
config._storeObject(this, "JsonResultsAdapter", this.name);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
JsonResultsAdapter.prototype._$typeName = "JsonResultsAdapter";
|
|
191
|
+
function extractResultsDefault(data) {
|
|
192
|
+
return data.results;
|
|
193
|
+
}
|
|
194
|
+
function extractSaveResultsDefault(data) {
|
|
195
|
+
return data.entities || data.Entities || [];
|
|
196
|
+
}
|
|
197
|
+
function extractKeyMappingsDefault(data) {
|
|
198
|
+
return data.keyMappings || data.KeyMappings || [];
|
|
199
|
+
}
|
|
200
|
+
function extractDeletedKeysDefault(data) {
|
|
201
|
+
return data.deletedKeys || data.DeletedKeys || [];
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC8iLCJzb3VyY2VzIjpbInNyYy9kYXRhLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQWlCOUI7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sT0FBTyxXQUFXO0lBb0J0Qjs7Ozs7Ozs7Ozs7Ozs7O09BZUc7SUFDSCxZQUFZLE1BQTBCO1FBQ3BDLGdCQUFnQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBR0Q7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLE1BQXlCO1FBQzdCLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDekIsSUFBSSxNQUFNLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBMkI7UUFDeEMsaUJBQWlCO1FBQ2pCLG9DQUFvQztRQUNuQyxZQUFvQixDQUFDLElBQUksQ0FBQztZQUN6QixpQkFBaUIsRUFBRSxJQUFJO1lBQ3ZCLFFBQVEsRUFBRSxLQUFLO1NBQ2hCLENBQUMsQ0FBQztRQUNILElBQUksRUFBRSxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQ3hELENBQUMsYUFBYSxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFOUcsSUFBSSxDQUFDLEVBQUUsQ0FB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QyxXQUFXLElBQUksRUFBRSxDQUFDO0FBQ3BELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnRpdHlUeXBlLCBOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tICcuL2VudGl0eS1tZXRhZGF0YSc7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlQWRhcHRlciwgVXJpQnVpbGRlckFkYXB0ZXIgfSBmcm9tICcuL2ludGVyZmFjZS1yZWdpc3RyeSc7XHJcbmltcG9ydCB7IEtleU1hcHBpbmcgfSBmcm9tICcuL2VudGl0eS1tYW5hZ2VyJztcclxuaW1wb3J0IHsgTWFwcGluZ0NvbnRleHQgfSBmcm9tICcuL21hcHBpbmctY29udGV4dCc7XHJcbmltcG9ydCB7IGFzc2VydENvbmZpZyB9IGZyb20gJy4vYXNzZXJ0LXBhcmFtJztcclxuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xyXG5pbXBvcnQgeyBjb3JlIH0gZnJvbSAnLi9jb3JlJztcclxuXHJcbi8qKiBDb25maWd1cmF0aW9uIGluZm8gdG8gYmUgcGFzc2VkIHRvIHRoZSBbW0RhdGFTZXJ2aWNlXV0gY29uc3RydWN0b3IgKi9cclxuZXhwb3J0IGludGVyZmFjZSBEYXRhU2VydmljZUNvbmZpZyB7XHJcbiAgLyoqIFRoZSBzZXJ2aWNlTmFtZSBmb3IgdGhpcyBEYXRhU2VydmljZS4gICoqL1xyXG4gIHNlcnZpY2VOYW1lPzogc3RyaW5nO1xyXG4gIC8qKiBUaGUgYWRhcHRlciBuYW1lIGZvciB0aGUgW1tJRGF0YVNlcnZpY2VBZGFwdGVyXV0gdG8gYmUgdXNlZCB3aXRoIHRoaXMgc2VydmljZS4gICoqL1xyXG4gIGFkYXB0ZXJOYW1lPzogc3RyaW5nO1xyXG4gIC8qKiBUaGUgYWRhcHRlciBuYW1lIGZvciB0aGUgW1tJVXJpQnVpbGRlckFkYXB0ZXJdXSB0byBiZSB1c2VkIHdpdGggdGhpcyBzZXJ2aWNlLiAgKiovXHJcbiAgdXJpQnVpbGRlck5hbWU/OiBzdHJpbmc7XHJcbiAgLyoqIFdoZXRoZXIgdGhlIHNlcnZlciBjYW4gcHJvdmlkZSBtZXRhZGF0YSBmb3IgdGhpcyBzZXJ2aWNlLiAgKiovXHJcbiAgaGFzU2VydmVyTWV0YWRhdGE/OiBib29sZWFuO1xyXG4gIC8qKiBUaGUgW1tKc29uUmVzdWx0c0FkYXB0ZXJdXSB1c2VkIHRvIHByb2Nlc3MgdGhlIHJlc3VsdHMgb2YgYW55IHF1ZXJ5IGFnYWluc3QgdGhpcyBEYXRhU2VydmljZS4gICoqL1xyXG4gIGpzb25SZXN1bHRzQWRhcHRlcj86IEpzb25SZXN1bHRzQWRhcHRlcjtcclxuICAvKiogV2hldGhlciB0byB1c2UgSlNPTlAgd2hlbiBwZXJmb3JtaW5nIGEgJ0dFVCcgcmVxdWVzdCBhZ2FpbnN0IHRoaXMgc2VydmljZS4gICoqL1xyXG4gIHVzZUpzb25wPzogYm9vbGVhbjtcclxufVxyXG4vKipcclxuQSBEYXRhU2VydmljZSBpbnN0YW5jZSBpcyB1c2VkIHRvIGVuY2Fwc3VsYXRlIHRoZSBkZXRhaWxzIG9mIGEgc2luZ2xlICdzZXJ2aWNlJzsgdGhpcyBpbmNsdWRlcyBhIHNlcnZpY2VOYW1lLCBhIGRhdGFTZXJ2aWNlIGFkYXB0ZXJJbnN0YW5jZSxcclxuYW5kIHdoZXRoZXIgdGhlIHNlcnZpY2UgaGFzIHNlcnZlciBzaWRlIG1ldGFkYXRhLlxyXG5cclxuWW91IGNhbiBjb25zdHJ1Y3QgYW4gRW50aXR5TWFuYWdlciB3aXRoIGVpdGhlciBhIHNlcnZpY2VOYW1lIG9yIGEgRGF0YVNlcnZpY2UgaW5zdGFuY2UsIGlmIHlvdSB1c2UgYSBzZXJ2aWNlTmFtZSB0aGVuIGEgRGF0YVNlcnZpY2VcclxuaXMgY29uc3RydWN0ZWQgZm9yIHlvdS4gIChJdCBjYW4gYWxzbyBiZSBzZXQgdmlhIHRoZSBFbnRpdHlNYW5hZ2VyLnNldFByb3BlcnRpZXMgbWV0aG9kKS5cclxuXHJcblRoZSBzYW1lIGFwcGxpZXMgdG8gdGhlIE1ldGFkYXRhU3RvcmUuZmV0Y2hNZXRhZGF0YSBtZXRob2QsIGkuZS4gaXQgdGFrZXMgZWl0aGVyIGEgc2VydmljZU5hbWUgb3IgYSBEYXRhU2VydmljZSBpbnN0YW5jZS5cclxuXHJcbkVhY2ggbWV0YWRhdGFTdG9yZSBjb250YWlucyBhIGxpc3Qgb2YgRGF0YVNlcnZpY2VzLCBlYWNoIGFjY2Vzc2libGUgdmlhIGl0cyDigJhzZXJ2aWNlTmFtZeKAmS5cclxuKCBzZWUgTWV0YWRhdGFTdG9yZS5nZXREYXRhU2VydmljZSBhbmQgTWV0YWRhdGFTdG9yZS5hZGREYXRhU2VydmljZSkuICBUaGUg4oCYYWRkRGF0YVNlcnZpY2XigJkgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbGx5XHJcbmFueXRpbWUgYSBNZXRhZGF0YVN0b3JlLmZldGNoTWV0YWRhdGEgY2FsbCBvY2N1cnMgd2l0aCBhIG5ldyBkYXRhU2VydmljZSAoIG9yIHNlcnZpY2UgbmFtZSkuXHJcblxyXG4qKi9cclxuZXhwb3J0IGNsYXNzIERhdGFTZXJ2aWNlIHtcclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBkZWNsYXJlIF8kdHlwZU5hbWU6IHN0cmluZzsgLy8gYWN0dWFsbHkgcHV0IG9uIHByb3RvdHlwZS5cclxuICAvKiogVGhlIHNlcnZpY2VOYW1lIGZvciB0aGlzIERhdGFTZXJ2aWNlLiBfX1JlYWQgT25seV9fICoqL1xyXG4gIGRlY2xhcmUgc2VydmljZU5hbWU6IHN0cmluZztcclxuICAvKiogVGhlIGFkYXB0ZXIgbmFtZSBmb3IgdGhlIFtbSURhdGFTZXJ2aWNlQWRhcHRlcl1dIHRvIGJlIHVzZWQgd2l0aCB0aGlzIHNlcnZpY2UuIF9fUmVhZCBPbmx5X18gICoqL1xyXG4gIGRlY2xhcmUgYWRhcHRlck5hbWU6IHN0cmluZztcclxuICAvKiogIFRoZSBbW0lEYXRhU2VydmljZUFkYXB0ZXJdXSBpbXBsZW1lbnRhdGlvbiBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBFbnRpdHlNYW5hZ2VyLiBfX1JlYWQgT25seV9fICAqKi9cclxuICBkZWNsYXJlIGFkYXB0ZXJJbnN0YW5jZT86IERhdGFTZXJ2aWNlQWRhcHRlcjtcclxuICAvKiogVGhlIGFkYXB0ZXIgbmFtZSBmb3IgdGhlIFtbSVVyaUJ1aWxkZXJBZGFwdGVyXV0gdG8gYmUgdXNlZCB3aXRoIHRoaXMgc2VydmljZS4gX19SZWFkIE9ubHlfXyAgKiovXHJcbiAgZGVjbGFyZSB1cmlCdWlsZGVyTmFtZTogc3RyaW5nO1xyXG4gIC8qKiAgVGhlIFtbSVVyaUJ1aWxkZXJBZGFwdGVyXV0gaW1wbGVtZW50YXRpb24gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgRW50aXR5TWFuYWdlci4gX19SZWFkIE9ubHlfXyAgKiovXHJcbiAgZGVjbGFyZSB1cmlCdWlsZGVyPzogVXJpQnVpbGRlckFkYXB0ZXI7XHJcbiAgLyoqIFdoZXRoZXIgdGhlIHNlcnZlciBjYW4gcHJvdmlkZSBtZXRhZGF0YSBmb3IgdGhpcyBzZXJ2aWNlLiBfX1JlYWQgT25seV9fICAgKiovXHJcbiAgZGVjbGFyZSBoYXNTZXJ2ZXJNZXRhZGF0YTogYm9vbGVhbjtcclxuICAvKiogVGhlIFtbSnNvblJlc3VsdHNBZGFwdGVyXV0gdXNlZCB0byBwcm9jZXNzIHRoZSByZXN1bHRzIG9mIGFueSBxdWVyeSBhZ2FpbnN0IHRoaXMgRGF0YVNlcnZpY2UuIF9fUmVhZCBPbmx5X18gKiovXHJcbiAgZGVjbGFyZSBqc29uUmVzdWx0c0FkYXB0ZXI6IEpzb25SZXN1bHRzQWRhcHRlcjtcclxuICAvKiogV2hldGhlciB0byB1c2UgSlNPTlAgd2hlbiBwZXJmb3JtaW5nIGEgJ0dFVCcgcmVxdWVzdCBhZ2FpbnN0IHRoaXMgc2VydmljZS4gX19SZWFkIE9ubHlfXyAgKiovXHJcbiAgZGVjbGFyZSB1c2VKc29ucDogYm9vbGVhbjtcclxuXHJcbiAgLyoqICAgRGF0YVNlcnZpY2UgY29uc3RydWN0b3JcclxuICA+ICAgICB2YXIgZGF0YVNlcnZpY2UgPSBuZXcgRGF0YVNlcnZpY2Uoe1xyXG4gID4gICAgICAgICBzZXJ2aWNlTmFtZTogYWx0U2VydmljZU5hbWUsXHJcbiAgPiAgICAgICAgIGhhc1NlcnZlck1ldGFkYXRhOiBmYWxzZVxyXG4gID4gICAgIH0pO1xyXG5cclxuICA+ICAgICB2YXIgbWV0YWRhdGFTdG9yZSA9IG5ldyBNZXRhZGF0YVN0b3JlKHtcclxuICA+ICAgICAgICAgbmFtaW5nQ29udmVudGlvbjogTmFtaW5nQ29udmVudGlvbi5jYW1lbENhc2VcclxuICA+ICAgICB9KTtcclxuXHJcbiAgPiAgICAgcmV0dXJuIG5ldyBFbnRpdHlNYW5hZ2VyKHtcclxuICA+ICAgICAgICAgZGF0YVNlcnZpY2U6IGRhdGFTZXJ2aWNlLFxyXG4gID4gICAgICAgICBtZXRhZGF0YVN0b3JlOiBtZXRhZGF0YVN0b3JlXHJcbiAgPiAgICAgfSk7XHJcbiAgQHBhcmFtIGNvbmZpZyAtIEEgY29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAgKiovXHJcbiAgY29uc3RydWN0b3IoY29uZmlnPzogRGF0YVNlcnZpY2VDb25maWcpIHtcclxuICAgIHVwZGF0ZVdpdGhDb25maWcodGhpcywgY29uZmlnKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICBSZXR1cm5zIGEgY29weSBvZiB0aGlzIERhdGFTZXJ2aWNlIHdpdGggdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzIGFwcGxpZWQuXHJcbiAgQHBhcmFtIGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdCB0byBhcHBseSB0byBjcmVhdGUgYSBuZXcgRGF0YVNlcnZpY2UuXHJcbiAgKiovXHJcbiAgdXNpbmcoY29uZmlnOiBEYXRhU2VydmljZUNvbmZpZykge1xyXG4gICAgaWYgKCFjb25maWcpIHJldHVybiB0aGlzO1xyXG4gICAgbGV0IHJlc3VsdCA9IG5ldyBEYXRhU2VydmljZSh0aGlzKTtcclxuICAgIHJldHVybiB1cGRhdGVXaXRoQ29uZmlnKHJlc3VsdCwgY29uZmlnKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyByZXNvbHZlKGRhdGFTZXJ2aWNlczogRGF0YVNlcnZpY2VbXSkge1xyXG4gICAgLy8gZmluYWwgZGVmYXVsdHNcclxuICAgIC8vIERlbGliZXJhdGUgdXNlIG9mICdhcyBhbnknIGJlbG93LlxyXG4gICAgKGRhdGFTZXJ2aWNlcyBhcyBhbnkpLnB1c2goe1xyXG4gICAgICBoYXNTZXJ2ZXJNZXRhZGF0YTogdHJ1ZSxcclxuICAgICAgdXNlSnNvbnA6IGZhbHNlXHJcbiAgICB9KTtcclxuICAgIGxldCBkcyA9IG5ldyBEYXRhU2VydmljZShjb3JlLnJlc29sdmVQcm9wZXJ0aWVzKGRhdGFTZXJ2aWNlcyxcclxuICAgICAgICBbXCJzZXJ2aWNlTmFtZVwiLCBcImFkYXB0ZXJOYW1lXCIsIFwidXJpQnVpbGRlck5hbWVcIiwgXCJoYXNTZXJ2ZXJNZXRhZGF0YVwiLCBcImpzb25SZXN1bHRzQWRhcHRlclwiLCBcInVzZUpzb25wXCJdKSk7XHJcblxyXG4gICAgaWYgKCFkcy5zZXJ2aWNlTmFtZSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gcmVzb2x2ZSBhICdzZXJ2aWNlTmFtZScgZm9yIHRoaXMgZGF0YVNlcnZpY2VcIik7XHJcbiAgICB9XHJcbiAgICBkcy5hZGFwdGVySW5zdGFuY2UgPSBkcy5hZGFwdGVySW5zdGFuY2UgfHwgY29uZmlnLmdldEFkYXB0ZXJJbnN0YW5jZTxEYXRhU2VydmljZUFkYXB0ZXI+KFwiZGF0YVNlcnZpY2VcIiwgZHMuYWRhcHRlck5hbWUpO1xyXG4gICAgZHMuanNvblJlc3VsdHNBZGFwdGVyID0gZHMuanNvblJlc3VsdHNBZGFwdGVyIHx8IGRzLmFkYXB0ZXJJbnN0YW5jZSEuanNvblJlc3VsdHNBZGFwdGVyO1xyXG4gICAgZHMudXJpQnVpbGRlciA9IGRzLnVyaUJ1aWxkZXIgfHwgY29uZmlnLmdldEFkYXB0ZXJJbnN0YW5jZTxVcmlCdWlsZGVyQWRhcHRlcj4oXCJ1cmlCdWlsZGVyXCIsIGRzLnVyaUJ1aWxkZXJOYW1lKTtcclxuICAgIHJldHVybiBkcztcclxuICB9XHJcblxyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIHN0YXRpYyBfbm9ybWFsaXplU2VydmljZU5hbWUoc2VydmljZU5hbWU6IHN0cmluZykge1xyXG4gICAgc2VydmljZU5hbWUgPSBzZXJ2aWNlTmFtZS50cmltKCk7XHJcbiAgICBpZiAoc2VydmljZU5hbWUuc3Vic3RyKC0xKSAhPT0gXCIvXCIpIHtcclxuICAgICAgcmV0dXJuIHNlcnZpY2VOYW1lICsgJy8nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHNlcnZpY2VOYW1lO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqICAqL1xyXG4gIHRvSlNPTigpIHtcclxuICAgIC8vIGRvbid0IHVzZSBkZWZhdWx0IHZhbHVlIGhlcmUgLSBiZWNhdXNlIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBkaXN0aW5ndWlzaCB1bmRlZmluZWQgcHJvcHMgZm9yIGluaGVyaXRlbmNlIHB1cnBvc2VzLlxyXG4gICAgcmV0dXJuIGNvcmUudG9Kc29uKHRoaXMsIHtcclxuICAgICAgc2VydmljZU5hbWU6IG51bGwsXHJcbiAgICAgIGFkYXB0ZXJOYW1lOiBudWxsLFxyXG4gICAgICB1cmlCdWlsZGVyTmFtZTogbnVsbCxcclxuICAgICAgaGFzU2VydmVyTWV0YWRhdGE6IG51bGwsXHJcbiAgICAgIGpzb25SZXN1bHRzQWRhcHRlcjogZnVuY3Rpb24gKHY6IGFueSkge1xyXG4gICAgICAgIHJldHVybiB2ICYmIHYubmFtZTtcclxuICAgICAgfSxcclxuICAgICAgdXNlSnNvbnA6IG51bGxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21KU09OKGpzb246IGFueSkge1xyXG4gICAganNvbi5qc29uUmVzdWx0c0FkYXB0ZXIgPSBjb25maWcuX2ZldGNoT2JqZWN0KEpzb25SZXN1bHRzQWRhcHRlciwganNvbi5qc29uUmVzdWx0c0FkYXB0ZXIpO1xyXG4gICAgcmV0dXJuIG5ldyBEYXRhU2VydmljZShqc29uKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICBSZXR1cm5zIGEgdXJsIGZvciB0aGlzIGRhdGFTZXJ2aWNlIHdpdGggdGhlIHNwZWNpZmllZCBzdWZmaXguIFRoaXMgbWV0aG9kIGhhbmRsZXMgZGF0YVNlcnZpY2UgbmFtZXMgZWl0aGVyXHJcbiAgIHdpdGggb3Igd2l0aG91dCB0cmFpbGluZyAnLydzLiAgSWYgdGhlIHN1ZmZpeCBzdGFydHMgd2l0aCBcImh0dHBcIiB0aGVuIGl0IHdpbGwgYmUgcmV0dXJuZWQgYXMtaXMuXHJcbiAgIEBtZXRob2QgcXVhbGlmeVVybFxyXG4gICBAcGFyYW0gc3VmZml4IHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgdXJsLlxyXG4gICBAcmV0dXJuIHthIFVybCBzdHJpbmd9XHJcbiAgICoqL1xyXG4gIHF1YWxpZnlVcmwoc3VmZml4OiBzdHJpbmcpIHtcclxuICAgIGlmIChzdWZmaXggJiYgc3VmZml4LnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XHJcbiAgICAgIHJldHVybiBzdWZmaXg7XHJcbiAgICB9XHJcbiAgICBsZXQgdXJsID0gdGhpcy5zZXJ2aWNlTmFtZTtcclxuICAgIC8vIHJlbW92ZSBhbnkgdHJhaWxpbmcgXCIvXCJcclxuICAgIGlmIChjb3JlLnN0cmluZ0VuZHNXaXRoKHVybCwgXCIvXCIpKSB7XHJcbiAgICAgIHVybCA9IHVybC5zdWJzdHIoMCwgdXJsLmxlbmd0aCAtIDEpO1xyXG4gICAgfVxyXG4gICAgLy8gZW5zdXJlIHRoYXQgaXQgZW5kcyB3aXRoIFwiL1wiICsgc3VmZml4XHJcbiAgICBzdWZmaXggPSBcIi9cIiArIHN1ZmZpeDtcclxuICAgIGlmICghY29yZS5zdHJpbmdFbmRzV2l0aCh1cmwsIHN1ZmZpeCkpIHtcclxuICAgICAgdXJsID0gdXJsICsgc3VmZml4O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVybDtcclxuICB9XHJcblxyXG59XHJcbkRhdGFTZXJ2aWNlLnByb3RvdHlwZS5fJHR5cGVOYW1lID0gXCJEYXRhU2VydmljZVwiO1xyXG5cclxuZnVuY3Rpb24gdXBkYXRlV2l0aENvbmZpZyhvYmo6IERhdGFTZXJ2aWNlLCBkc0NvbmZpZz86IERhdGFTZXJ2aWNlQ29uZmlnKSB7XHJcbiAgaWYgKGRzQ29uZmlnKSB7XHJcbiAgICBhc3NlcnRDb25maWcoZHNDb25maWcpXHJcbiAgICAgICAgLndoZXJlUGFyYW0oXCJzZXJ2aWNlTmFtZVwiKS5pc09wdGlvbmFsKClcclxuICAgICAgICAud2hlcmVQYXJhbShcImFkYXB0ZXJOYW1lXCIpLmlzU3RyaW5nKCkuaXNPcHRpb25hbCgpXHJcbiAgICAgICAgLndoZXJlUGFyYW0oXCJ1cmlCdWlsZGVyTmFtZVwiKS5pc1N0cmluZygpLmlzT3B0aW9uYWwoKVxyXG4gICAgICAgIC53aGVyZVBhcmFtKFwiaGFzU2VydmVyTWV0YWRhdGFcIikuaXNCb29sZWFuKCkuaXNPcHRpb25hbCgpXHJcbiAgICAgICAgLndoZXJlUGFyYW0oXCJqc29uUmVzdWx0c0FkYXB0ZXJcIikuaXNJbnN0YW5jZU9mKEpzb25SZXN1bHRzQWRhcHRlcikuaXNPcHRpb25hbCgpXHJcbiAgICAgICAgLndoZXJlUGFyYW0oXCJ1c2VKc29ucFwiKS5pc0Jvb2xlYW4oKS5pc09wdGlvbmFsKClcclxuICAgICAgICAuYXBwbHlBbGwob2JqKTtcclxuICAgIG9iai5zZXJ2aWNlTmFtZSA9IG9iai5zZXJ2aWNlTmFtZSAmJiBEYXRhU2VydmljZS5fbm9ybWFsaXplU2VydmljZU5hbWUob2JqLnNlcnZpY2VOYW1lKTtcclxuICAgIG9iai5hZGFwdGVySW5zdGFuY2UgPSBvYmouYWRhcHRlck5hbWUgPyAgY29uZmlnLmdldEFkYXB0ZXJJbnN0YW5jZTxEYXRhU2VydmljZUFkYXB0ZXI+KFwiZGF0YVNlcnZpY2VcIiwgb2JqLmFkYXB0ZXJOYW1lKSA6IHVuZGVmaW5lZDtcclxuICAgIG9iai51cmlCdWlsZGVyID0gb2JqLnVyaUJ1aWxkZXJOYW1lID8gY29uZmlnLmdldEFkYXB0ZXJJbnN0YW5jZTxVcmlCdWlsZGVyQWRhcHRlcj4oXCJ1cmlCdWlsZGVyXCIsIG9iai51cmlCdWlsZGVyTmFtZSkgOiB1bmRlZmluZWQ7XHJcbiAgfVxyXG4gIHJldHVybiBvYmo7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTm9kZU1ldGEge1xyXG4gIGVudGl0eVR5cGU/OiBFbnRpdHlUeXBlO1xyXG4gIG5vZGVJZD86IHN0cmluZztcclxuICBub2RlUmVmSWQ/OiBzdHJpbmc7XHJcbiAgaWdub3JlPzogYm9vbGVhbjtcclxuICBwYXNzVGhydT86IGJvb2xlYW47XHJcbiAgZXh0cmFNZXRhZGF0YT86IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBOb2RlQ29udGV4dCB7XHJcbiAgbm9kZVR5cGU6IHN0cmluZztcclxuICBwcm9wZXJ0eU5hbWU/OiBzdHJpbmc7XHJcbiAgbmF2aWdhdGlvblByb3BlcnR5PzogTmF2aWdhdGlvblByb3BlcnR5O1xyXG59XHJcblxyXG4vKiogQ29uZmlndXJhdGlvbiBpbmZvIHRvIGJlIHBhc3NlZCB0byB0aGUgW1tKc29uUmVzdWx0c0FkYXB0ZXJdXSBjb25zdHJ1Y3RvciAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEpzb25SZXN1bHRzQWRhcHRlckNvbmZpZyB7XHJcbiAgLyoqIFRoZSBuYW1lIG9mIHRoaXMgYWRhcHRlci4gIFRoaXMgbmFtZSBpcyB1c2VkIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IGFuZCBsb2NhdGUgdGhpcyBpbnN0YW5jZSB3aGVuIGFuICdleHBvcnRlZCcgSnNvblJlc3VsdHNBZGFwdGVyIGlzIGxhdGVyIGltcG9ydGVkLiAqL1xyXG4gIG5hbWU6IHN0cmluZztcclxuICAvKiogQSBGdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBvbmNlIHBlciBxdWVyeSBvcGVyYXRpb24gdG8gZXh0cmFjdCB0aGUgJ3BheWxvYWQnIGZyb20gYW55IGpzb24gcmVjZWl2ZWQgb3ZlciB0aGUgd2lyZS4gXHJcbiAgVGhpcyBtZXRob2QgaGFzIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aGljaCB0byBzaW1wbHkgcmV0dXJuIHRoZSBcInJlc3VsdHNcIiBwcm9wZXJ0eSBmcm9tIGFueSBqc29uIHJldHVybmVkIGFzIGEgcmVzdWx0IG9mIGV4ZWN1dGluZyB0aGUgcXVlcnkuIFxyXG4gICovXHJcbiAgZXh0cmFjdFJlc3VsdHM/OiBGdW5jdGlvbjtcclxuICAvKiogQSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBvbmNlIHBlciBzYXZlIG9wZXJhdGlvbiB0byBleHRyYWN0IHRoZSBlbnRpdGllcyBmcm9tIGFueSBqc29uIHJlY2VpdmVkIG92ZXIgdGhlIHdpcmUuICBNdXN0IHJldHVybiBhbiBhcnJheS5cclxuICBUaGlzIG1ldGhvZCBoYXMgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdoaWNoIHNpbXBseSByZXR1cm5zIHRoZSBcImVudGl0aWVzXCIgcHJvcGVydHkgZnJvbSBhbnkganNvbiByZXR1cm5lZCBhcyBhIHJlc3VsdCBvZiBleGVjdXRpbmcgdGhlIHNhdmUuICovXHJcbiAgZXh0cmFjdFNhdmVSZXN1bHRzPzogRnVuY3Rpb247XHJcbiAgLyoqIEEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgb25jZSBwZXIgc2F2ZSBvcGVyYXRpb24gdG8gZXh0cmFjdCB0aGUga2V5IG1hcHBpbmdzIGZyb20gYW55IGpzb24gcmVjZWl2ZWQgb3ZlciB0aGUgd2lyZS4gIE11c3QgcmV0dXJuIGFuIGFycmF5LlxyXG4gIFRoaXMgbWV0aG9kIGhhcyBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2hpY2ggc2ltcGx5IHJldHVybnMgdGhlIFwia2V5TWFwcGluZ3NcIiBwcm9wZXJ0eSBmcm9tIGFueSBqc29uIHJldHVybmVkIGFzIGEgcmVzdWx0IG9mIGV4ZWN1dGluZyB0aGUgc2F2ZS4gKi9cclxuICBleHRyYWN0S2V5TWFwcGluZ3M/OiAoZGF0YToge30pID0+IEtleU1hcHBpbmdbXTtcclxuICAvKiogQSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBvbmNlIHBlciBzYXZlIG9wZXJhdGlvbiB0byBleHRyYWN0IGFueSBkZWxldGVkIGtleXMgZnJvbSBhbnkganNvbiByZWNlaXZlZCBvdmVyIHRoZSB3aXJlLiAgTXVzdCByZXR1cm4gYW4gYXJyYXkuXHJcbiAgVGhpcyBtZXRob2QgaGFzIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aGljaCBzaW1wbHkgcmV0dXJucyBhbiBlbXB0eSBhcnJheS4gKi9cclxuICBleHRyYWN0RGVsZXRlZEtleXM/OiAoZGF0YToge30pID0+IGFueVtdOyAvLyBUT0RPOiByZWZpbmVcclxuICAvKiogQSB2aXNpdG9yIG1ldGhvZCB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggbm9kZSBvZiB0aGUgcmV0dXJuZWQgcGF5bG9hZC4gKi9cclxuICB2aXNpdE5vZGU/OiAodjogYW55LCBtYz86IE1hcHBpbmdDb250ZXh0LCBub2RlQ29udGV4dD86IE5vZGVDb250ZXh0KSA9PiBOb2RlTWV0YTtcclxuXHJcbn1cclxuXHJcbi8qKlxyXG5BIEpzb25SZXN1bHRzQWRhcHRlciBpbnN0YW5jZSBpcyB1c2VkIHRvIHByb3ZpZGUgY3VzdG9tIGV4dHJhY3Rpb24gYW5kIHBhcnNpbmcgbG9naWMgb24gdGhlIGpzb24gcmVzdWx0cyByZXR1cm5lZCBieSBhbnkgd2ViIHNlcnZpY2UuXHJcblRoaXMgZmFjaWxpdHkgbWFrZXMgaXQgcG9zc2libGUgZm9yIGJyZWV6ZSB0byB0YWxrIHRvIHZpcnR1YWxseSBhbnkgd2ViIHNlcnZpY2UgYW5kIHJldHVybiBvYmplY3RzIHRoYXQgd2lsbCBiZSBmaXJzdCBjbGFzcyAnYnJlZXplJyBjaXRpemVucy5cclxuKiovXHJcbmV4cG9ydCBjbGFzcyBKc29uUmVzdWx0c0FkYXB0ZXIge1xyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF8kdHlwZU5hbWU6IHN0cmluZzsgLy8gYWN0dWFsbHkgcHV0IG9uIHByb3RvdHlwZS5cclxuICAvKiogVGhlIG5hbWUgb2YgdGhpcyBhZGFwdGVyLiAgVGhpcyBuYW1lIGlzIHVzZWQgdG8gdW5pcXVlbHkgaWRlbnRpZnkgYW5kIGxvY2F0ZSB0aGlzIGluc3RhbmNlIHdoZW4gYW4gJ2V4cG9ydGVkJyBKc29uUmVzdWx0c0FkYXB0ZXIgaXMgbGF0ZXIgaW1wb3J0ZWQuICovXHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIC8qKiBBIEZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIG9uY2UgcGVyIHF1ZXJ5IG9wZXJhdGlvbiB0byBleHRyYWN0IHRoZSAncGF5bG9hZCcgZnJvbSBhbnkganNvbiByZWNlaXZlZCBvdmVyIHRoZSB3aXJlLiBcclxuICBUaGlzIG1ldGhvZCBoYXMgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdoaWNoIHNpbXBseSByZXR1cm5zIHRoZSBcInJlc3VsdHNcIiBwcm9wZXJ0eSBmcm9tIGFueSBqc29uIHJldHVybmVkIGFzIGEgcmVzdWx0IG9mIGV4ZWN1dGluZyB0aGUgcXVlcnkuICovXHJcbiAgZXh0cmFjdFJlc3VsdHM6IEZ1bmN0aW9uOyAvLyBUT0RPIC0gcmVmaW5lXHJcbiAgLyoqIEEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgb25jZSBwZXIgc2F2ZSBvcGVyYXRpb24gdG8gZXh0cmFjdCB0aGUgZW50aXRpZXMgZnJvbSBhbnkganNvbiByZWNlaXZlZCBvdmVyIHRoZSB3aXJlLiAgTXVzdCByZXR1cm4gYW4gYXJyYXkuXHJcbiAgVGhpcyBtZXRob2QgaGFzIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aGljaCBzaW1wbHkgcmV0dXJucyB0aGUgXCJlbnRpdGllc1wiIHByb3BlcnR5IGZyb20gYW55IGpzb24gcmV0dXJuZWQgYXMgYSByZXN1bHQgb2YgZXhlY3V0aW5nIHRoZSBzYXZlLiAqL1xyXG4gIGV4dHJhY3RTYXZlUmVzdWx0czogRnVuY3Rpb247XHJcbiAgICAvKiogQSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBvbmNlIHBlciBzYXZlIG9wZXJhdGlvbiB0byBleHRyYWN0IHRoZSBrZXkgbWFwcGluZ3MgZnJvbSBhbnkganNvbiByZWNlaXZlZCBvdmVyIHRoZSB3aXJlLiAgTXVzdCByZXR1cm4gYW4gYXJyYXkuXHJcbiAgVGhpcyBtZXRob2QgaGFzIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aGljaCBzaW1wbHkgcmV0dXJucyB0aGUgXCJrZXlNYXBwaW5nc1wiIHByb3BlcnR5IGZyb20gYW55IGpzb24gcmV0dXJuZWQgYXMgYSByZXN1bHQgb2YgZXhlY3V0aW5nIHRoZSBzYXZlLiAqL1xyXG4gIGV4dHJhY3RLZXlNYXBwaW5nczogIChkYXRhOiB7fSkgPT4gS2V5TWFwcGluZ1tdO1xyXG4gIC8qKiBBIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIG9uY2UgcGVyIHNhdmUgb3BlcmF0aW9uIHRvIGV4dHJhY3QgYW55IGRlbGV0ZWQga2V5cyBmcm9tIGFueSBqc29uIHJlY2VpdmVkIG92ZXIgdGhlIHdpcmUuICBNdXN0IHJldHVybiBhbiBhcnJheS5cclxuICBUaGlzIG1ldGhvZCBoYXMgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdoaWNoIGlzIHRvIHNpbXBseSByZXR1cm5zIHRoZSBcImRlbGV0ZWRLZXlzXCIgcHJvcGVydHkgZnJvbSBhbnkganNvbiByZXR1cm5lZCBhcyBhIHJlc3VsdCBvZiBleGVjdXRpbmcgdGhlIHNhdmUuICovXHJcbiAgZXh0cmFjdERlbGV0ZWRLZXlzPzogKGRhdGE6IHt9KSA9PiBhbnlbXTsgLy8gVE9ETzogcmVmaW5lXHJcbiAgLyoqIEEgdmlzaXRvciBtZXRob2QgdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIG5vZGUgb2YgdGhlIHJldHVybmVkIHBheWxvYWQuICovXHJcbiAgdmlzaXROb2RlOiBGdW5jdGlvbjtcclxuXHJcbiAgLyoqXHJcbiAgSnNvblJlc3VsdHNBZGFwdGVyIGNvbnN0cnVjdG9yXHJcblxyXG4gIEBleGFtcGxlXHJcbiAgICAgIC8vXHJcbiAgICAgIHZhciBqc29uUmVzdWx0c0FkYXB0ZXIgPSBuZXcgSnNvblJlc3VsdHNBZGFwdGVyKHtcclxuICAgICAgICAgIG5hbWU6IFwidGVzdDFlXCIsXHJcbiAgICAgICAgICBleHRyYWN0UmVzdWx0czogZnVuY3Rpb24oanNvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBqc29uLnJlc3VsdHM7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdmlzaXROb2RlOiBmdW5jdGlvbihub2RlLCBtYXBwaW5nQ29udGV4dCwgbm9kZUNvbnRleHQpIHtcclxuICAgICAgICAgICAgICB2YXIgZW50aXR5VHlwZSA9IG5vcm1hbGl6ZVR5cGVOYW1lKG5vZGUuJHR5cGUpO1xyXG4gICAgICAgICAgICAgIHZhciBwcm9wZXJ0eU5hbWUgPSBub2RlQ29udGV4dC5wcm9wZXJ0eU5hbWU7XHJcbiAgICAgICAgICAgICAgdmFyIGlnbm9yZSA9IHByb3BlcnR5TmFtZSAmJiBwcm9wZXJ0eU5hbWUuc3Vic3RyKDAsIDEpID09PSBcIiRcIjtcclxuXHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgZW50aXR5VHlwZTogZW50aXR5VHlwZSxcclxuICAgICAgICAgICAgICAgICAgbm9kZUlkOiBub2RlLiRpZCxcclxuICAgICAgICAgICAgICAgICAgbm9kZVJlZklkOiBub2RlLiRyZWYsXHJcbiAgICAgICAgICAgICAgICAgIGlnbm9yZTogaWdub3JlLFxyXG4gICAgICAgICAgICAgICAgICBwYXNzVGhydTogZmFsc2UgLy8gZGVmYXVsdFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdmFyIGRhdGFTZXJ2aWNlID0gbmV3IERhdGFTZXJ2aWNlKCB7XHJcbiAgICAgICAgICAgICAgc2VydmljZU5hbWU6IFwiYnJlZXplL2Zvb1wiLFxyXG4gICAgICAgICAgICAgIGpzb25SZXN1bHRzQWRhcHRlcjoganNvblJlc3VsdHNBZGFwdGVyXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdmFyIGVudGl0eU1hbmFnZXIgPSBuZXcgRW50aXR5TWFuYWdlcigge1xyXG4gICAgICAgICAgZGF0YVNlcnZpY2U6IGRhdGFTZXJ2aWNlXHJcbiAgICAgIH0pO1xyXG5cclxuICBAcGFyYW0gY29uZmlnIC0gQSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuXHJcbiAgKiovXHJcbiAgY29uc3RydWN0b3IoanNDb25maWc6IEpzb25SZXN1bHRzQWRhcHRlckNvbmZpZykge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT09IDEpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIEpzb25SZXN1bHRzQWRhcHRlciBjdG9yIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBhIHNpbmdsZSBhcmd1bWVudCB0aGF0IGlzIGEgY29uZmlndXJhdGlvbiBvYmplY3QuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzc2VydENvbmZpZyhqc0NvbmZpZylcclxuICAgICAgICAud2hlcmVQYXJhbShcIm5hbWVcIikuaXNOb25FbXB0eVN0cmluZygpXHJcbiAgICAgICAgLndoZXJlUGFyYW0oXCJleHRyYWN0UmVzdWx0c1wiKS5pc0Z1bmN0aW9uKCkuaXNPcHRpb25hbCgpLndpdGhEZWZhdWx0KGV4dHJhY3RSZXN1bHRzRGVmYXVsdClcclxuICAgICAgICAud2hlcmVQYXJhbShcImV4dHJhY3RTYXZlUmVzdWx0c1wiKS5pc0Z1bmN0aW9uKCkuaXNPcHRpb25hbCgpLndpdGhEZWZhdWx0KGV4dHJhY3RTYXZlUmVzdWx0c0RlZmF1bHQpXHJcbiAgICAgICAgLndoZXJlUGFyYW0oXCJleHRyYWN0S2V5TWFwcGluZ3NcIikuaXNGdW5jdGlvbigpLmlzT3B0aW9uYWwoKS53aXRoRGVmYXVsdChleHRyYWN0S2V5TWFwcGluZ3NEZWZhdWx0KVxyXG4gICAgICAgIC53aGVyZVBhcmFtKFwiZXh0cmFjdERlbGV0ZWRLZXlzXCIpLmlzRnVuY3Rpb24oKS5pc09wdGlvbmFsKCkud2l0aERlZmF1bHQoZXh0cmFjdERlbGV0ZWRLZXlzRGVmYXVsdClcclxuICAgICAgICAud2hlcmVQYXJhbShcInZpc2l0Tm9kZVwiKS5pc0Z1bmN0aW9uKClcclxuICAgICAgICAuYXBwbHlBbGwodGhpcyk7XHJcbiAgICBjb25maWcuX3N0b3JlT2JqZWN0KHRoaXMsIFwiSnNvblJlc3VsdHNBZGFwdGVyXCIsIHRoaXMubmFtZSk7XHJcbiAgfVxyXG5cclxufVxyXG5Kc29uUmVzdWx0c0FkYXB0ZXIucHJvdG90eXBlLl8kdHlwZU5hbWUgPSBcIkpzb25SZXN1bHRzQWRhcHRlclwiO1xyXG5cclxuZnVuY3Rpb24gZXh0cmFjdFJlc3VsdHNEZWZhdWx0KGRhdGE6IGFueSkge1xyXG4gIHJldHVybiBkYXRhLnJlc3VsdHM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGV4dHJhY3RTYXZlUmVzdWx0c0RlZmF1bHQoZGF0YTogYW55KSB7XHJcbiAgcmV0dXJuIGRhdGEuZW50aXRpZXMgfHwgZGF0YS5FbnRpdGllcyB8fCBbXTtcclxufVxyXG5cclxuZnVuY3Rpb24gZXh0cmFjdEtleU1hcHBpbmdzRGVmYXVsdChkYXRhOiBhbnkpIHtcclxuICByZXR1cm4gZGF0YS5rZXlNYXBwaW5ncyB8fCBkYXRhLktleU1hcHBpbmdzIHx8IFtdO1xyXG59XHJcblxyXG5mdW5jdGlvbiBleHRyYWN0RGVsZXRlZEtleXNEZWZhdWx0KGRhdGE6IGFueSkge1xyXG4gIHJldHVybiBkYXRhLmRlbGV0ZWRLZXlzIHx8IGRhdGEuRGVsZXRlZEtleXMgfHwgW107XHJcbn1cclxuXHJcbiJdfQ==
|