breeze-client 2.1.2 → 2.1.3-mjs
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/LICENSE +1 -1
- package/adapter-ajax-angularjs/{breeze-client-adapter-ajax-angularjs.d.ts → index.d.ts} +1 -0
- package/adapter-ajax-fetch/{breeze-client-adapter-ajax-fetch.d.ts → index.d.ts} +1 -0
- package/adapter-ajax-httpclient/{breeze-client-adapter-ajax-httpclient.d.ts → index.d.ts} +1 -0
- package/adapter-ajax-jquery/{breeze-client-adapter-ajax-jquery.d.ts → index.d.ts} +1 -0
- package/adapter-ajax-post/{breeze-client-adapter-ajax-post.d.ts → index.d.ts} +1 -0
- package/adapter-data-service-odata/{breeze-client-adapter-data-service-odata.d.ts → index.d.ts} +1 -0
- package/adapter-data-service-webapi/{breeze-client-adapter-data-service-webapi.d.ts → index.d.ts} +1 -0
- package/adapter-model-library-backing-store/{breeze-client-adapter-model-library-backing-store.d.ts → index.d.ts} +1 -0
- package/adapter-model-library-ko/{breeze-client-adapter-model-library-ko.d.ts → index.d.ts} +1 -0
- package/adapter-uri-builder-json/{breeze-client-adapter-uri-builder-json.d.ts → index.d.ts} +1 -0
- package/adapter-uri-builder-odata/{breeze-client-adapter-uri-builder-odata.d.ts → index.d.ts} +1 -0
- package/esm2020/adapter-ajax-angularjs/adapter-ajax-angularjs.mjs +130 -0
- package/esm2020/adapter-ajax-angularjs/adapter-core.mjs +49 -0
- package/esm2020/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.mjs +5 -0
- package/esm2020/adapter-ajax-fetch/adapter-ajax-fetch.mjs +132 -0
- package/esm2020/adapter-ajax-fetch/adapter-core.mjs +49 -0
- package/esm2020/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.mjs +5 -0
- package/esm2020/adapter-ajax-httpclient/adapter-ajax-httpclient.mjs +137 -0
- package/esm2020/adapter-ajax-httpclient/adapter-core.mjs +49 -0
- package/esm2020/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.mjs +5 -0
- package/esm2020/adapter-ajax-jquery/adapter-ajax-jquery.mjs +103 -0
- package/esm2020/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.mjs +5 -0
- package/esm2020/adapter-ajax-post/adapter-ajax-post.mjs +77 -0
- package/esm2020/adapter-ajax-post/breeze-client-adapter-ajax-post.mjs +5 -0
- package/esm2020/adapter-data-service-odata/adapter-core.mjs +49 -0
- package/esm2020/adapter-data-service-odata/adapter-data-service-odata.mjs +456 -0
- package/esm2020/adapter-data-service-odata/breeze-client-adapter-data-service-odata.mjs +5 -0
- package/esm2020/adapter-data-service-webapi/adapter-data-service-webapi.mjs +93 -0
- package/esm2020/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.mjs +5 -0
- package/esm2020/adapter-model-library-backing-store/adapter-model-library-backing-store.mjs +268 -0
- package/esm2020/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.mjs +5 -0
- package/esm2020/adapter-model-library-ko/adapter-model-library-ko.mjs +240 -0
- package/esm2020/adapter-model-library-ko/breeze-client-adapter-model-library-ko.mjs +5 -0
- package/esm2020/adapter-uri-builder-json/adapter-core.mjs +49 -0
- package/esm2020/adapter-uri-builder-json/adapter-uri-builder-json.mjs +36 -0
- package/esm2020/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.mjs +5 -0
- package/esm2020/adapter-uri-builder-odata/adapter-core.mjs +49 -0
- package/esm2020/adapter-uri-builder-odata/adapter-uri-builder-odata.mjs +190 -0
- package/esm2020/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.mjs +5 -0
- package/esm2020/breeze-client.mjs +5 -0
- package/esm2020/index.mjs +2 -0
- package/esm2020/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.mjs +5 -0
- package/esm2020/mixin-get-entity-graph/mixin-get-entity-graph.mjs +269 -0
- package/esm2020/mixin-save-queuing/breeze-client-mixin-save-queuing.mjs +5 -0
- package/esm2020/mixin-save-queuing/mixin-save-queuing.mjs +400 -0
- package/esm2020/src/abstract-data-service-adapter.mjs +296 -0
- package/esm2020/src/array.mjs +4 -0
- package/esm2020/src/assert-param.mjs +312 -0
- package/esm2020/src/breeze.mjs +85 -0
- package/esm2020/src/complex-array.mjs +117 -0
- package/esm2020/src/config.mjs +223 -0
- package/esm2020/src/core.mjs +707 -0
- package/esm2020/src/csdl-metadata-parser.mjs +385 -0
- package/esm2020/src/data-service.mjs +203 -0
- package/esm2020/src/data-type.mjs +444 -0
- package/esm2020/src/default-property-interceptor.mjs +460 -0
- package/esm2020/src/entity-action.mjs +45 -0
- package/esm2020/src/entity-aspect.mjs +806 -0
- package/esm2020/src/entity-group.mjs +187 -0
- package/esm2020/src/entity-key.mjs +116 -0
- package/esm2020/src/entity-manager.mjs +2094 -0
- package/esm2020/src/entity-metadata.mjs +2109 -0
- package/esm2020/src/entity-query.mjs +996 -0
- package/esm2020/src/entity-state.mjs +99 -0
- package/esm2020/src/enum.mjs +141 -0
- package/esm2020/src/event.mjs +256 -0
- package/esm2020/src/interface-registry.mjs +41 -0
- package/esm2020/src/key-generator.mjs +108 -0
- package/esm2020/src/local-query-comparison-options.mjs +65 -0
- package/esm2020/src/mapping-context.mjs +405 -0
- package/esm2020/src/naming-convention.mjs +88 -0
- package/esm2020/src/observable-array.mjs +183 -0
- package/esm2020/src/predicate.mjs +1232 -0
- package/esm2020/src/primitive-array.mjs +85 -0
- package/esm2020/src/query-options.mjs +152 -0
- package/esm2020/src/relation-array.mjs +173 -0
- package/esm2020/src/save-options.mjs +41 -0
- package/esm2020/src/unattached-children-map.mjs +58 -0
- package/esm2020/src/validate.mjs +988 -0
- package/esm2020/src/validation-options.mjs +64 -0
- package/fesm2015/{breeze-client-adapter-ajax-angularjs.js → breeze-client-adapter-ajax-angularjs.mjs} +1 -1
- package/fesm2015/breeze-client-adapter-ajax-angularjs.mjs.map +1 -0
- package/fesm2015/{breeze-client-adapter-ajax-fetch.js → breeze-client-adapter-ajax-fetch.mjs} +5 -3
- package/fesm2015/breeze-client-adapter-ajax-fetch.mjs.map +1 -0
- package/fesm2015/{breeze-client-adapter-ajax-httpclient.js → breeze-client-adapter-ajax-httpclient.mjs} +1 -1
- package/fesm2015/breeze-client-adapter-ajax-httpclient.mjs.map +1 -0
- package/fesm2015/{breeze-client-adapter-ajax-jquery.js → breeze-client-adapter-ajax-jquery.mjs} +2 -2
- package/fesm2015/breeze-client-adapter-ajax-jquery.mjs.map +1 -0
- package/fesm2015/{breeze-client-adapter-ajax-post.js → breeze-client-adapter-ajax-post.mjs} +1 -1
- package/fesm2015/breeze-client-adapter-ajax-post.mjs.map +1 -0
- package/fesm2015/{breeze-client-adapter-data-service-odata.js → breeze-client-adapter-data-service-odata.mjs} +20 -22
- package/fesm2015/breeze-client-adapter-data-service-odata.mjs.map +1 -0
- package/fesm2015/{breeze-client-adapter-data-service-webapi.js → breeze-client-adapter-data-service-webapi.mjs} +13 -13
- package/fesm2015/breeze-client-adapter-data-service-webapi.mjs.map +1 -0
- package/fesm2015/{breeze-client-adapter-model-library-backing-store.js → breeze-client-adapter-model-library-backing-store.mjs} +13 -13
- package/fesm2015/breeze-client-adapter-model-library-backing-store.mjs.map +1 -0
- package/fesm2015/{breeze-client-adapter-model-library-ko.js → breeze-client-adapter-model-library-ko.mjs} +13 -13
- package/fesm2015/breeze-client-adapter-model-library-ko.mjs.map +1 -0
- package/fesm2015/{breeze-client-adapter-uri-builder-json.js → breeze-client-adapter-uri-builder-json.mjs} +8 -8
- package/fesm2015/breeze-client-adapter-uri-builder-json.mjs.map +1 -0
- package/fesm2015/{breeze-client-adapter-uri-builder-odata.js → breeze-client-adapter-uri-builder-odata.mjs} +85 -86
- package/fesm2015/breeze-client-adapter-uri-builder-odata.mjs.map +1 -0
- package/fesm2015/{breeze-client-mixin-get-entity-graph.js → breeze-client-mixin-get-entity-graph.mjs} +1 -1
- package/fesm2015/breeze-client-mixin-get-entity-graph.mjs.map +1 -0
- package/fesm2015/{breeze-client-mixin-save-queuing.js → breeze-client-mixin-save-queuing.mjs} +1 -1
- package/fesm2015/breeze-client-mixin-save-queuing.mjs.map +1 -0
- package/fesm2015/{breeze-client.js → breeze-client.mjs} +417 -422
- package/fesm2015/breeze-client.mjs.map +1 -0
- package/{fesm5/breeze-client-adapter-ajax-angularjs.js → fesm2020/breeze-client-adapter-ajax-angularjs.mjs} +41 -42
- package/fesm2020/breeze-client-adapter-ajax-angularjs.mjs.map +1 -0
- package/{fesm5/breeze-client-adapter-ajax-fetch.js → fesm2020/breeze-client-adapter-ajax-fetch.mjs} +44 -43
- package/fesm2020/breeze-client-adapter-ajax-fetch.mjs.map +1 -0
- package/{fesm5/breeze-client-adapter-ajax-httpclient.js → fesm2020/breeze-client-adapter-ajax-httpclient.mjs} +43 -44
- package/fesm2020/breeze-client-adapter-ajax-httpclient.mjs.map +1 -0
- package/{fesm5/breeze-client-adapter-ajax-jquery.js → fesm2020/breeze-client-adapter-ajax-jquery.mjs} +18 -19
- package/fesm2020/breeze-client-adapter-ajax-jquery.mjs.map +1 -0
- package/{fesm5/breeze-client-adapter-ajax-post.js → fesm2020/breeze-client-adapter-ajax-post.mjs} +8 -11
- package/fesm2020/breeze-client-adapter-ajax-post.mjs.map +1 -0
- package/{fesm5/breeze-client-adapter-data-service-odata.js → fesm2020/breeze-client-adapter-data-service-odata.mjs} +126 -134
- package/fesm2020/breeze-client-adapter-data-service-odata.mjs.map +1 -0
- package/{fesm5/breeze-client-adapter-data-service-webapi.js → fesm2020/breeze-client-adapter-data-service-webapi.mjs} +38 -42
- package/fesm2020/breeze-client-adapter-data-service-webapi.mjs.map +1 -0
- package/{fesm5/breeze-client-adapter-model-library-backing-store.js → fesm2020/breeze-client-adapter-model-library-backing-store.mjs} +63 -64
- package/fesm2020/breeze-client-adapter-model-library-backing-store.mjs.map +1 -0
- package/{fesm5/breeze-client-adapter-model-library-ko.js → fesm2020/breeze-client-adapter-model-library-ko.mjs} +57 -58
- package/fesm2020/breeze-client-adapter-model-library-ko.mjs.map +1 -0
- package/fesm2020/breeze-client-adapter-uri-builder-json.mjs +91 -0
- package/fesm2020/breeze-client-adapter-uri-builder-json.mjs.map +1 -0
- package/fesm2020/breeze-client-adapter-uri-builder-odata.mjs +245 -0
- package/fesm2020/breeze-client-adapter-uri-builder-odata.mjs.map +1 -0
- package/{fesm5/breeze-client-mixin-get-entity-graph.js → fesm2020/breeze-client-mixin-get-entity-graph.mjs} +45 -45
- package/fesm2020/breeze-client-mixin-get-entity-graph.mjs.map +1 -0
- package/{fesm5/breeze-client-mixin-save-queuing.js → fesm2020/breeze-client-mixin-save-queuing.mjs} +116 -126
- package/fesm2020/breeze-client-mixin-save-queuing.mjs.map +1 -0
- package/{fesm5/breeze-client.js → fesm2020/breeze-client.mjs} +3403 -3615
- package/fesm2020/breeze-client.mjs.map +1 -0
- package/mixin-get-entity-graph/{breeze-client-mixin-get-entity-graph.d.ts → index.d.ts} +1 -0
- package/mixin-save-queuing/{breeze-client-mixin-save-queuing.d.ts → index.d.ts} +1 -0
- package/package.json +126 -12
- package/src/entity-metadata.d.ts +6 -4
- package/src/entity-query.d.ts +1 -1
- package/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.metadata.json +0 -1
- package/adapter-ajax-angularjs/package.json +0 -13
- package/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.metadata.json +0 -1
- package/adapter-ajax-fetch/package.json +0 -13
- package/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.metadata.json +0 -1
- package/adapter-ajax-httpclient/package.json +0 -17
- package/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.metadata.json +0 -1
- package/adapter-ajax-jquery/package.json +0 -13
- package/adapter-ajax-post/breeze-client-adapter-ajax-post.metadata.json +0 -1
- package/adapter-ajax-post/package.json +0 -13
- package/adapter-data-service-odata/breeze-client-adapter-data-service-odata.metadata.json +0 -1
- package/adapter-data-service-odata/package.json +0 -13
- package/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.metadata.json +0 -1
- package/adapter-data-service-webapi/package.json +0 -13
- package/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.metadata.json +0 -1
- package/adapter-model-library-backing-store/package.json +0 -13
- package/adapter-model-library-ko/breeze-client-adapter-model-library-ko.metadata.json +0 -1
- package/adapter-model-library-ko/package.json +0 -13
- package/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.metadata.json +0 -1
- package/adapter-uri-builder-json/package.json +0 -13
- package/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.metadata.json +0 -1
- package/adapter-uri-builder-odata/package.json +0 -13
- package/breeze-client.d.ts +0 -8
- package/breeze-client.metadata.json +0 -1
- package/bundles/breeze-client-adapter-ajax-angularjs.umd.js +0 -190
- package/bundles/breeze-client-adapter-ajax-angularjs.umd.js.map +0 -1
- package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js +0 -2
- package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js.map +0 -1
- package/bundles/breeze-client-adapter-ajax-fetch.umd.js +0 -190
- package/bundles/breeze-client-adapter-ajax-fetch.umd.js.map +0 -1
- package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js +0 -2
- package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js.map +0 -1
- package/bundles/breeze-client-adapter-ajax-httpclient.umd.js +0 -195
- package/bundles/breeze-client-adapter-ajax-httpclient.umd.js.map +0 -1
- package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js +0 -2
- package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js.map +0 -1
- package/bundles/breeze-client-adapter-ajax-jquery.umd.js +0 -115
- package/bundles/breeze-client-adapter-ajax-jquery.umd.js.map +0 -1
- package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js +0 -2
- package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js.map +0 -1
- package/bundles/breeze-client-adapter-ajax-post.umd.js +0 -92
- package/bundles/breeze-client-adapter-ajax-post.umd.js.map +0 -1
- package/bundles/breeze-client-adapter-ajax-post.umd.min.js +0 -2
- package/bundles/breeze-client-adapter-ajax-post.umd.min.js.map +0 -1
- package/bundles/breeze-client-adapter-data-service-odata.umd.js +0 -743
- package/bundles/breeze-client-adapter-data-service-odata.umd.js.map +0 -1
- package/bundles/breeze-client-adapter-data-service-odata.umd.min.js +0 -16
- package/bundles/breeze-client-adapter-data-service-odata.umd.min.js.map +0 -1
- package/bundles/breeze-client-adapter-data-service-webapi.umd.js +0 -326
- package/bundles/breeze-client-adapter-data-service-webapi.umd.js.map +0 -1
- package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js +0 -16
- package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js.map +0 -1
- package/bundles/breeze-client-adapter-model-library-backing-store.umd.js +0 -280
- package/bundles/breeze-client-adapter-model-library-backing-store.umd.js.map +0 -1
- package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js +0 -2
- package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js.map +0 -1
- package/bundles/breeze-client-adapter-model-library-ko.umd.js +0 -252
- package/bundles/breeze-client-adapter-model-library-ko.umd.js.map +0 -1
- package/bundles/breeze-client-adapter-model-library-ko.umd.min.js +0 -2
- package/bundles/breeze-client-adapter-model-library-ko.umd.min.js.map +0 -1
- package/bundles/breeze-client-adapter-uri-builder-json.umd.js +0 -96
- package/bundles/breeze-client-adapter-uri-builder-json.umd.js.map +0 -1
- package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js +0 -2
- package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js.map +0 -1
- package/bundles/breeze-client-adapter-uri-builder-odata.umd.js +0 -262
- package/bundles/breeze-client-adapter-uri-builder-odata.umd.js.map +0 -1
- package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js +0 -2
- package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js.map +0 -1
- package/bundles/breeze-client-mixin-get-entity-graph.umd.js +0 -258
- package/bundles/breeze-client-mixin-get-entity-graph.umd.js.map +0 -1
- package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js +0 -2
- package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js.map +0 -1
- package/bundles/breeze-client-mixin-save-queuing.umd.js +0 -579
- package/bundles/breeze-client-mixin-save-queuing.umd.js.map +0 -1
- package/bundles/breeze-client-mixin-save-queuing.umd.min.js +0 -16
- package/bundles/breeze-client-mixin-save-queuing.umd.min.js.map +0 -1
- package/bundles/breeze-client.umd.js +0 -14094
- package/bundles/breeze-client.umd.js.map +0 -1
- package/bundles/breeze-client.umd.min.js +0 -16
- package/bundles/breeze-client.umd.min.js.map +0 -1
- package/esm2015/adapter-ajax-angularjs/adapter-ajax-angularjs.js +0 -130
- package/esm2015/adapter-ajax-angularjs/adapter-core.js +0 -49
- package/esm2015/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +0 -5
- package/esm2015/adapter-ajax-fetch/adapter-ajax-fetch.js +0 -130
- package/esm2015/adapter-ajax-fetch/adapter-core.js +0 -49
- package/esm2015/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +0 -5
- package/esm2015/adapter-ajax-httpclient/adapter-ajax-httpclient.js +0 -137
- package/esm2015/adapter-ajax-httpclient/adapter-core.js +0 -49
- package/esm2015/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +0 -5
- package/esm2015/adapter-ajax-jquery/adapter-ajax-jquery.js +0 -103
- package/esm2015/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +0 -5
- package/esm2015/adapter-ajax-post/adapter-ajax-post.js +0 -77
- package/esm2015/adapter-ajax-post/breeze-client-adapter-ajax-post.js +0 -5
- package/esm2015/adapter-data-service-odata/adapter-core.js +0 -49
- package/esm2015/adapter-data-service-odata/adapter-data-service-odata.js +0 -459
- package/esm2015/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +0 -5
- package/esm2015/adapter-data-service-webapi/adapter-data-service-webapi.js +0 -93
- package/esm2015/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +0 -5
- package/esm2015/adapter-model-library-backing-store/adapter-model-library-backing-store.js +0 -268
- package/esm2015/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +0 -5
- package/esm2015/adapter-model-library-ko/adapter-model-library-ko.js +0 -240
- package/esm2015/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +0 -5
- package/esm2015/adapter-uri-builder-json/adapter-core.js +0 -49
- package/esm2015/adapter-uri-builder-json/adapter-uri-builder-json.js +0 -36
- package/esm2015/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +0 -5
- package/esm2015/adapter-uri-builder-odata/adapter-core.js +0 -49
- package/esm2015/adapter-uri-builder-odata/adapter-uri-builder-odata.js +0 -192
- package/esm2015/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +0 -5
- package/esm2015/breeze-client.js +0 -9
- package/esm2015/index.js +0 -2
- package/esm2015/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +0 -5
- package/esm2015/mixin-get-entity-graph/mixin-get-entity-graph.js +0 -269
- package/esm2015/mixin-save-queuing/breeze-client-mixin-save-queuing.js +0 -5
- package/esm2015/mixin-save-queuing/mixin-save-queuing.js +0 -400
- package/esm2015/public_api.js +0 -2
- package/esm2015/src/abstract-data-service-adapter.js +0 -296
- package/esm2015/src/array.js +0 -4
- package/esm2015/src/assert-param.js +0 -312
- package/esm2015/src/breeze.js +0 -85
- package/esm2015/src/complex-array.js +0 -119
- package/esm2015/src/config.js +0 -223
- package/esm2015/src/core.js +0 -706
- package/esm2015/src/csdl-metadata-parser.js +0 -385
- package/esm2015/src/data-service.js +0 -203
- package/esm2015/src/data-type.js +0 -444
- package/esm2015/src/default-property-interceptor.js +0 -459
- package/esm2015/src/entity-action.js +0 -45
- package/esm2015/src/entity-aspect.js +0 -806
- package/esm2015/src/entity-group.js +0 -187
- package/esm2015/src/entity-key.js +0 -116
- package/esm2015/src/entity-manager.js +0 -2094
- package/esm2015/src/entity-metadata.js +0 -2109
- package/esm2015/src/entity-query.js +0 -996
- package/esm2015/src/entity-state.js +0 -99
- package/esm2015/src/enum.js +0 -141
- package/esm2015/src/event.js +0 -256
- package/esm2015/src/interface-registry.js +0 -41
- package/esm2015/src/key-generator.js +0 -108
- package/esm2015/src/local-query-comparison-options.js +0 -65
- package/esm2015/src/mapping-context.js +0 -405
- package/esm2015/src/naming-convention.js +0 -88
- package/esm2015/src/observable-array.js +0 -185
- package/esm2015/src/predicate.js +0 -1235
- package/esm2015/src/primitive-array.js +0 -87
- package/esm2015/src/query-options.js +0 -152
- package/esm2015/src/relation-array.js +0 -175
- package/esm2015/src/save-options.js +0 -41
- package/esm2015/src/unattached-children-map.js +0 -58
- package/esm2015/src/validate.js +0 -991
- package/esm2015/src/validation-options.js +0 -64
- package/esm5/adapter-ajax-angularjs/adapter-ajax-angularjs.js +0 -132
- package/esm5/adapter-ajax-angularjs/adapter-core.js +0 -49
- package/esm5/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +0 -5
- package/esm5/adapter-ajax-fetch/adapter-ajax-fetch.js +0 -132
- package/esm5/adapter-ajax-fetch/adapter-core.js +0 -49
- package/esm5/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +0 -5
- package/esm5/adapter-ajax-httpclient/adapter-ajax-httpclient.js +0 -139
- package/esm5/adapter-ajax-httpclient/adapter-core.js +0 -49
- package/esm5/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +0 -5
- package/esm5/adapter-ajax-jquery/adapter-ajax-jquery.js +0 -105
- package/esm5/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +0 -5
- package/esm5/adapter-ajax-post/adapter-ajax-post.js +0 -81
- package/esm5/adapter-ajax-post/breeze-client-adapter-ajax-post.js +0 -5
- package/esm5/adapter-data-service-odata/adapter-core.js +0 -49
- package/esm5/adapter-data-service-odata/adapter-data-service-odata.js +0 -466
- package/esm5/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +0 -5
- package/esm5/adapter-data-service-webapi/adapter-data-service-webapi.js +0 -98
- package/esm5/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +0 -5
- package/esm5/adapter-model-library-backing-store/adapter-model-library-backing-store.js +0 -270
- package/esm5/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +0 -5
- package/esm5/adapter-model-library-ko/adapter-model-library-ko.js +0 -242
- package/esm5/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +0 -5
- package/esm5/adapter-uri-builder-json/adapter-core.js +0 -49
- package/esm5/adapter-uri-builder-json/adapter-uri-builder-json.js +0 -38
- package/esm5/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +0 -5
- package/esm5/adapter-uri-builder-odata/adapter-core.js +0 -49
- package/esm5/adapter-uri-builder-odata/adapter-uri-builder-odata.js +0 -197
- package/esm5/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +0 -5
- package/esm5/breeze-client.js +0 -9
- package/esm5/index.js +0 -2
- package/esm5/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +0 -5
- package/esm5/mixin-get-entity-graph/mixin-get-entity-graph.js +0 -269
- package/esm5/mixin-save-queuing/breeze-client-mixin-save-queuing.js +0 -5
- package/esm5/mixin-save-queuing/mixin-save-queuing.js +0 -412
- package/esm5/public_api.js +0 -2
- package/esm5/src/abstract-data-service-adapter.js +0 -302
- package/esm5/src/array.js +0 -4
- package/esm5/src/assert-param.js +0 -317
- package/esm5/src/breeze.js +0 -85
- package/esm5/src/complex-array.js +0 -119
- package/esm5/src/config.js +0 -228
- package/esm5/src/core.js +0 -714
- package/esm5/src/csdl-metadata-parser.js +0 -385
- package/esm5/src/data-service.js +0 -207
- package/esm5/src/data-type.js +0 -451
- package/esm5/src/default-property-interceptor.js +0 -459
- package/esm5/src/entity-action.js +0 -52
- package/esm5/src/entity-aspect.js +0 -812
- package/esm5/src/entity-group.js +0 -189
- package/esm5/src/entity-key.js +0 -118
- package/esm5/src/entity-manager.js +0 -2112
- package/esm5/src/entity-metadata.js +0 -2144
- package/esm5/src/entity-query.js +0 -1023
- package/esm5/src/entity-state.js +0 -106
- package/esm5/src/enum.js +0 -144
- package/esm5/src/event.js +0 -259
- package/esm5/src/interface-registry.js +0 -43
- package/esm5/src/key-generator.js +0 -111
- package/esm5/src/local-query-comparison-options.js +0 -67
- package/esm5/src/mapping-context.js +0 -407
- package/esm5/src/naming-convention.js +0 -90
- package/esm5/src/observable-array.js +0 -201
- package/esm5/src/predicate.js +0 -1300
- package/esm5/src/primitive-array.js +0 -87
- package/esm5/src/query-options.js +0 -167
- package/esm5/src/relation-array.js +0 -175
- package/esm5/src/save-options.js +0 -43
- package/esm5/src/unattached-children-map.js +0 -60
- package/esm5/src/validate.js +0 -996
- package/esm5/src/validation-options.js +0 -66
- package/fesm2015/breeze-client-adapter-ajax-angularjs.js.map +0 -1
- package/fesm2015/breeze-client-adapter-ajax-fetch.js.map +0 -1
- package/fesm2015/breeze-client-adapter-ajax-httpclient.js.map +0 -1
- package/fesm2015/breeze-client-adapter-ajax-jquery.js.map +0 -1
- package/fesm2015/breeze-client-adapter-ajax-post.js.map +0 -1
- package/fesm2015/breeze-client-adapter-data-service-odata.js.map +0 -1
- package/fesm2015/breeze-client-adapter-data-service-webapi.js.map +0 -1
- package/fesm2015/breeze-client-adapter-model-library-backing-store.js.map +0 -1
- package/fesm2015/breeze-client-adapter-model-library-ko.js.map +0 -1
- package/fesm2015/breeze-client-adapter-uri-builder-json.js.map +0 -1
- package/fesm2015/breeze-client-adapter-uri-builder-odata.js.map +0 -1
- package/fesm2015/breeze-client-mixin-get-entity-graph.js.map +0 -1
- package/fesm2015/breeze-client-mixin-save-queuing.js.map +0 -1
- package/fesm2015/breeze-client.js.map +0 -1
- package/fesm5/breeze-client-adapter-ajax-angularjs.js.map +0 -1
- package/fesm5/breeze-client-adapter-ajax-fetch.js.map +0 -1
- package/fesm5/breeze-client-adapter-ajax-httpclient.js.map +0 -1
- package/fesm5/breeze-client-adapter-ajax-jquery.js.map +0 -1
- package/fesm5/breeze-client-adapter-ajax-post.js.map +0 -1
- package/fesm5/breeze-client-adapter-data-service-odata.js.map +0 -1
- package/fesm5/breeze-client-adapter-data-service-webapi.js.map +0 -1
- package/fesm5/breeze-client-adapter-model-library-backing-store.js.map +0 -1
- package/fesm5/breeze-client-adapter-model-library-ko.js.map +0 -1
- package/fesm5/breeze-client-adapter-uri-builder-json.js +0 -92
- package/fesm5/breeze-client-adapter-uri-builder-json.js.map +0 -1
- package/fesm5/breeze-client-adapter-uri-builder-odata.js +0 -250
- package/fesm5/breeze-client-adapter-uri-builder-odata.js.map +0 -1
- package/fesm5/breeze-client-mixin-get-entity-graph.js.map +0 -1
- package/fesm5/breeze-client-mixin-save-queuing.js.map +0 -1
- package/fesm5/breeze-client.js.map +0 -1
- package/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.metadata.json +0 -1
- package/mixin-get-entity-graph/package.json +0 -13
- package/mixin-save-queuing/breeze-client-mixin-save-queuing.metadata.json +0 -1
- package/mixin-save-queuing/package.json +0 -13
- package/public_api.d.ts +0 -1
|
@@ -1,459 +0,0 @@
|
|
|
1
|
-
import * as breeze from 'breeze-client';
|
|
2
|
-
import { appendQueryStringParameter } from './adapter-core';
|
|
3
|
-
let core = breeze.core;
|
|
4
|
-
/** @hidden */
|
|
5
|
-
export class DataServiceODataAdapter extends breeze.AbstractDataServiceAdapter {
|
|
6
|
-
constructor() {
|
|
7
|
-
super();
|
|
8
|
-
// _catchNoConnectionError = abstractDsaProto._catchNoConnectionError;
|
|
9
|
-
// changeRequestInterceptor = abstractDsaProto.changeRequestInterceptor;
|
|
10
|
-
// _createChangeRequestInterceptor = abstractDsaProto._createChangeRequestInterceptor;
|
|
11
|
-
this.headers = { "DataServiceVersion": "2.0" };
|
|
12
|
-
this.jsonResultsAdapter = new breeze.JsonResultsAdapter({
|
|
13
|
-
name: "OData_default",
|
|
14
|
-
visitNode: function (node, mappingContext, nodeContext) {
|
|
15
|
-
let result = {};
|
|
16
|
-
if (node == null)
|
|
17
|
-
return result;
|
|
18
|
-
let metadata = node.__metadata;
|
|
19
|
-
if (metadata != null) {
|
|
20
|
-
// TODO: may be able to make this more efficient by caching of the previous value.
|
|
21
|
-
let entityTypeName = breeze.MetadataStore.normalizeTypeName(metadata.type);
|
|
22
|
-
let et = entityTypeName && mappingContext.entityManager.metadataStore.getEntityType(entityTypeName, true);
|
|
23
|
-
// OData response doesn't distinguish a projection from a whole entity.
|
|
24
|
-
// We'll assume that whole-entity data would have at least as many properties (<=)
|
|
25
|
-
// as the EntityType has mapped properties on the basis that
|
|
26
|
-
// most projections remove properties rather than add them.
|
|
27
|
-
// If not, assume it's a projection and do NOT treat as an entity
|
|
28
|
-
if (et && et._mappedPropertiesCount <= Object.keys(node).length - 1) {
|
|
29
|
-
// if (et && et._mappedPropertiesCount === Object.keys(node).length - 1) { // OLD
|
|
30
|
-
result.entityType = et;
|
|
31
|
-
let uriKey = metadata.uri || metadata.id;
|
|
32
|
-
if (uriKey) {
|
|
33
|
-
// Strip baseUri to make uriKey a relative uri
|
|
34
|
-
// Todo: why is this necessary when absolute works for every OData source tested?
|
|
35
|
-
let re = new RegExp('^' + mappingContext.dataService.serviceName, 'i');
|
|
36
|
-
uriKey = uriKey.replace(re, '');
|
|
37
|
-
}
|
|
38
|
-
result.extraMetadata = {
|
|
39
|
-
uriKey: uriKey,
|
|
40
|
-
etag: metadata.etag
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
// OData v3 - projection arrays will be enclosed in a results array
|
|
45
|
-
if (node.results) {
|
|
46
|
-
result.node = node.results;
|
|
47
|
-
}
|
|
48
|
-
let propertyName = nodeContext.propertyName;
|
|
49
|
-
result.ignore = node.__deferred != null || propertyName === "__metadata" ||
|
|
50
|
-
// EntityKey properties can be produced by EDMX models
|
|
51
|
-
(propertyName === "EntityKey" && node.$type && core.stringStartsWith(node.$type, "System.Data"));
|
|
52
|
-
return result;
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
this.name = "OData";
|
|
56
|
-
}
|
|
57
|
-
static register(config) {
|
|
58
|
-
config = config || breeze.config;
|
|
59
|
-
config.registerAdapter("dataService", DataServiceODataAdapter);
|
|
60
|
-
return config.initializeAdapterInstance("dataService", "OData", true);
|
|
61
|
-
}
|
|
62
|
-
initialize() {
|
|
63
|
-
OData = core.requireLib("OData", "Needed to support remote OData services");
|
|
64
|
-
OData.jsonHandler.recognizeDates = true;
|
|
65
|
-
}
|
|
66
|
-
// Absolute URL is the default as of Breeze 1.5.5.
|
|
67
|
-
// To use relative URL (like pre-1.5.5), add adapterInstance.relativeUrl = true:
|
|
68
|
-
//
|
|
69
|
-
// let ds = breeze.config.initializeAdapterInstance("dataService", "webApiOData");
|
|
70
|
-
// ds.relativeUrl = true;
|
|
71
|
-
//
|
|
72
|
-
// To use custom url construction, add adapterInstance.relativeUrl = myfunction(dataService, url):
|
|
73
|
-
//
|
|
74
|
-
// let ds = breeze.config.initializeAdapterInstance("dataService", "webApiOData");
|
|
75
|
-
// ds.relativeUrl = function(dataService, url) {
|
|
76
|
-
// return somehowConvert(url);
|
|
77
|
-
// }
|
|
78
|
-
//
|
|
79
|
-
fetchMetadata(metadataStore, dataService) {
|
|
80
|
-
let serviceName = dataService.serviceName;
|
|
81
|
-
let url;
|
|
82
|
-
if (this.relativeUrl === true) {
|
|
83
|
-
url = dataService.qualifyUrl('$metadata');
|
|
84
|
-
}
|
|
85
|
-
else if (core.isFunction(this.relativeUrl)) {
|
|
86
|
-
url = this.relativeUrl(dataService, '$metadata');
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
url = this.getAbsoluteUrl(dataService, '$metadata');
|
|
90
|
-
}
|
|
91
|
-
let mheaders = core.extend({}, this.headers);
|
|
92
|
-
mheaders.Accept = 'application/*; odata.metadata=full';
|
|
93
|
-
let promise = new Promise((resolve, reject) => {
|
|
94
|
-
// OData.read(url,
|
|
95
|
-
OData.read({
|
|
96
|
-
requestUri: url,
|
|
97
|
-
// headers: { "Accept": "application/json"}
|
|
98
|
-
headers: mheaders
|
|
99
|
-
}, function (data) {
|
|
100
|
-
// data.dataServices.schema is an array of schemas. with properties of
|
|
101
|
-
// entityContainer[], association[], entityType[], and namespace.
|
|
102
|
-
if (!data || !data.dataServices) {
|
|
103
|
-
let error = new Error("Metadata query failed for: " + url);
|
|
104
|
-
return reject(error);
|
|
105
|
-
}
|
|
106
|
-
let csdlMetadata = data.dataServices;
|
|
107
|
-
// might have been fetched by another query
|
|
108
|
-
if (!metadataStore.hasMetadataFor(serviceName)) {
|
|
109
|
-
try {
|
|
110
|
-
metadataStore.importMetadata(csdlMetadata);
|
|
111
|
-
}
|
|
112
|
-
catch (e) {
|
|
113
|
-
return reject(new Error("Metadata query failed for " + url + "; Unable to process returned metadata: " + e.message));
|
|
114
|
-
}
|
|
115
|
-
metadataStore.addDataService(dataService);
|
|
116
|
-
}
|
|
117
|
-
return resolve(csdlMetadata);
|
|
118
|
-
}, function (error) {
|
|
119
|
-
let err = createError(error, url);
|
|
120
|
-
err.message = "Metadata query failed for: " + url + "; " + (err.message || "");
|
|
121
|
-
return reject(err);
|
|
122
|
-
}, OData.metadataHandler);
|
|
123
|
-
});
|
|
124
|
-
return promise;
|
|
125
|
-
}
|
|
126
|
-
executeQuery(mappingContext) {
|
|
127
|
-
let url;
|
|
128
|
-
if (this.relativeUrl === true) {
|
|
129
|
-
url = mappingContext.getUrl();
|
|
130
|
-
}
|
|
131
|
-
else if (core.isFunction(this.relativeUrl)) {
|
|
132
|
-
url = this.relativeUrl(mappingContext.dataService, mappingContext.getUrl());
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
url = this.getAbsoluteUrl(mappingContext.dataService, mappingContext.getUrl());
|
|
136
|
-
}
|
|
137
|
-
// Add query params if .withParameters was used
|
|
138
|
-
let query = mappingContext.query;
|
|
139
|
-
if (!core.isEmpty(query.parameters)) {
|
|
140
|
-
let paramString = toQueryString(query.parameters);
|
|
141
|
-
url = appendQueryStringParameter(url, paramString);
|
|
142
|
-
}
|
|
143
|
-
let promise = new Promise((resolve, reject) => {
|
|
144
|
-
OData.read({
|
|
145
|
-
requestUri: url,
|
|
146
|
-
headers: core.extend({}, this.headers)
|
|
147
|
-
}, function (data, response) {
|
|
148
|
-
let inlineCount;
|
|
149
|
-
if (data.__count) {
|
|
150
|
-
// OData can return data.__count as a string
|
|
151
|
-
inlineCount = parseInt(data.__count, 10);
|
|
152
|
-
}
|
|
153
|
-
// Odata returns different result structure when it returns multiple entities (data.results) vs single entity (data directly).
|
|
154
|
-
// @see http://www.odata.org/documentation/odata-version-2-0/json-format/#RepresentingCollectionsOfEntries
|
|
155
|
-
// and http://www.odata.org/documentation/odata-version-2-0/json-format/#RepresentingEntries
|
|
156
|
-
let results;
|
|
157
|
-
if (data.results) {
|
|
158
|
-
results = data.results;
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
results = data;
|
|
162
|
-
}
|
|
163
|
-
return resolve({ results: results, inlineCount: inlineCount, httpResponse: response, query: query });
|
|
164
|
-
}, function (error) {
|
|
165
|
-
return reject(createError(error, url));
|
|
166
|
-
});
|
|
167
|
-
});
|
|
168
|
-
return promise;
|
|
169
|
-
}
|
|
170
|
-
saveChanges(odataSaveContext, saveBundle) {
|
|
171
|
-
let adapter = odataSaveContext.adapter = this;
|
|
172
|
-
let saveContext = odataSaveContext;
|
|
173
|
-
let url;
|
|
174
|
-
if (this.relativeUrl === true) {
|
|
175
|
-
saveContext.routePrefix = adapter.getRoutePrefix(saveContext.dataService);
|
|
176
|
-
url = saveContext.dataService.qualifyUrl("$batch");
|
|
177
|
-
}
|
|
178
|
-
else if (core.isFunction(adapter.relativeUrl)) {
|
|
179
|
-
saveContext.routePrefix = adapter.relativeUrl(saveContext.dataService, '');
|
|
180
|
-
url = saveContext.routePrefix + '$batch';
|
|
181
|
-
}
|
|
182
|
-
else {
|
|
183
|
-
saveContext.routePrefix = adapter.getAbsoluteUrl(saveContext.dataService, '');
|
|
184
|
-
url = saveContext.routePrefix + '$batch';
|
|
185
|
-
}
|
|
186
|
-
let requestData = createChangeRequests(saveContext, saveBundle);
|
|
187
|
-
let tempKeys = saveContext.tempKeys;
|
|
188
|
-
let contentKeys = saveContext.contentKeys;
|
|
189
|
-
let promise = new Promise((resolve, reject) => {
|
|
190
|
-
OData.request({
|
|
191
|
-
headers: core.extend({}, this.headers),
|
|
192
|
-
requestUri: url,
|
|
193
|
-
method: "POST",
|
|
194
|
-
data: requestData
|
|
195
|
-
}, function (data, response) {
|
|
196
|
-
let entities = [];
|
|
197
|
-
let keyMappings = [];
|
|
198
|
-
let saveResult = { entities: entities, keyMappings: keyMappings };
|
|
199
|
-
data.__batchResponses.forEach(function (br) {
|
|
200
|
-
br.__changeResponses.forEach(function (cr) {
|
|
201
|
-
let response = cr.response || cr;
|
|
202
|
-
let statusCode = response.statusCode;
|
|
203
|
-
if ((!statusCode) || statusCode >= 400) {
|
|
204
|
-
reject(createError(cr, url));
|
|
205
|
-
return;
|
|
206
|
-
}
|
|
207
|
-
let contentId = cr.headers["Content-ID"];
|
|
208
|
-
// Olingo sends different case of 'ID' for the header name.
|
|
209
|
-
if (!contentId) {
|
|
210
|
-
contentId = cr.headers["Content-Id"];
|
|
211
|
-
}
|
|
212
|
-
let rawEntity = cr.data;
|
|
213
|
-
if (rawEntity) {
|
|
214
|
-
let tempKey = tempKeys[contentId];
|
|
215
|
-
if (tempKey) {
|
|
216
|
-
let entityType = tempKey.entityType;
|
|
217
|
-
if (entityType.autoGeneratedKeyType !== breeze.AutoGeneratedKeyType.None) {
|
|
218
|
-
let tempValue = tempKey.values[0];
|
|
219
|
-
let realKey = entityType.getEntityKeyFromRawEntity(rawEntity, breeze.DataProperty.getRawValueFromServer);
|
|
220
|
-
let keyMapping = { entityTypeName: entityType.name, tempValue: tempValue, realValue: realKey.values[0] };
|
|
221
|
-
keyMappings.push(keyMapping);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
entities.push(rawEntity);
|
|
225
|
-
}
|
|
226
|
-
else {
|
|
227
|
-
let origEntity = contentKeys[contentId];
|
|
228
|
-
entities.push(origEntity);
|
|
229
|
-
}
|
|
230
|
-
});
|
|
231
|
-
});
|
|
232
|
-
return resolve(saveResult);
|
|
233
|
-
}, function (err) {
|
|
234
|
-
return reject(createError(err, url));
|
|
235
|
-
}, OData.batchHandler);
|
|
236
|
-
});
|
|
237
|
-
return promise;
|
|
238
|
-
}
|
|
239
|
-
getAbsoluteUrl(dataService, url) {
|
|
240
|
-
let serviceName = dataService.qualifyUrl('');
|
|
241
|
-
// only prefix with serviceName if not already on the url
|
|
242
|
-
let base = (core.stringStartsWith(url, serviceName)) ? '' : serviceName;
|
|
243
|
-
// If no protocol, turn base into an absolute URI
|
|
244
|
-
if (window && serviceName.indexOf('//') < 0) {
|
|
245
|
-
// no protocol; make it absolute
|
|
246
|
-
base = window.location.protocol + '//' + window.location.host +
|
|
247
|
-
(core.stringStartsWith(serviceName, '/') ? '' : '/') +
|
|
248
|
-
base;
|
|
249
|
-
}
|
|
250
|
-
return base + url;
|
|
251
|
-
}
|
|
252
|
-
getRoutePrefix(dataService) {
|
|
253
|
-
// Get the routePrefix from a Web API OData service name.
|
|
254
|
-
// The routePrefix is presumed to be the pathname within the dataService.serviceName
|
|
255
|
-
// Examples of servicename -> routePrefix:
|
|
256
|
-
// 'http://localhost:55802/odata/' -> 'odata/'
|
|
257
|
-
// 'http://198.154.121.75/service/odata/' -> 'service/odata/'
|
|
258
|
-
let parser;
|
|
259
|
-
if (typeof document === 'object') { // browser
|
|
260
|
-
parser = document.createElement('a');
|
|
261
|
-
parser.href = dataService.serviceName;
|
|
262
|
-
}
|
|
263
|
-
else { // node
|
|
264
|
-
// TODO: how to best handle this
|
|
265
|
-
// assumes existence of node's url.parse method.
|
|
266
|
-
parser = url.parse(dataService.serviceName);
|
|
267
|
-
}
|
|
268
|
-
let prefix = parser.pathname;
|
|
269
|
-
if (prefix[0] === '/') {
|
|
270
|
-
prefix = prefix.substr(1);
|
|
271
|
-
} // drop leading '/' (all but IE)
|
|
272
|
-
if (prefix.substr(-1) !== '/') {
|
|
273
|
-
prefix += '/';
|
|
274
|
-
} // ensure trailing '/'
|
|
275
|
-
return prefix;
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
// crude serializer. Doesn't recurse
|
|
279
|
-
function toQueryString(obj) {
|
|
280
|
-
let parts = [];
|
|
281
|
-
for (let i in obj) {
|
|
282
|
-
if (obj.hasOwnProperty(i)) {
|
|
283
|
-
parts.push(encodeURIComponent(i) + "=" + encodeURIComponent(obj[i]));
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
return parts.join("&");
|
|
287
|
-
}
|
|
288
|
-
function transformValue(prop, val) {
|
|
289
|
-
if (prop.isUnmapped)
|
|
290
|
-
return undefined;
|
|
291
|
-
if (prop.dataType === breeze.DataType.DateTimeOffset) {
|
|
292
|
-
// The datajs lib tries to treat client dateTimes that are defined as DateTimeOffset on the server differently
|
|
293
|
-
// from other dateTimes. This fix compensates before the save.
|
|
294
|
-
val = val && new Date(val.getTime() - (val.getTimezoneOffset() * 60000));
|
|
295
|
-
}
|
|
296
|
-
else if (prop.dataType.quoteJsonOData) {
|
|
297
|
-
val = val != null ? val.toString() : val;
|
|
298
|
-
}
|
|
299
|
-
return val;
|
|
300
|
-
}
|
|
301
|
-
function createChangeRequests(saveContext, saveBundle) {
|
|
302
|
-
let changeRequestInterceptor = saveContext.adapter._createChangeRequestInterceptor(saveContext, saveBundle);
|
|
303
|
-
let changeRequests = [];
|
|
304
|
-
let tempKeys = [];
|
|
305
|
-
let contentKeys = [];
|
|
306
|
-
let entityManager = saveContext.entityManager;
|
|
307
|
-
let helper = entityManager.helper;
|
|
308
|
-
let id = 0;
|
|
309
|
-
let routePrefix = saveContext.routePrefix;
|
|
310
|
-
saveBundle.entities.forEach(function (entity, index) {
|
|
311
|
-
let aspect = entity.entityAspect;
|
|
312
|
-
id = id + 1; // we are deliberately skipping id=0 because Content-ID = 0 seems to be ignored.
|
|
313
|
-
let request = { headers: { "Content-ID": id, "DataServiceVersion": "2.0" } };
|
|
314
|
-
contentKeys[id] = entity;
|
|
315
|
-
if (aspect.entityState.isAdded()) {
|
|
316
|
-
request.requestUri = routePrefix + entity.entityType.defaultResourceName;
|
|
317
|
-
request.method = "POST";
|
|
318
|
-
request.data = helper.unwrapInstance(entity, transformValue);
|
|
319
|
-
tempKeys[id] = aspect.getKey();
|
|
320
|
-
}
|
|
321
|
-
else if (aspect.entityState.isModified()) {
|
|
322
|
-
updateDeleteMergeRequest(request, aspect, routePrefix);
|
|
323
|
-
request.method = "MERGE";
|
|
324
|
-
request.data = helper.unwrapChangedValues(entity, entityManager.metadataStore, transformValue);
|
|
325
|
-
// should be a PATCH/MERGE
|
|
326
|
-
}
|
|
327
|
-
else if (aspect.entityState.isDeleted()) {
|
|
328
|
-
updateDeleteMergeRequest(request, aspect, routePrefix);
|
|
329
|
-
request.method = "DELETE";
|
|
330
|
-
}
|
|
331
|
-
else {
|
|
332
|
-
return;
|
|
333
|
-
}
|
|
334
|
-
request = changeRequestInterceptor.getRequest(request, entity, index);
|
|
335
|
-
changeRequests.push(request);
|
|
336
|
-
});
|
|
337
|
-
saveContext.contentKeys = contentKeys;
|
|
338
|
-
saveContext.tempKeys = tempKeys;
|
|
339
|
-
changeRequestInterceptor.done(changeRequests);
|
|
340
|
-
return {
|
|
341
|
-
__batchRequests: [
|
|
342
|
-
{
|
|
343
|
-
__changeRequests: changeRequests
|
|
344
|
-
}
|
|
345
|
-
]
|
|
346
|
-
};
|
|
347
|
-
}
|
|
348
|
-
function updateDeleteMergeRequest(request, aspect, routePrefix) {
|
|
349
|
-
let uriKey;
|
|
350
|
-
let extraMetadata = aspect.extraMetadata;
|
|
351
|
-
if (extraMetadata == null) {
|
|
352
|
-
uriKey = getUriKey(aspect);
|
|
353
|
-
aspect.extraMetadata = {
|
|
354
|
-
uriKey: uriKey
|
|
355
|
-
};
|
|
356
|
-
}
|
|
357
|
-
else {
|
|
358
|
-
uriKey = extraMetadata.uriKey;
|
|
359
|
-
if (extraMetadata.etag) {
|
|
360
|
-
request.headers["If-Match"] = extraMetadata.etag;
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
request.requestUri =
|
|
364
|
-
// use routePrefix if uriKey lacks protocol (i.e., relative uri)
|
|
365
|
-
uriKey.indexOf('//') > 0 ? uriKey : routePrefix + uriKey;
|
|
366
|
-
}
|
|
367
|
-
function getUriKey(aspect) {
|
|
368
|
-
let entityType = aspect.entity.entityType;
|
|
369
|
-
let resourceName = entityType.defaultResourceName;
|
|
370
|
-
let kps = entityType.keyProperties;
|
|
371
|
-
let uriKey = resourceName + "(";
|
|
372
|
-
if (kps.length === 1) {
|
|
373
|
-
uriKey = uriKey + fmtProperty(kps[0], aspect) + ")";
|
|
374
|
-
}
|
|
375
|
-
else {
|
|
376
|
-
let delim = "";
|
|
377
|
-
kps.forEach(function (kp) {
|
|
378
|
-
uriKey = uriKey + delim + kp.nameOnServer + "=" + fmtProperty(kp, aspect);
|
|
379
|
-
delim = ",";
|
|
380
|
-
});
|
|
381
|
-
uriKey = uriKey + ")";
|
|
382
|
-
}
|
|
383
|
-
return uriKey;
|
|
384
|
-
}
|
|
385
|
-
function fmtProperty(prop, aspect) {
|
|
386
|
-
return prop.dataType.fmtOData(aspect.getPropertyValue(prop.name));
|
|
387
|
-
}
|
|
388
|
-
function createError(error, url) {
|
|
389
|
-
// OData errors can have the message buried very deeply - and nonobviously
|
|
390
|
-
// this code is tricky so be careful changing the response.body parsing.
|
|
391
|
-
let result = new Error();
|
|
392
|
-
let response = error && error.response;
|
|
393
|
-
if (!response) {
|
|
394
|
-
// in case DataJS returns "No handler for this data"
|
|
395
|
-
result.message = error;
|
|
396
|
-
result.statusText = error;
|
|
397
|
-
return result;
|
|
398
|
-
}
|
|
399
|
-
result.message = response.statusText;
|
|
400
|
-
result.statusText = response.statusText;
|
|
401
|
-
result.status = response.statusCode;
|
|
402
|
-
// non std
|
|
403
|
-
if (url)
|
|
404
|
-
result.url = url;
|
|
405
|
-
result.body = response.body;
|
|
406
|
-
if (response.body) {
|
|
407
|
-
let nextErr;
|
|
408
|
-
try {
|
|
409
|
-
let body = JSON.parse(response.body);
|
|
410
|
-
result.body = body;
|
|
411
|
-
// OData v3 logic
|
|
412
|
-
if (body['odata.error']) {
|
|
413
|
-
body = body['odata.error'];
|
|
414
|
-
}
|
|
415
|
-
let msg = "";
|
|
416
|
-
do {
|
|
417
|
-
nextErr = body.error || body.innererror;
|
|
418
|
-
if (!nextErr)
|
|
419
|
-
msg = msg + getMessage(body);
|
|
420
|
-
nextErr = nextErr || body.internalexception;
|
|
421
|
-
body = nextErr || body;
|
|
422
|
-
} while (nextErr);
|
|
423
|
-
if (msg.length > 0) {
|
|
424
|
-
result.message = msg;
|
|
425
|
-
}
|
|
426
|
-
}
|
|
427
|
-
catch (e) {
|
|
428
|
-
}
|
|
429
|
-
}
|
|
430
|
-
breeze.AbstractDataServiceAdapter._catchNoConnectionError(result);
|
|
431
|
-
return result;
|
|
432
|
-
}
|
|
433
|
-
function getMessage(body) {
|
|
434
|
-
let msg = body.message || "";
|
|
435
|
-
return ((typeof (msg) === "string") ? msg : msg.value) + "; ";
|
|
436
|
-
}
|
|
437
|
-
breeze.config.registerAdapter("dataService", DataServiceODataAdapter);
|
|
438
|
-
let webApiODataCtor = function () {
|
|
439
|
-
this.name = "webApiOData";
|
|
440
|
-
};
|
|
441
|
-
const ɵ0 = webApiODataCtor;
|
|
442
|
-
breeze.core.extend(webApiODataCtor.prototype, DataServiceODataAdapter.prototype);
|
|
443
|
-
breeze.config.registerAdapter("dataService", webApiODataCtor);
|
|
444
|
-
// OData 4 adapter
|
|
445
|
-
let webApiOData4Ctor = function () {
|
|
446
|
-
this.name = "webApiOData4";
|
|
447
|
-
};
|
|
448
|
-
const ɵ1 = webApiOData4Ctor;
|
|
449
|
-
breeze.core.extend(webApiOData4Ctor.prototype, webApiODataCtor.prototype);
|
|
450
|
-
webApiOData4Ctor.prototype.initialize = function () {
|
|
451
|
-
// Aargh... they moved the cheese.
|
|
452
|
-
let datajs = core.requireLib("datajs", "Needed to support remote OData v4 services");
|
|
453
|
-
OData = datajs.V4.oData;
|
|
454
|
-
OData.json.jsonHandler.recognizeDates = true;
|
|
455
|
-
};
|
|
456
|
-
webApiOData4Ctor.prototype.headers = { "OData-Version": "4.0" };
|
|
457
|
-
breeze.config.registerAdapter("dataService", webApiOData4Ctor);
|
|
458
|
-
export { ɵ0, ɵ1 };
|
|
459
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhcHRlci1kYXRhLXNlcnZpY2Utb2RhdGEuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9icmVlemUtY2xpZW50L2FkYXB0ZXItZGF0YS1zZXJ2aWNlLW9kYXRhLyIsInNvdXJjZXMiOlsiYWRhcHRlci1kYXRhLXNlcnZpY2Utb2RhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUQsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztBQVl2QixjQUFjO0FBQ2QsTUFBTSxPQUFPLHVCQUF3QixTQUFRLE1BQU0sQ0FBQywwQkFBMEI7SUFRNUU7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQU5WLHNFQUFzRTtRQUN0RSx3RUFBd0U7UUFDeEUsc0ZBQXNGO1FBQ3RGLFlBQU8sR0FBRyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxDQUFDO1FBa04xQyx1QkFBa0IsR0FBOEIsSUFBSSxNQUFNLENBQUMsa0JBQWtCLENBQUM7WUFDNUUsSUFBSSxFQUFFLGVBQWU7WUFFckIsU0FBUyxFQUFFLFVBQVUsSUFBUyxFQUFFLGNBQXFDLEVBQUUsV0FBK0I7Z0JBQ3BHLElBQUksTUFBTSxHQUFRLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxJQUFJLElBQUksSUFBSTtvQkFBRSxPQUFPLE1BQU0sQ0FBQztnQkFDaEMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDL0IsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFO29CQUNwQixrRkFBa0Y7b0JBQ2xGLElBQUksY0FBYyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMzRSxJQUFJLEVBQUUsR0FBRyxjQUFjLElBQUksY0FBYyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsYUFBYSxD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YUFBYSxFQUFFLGdCQUF1QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBicmVlemUgZnJvbSAnYnJlZXplLWNsaWVudCc7XHJcbmltcG9ydCB7IGFwcGVuZFF1ZXJ5U3RyaW5nUGFyYW1ldGVyIH0gZnJvbSAnLi9hZGFwdGVyLWNvcmUnO1xyXG5cclxubGV0IGNvcmUgPSBicmVlemUuY29yZTtcclxuXHJcbmRlY2xhcmUgdmFyIHdpbmRvdzogYW55O1xyXG5kZWNsYXJlIHZhciBkb2N1bWVudDogYW55O1xyXG5kZWNsYXJlIHZhciB1cmw6IGFueTsgLy8gbmVlZGVkIHRvIGFjY2VzcyBub2RlJ3MgdXJsLnBhcnNlXHJcbmRlY2xhcmUgdmFyIE9EYXRhOiBhbnk7XHJcblxyXG5pbnRlcmZhY2UgT0RhdGFTYXZlQ29udGV4dCBleHRlbmRzIGJyZWV6ZS5TYXZlQ29udGV4dCB7XHJcbiAgdGVtcEtleXM6IGJyZWV6ZS5FbnRpdHlLZXlbXTtcclxuICBjb250ZW50S2V5czogYnJlZXplLkVudGl0eVtdO1xyXG59XHJcblxyXG4vKiogQGhpZGRlbiAqL1xyXG5leHBvcnQgY2xhc3MgRGF0YVNlcnZpY2VPRGF0YUFkYXB0ZXIgZXh0ZW5kcyBicmVlemUuQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXIge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICByZWxhdGl2ZVVybDogYm9vbGVhbiB8ICgoZHM6IGJyZWV6ZS5EYXRhU2VydmljZSwgdXJsOiBzdHJpbmcpID0+IHN0cmluZyk7XHJcbiAgLy8gX2NhdGNoTm9Db25uZWN0aW9uRXJyb3IgPSBhYnN0cmFjdERzYVByb3RvLl9jYXRjaE5vQ29ubmVjdGlvbkVycm9yO1xyXG4gIC8vIGNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvciA9IGFic3RyYWN0RHNhUHJvdG8uY2hhbmdlUmVxdWVzdEludGVyY2VwdG9yO1xyXG4gIC8vIF9jcmVhdGVDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3IgPSBhYnN0cmFjdERzYVByb3RvLl9jcmVhdGVDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3I7XHJcbiAgaGVhZGVycyA9IHsgXCJEYXRhU2VydmljZVZlcnNpb25cIjogXCIyLjBcIiB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLm5hbWUgPSBcIk9EYXRhXCI7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcmVnaXN0ZXIoY29uZmlnPzogYnJlZXplLkJyZWV6ZUNvbmZpZykge1xyXG4gICAgY29uZmlnID0gY29uZmlnIHx8IGJyZWV6ZS5jb25maWc7XHJcbiAgICBjb25maWcucmVnaXN0ZXJBZGFwdGVyKFwiZGF0YVNlcnZpY2VcIiwgRGF0YVNlcnZpY2VPRGF0YUFkYXB0ZXIpO1xyXG4gICAgcmV0dXJuIGNvbmZpZy5pbml0aWFsaXplQWRhcHRlckluc3RhbmNlKFwiZGF0YVNlcnZpY2VcIiwgXCJPRGF0YVwiLCB0cnVlKSBhcyBEYXRhU2VydmljZU9EYXRhQWRhcHRlcjtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemUoKSB7XHJcbiAgICBPRGF0YSA9IGNvcmUucmVxdWlyZUxpYihcIk9EYXRhXCIsIFwiTmVlZGVkIHRvIHN1cHBvcnQgcmVtb3RlIE9EYXRhIHNlcnZpY2VzXCIpO1xyXG4gICAgT0RhdGEuanNvbkhhbmRsZXIucmVjb2duaXplRGF0ZXMgPSB0cnVlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIEFic29sdXRlIFVSTCBpcyB0aGUgZGVmYXVsdCBhcyBvZiBCcmVlemUgMS41LjUuICBcclxuICAvLyBUbyB1c2UgcmVsYXRpdmUgVVJMIChsaWtlIHByZS0xLjUuNSksIGFkZCBhZGFwdGVySW5zdGFuY2UucmVsYXRpdmVVcmwgPSB0cnVlOlxyXG4gIC8vXHJcbiAgLy8gICAgIGxldCBkcyA9IGJyZWV6ZS5jb25maWcuaW5pdGlhbGl6ZUFkYXB0ZXJJbnN0YW5jZShcImRhdGFTZXJ2aWNlXCIsIFwid2ViQXBpT0RhdGFcIik7XHJcbiAgLy8gICAgIGRzLnJlbGF0aXZlVXJsID0gdHJ1ZTsgXHJcbiAgLy9cclxuICAvLyBUbyB1c2UgY3VzdG9tIHVybCBjb25zdHJ1Y3Rpb24sIGFkZCBhZGFwdGVySW5zdGFuY2UucmVsYXRpdmVVcmwgPSBteWZ1bmN0aW9uKGRhdGFTZXJ2aWNlLCB1cmwpOlxyXG4gIC8vXHJcbiAgLy8gICAgIGxldCBkcyA9IGJyZWV6ZS5jb25maWcuaW5pdGlhbGl6ZUFkYXB0ZXJJbnN0YW5jZShcImRhdGFTZXJ2aWNlXCIsIFwid2ViQXBpT0RhdGFcIik7XHJcbiAgLy8gICAgIGRzLnJlbGF0aXZlVXJsID0gZnVuY3Rpb24oZGF0YVNlcnZpY2UsIHVybCkge1xyXG4gIC8vICAgICAgICByZXR1cm4gc29tZWhvd0NvbnZlcnQodXJsKTtcclxuICAvLyAgICAgfVxyXG4gIC8vXHJcblxyXG4gIGZldGNoTWV0YWRhdGEobWV0YWRhdGFTdG9yZTogYnJlZXplLk1ldGFkYXRhU3RvcmUsIGRhdGFTZXJ2aWNlOiBicmVlemUuRGF0YVNlcnZpY2UpIHtcclxuICAgIGxldCBzZXJ2aWNlTmFtZSA9IGRhdGFTZXJ2aWNlLnNlcnZpY2VOYW1lO1xyXG5cclxuICAgIGxldCB1cmw6IHN0cmluZztcclxuICAgIGlmICh0aGlzLnJlbGF0aXZlVXJsID09PSB0cnVlKSB7XHJcbiAgICAgIHVybCA9IGRhdGFTZXJ2aWNlLnF1YWxpZnlVcmwoJyRtZXRhZGF0YScpO1xyXG4gICAgfSBlbHNlIGlmIChjb3JlLmlzRnVuY3Rpb24odGhpcy5yZWxhdGl2ZVVybCkpIHtcclxuICAgICAgdXJsID0gKHRoaXMucmVsYXRpdmVVcmwgYXMgYW55KShkYXRhU2VydmljZSwgJyRtZXRhZGF0YScpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdXJsID0gdGhpcy5nZXRBYnNvbHV0ZVVybChkYXRhU2VydmljZSwgJyRtZXRhZGF0YScpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBtaGVhZGVycyA9IGNvcmUuZXh0ZW5kKHt9LCB0aGlzLmhlYWRlcnMpO1xyXG4gICAgKG1oZWFkZXJzIGFzIGFueSkuQWNjZXB0ID0gJ2FwcGxpY2F0aW9uLyo7IG9kYXRhLm1ldGFkYXRhPWZ1bGwnO1xyXG5cclxuICAgIGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAvLyBPRGF0YS5yZWFkKHVybCxcclxuICAgICAgT0RhdGEucmVhZCh7XHJcbiAgICAgICAgcmVxdWVzdFVyaTogdXJsLFxyXG4gICAgICAgIC8vIGhlYWRlcnM6IHsgXCJBY2NlcHRcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJ9XHJcbiAgICAgICAgaGVhZGVyczogbWhlYWRlcnNcclxuICAgICAgfSxcclxuICAgICAgICBmdW5jdGlvbiAoZGF0YTogYW55KSB7XHJcbiAgICAgICAgICAvLyBkYXRhLmRhdGFTZXJ2aWNlcy5zY2hlbWEgaXMgYW4gYXJyYXkgb2Ygc2NoZW1hcy4gd2l0aCBwcm9wZXJ0aWVzIG9mXHJcbiAgICAgICAgICAvLyBlbnRpdHlDb250YWluZXJbXSwgYXNzb2NpYXRpb25bXSwgZW50aXR5VHlwZVtdLCBhbmQgbmFtZXNwYWNlLlxyXG4gICAgICAgICAgaWYgKCFkYXRhIHx8ICFkYXRhLmRhdGFTZXJ2aWNlcykge1xyXG4gICAgICAgICAgICBsZXQgZXJyb3IgPSBuZXcgRXJyb3IoXCJNZXRhZGF0YSBxdWVyeSBmYWlsZWQgZm9yOiBcIiArIHVybCk7XHJcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IGNzZGxNZXRhZGF0YSA9IGRhdGEuZGF0YVNlcnZpY2VzO1xyXG5cclxuICAgICAgICAgIC8vIG1pZ2h0IGhhdmUgYmVlbiBmZXRjaGVkIGJ5IGFub3RoZXIgcXVlcnlcclxuICAgICAgICAgIGlmICghbWV0YWRhdGFTdG9yZS5oYXNNZXRhZGF0YUZvcihzZXJ2aWNlTmFtZSkpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICBtZXRhZGF0YVN0b3JlLmltcG9ydE1ldGFkYXRhKGNzZGxNZXRhZGF0YSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihcIk1ldGFkYXRhIHF1ZXJ5IGZhaWxlZCBmb3IgXCIgKyB1cmwgKyBcIjsgVW5hYmxlIHRvIHByb2Nlc3MgcmV0dXJuZWQgbWV0YWRhdGE6IFwiICsgZS5tZXNzYWdlKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG1ldGFkYXRhU3RvcmUuYWRkRGF0YVNlcnZpY2UoZGF0YVNlcnZpY2UpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiByZXNvbHZlKGNzZGxNZXRhZGF0YSk7XHJcblxyXG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgICBsZXQgZXJyID0gY3JlYXRlRXJyb3IoZXJyb3IsIHVybCk7XHJcbiAgICAgICAgICBlcnIubWVzc2FnZSA9IFwiTWV0YWRhdGEgcXVlcnkgZmFpbGVkIGZvcjogXCIgKyB1cmwgKyBcIjsgXCIgKyAoZXJyLm1lc3NhZ2UgfHwgXCJcIik7XHJcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBPRGF0YS5tZXRhZGF0YUhhbmRsZXJcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBwcm9taXNlO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICBleGVjdXRlUXVlcnkobWFwcGluZ0NvbnRleHQ6IGJyZWV6ZS5NYXBwaW5nQ29udGV4dCkge1xyXG4gICAgbGV0IHVybDogc3RyaW5nO1xyXG4gICAgaWYgKHRoaXMucmVsYXRpdmVVcmwgPT09IHRydWUpIHtcclxuICAgICAgdXJsID0gbWFwcGluZ0NvbnRleHQuZ2V0VXJsKCk7XHJcbiAgICB9IGVsc2UgaWYgKGNvcmUuaXNGdW5jdGlvbih0aGlzLnJlbGF0aXZlVXJsKSkge1xyXG4gICAgICB1cmwgPSAodGhpcy5yZWxhdGl2ZVVybCBhcyBhbnkpKG1hcHBpbmdDb250ZXh0LmRhdGFTZXJ2aWNlLCBtYXBwaW5nQ29udGV4dC5nZXRVcmwoKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB1cmwgPSB0aGlzLmdldEFic29sdXRlVXJsKG1hcHBpbmdDb250ZXh0LmRhdGFTZXJ2aWNlLCBtYXBwaW5nQ29udGV4dC5nZXRVcmwoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWRkIHF1ZXJ5IHBhcmFtcyBpZiAud2l0aFBhcmFtZXRlcnMgd2FzIHVzZWRcclxuICAgIGxldCBxdWVyeSA9IG1hcHBpbmdDb250ZXh0LnF1ZXJ5IGFzIGJyZWV6ZS5FbnRpdHlRdWVyeTtcclxuICAgIGlmICghY29yZS5pc0VtcHR5KHF1ZXJ5LnBhcmFtZXRlcnMpKSB7XHJcbiAgICAgIGxldCBwYXJhbVN0cmluZyA9IHRvUXVlcnlTdHJpbmcocXVlcnkucGFyYW1ldGVycyk7XHJcbiAgICAgIHVybCA9IGFwcGVuZFF1ZXJ5U3RyaW5nUGFyYW1ldGVyKHVybCwgcGFyYW1TdHJpbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcm9taXNlID0gbmV3IFByb21pc2U8YnJlZXplLlF1ZXJ5UmVzdWx0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIE9EYXRhLnJlYWQoe1xyXG4gICAgICAgIHJlcXVlc3RVcmk6IHVybCxcclxuICAgICAgICBoZWFkZXJzOiBjb3JlLmV4dGVuZCh7fSwgdGhpcy5oZWFkZXJzKVxyXG4gICAgICB9LFxyXG4gICAgICAgIGZ1bmN0aW9uIChkYXRhOiBhbnksIHJlc3BvbnNlOiBhbnkpIHtcclxuICAgICAgICAgIGxldCBpbmxpbmVDb3VudDogYW55O1xyXG4gICAgICAgICAgaWYgKGRhdGEuX19jb3VudCkge1xyXG4gICAgICAgICAgICAvLyBPRGF0YSBjYW4gcmV0dXJuIGRhdGEuX19jb3VudCBhcyBhIHN0cmluZ1xyXG4gICAgICAgICAgICBpbmxpbmVDb3VudCA9IHBhcnNlSW50KGRhdGEuX19jb3VudCwgMTApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gT2RhdGEgcmV0dXJucyBkaWZmZXJlbnQgcmVzdWx0IHN0cnVjdHVyZSB3aGVuIGl0IHJldHVybnMgbXVsdGlwbGUgZW50aXRpZXMgKGRhdGEucmVzdWx0cykgdnMgc2luZ2xlIGVudGl0eSAoZGF0YSBkaXJlY3RseSkuXHJcbiAgICAgICAgICAvLyBAc2VlIGh0dHA6Ly93d3cub2RhdGEub3JnL2RvY3VtZW50YXRpb24vb2RhdGEtdmVyc2lvbi0yLTAvanNvbi1mb3JtYXQvI1JlcHJlc2VudGluZ0NvbGxlY3Rpb25zT2ZFbnRyaWVzXHJcbiAgICAgICAgICAvLyBhbmQgaHR0cDovL3d3dy5vZGF0YS5vcmcvZG9jdW1lbnRhdGlvbi9vZGF0YS12ZXJzaW9uLTItMC9qc29uLWZvcm1hdC8jUmVwcmVzZW50aW5nRW50cmllc1xyXG4gICAgICAgICAgbGV0IHJlc3VsdHM6IGFueTtcclxuICAgICAgICAgIGlmIChkYXRhLnJlc3VsdHMpIHtcclxuICAgICAgICAgICAgcmVzdWx0cyA9IGRhdGEucmVzdWx0cztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc3VsdHMgPSBkYXRhO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoeyByZXN1bHRzOiByZXN1bHRzLCBpbmxpbmVDb3VudDogaW5saW5lQ291bnQsIGh0dHBSZXNwb25zZTogcmVzcG9uc2UsIHF1ZXJ5OiBxdWVyeSB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZ1bmN0aW9uIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGNyZWF0ZUVycm9yKGVycm9yLCB1cmwpKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBwcm9taXNlO1xyXG4gIH1cclxuXHJcblxyXG4gIHNhdmVDaGFuZ2VzKG9kYXRhU2F2ZUNvbnRleHQ6IGJyZWV6ZS5TYXZlQ29udGV4dCwgc2F2ZUJ1bmRsZTogYnJlZXplLlNhdmVCdW5kbGUpOiBQcm9taXNlPGJyZWV6ZS5TYXZlUmVzdWx0PiB7XHJcbiAgICBsZXQgYWRhcHRlciA9IG9kYXRhU2F2ZUNvbnRleHQuYWRhcHRlciA9IHRoaXM7XHJcbiAgICBsZXQgc2F2ZUNvbnRleHQgPSBvZGF0YVNhdmVDb250ZXh0IGFzIE9EYXRhU2F2ZUNvbnRleHQ7XHJcbiAgICBsZXQgdXJsOiBzdHJpbmc7XHJcbiAgICBpZiAodGhpcy5yZWxhdGl2ZVVybCA9PT0gdHJ1ZSkge1xyXG4gICAgICBzYXZlQ29udGV4dC5yb3V0ZVByZWZpeCA9IGFkYXB0ZXIuZ2V0Um91dGVQcmVmaXgoc2F2ZUNvbnRleHQuZGF0YVNlcnZpY2UpO1xyXG4gICAgICB1cmwgPSBzYXZlQ29udGV4dC5kYXRhU2VydmljZS5xdWFsaWZ5VXJsKFwiJGJhdGNoXCIpO1xyXG4gICAgfSBlbHNlIGlmIChjb3JlLmlzRnVuY3Rpb24oYWRhcHRlci5yZWxhdGl2ZVVybCkpIHtcclxuICAgICAgc2F2ZUNvbnRleHQucm91dGVQcmVmaXggPSAoYWRhcHRlci5yZWxhdGl2ZVVybCBhcyBGdW5jdGlvbikoc2F2ZUNvbnRleHQuZGF0YVNlcnZpY2UsICcnKTtcclxuICAgICAgdXJsID0gc2F2ZUNvbnRleHQucm91dGVQcmVmaXggKyAnJGJhdGNoJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNhdmVDb250ZXh0LnJvdXRlUHJlZml4ID0gYWRhcHRlci5nZXRBYnNvbHV0ZVVybChzYXZlQ29udGV4dC5kYXRhU2VydmljZSwgJycpO1xyXG4gICAgICB1cmwgPSBzYXZlQ29udGV4dC5yb3V0ZVByZWZpeCArICckYmF0Y2gnO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXF1ZXN0RGF0YSA9IGNyZWF0ZUNoYW5nZVJlcXVlc3RzKHNhdmVDb250ZXh0LCBzYXZlQnVuZGxlKTtcclxuICAgIGxldCB0ZW1wS2V5cyA9IHNhdmVDb250ZXh0LnRlbXBLZXlzO1xyXG4gICAgbGV0IGNvbnRlbnRLZXlzID0gc2F2ZUNvbnRleHQuY29udGVudEtleXM7XHJcbiAgICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlPGJyZWV6ZS5TYXZlUmVzdWx0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIE9EYXRhLnJlcXVlc3Qoe1xyXG4gICAgICAgIGhlYWRlcnM6IGNvcmUuZXh0ZW5kKHt9LCB0aGlzLmhlYWRlcnMpLFxyXG4gICAgICAgIHJlcXVlc3RVcmk6IHVybCxcclxuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgIGRhdGE6IHJlcXVlc3REYXRhXHJcbiAgICAgIH0sIGZ1bmN0aW9uIChkYXRhOiBhbnksIHJlc3BvbnNlOiBhbnkpIHtcclxuICAgICAgICBsZXQgZW50aXRpZXM6IGFueVtdID0gW107XHJcbiAgICAgICAgbGV0IGtleU1hcHBpbmdzOiBicmVlemUuS2V5TWFwcGluZ1tdID0gW107XHJcbiAgICAgICAgbGV0IHNhdmVSZXN1bHQ6IGJyZWV6ZS5TYXZlUmVzdWx0ID0geyBlbnRpdGllczogZW50aXRpZXMsIGtleU1hcHBpbmdzOiBrZXlNYXBwaW5ncyB9O1xyXG4gICAgICAgIGRhdGEuX19iYXRjaFJlc3BvbnNlcy5mb3JFYWNoKGZ1bmN0aW9uIChicjogYW55KSB7XHJcbiAgICAgICAgICBici5fX2NoYW5nZVJlc3BvbnNlcy5mb3JFYWNoKGZ1bmN0aW9uIChjcjogYW55KSB7XHJcbiAgICAgICAgICAgIGxldCByZXNwb25zZSA9IGNyLnJlc3BvbnNlIHx8IGNyO1xyXG4gICAgICAgICAgICBsZXQgc3RhdHVzQ29kZSA9IHJlc3BvbnNlLnN0YXR1c0NvZGU7XHJcbiAgICAgICAgICAgIGlmICgoIXN0YXR1c0NvZGUpIHx8IHN0YXR1c0NvZGUgPj0gNDAwKSB7XHJcbiAgICAgICAgICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKGNyLCB1cmwpKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBjb250ZW50SWQgPSBjci5oZWFkZXJzW1wiQ29udGVudC1JRFwiXTtcclxuICAgICAgICAgICAgLy8gT2xpbmdvIHNlbmRzIGRpZmZlcmVudCBjYXNlIG9mICdJRCcgZm9yIHRoZSBoZWFkZXIgbmFtZS5cclxuICAgICAgICAgICAgaWYgKCFjb250ZW50SWQpIHtcclxuICAgICAgICAgICAgICBjb250ZW50SWQgPSBjci5oZWFkZXJzW1wiQ29udGVudC1JZFwiXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IHJhd0VudGl0eSA9IGNyLmRhdGE7XHJcbiAgICAgICAgICAgIGlmIChyYXdFbnRpdHkpIHtcclxuICAgICAgICAgICAgICBsZXQgdGVtcEtleSA9IHRlbXBLZXlzW2NvbnRlbnRJZF07XHJcbiAgICAgICAgICAgICAgaWYgKHRlbXBLZXkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBlbnRpdHlUeXBlID0gdGVtcEtleS5lbnRpdHlUeXBlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVudGl0eVR5cGUuYXV0b0dlbmVyYXRlZEtleVR5cGUgIT09IGJyZWV6ZS5BdXRvR2VuZXJhdGVkS2V5VHlwZS5Ob25lKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCB0ZW1wVmFsdWUgPSB0ZW1wS2V5LnZhbHVlc1swXTtcclxuICAgICAgICAgICAgICAgICAgbGV0IHJlYWxLZXkgPSBlbnRpdHlUeXBlLmdldEVudGl0eUtleUZyb21SYXdFbnRpdHkocmF3RW50aXR5LCBicmVlemUuRGF0YVByb3BlcnR5LmdldFJhd1ZhbHVlRnJvbVNlcnZlcik7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBrZXlNYXBwaW5nID0geyBlbnRpdHlUeXBlTmFtZTogZW50aXR5VHlwZS5uYW1lLCB0ZW1wVmFsdWU6IHRlbXBWYWx1ZSwgcmVhbFZhbHVlOiByZWFsS2V5LnZhbHVlc1swXSB9O1xyXG4gICAgICAgICAgICAgICAgICBrZXlNYXBwaW5ncy5wdXNoKGtleU1hcHBpbmcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbnRpdGllcy5wdXNoKHJhd0VudGl0eSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbGV0IG9yaWdFbnRpdHkgPSBjb250ZW50S2V5c1tjb250ZW50SWRdO1xyXG4gICAgICAgICAgICAgIGVudGl0aWVzLnB1c2gob3JpZ0VudGl0eSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlKHNhdmVSZXN1bHQpO1xyXG4gICAgICB9LCBmdW5jdGlvbiAoZXJyOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gcmVqZWN0KGNyZWF0ZUVycm9yKGVyciwgdXJsKSk7XHJcbiAgICAgIH0sIE9EYXRhLmJhdGNoSGFuZGxlcik7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBwcm9taXNlO1xyXG5cclxuICB9XHJcblxyXG4gIGpzb25SZXN1bHRzQWRhcHRlcjogYnJlZXplLkpzb25SZXN1bHRzQWRhcHRlciA9IG5ldyBicmVlemUuSnNvblJlc3VsdHNBZGFwdGVyKHtcclxuICAgIG5hbWU6IFwiT0RhdGFfZGVmYXVsdFwiLFxyXG5cclxuICAgIHZpc2l0Tm9kZTogZnVuY3Rpb24gKG5vZGU6IGFueSwgbWFwcGluZ0NvbnRleHQ6IGJyZWV6ZS5NYXBwaW5nQ29udGV4dCwgbm9kZUNvbnRleHQ6IGJyZWV6ZS5Ob2RlQ29udGV4dCkge1xyXG4gICAgICBsZXQgcmVzdWx0OiBhbnkgPSB7fTtcclxuICAgICAgaWYgKG5vZGUgPT0gbnVsbCkgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgbGV0IG1ldGFkYXRhID0gbm9kZS5fX21ldGFkYXRhO1xyXG4gICAgICBpZiAobWV0YWRhdGEgIT0gbnVsbCkge1xyXG4gICAgICAgIC8vIFRPRE86IG1heSBiZSBhYmxlIHRvIG1ha2UgdGhpcyBtb3JlIGVmZmljaWVudCBieSBjYWNoaW5nIG9mIHRoZSBwcmV2aW91cyB2YWx1ZS5cclxuICAgICAgICBsZXQgZW50aXR5VHlwZU5hbWUgPSBicmVlemUuTWV0YWRhdGFTdG9yZS5ub3JtYWxpemVUeXBlTmFtZShtZXRhZGF0YS50eXBlKTtcclxuICAgICAgICBsZXQgZXQgPSBlbnRpdHlUeXBlTmFtZSAmJiBtYXBwaW5nQ29udGV4dC5lbnRpdHlNYW5hZ2VyLm1ldGFkYXRhU3RvcmUuZ2V0RW50aXR5VHlwZShlbnRpdHlUeXBlTmFtZSwgdHJ1ZSk7XHJcbiAgICAgICAgLy8gT0RhdGEgcmVzcG9uc2UgZG9lc24ndCBkaXN0aW5ndWlzaCBhIHByb2plY3Rpb24gZnJvbSBhIHdob2xlIGVudGl0eS5cclxuICAgICAgICAvLyBXZSdsbCBhc3N1bWUgdGhhdCB3aG9sZS1lbnRpdHkgZGF0YSB3b3VsZCBoYXZlIGF0IGxlYXN0IGFzIG1hbnkgcHJvcGVydGllcyAgKDw9KVxyXG4gICAgICAgIC8vIGFzIHRoZSBFbnRpdHlUeXBlIGhhcyBtYXBwZWQgcHJvcGVydGllcyBvbiB0aGUgYmFzaXMgdGhhdFxyXG4gICAgICAgIC8vIG1vc3QgcHJvamVjdGlvbnMgcmVtb3ZlIHByb3BlcnRpZXMgcmF0aGVyIHRoYW4gYWRkIHRoZW0uXHJcbiAgICAgICAgLy8gSWYgbm90LCBhc3N1bWUgaXQncyBhIHByb2plY3Rpb24gYW5kIGRvIE5PVCB0cmVhdCBhcyBhbiBlbnRpdHlcclxuICAgICAgICBpZiAoZXQgJiYgZXQuX21hcHBlZFByb3BlcnRpZXNDb3VudCA8PSBPYmplY3Qua2V5cyhub2RlKS5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAvLyBpZiAoZXQgJiYgZXQuX21hcHBlZFByb3BlcnRpZXNDb3VudCA9PT0gT2JqZWN0LmtleXMobm9kZSkubGVuZ3RoIC0gMSkgeyAvLyBPTERcclxuICAgICAgICAgIHJlc3VsdC5lbnRpdHlUeXBlID0gZXQ7XHJcbiAgICAgICAgICBsZXQgdXJpS2V5ID0gbWV0YWRhdGEudXJpIHx8IG1ldGFkYXRhLmlkO1xyXG4gICAgICAgICAgaWYgKHVyaUtleSkge1xyXG4gICAgICAgICAgICAvLyBTdHJpcCBiYXNlVXJpIHRvIG1ha2UgdXJpS2V5IGEgcmVsYXRpdmUgdXJpXHJcbiAgICAgICAgICAgIC8vIFRvZG86IHdoeSBpcyB0aGlzIG5lY2Vzc2FyeSB3aGVuIGFic29sdXRlIHdvcmtzIGZvciBldmVyeSBPRGF0YSBzb3VyY2UgdGVzdGVkP1xyXG4gICAgICAgICAgICBsZXQgcmUgPSBuZXcgUmVnRXhwKCdeJyArIG1hcHBpbmdDb250ZXh0LmRhdGFTZXJ2aWNlLnNlcnZpY2VOYW1lLCAnaScpO1xyXG4gICAgICAgICAgICB1cmlLZXkgPSB1cmlLZXkucmVwbGFjZShyZSwgJycpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVzdWx0LmV4dHJhTWV0YWRhdGEgPSB7XHJcbiAgICAgICAgICAgIHVyaUtleTogdXJpS2V5LFxyXG4gICAgICAgICAgICBldGFnOiBtZXRhZGF0YS5ldGFnXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBPRGF0YSB2MyAtIHByb2plY3Rpb24gYXJyYXlzIHdpbGwgYmUgZW5jbG9zZWQgaW4gYSByZXN1bHRzIGFycmF5XHJcbiAgICAgIGlmIChub2RlLnJlc3VsdHMpIHtcclxuICAgICAgICByZXN1bHQubm9kZSA9IG5vZGUucmVzdWx0cztcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IHByb3BlcnR5TmFtZSA9IG5vZGVDb250ZXh0LnByb3BlcnR5TmFtZTtcclxuICAgICAgcmVzdWx0Lmlnbm9yZSA9IG5vZGUuX19kZWZlcnJlZCAhPSBudWxsIHx8IHByb3BlcnR5TmFtZSA9PT0gXCJfX21ldGFkYXRhXCIgfHxcclxuICAgICAgICAvLyBFbnRpdHlLZXkgcHJvcGVydGllcyBjYW4gYmUgcHJvZHVjZWQgYnkgRURNWCBtb2RlbHNcclxuICAgICAgICAocHJvcGVydHlOYW1lID09PSBcIkVudGl0eUtleVwiICYmIG5vZGUuJHR5cGUgJiYgY29yZS5zdHJpbmdTdGFydHNXaXRoKG5vZGUuJHR5cGUsIFwiU3lzdGVtLkRhdGFcIikpO1xyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICB9KTtcclxuXHJcbiAgZ2V0QWJzb2x1dGVVcmwoZGF0YVNlcnZpY2U6IGJyZWV6ZS5EYXRhU2VydmljZSwgdXJsOiBzdHJpbmcpIHtcclxuICAgIGxldCBzZXJ2aWNlTmFtZSA9IGRhdGFTZXJ2aWNlLnF1YWxpZnlVcmwoJycpO1xyXG4gICAgLy8gb25seSBwcmVmaXggd2l0aCBzZXJ2aWNlTmFtZSBpZiBub3QgYWxyZWFkeSBvbiB0aGUgdXJsXHJcbiAgICBsZXQgYmFzZSA9IChjb3JlLnN0cmluZ1N0YXJ0c1dpdGgodXJsLCBzZXJ2aWNlTmFtZSkpID8gJycgOiBzZXJ2aWNlTmFtZTtcclxuICAgIC8vIElmIG5vIHByb3RvY29sLCB0dXJuIGJhc2UgaW50byBhbiBhYnNvbHV0ZSBVUklcclxuICAgIGlmICh3aW5kb3cgJiYgc2VydmljZU5hbWUuaW5kZXhPZignLy8nKSA8IDApIHtcclxuICAgICAgLy8gbm8gcHJvdG9jb2w7IG1ha2UgaXQgYWJzb2x1dGVcclxuICAgICAgYmFzZSA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArXHJcbiAgICAgICAgKGNvcmUuc3RyaW5nU3RhcnRzV2l0aChzZXJ2aWNlTmFtZSwgJy8nKSA/ICcnIDogJy8nKSArXHJcbiAgICAgICAgYmFzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBiYXNlICsgdXJsO1xyXG4gIH1cclxuXHJcbiAgZ2V0Um91dGVQcmVmaXgoZGF0YVNlcnZpY2U6IGJyZWV6ZS5EYXRhU2VydmljZSkge1xyXG4gICAgLy8gR2V0IHRoZSByb3V0ZVByZWZpeCBmcm9tIGEgV2ViIEFQSSBPRGF0YSBzZXJ2aWNlIG5hbWUuXHJcbiAgICAvLyBUaGUgcm91dGVQcmVmaXggaXMgcHJlc3VtZWQgdG8gYmUgdGhlIHBhdGhuYW1lIHdpdGhpbiB0aGUgZGF0YVNlcnZpY2Uuc2VydmljZU5hbWVcclxuICAgIC8vIEV4YW1wbGVzIG9mIHNlcnZpY2VuYW1lIC0+IHJvdXRlUHJlZml4OlxyXG4gICAgLy8gICAnaHR0cDovL2xvY2FsaG9zdDo1NTgwMi9vZGF0YS8nIC0+ICdvZGF0YS8nXHJcbiAgICAvLyAgICdodHRwOi8vMTk4LjE1NC4xMjEuNzUvc2VydmljZS9vZGF0YS8nIC0+ICdzZXJ2aWNlL29kYXRhLydcclxuICAgIGxldCBwYXJzZXI6IGFueTtcclxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICdvYmplY3QnKSB7IC8vIGJyb3dzZXJcclxuICAgICAgcGFyc2VyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICBwYXJzZXIuaHJlZiA9IGRhdGFTZXJ2aWNlLnNlcnZpY2VOYW1lO1xyXG4gICAgfSBlbHNlIHsgLy8gbm9kZVxyXG4gICAgICAvLyBUT0RPOiBob3cgdG8gYmVzdCBoYW5kbGUgdGhpc1xyXG4gICAgICAvLyBhc3N1bWVzIGV4aXN0ZW5jZSBvZiBub2RlJ3MgdXJsLnBhcnNlIG1ldGhvZC5cclxuICAgICAgcGFyc2VyID0gdXJsLnBhcnNlKGRhdGFTZXJ2aWNlLnNlcnZpY2VOYW1lKTtcclxuICAgIH1cclxuICAgIGxldCBwcmVmaXggPSBwYXJzZXIucGF0aG5hbWU7XHJcbiAgICBpZiAocHJlZml4WzBdID09PSAnLycpIHtcclxuICAgICAgcHJlZml4ID0gcHJlZml4LnN1YnN0cigxKTtcclxuICAgIH0gLy8gZHJvcCBsZWFkaW5nICcvJyAgKGFsbCBidXQgSUUpXHJcbiAgICBpZiAocHJlZml4LnN1YnN0cigtMSkgIT09ICcvJykge1xyXG4gICAgICBwcmVmaXggKz0gJy8nO1xyXG4gICAgfSAgICAgIC8vIGVuc3VyZSB0cmFpbGluZyAnLydcclxuICAgIHJldHVybiBwcmVmaXg7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuLy8gY3J1ZGUgc2VyaWFsaXplci4gIERvZXNuJ3QgcmVjdXJzZVxyXG5mdW5jdGlvbiB0b1F1ZXJ5U3RyaW5nKG9iajogT2JqZWN0KSB7XHJcbiAgbGV0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIGZvciAobGV0IGkgaW4gb2JqKSB7XHJcbiAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGkpKSB7XHJcbiAgICAgIHBhcnRzLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGkpICsgXCI9XCIgKyBlbmNvZGVVUklDb21wb25lbnQob2JqW2ldKSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBwYXJ0cy5qb2luKFwiJlwiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gdHJhbnNmb3JtVmFsdWUocHJvcDogYnJlZXplLkRhdGFQcm9wZXJ0eSwgdmFsOiBhbnkpIHtcclxuICBpZiAocHJvcC5pc1VubWFwcGVkKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIGlmIChwcm9wLmRhdGFUeXBlID09PSBicmVlemUuRGF0YVR5cGUuRGF0ZVRpbWVPZmZzZXQpIHtcclxuICAgIC8vIFRoZSBkYXRhanMgbGliIHRyaWVzIHRvIHRyZWF0IGNsaWVudCBkYXRlVGltZXMgdGhhdCBhcmUgZGVmaW5lZCBhcyBEYXRlVGltZU9mZnNldCBvbiB0aGUgc2VydmVyIGRpZmZlcmVudGx5XHJcbiAgICAvLyBmcm9tIG90aGVyIGRhdGVUaW1lcy4gVGhpcyBmaXggY29tcGVuc2F0ZXMgYmVmb3JlIHRoZSBzYXZlLlxyXG4gICAgdmFsID0gdmFsICYmIG5ldyBEYXRlKHZhbC5nZXRUaW1lKCkgLSAodmFsLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCkpO1xyXG4gIH0gZWxzZSBpZiAoKHByb3AuZGF0YVR5cGUgYXMgYnJlZXplLkRhdGFUeXBlKS5xdW90ZUpzb25PRGF0YSkge1xyXG4gICAgdmFsID0gdmFsICE9IG51bGwgPyB2YWwudG9TdHJpbmcoKSA6IHZhbDtcclxuICB9XHJcbiAgcmV0dXJuIHZhbDtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlQ2hhbmdlUmVxdWVzdHMoc2F2ZUNvbnRleHQ6IE9EYXRhU2F2ZUNvbnRleHQsIHNhdmVCdW5kbGU6IGJyZWV6ZS5TYXZlQnVuZGxlKSB7XHJcbiAgbGV0IGNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvciA9IChzYXZlQ29udGV4dC5hZGFwdGVyIGFzIERhdGFTZXJ2aWNlT0RhdGFBZGFwdGVyKS5fY3JlYXRlQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yKHNhdmVDb250ZXh0LCBzYXZlQnVuZGxlKTtcclxuICBsZXQgY2hhbmdlUmVxdWVzdHM6IGFueVtdID0gW107XHJcbiAgbGV0IHRlbXBLZXlzOiBicmVlemUuRW50aXR5S2V5W10gPSBbXTtcclxuICBsZXQgY29udGVudEtleXM6IGJyZWV6ZS5FbnRpdHlbXSA9IFtdO1xyXG4gIGxldCBlbnRpdHlNYW5hZ2VyID0gc2F2ZUNvbnRleHQuZW50aXR5TWFuYWdlcjtcclxuICBsZXQgaGVscGVyID0gZW50aXR5TWFuYWdlci5oZWxwZXI7XHJcbiAgbGV0IGlkID0gMDtcclxuICBsZXQgcm91dGVQcmVmaXggPSBzYXZlQ29udGV4dC5yb3V0ZVByZWZpeDtcclxuXHJcbiAgc2F2ZUJ1bmRsZS5lbnRpdGllcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnRpdHksIGluZGV4KSB7XHJcbiAgICBsZXQgYXNwZWN0ID0gZW50aXR5LmVudGl0eUFzcGVjdDtcclxuICAgIGlkID0gaWQgKyAxOyAvLyB3ZSBhcmUgZGVsaWJlcmF0ZWx5IHNraXBwaW5nIGlkPTAgYmVjYXVzZSBDb250ZW50LUlEID0gMCBzZWVtcyB0byBiZSBpZ25vcmVkLlxyXG4gICAgbGV0IHJlcXVlc3QgPSB7IGhlYWRlcnM6IHsgXCJDb250ZW50LUlEXCI6IGlkLCBcIkRhdGFTZXJ2aWNlVmVyc2lvblwiOiBcIjIuMFwiIH0gfSBhcyBhbnk7XHJcbiAgICBjb250ZW50S2V5c1tpZF0gPSBlbnRpdHk7XHJcbiAgICBpZiAoYXNwZWN0LmVudGl0eVN0YXRlLmlzQWRkZWQoKSkge1xyXG4gICAgICByZXF1ZXN0LnJlcXVlc3RVcmkgPSByb3V0ZVByZWZpeCArIGVudGl0eS5lbnRpdHlUeXBlLmRlZmF1bHRSZXNvdXJjZU5hbWU7XHJcbiAgICAgIHJlcXVlc3QubWV0aG9kID0gXCJQT1NUXCI7XHJcbiAgICAgIHJlcXVlc3QuZGF0YSA9IGhlbHBlci51bndyYXBJbnN0YW5jZShlbnRpdHksIHRyYW5zZm9ybVZhbHVlKTtcclxuICAgICAgdGVtcEtleXNbaWRdID0gYXNwZWN0LmdldEtleSgpO1xyXG4gICAgfSBlbHNlIGlmIChhc3BlY3QuZW50aXR5U3RhdGUuaXNNb2RpZmllZCgpKSB7XHJcbiAgICAgIHVwZGF0ZURlbGV0ZU1lcmdlUmVxdWVzdChyZXF1ZXN0LCBhc3BlY3QsIHJvdXRlUHJlZml4ISk7XHJcbiAgICAgIHJlcXVlc3QubWV0aG9kID0gXCJNRVJHRVwiO1xyXG4gICAgICByZXF1ZXN0LmRhdGEgPSBoZWxwZXIudW53cmFwQ2hhbmdlZFZhbHVlcyhlbnRpdHksIGVudGl0eU1hbmFnZXIubWV0YWRhdGFTdG9yZSwgdHJhbnNmb3JtVmFsdWUpO1xyXG4gICAgICAvLyBzaG91bGQgYmUgYSBQQVRDSC9NRVJHRVxyXG4gICAgfSBlbHNlIGlmIChhc3BlY3QuZW50aXR5U3RhdGUuaXNEZWxldGVkKCkpIHtcclxuICAgICAgdXBkYXRlRGVsZXRlTWVyZ2VSZXF1ZXN0KHJlcXVlc3QsIGFzcGVjdCwgcm91dGVQcmVmaXghKTtcclxuICAgICAgcmVxdWVzdC5tZXRob2QgPSBcIkRFTEVURVwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcmVxdWVzdCA9IGNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvci5nZXRSZXF1ZXN0KHJlcXVlc3QsIGVudGl0eSwgaW5kZXgpO1xyXG4gICAgY2hhbmdlUmVxdWVzdHMucHVzaChyZXF1ZXN0KTtcclxuICB9KTtcclxuICBzYXZlQ29udGV4dC5jb250ZW50S2V5cyA9IGNvbnRlbnRLZXlzO1xyXG4gIHNhdmVDb250ZXh0LnRlbXBLZXlzID0gdGVtcEtleXM7XHJcbiAgY2hhbmdlUmVxdWVzdEludGVyY2VwdG9yLmRvbmUoY2hhbmdlUmVxdWVzdHMpO1xyXG4gIHJldHVybiB7XHJcbiAgICBfX2JhdGNoUmVxdWVzdHM6IFtcclxuICAgICAge1xyXG4gICAgICAgIF9fY2hhbmdlUmVxdWVzdHM6IGNoYW5nZVJlcXVlc3RzXHJcbiAgICAgIH1cclxuICAgIF1cclxuICB9O1xyXG5cclxufVxyXG5cclxuZnVuY3Rpb24gdXBkYXRlRGVsZXRlTWVyZ2VSZXF1ZXN0KHJlcXVlc3Q6IGFueSwgYXNwZWN0OiBicmVlemUuRW50aXR5QXNwZWN0LCByb3V0ZVByZWZpeDogc3RyaW5nKSB7XHJcbiAgbGV0IHVyaUtleTogc3RyaW5nO1xyXG4gIGxldCBleHRyYU1ldGFkYXRhID0gYXNwZWN0LmV4dHJhTWV0YWRhdGE7XHJcbiAgaWYgKGV4dHJhTWV0YWRhdGEgPT0gbnVsbCkge1xyXG4gICAgdXJpS2V5ID0gZ2V0VXJpS2V5KGFzcGVjdCk7XHJcbiAgICBhc3BlY3QuZXh0cmFNZXRhZGF0YSA9IHtcclxuICAgICAgdXJpS2V5OiB1cmlLZXlcclxuICAgIH07XHJcbiAgfSBlbHNlIHtcclxuICAgIHVyaUtleSA9IGV4dHJhTWV0YWRhdGEudXJpS2V5O1xyXG4gICAgaWYgKGV4dHJhTWV0YWRhdGEuZXRhZykge1xyXG4gICAgICByZXF1ZXN0LmhlYWRlcnNbXCJJZi1NYXRjaFwiXSA9IGV4dHJhTWV0YWRhdGEuZXRhZztcclxuICAgIH1cclxuICB9XHJcbiAgcmVxdWVzdC5yZXF1ZXN0VXJpID1cclxuICAgIC8vIHVzZSByb3V0ZVByZWZpeCBpZiB1cmlLZXkgbGFja3MgcHJvdG9jb2wgKGkuZS4sIHJlbGF0aXZlIHVyaSlcclxuICAgIHVyaUtleS5pbmRleE9mKCcvLycpID4gMCA/IHVyaUtleSA6IHJvdXRlUHJlZml4ICsgdXJpS2V5O1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRVcmlLZXkoYXNwZWN0OiBicmVlemUuRW50aXR5QXNwZWN0KSB7XHJcbiAgbGV0IGVudGl0eVR5cGUgPSBhc3BlY3QuZW50aXR5IS5lbnRpdHlUeXBlO1xyXG4gIGxldCByZXNvdXJjZU5hbWUgPSBlbnRpdHlUeXBlLmRlZmF1bHRSZXNvdXJjZU5hbWU7XHJcbiAgbGV0IGtwcyA9IGVudGl0eVR5cGUua2V5UHJvcGVydGllcztcclxuICBsZXQgdXJpS2V5ID0gcmVzb3VyY2VOYW1lICsgXCIoXCI7XHJcbiAgaWYgKGtwcy5sZW5ndGggPT09IDEpIHtcclxuICAgIHVyaUtleSA9IHVyaUtleSArIGZtdFByb3BlcnR5KGtwc1swXSwgYXNwZWN0KSArIFwiKVwiO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBsZXQgZGVsaW0gPSBcIlwiO1xyXG4gICAga3BzLmZvckVhY2goZnVuY3Rpb24gKGtwKSB7XHJcbiAgICAgIHVyaUtleSA9IHVyaUtleSArIGRlbGltICsga3AubmFtZU9uU2VydmVyICsgXCI9XCIgKyBmbXRQcm9wZXJ0eShrcCwgYXNwZWN0KTtcclxuICAgICAgZGVsaW0gPSBcIixcIjtcclxuICAgIH0pO1xyXG4gICAgdXJpS2V5ID0gdXJpS2V5ICsgXCIpXCI7XHJcbiAgfVxyXG4gIHJldHVybiB1cmlLZXk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZtdFByb3BlcnR5KHByb3A6IGJyZWV6ZS5EYXRhUHJvcGVydHksIGFzcGVjdDogYnJlZXplLkVudGl0eUFzcGVjdCkge1xyXG4gIHJldHVybiAocHJvcC5kYXRhVHlwZSBhcyBicmVlemUuRGF0YVR5cGUpLmZtdE9EYXRhIShhc3BlY3QuZ2V0UHJvcGVydHlWYWx1ZShwcm9wLm5hbWUpKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlRXJyb3IoZXJyb3I6IGFueSwgdXJsOiBzdHJpbmcpIHtcclxuICAvLyBPRGF0YSBlcnJvcnMgY2FuIGhhdmUgdGhlIG1lc3NhZ2UgYnVyaWVkIHZlcnkgZGVlcGx5IC0gYW5kIG5vbm9idmlvdXNseVxyXG4gIC8vIHRoaXMgY29kZSBpcyB0cmlja3kgc28gYmUgY2FyZWZ1bCBjaGFuZ2luZyB0aGUgcmVzcG9uc2UuYm9keSBwYXJzaW5nLlxyXG4gIGxldCByZXN1bHQgPSBuZXcgRXJyb3IoKSBhcyBicmVlemUuU2VydmVyRXJyb3I7XHJcbiAgbGV0IHJlc3BvbnNlID0gZXJyb3IgJiYgZXJyb3IucmVzcG9uc2U7XHJcbiAgaWYgKCFyZXNwb25zZSkge1xyXG4gICAgLy8gaW4gY2FzZSBEYXRhSlMgcmV0dXJucyBcIk5vIGhhbmRsZXIgZm9yIHRoaXMgZGF0YVwiXHJcbiAgICByZXN1bHQubWVzc2FnZSA9IGVycm9yO1xyXG4gICAgcmVzdWx0LnN0YXR1c1RleHQgPSBlcnJvcjtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG4gIHJlc3VsdC5tZXNzYWdlID0gcmVzcG9uc2Uuc3RhdHVzVGV4dDtcclxuICByZXN1bHQuc3RhdHVzVGV4dCA9IHJlc3BvbnNlLnN0YXR1c1RleHQ7XHJcbiAgcmVzdWx0LnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1c0NvZGU7XHJcbiAgLy8gbm9uIHN0ZFxyXG4gIGlmICh1cmwpIHJlc3VsdC51cmwgPSB1cmw7XHJcbiAgcmVzdWx0LmJvZHkgPSByZXNwb25zZS5ib2R5O1xyXG4gIGlmIChyZXNwb25zZS5ib2R5KSB7XHJcbiAgICBsZXQgbmV4dEVycjogYW55O1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGJvZHkgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmJvZHkpO1xyXG4gICAgICByZXN1bHQuYm9keSA9IGJvZHk7XHJcbiAgICAgIC8vIE9EYXRhIHYzIGxvZ2ljXHJcbiAgICAgIGlmIChib2R5WydvZGF0YS5lcnJvciddKSB7XHJcbiAgICAgICAgYm9keSA9IGJvZHlbJ29kYXRhLmVycm9yJ107XHJcbiAgICAgIH1cclxuICAgICAgbGV0IG1zZyA9IFwiXCI7XHJcbiAgICAgIGRvIHtcclxuICAgICAgICBuZXh0RXJyID0gYm9keS5lcnJvciB8fCBib2R5LmlubmVyZXJyb3I7XHJcbiAgICAgICAgaWYgKCFuZXh0RXJyKSBtc2cgPSBtc2cgKyBnZXRNZXNzYWdlKGJvZHkpO1xyXG4gICAgICAgIG5leHRFcnIgPSBuZXh0RXJyIHx8IGJvZHkuaW50ZXJuYWxleGNlcHRpb247XHJcbiAgICAgICAgYm9keSA9IG5leHRFcnIgfHwgYm9keTtcclxuICAgICAgfSB3aGlsZSAobmV4dEVycik7XHJcbiAgICAgIGlmIChtc2cubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHJlc3VsdC5tZXNzYWdlID0gbXNnO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuICBicmVlemUuQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXIuX2NhdGNoTm9Db25uZWN0aW9uRXJyb3IocmVzdWx0KTtcclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRNZXNzYWdlKGJvZHk6IGFueSkge1xyXG4gIGxldCBtc2cgPSBib2R5Lm1lc3NhZ2UgfHwgXCJcIjtcclxuICByZXR1cm4gKCh0eXBlb2YgKG1zZykgPT09IFwic3RyaW5nXCIpID8gbXNnIDogbXNnLnZhbHVlKSArIFwiOyBcIjtcclxufVxyXG5cclxuYnJlZXplLmNvbmZpZy5yZWdpc3RlckFkYXB0ZXIoXCJkYXRhU2VydmljZVwiLCBEYXRhU2VydmljZU9EYXRhQWRhcHRlcik7XHJcblxyXG5cclxubGV0IHdlYkFwaU9EYXRhQ3RvciA9IGZ1bmN0aW9uICgpIHtcclxuICB0aGlzLm5hbWUgPSBcIndlYkFwaU9EYXRhXCI7XHJcbn07XHJcblxyXG5icmVlemUuY29yZS5leHRlbmQod2ViQXBpT0RhdGFDdG9yLnByb3RvdHlwZSwgRGF0YVNlcnZpY2VPRGF0YUFkYXB0ZXIucHJvdG90eXBlKTtcclxuXHJcbmJyZWV6ZS5jb25maWcucmVnaXN0ZXJBZGFwdGVyKFwiZGF0YVNlcnZpY2VcIiwgd2ViQXBpT0RhdGFDdG9yIGFzIGFueSk7XHJcbi8vIE9EYXRhIDQgYWRhcHRlclxyXG5sZXQgd2ViQXBpT0RhdGE0Q3RvciA9IGZ1bmN0aW9uICgpIHtcclxuICB0aGlzLm5hbWUgPSBcIndlYkFwaU9EYXRhNFwiO1xyXG59O1xyXG5icmVlemUuY29yZS5leHRlbmQod2ViQXBpT0RhdGE0Q3Rvci5wcm90b3R5cGUsIHdlYkFwaU9EYXRhQ3Rvci5wcm90b3R5cGUpO1xyXG53ZWJBcGlPRGF0YTRDdG9yLnByb3RvdHlwZS5pbml0aWFsaXplID0gZnVuY3Rpb24gKCkge1xyXG4gIC8vIEFhcmdoLi4uIHRoZXkgbW92ZWQgdGhlIGNoZWVzZS5cclxuICBsZXQgZGF0YWpzID0gY29yZS5yZXF1aXJlTGliKFwiZGF0YWpzXCIsIFwiTmVlZGVkIHRvIHN1cHBvcnQgcmVtb3RlIE9EYXRhIHY0IHNlcnZpY2VzXCIpO1xyXG4gIE9EYXRhID0gZGF0YWpzLlY0Lm9EYXRhO1xyXG4gIE9EYXRhLmpzb24uanNvbkhhbmRsZXIucmVjb2duaXplRGF0ZXMgPSB0cnVlO1xyXG59O1xyXG53ZWJBcGlPRGF0YTRDdG9yLnByb3RvdHlwZS5oZWFkZXJzID0geyBcIk9EYXRhLVZlcnNpb25cIjogXCI0LjBcIiB9O1xyXG5icmVlemUuY29uZmlnLnJlZ2lzdGVyQWRhcHRlcihcImRhdGFTZXJ2aWNlXCIsIHdlYkFwaU9EYXRhNEN0b3IgYXMgYW55KTtcclxuXHJcblxyXG5cclxuXHJcbiJdfQ==
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './adapter-data-service-odata';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlZXplLWNsaWVudC1hZGFwdGVyLWRhdGEtc2VydmljZS1vZGF0YS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2JyZWV6ZS1jbGllbnQvYWRhcHRlci1kYXRhLXNlcnZpY2Utb2RhdGEvIiwic291cmNlcyI6WyJicmVlemUtY2xpZW50LWFkYXB0ZXItZGF0YS1zZXJ2aWNlLW9kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyw4QkFBOEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9hZGFwdGVyLWRhdGEtc2VydmljZS1vZGF0YSc7XG4iXX0=
|