breeze-client 2.2.1-cjs → 2.2.1
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/{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/esm2022/adapter-ajax-angularjs/adapter-ajax-angularjs.mjs +135 -0
- package/esm2022/adapter-ajax-angularjs/adapter-core.mjs +49 -0
- package/esm2022/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.mjs +5 -0
- package/esm2022/adapter-ajax-fetch/adapter-ajax-fetch.mjs +135 -0
- package/esm2022/adapter-ajax-fetch/adapter-core.mjs +49 -0
- package/esm2022/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.mjs +5 -0
- package/esm2022/adapter-ajax-httpclient/adapter-ajax-httpclient.mjs +139 -0
- package/esm2022/adapter-ajax-httpclient/adapter-core.mjs +49 -0
- package/esm2022/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.mjs +5 -0
- package/esm2022/adapter-ajax-jquery/adapter-ajax-jquery.mjs +107 -0
- package/esm2022/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.mjs +5 -0
- package/esm2022/adapter-ajax-post/adapter-ajax-post.mjs +77 -0
- package/esm2022/adapter-ajax-post/breeze-client-adapter-ajax-post.mjs +5 -0
- package/esm2022/adapter-data-service-odata/adapter-core.mjs +49 -0
- package/{esm5/adapter-data-service-odata/adapter-data-service-odata.js → esm2022/adapter-data-service-odata/adapter-data-service-odata.mjs} +138 -147
- package/esm2022/adapter-data-service-odata/breeze-client-adapter-data-service-odata.mjs +5 -0
- package/esm2022/adapter-data-service-webapi/adapter-data-service-webapi.mjs +100 -0
- package/esm2022/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.mjs +5 -0
- package/esm2022/adapter-model-library-backing-store/adapter-model-library-backing-store.mjs +269 -0
- package/esm2022/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.mjs +5 -0
- package/esm2022/adapter-model-library-ko/adapter-model-library-ko.mjs +241 -0
- package/esm2022/adapter-model-library-ko/breeze-client-adapter-model-library-ko.mjs +5 -0
- package/esm2022/adapter-uri-builder-json/adapter-core.mjs +49 -0
- package/esm2022/adapter-uri-builder-json/adapter-uri-builder-json.mjs +37 -0
- package/esm2022/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.mjs +5 -0
- package/esm2022/adapter-uri-builder-odata/adapter-core.mjs +49 -0
- package/esm2022/adapter-uri-builder-odata/adapter-uri-builder-odata.mjs +191 -0
- package/esm2022/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.mjs +5 -0
- package/esm2022/breeze-client.mjs +5 -0
- package/esm2022/index.mjs +2 -0
- package/esm2022/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.mjs +5 -0
- package/esm2022/mixin-get-entity-graph/mixin-get-entity-graph.mjs +269 -0
- package/esm2022/mixin-save-queuing/breeze-client-mixin-save-queuing.mjs +5 -0
- package/esm2022/mixin-save-queuing/mixin-save-queuing.mjs +421 -0
- package/esm2022/src/abstract-data-service-adapter.mjs +325 -0
- package/esm2022/src/array.mjs +4 -0
- package/esm2022/src/assert-param.mjs +330 -0
- package/esm2022/src/breeze.mjs +85 -0
- package/esm2022/src/complex-array.mjs +117 -0
- package/esm2022/src/config.mjs +232 -0
- package/esm2022/src/core.mjs +712 -0
- package/esm2022/src/csdl-metadata-parser.mjs +385 -0
- package/esm2022/src/data-service.mjs +221 -0
- package/esm2022/src/data-type.mjs +510 -0
- package/esm2022/src/default-property-interceptor.mjs +460 -0
- package/{esm2015/src/entity-action.js → esm2022/src/entity-action.mjs} +25 -25
- package/esm2022/src/entity-aspect.mjs +897 -0
- package/esm2022/src/entity-group.mjs +192 -0
- package/esm2022/src/entity-key.mjs +125 -0
- package/esm2022/src/entity-manager.mjs +2163 -0
- package/esm2022/src/entity-metadata.mjs +2242 -0
- package/esm2022/src/entity-query.mjs +1024 -0
- package/esm2022/src/entity-state.mjs +107 -0
- package/esm2022/src/enum.mjs +143 -0
- package/esm2022/src/event.mjs +264 -0
- package/esm2022/src/interface-registry.mjs +39 -0
- package/esm2022/src/key-generator.mjs +110 -0
- package/esm2022/src/local-query-comparison-options.mjs +65 -0
- package/esm2022/src/mapping-context.mjs +411 -0
- package/esm2022/src/naming-convention.mjs +92 -0
- package/esm2022/src/observable-array.mjs +183 -0
- package/esm2022/src/predicate.mjs +1259 -0
- package/esm2022/src/primitive-array.mjs +85 -0
- package/esm2022/src/query-options.mjs +152 -0
- package/esm2022/src/relation-array.mjs +173 -0
- package/esm2022/src/save-options.mjs +41 -0
- package/esm2022/src/unattached-children-map.mjs +56 -0
- package/esm2022/src/validate.mjs +995 -0
- package/esm2022/src/validation-options.mjs +64 -0
- package/{fesm2015/breeze-client-adapter-ajax-angularjs.js → fesm2022/breeze-client-adapter-ajax-angularjs.mjs} +6 -1
- package/fesm2022/breeze-client-adapter-ajax-angularjs.mjs.map +1 -0
- package/{fesm2015/breeze-client-adapter-ajax-fetch.js → fesm2022/breeze-client-adapter-ajax-fetch.mjs} +9 -4
- package/fesm2022/breeze-client-adapter-ajax-fetch.mjs.map +1 -0
- package/{fesm2015/breeze-client-adapter-ajax-httpclient.js → fesm2022/breeze-client-adapter-ajax-httpclient.mjs} +6 -4
- package/fesm2022/breeze-client-adapter-ajax-httpclient.mjs.map +1 -0
- package/{fesm2015/breeze-client-adapter-ajax-jquery.js → fesm2022/breeze-client-adapter-ajax-jquery.mjs} +6 -2
- package/fesm2022/breeze-client-adapter-ajax-jquery.mjs.map +1 -0
- package/{fesm2015/breeze-client-adapter-ajax-post.js → fesm2022/breeze-client-adapter-ajax-post.mjs} +1 -1
- package/fesm2022/breeze-client-adapter-ajax-post.mjs.map +1 -0
- package/{fesm2015/breeze-client-adapter-data-service-odata.js → fesm2022/breeze-client-adapter-data-service-odata.mjs} +68 -69
- package/fesm2022/breeze-client-adapter-data-service-odata.mjs.map +1 -0
- package/{fesm2015/breeze-client-adapter-data-service-webapi.js → fesm2022/breeze-client-adapter-data-service-webapi.mjs} +30 -30
- package/fesm2022/breeze-client-adapter-data-service-webapi.mjs.map +1 -0
- package/{fesm2015/breeze-client-adapter-model-library-backing-store.js → fesm2022/breeze-client-adapter-model-library-backing-store.mjs} +14 -13
- package/fesm2022/breeze-client-adapter-model-library-backing-store.mjs.map +1 -0
- package/{fesm2015/breeze-client-adapter-model-library-ko.js → fesm2022/breeze-client-adapter-model-library-ko.mjs} +14 -13
- package/fesm2022/breeze-client-adapter-model-library-ko.mjs.map +1 -0
- package/{fesm2015/breeze-client-adapter-uri-builder-json.js → fesm2022/breeze-client-adapter-uri-builder-json.mjs} +9 -8
- package/fesm2022/breeze-client-adapter-uri-builder-json.mjs.map +1 -0
- package/{fesm2015/breeze-client-adapter-uri-builder-odata.js → fesm2022/breeze-client-adapter-uri-builder-odata.mjs} +86 -86
- package/fesm2022/breeze-client-adapter-uri-builder-odata.mjs.map +1 -0
- package/{fesm2015/breeze-client-mixin-get-entity-graph.js → fesm2022/breeze-client-mixin-get-entity-graph.mjs} +1 -1
- package/fesm2022/breeze-client-mixin-get-entity-graph.mjs.map +1 -0
- package/{fesm2015/breeze-client-mixin-save-queuing.js → fesm2022/breeze-client-mixin-save-queuing.mjs} +23 -2
- package/fesm2022/breeze-client-mixin-save-queuing.mjs.map +1 -0
- package/{fesm2015/breeze-client.js → fesm2022/breeze-client.mjs} +1933 -1538
- package/fesm2022/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 +94 -12
- 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 +8 -6
- 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 -13
- 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 -747
- 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 -333
- 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 -14234
- 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 -463
- 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 -100
- 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/src/abstract-data-service-adapter.js +0 -327
- 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 -714
- package/esm2015/src/csdl-metadata-parser.js +0 -385
- package/esm2015/src/data-service.js +0 -203
- package/esm2015/src/data-type.js +0 -506
- package/esm2015/src/default-property-interceptor.js +0 -460
- package/esm2015/src/entity-aspect.js +0 -804
- 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 -1015
- package/esm2015/src/entity-state.js +0 -107
- 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 -411
- package/esm2015/src/naming-convention.js +0 -88
- package/esm2015/src/observable-array.js +0 -185
- package/esm2015/src/predicate.js +0 -1242
- 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/breeze-client-adapter-data-service-odata.js +0 -5
- package/esm5/adapter-data-service-webapi/adapter-data-service-webapi.js +0 -105
- 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/src/abstract-data-service-adapter.js +0 -333
- 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 -722
- package/esm5/src/csdl-metadata-parser.js +0 -385
- package/esm5/src/data-service.js +0 -207
- package/esm5/src/data-type.js +0 -513
- package/esm5/src/default-property-interceptor.js +0 -460
- package/esm5/src/entity-action.js +0 -52
- package/esm5/src/entity-aspect.js +0 -810
- 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 -1042
- package/esm5/src/entity-state.js +0 -114
- 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 -413
- package/esm5/src/naming-convention.js +0 -90
- package/esm5/src/observable-array.js +0 -201
- package/esm5/src/predicate.js +0 -1307
- 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 +0 -186
- package/fesm5/breeze-client-adapter-ajax-angularjs.js.map +0 -1
- package/fesm5/breeze-client-adapter-ajax-fetch.js +0 -186
- package/fesm5/breeze-client-adapter-ajax-fetch.js.map +0 -1
- package/fesm5/breeze-client-adapter-ajax-httpclient.js +0 -193
- package/fesm5/breeze-client-adapter-ajax-httpclient.js.map +0 -1
- package/fesm5/breeze-client-adapter-ajax-jquery.js +0 -111
- package/fesm5/breeze-client-adapter-ajax-jquery.js.map +0 -1
- package/fesm5/breeze-client-adapter-ajax-post.js +0 -86
- package/fesm5/breeze-client-adapter-ajax-post.js.map +0 -1
- package/fesm5/breeze-client-adapter-data-service-odata.js +0 -523
- package/fesm5/breeze-client-adapter-data-service-odata.js.map +0 -1
- package/fesm5/breeze-client-adapter-data-service-webapi.js +0 -111
- package/fesm5/breeze-client-adapter-data-service-webapi.js.map +0 -1
- package/fesm5/breeze-client-adapter-model-library-backing-store.js +0 -276
- package/fesm5/breeze-client-adapter-model-library-backing-store.js.map +0 -1
- package/fesm5/breeze-client-adapter-model-library-ko.js +0 -248
- 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 +0 -254
- package/fesm5/breeze-client-mixin-get-entity-graph.js.map +0 -1
- package/fesm5/breeze-client-mixin-save-queuing.js +0 -356
- package/fesm5/breeze-client-mixin-save-queuing.js.map +0 -1
- package/fesm5/breeze-client.js +0 -13956
- 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
|
@@ -1,385 +0,0 @@
|
|
|
1
|
-
import { core } from './core';
|
|
2
|
-
import { MetadataStore, EntityType, ComplexType, DataProperty, NavigationProperty, AutoGeneratedKeyType } from './entity-metadata';
|
|
3
|
-
import { DataType } from './data-type';
|
|
4
|
-
import { Validator } from './validate';
|
|
5
|
-
var RX_COLLECTION = /Collection\((.*)\)/;
|
|
6
|
-
function parse(metadataStore, schemas, altMetadata) {
|
|
7
|
-
metadataStore._entityTypeResourceMap = {};
|
|
8
|
-
schemas = core.toArray(schemas);
|
|
9
|
-
schemas.forEach(function (schema) {
|
|
10
|
-
if (schema.cSpaceOSpaceMapping) {
|
|
11
|
-
// Web api only - not avail in OData.
|
|
12
|
-
// TODO throw informative error if already parsed and converted to map on a previous pass
|
|
13
|
-
var mappings = JSON.parse(schema.cSpaceOSpaceMapping);
|
|
14
|
-
var newMap_1 = {};
|
|
15
|
-
mappings.forEach(function (mapping) {
|
|
16
|
-
newMap_1[mapping[0]] = mapping[1];
|
|
17
|
-
});
|
|
18
|
-
schema.cSpaceOSpaceMapping = newMap_1;
|
|
19
|
-
}
|
|
20
|
-
if (schema.entityContainer) {
|
|
21
|
-
core.toArray(schema.entityContainer).forEach(function (container) {
|
|
22
|
-
core.toArray(container.entitySet).forEach(function (entitySet) {
|
|
23
|
-
var entityTypeName = parseTypeNameWithSchema(entitySet.entityType, schema).typeName;
|
|
24
|
-
metadataStore.setEntityTypeForResourceName(entitySet.name, entityTypeName);
|
|
25
|
-
metadataStore._entityTypeResourceMap[entityTypeName] = entitySet.name;
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
// process complextypes before entity types.
|
|
30
|
-
if (schema.complexType) {
|
|
31
|
-
core.toArray(schema.complexType).forEach(function (ct) {
|
|
32
|
-
parseCsdlComplexType(ct, schema, metadataStore);
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
if (schema.entityType) {
|
|
36
|
-
core.toArray(schema.entityType).forEach(function (et) {
|
|
37
|
-
parseCsdlEntityType(et, schema, schemas, metadataStore);
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
var badNavProps = metadataStore.getIncompleteNavigationProperties();
|
|
42
|
-
if (badNavProps.length > 0) {
|
|
43
|
-
var msg = badNavProps.map(function (npa) {
|
|
44
|
-
if (Array.isArray(npa)) {
|
|
45
|
-
return npa.map(function (np) {
|
|
46
|
-
return np.parentType.name + ":" + np.name;
|
|
47
|
-
}).join(', ');
|
|
48
|
-
}
|
|
49
|
-
return npa.parentType.name + ":" + npa.name;
|
|
50
|
-
}).join(', ');
|
|
51
|
-
throw new Error("Incomplete navigation properties: " + msg);
|
|
52
|
-
}
|
|
53
|
-
if (altMetadata) {
|
|
54
|
-
metadataStore.importMetadata(altMetadata, true);
|
|
55
|
-
}
|
|
56
|
-
return metadataStore;
|
|
57
|
-
}
|
|
58
|
-
function parseCsdlEntityType(csdlEntityType, schema, schemas, metadataStore) {
|
|
59
|
-
var shortName = csdlEntityType.name;
|
|
60
|
-
var ns = getNamespaceFor(shortName, schema);
|
|
61
|
-
var entityType = new EntityType({
|
|
62
|
-
shortName: shortName,
|
|
63
|
-
namespace: ns,
|
|
64
|
-
isAbstract: csdlEntityType.abstract && csdlEntityType.abstract === 'true'
|
|
65
|
-
});
|
|
66
|
-
if (csdlEntityType.baseType) {
|
|
67
|
-
var baseTypeName = parseTypeNameWithSchema(csdlEntityType.baseType, schema).typeName;
|
|
68
|
-
entityType.baseTypeName = baseTypeName;
|
|
69
|
-
var baseEntityType = metadataStore._getStructuralType(baseTypeName, true);
|
|
70
|
-
if (baseEntityType) {
|
|
71
|
-
completeParseCsdlEntityType(entityType, csdlEntityType, schema, schemas, metadataStore);
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
var deferrals = metadataStore._deferredTypes[baseTypeName];
|
|
75
|
-
if (!deferrals) {
|
|
76
|
-
deferrals = [];
|
|
77
|
-
metadataStore._deferredTypes[baseTypeName] = deferrals;
|
|
78
|
-
}
|
|
79
|
-
deferrals.push({ entityType: entityType, csdlEntityType: csdlEntityType });
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
completeParseCsdlEntityType(entityType, csdlEntityType, schema, schemas, metadataStore);
|
|
84
|
-
}
|
|
85
|
-
// entityType may or may not have been added to the metadataStore at this point.
|
|
86
|
-
return entityType;
|
|
87
|
-
}
|
|
88
|
-
function completeParseCsdlEntityType(entityType, csdlEntityType, schema, schemas, metadataStore) {
|
|
89
|
-
var keyNamesOnServer = csdlEntityType.key ? core.toArray(csdlEntityType.key.propertyRef).map(core.pluck("name")) : [];
|
|
90
|
-
core.toArray(csdlEntityType.property).forEach(function (prop) {
|
|
91
|
-
parseCsdlDataProperty(entityType, prop, schema, keyNamesOnServer);
|
|
92
|
-
});
|
|
93
|
-
core.toArray(csdlEntityType.navigationProperty).forEach(function (prop) {
|
|
94
|
-
parseCsdlNavProperty(entityType, prop, schema, schemas);
|
|
95
|
-
});
|
|
96
|
-
metadataStore.addEntityType(entityType);
|
|
97
|
-
entityType.defaultResourceName = metadataStore._entityTypeResourceMap[entityType.name];
|
|
98
|
-
var deferredTypes = metadataStore._deferredTypes;
|
|
99
|
-
var deferrals = deferredTypes[entityType.name];
|
|
100
|
-
if (deferrals) {
|
|
101
|
-
deferrals.forEach(function (d) {
|
|
102
|
-
completeParseCsdlEntityType(d.entityType, d.csdlEntityType, schema, schemas, metadataStore);
|
|
103
|
-
});
|
|
104
|
-
delete deferredTypes[entityType.name];
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
function parseCsdlComplexType(csdlComplexType, schema, metadataStore) {
|
|
108
|
-
var shortName = csdlComplexType.name;
|
|
109
|
-
var ns = getNamespaceFor(shortName, schema);
|
|
110
|
-
var complexType = new ComplexType({
|
|
111
|
-
shortName: shortName,
|
|
112
|
-
namespace: ns
|
|
113
|
-
});
|
|
114
|
-
core.toArray(csdlComplexType.property).forEach(function (prop) {
|
|
115
|
-
parseCsdlDataProperty(complexType, prop, schema);
|
|
116
|
-
});
|
|
117
|
-
metadataStore.addEntityType(complexType);
|
|
118
|
-
return complexType;
|
|
119
|
-
}
|
|
120
|
-
function parseCsdlDataProperty(parentType, csdlProperty, schema, keyNamesOnServer) {
|
|
121
|
-
var dp;
|
|
122
|
-
var typeParts = csdlProperty.type.split(".");
|
|
123
|
-
// Both tests on typeParts are necessary because of differing metadata conventions for OData and Edmx feeds.
|
|
124
|
-
if (typeParts[0].endsWith("Edm") && typeParts.length === 2) {
|
|
125
|
-
dp = parseCsdlSimpleProperty(parentType, csdlProperty, keyNamesOnServer);
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
if (isEnumType(csdlProperty, schema)) {
|
|
129
|
-
dp = parseCsdlSimpleProperty(parentType, csdlProperty, keyNamesOnServer);
|
|
130
|
-
if (dp) {
|
|
131
|
-
dp.enumType = csdlProperty.type;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
dp = parseCsdlComplexProperty(parentType, csdlProperty, schema);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
if (dp) {
|
|
139
|
-
parentType._addPropertyCore(dp);
|
|
140
|
-
addValidators(dp);
|
|
141
|
-
}
|
|
142
|
-
return dp;
|
|
143
|
-
}
|
|
144
|
-
function parseCsdlSimpleProperty(parentType, csdlProperty, keyNamesOnServer) {
|
|
145
|
-
var isCollectionType = isCollection(csdlProperty.type);
|
|
146
|
-
var propertyType = getCollectionType(csdlProperty.type) || csdlProperty.type;
|
|
147
|
-
var dataType = DataType.fromEdmDataType(propertyType);
|
|
148
|
-
if (dataType == null) {
|
|
149
|
-
parentType.warnings.push("Unable to recognize DataType for property: " + csdlProperty.name + " DateType: " + csdlProperty.type);
|
|
150
|
-
return undefined;
|
|
151
|
-
}
|
|
152
|
-
var isNullable = csdlProperty.nullable === 'true' || csdlProperty.nullable == null;
|
|
153
|
-
// let fixedLength = csdlProperty.fixedLength ? csdlProperty.fixedLength === true : undefined;
|
|
154
|
-
var isPartOfKey = keyNamesOnServer != null && keyNamesOnServer.indexOf(csdlProperty.name) >= 0;
|
|
155
|
-
if (isPartOfKey && parentType instanceof EntityType && parentType.autoGeneratedKeyType === AutoGeneratedKeyType.None) {
|
|
156
|
-
if (isIdentityProperty(csdlProperty)) {
|
|
157
|
-
parentType.autoGeneratedKeyType = AutoGeneratedKeyType.Identity;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
// TODO: nit - don't set maxLength if null;
|
|
161
|
-
var maxLength = csdlProperty.maxLength;
|
|
162
|
-
maxLength = (maxLength == null || maxLength === "Max") ? null : parseInt(maxLength, 10);
|
|
163
|
-
// can't set the name until we go thru namingConventions and these need the dp.
|
|
164
|
-
var dp = new DataProperty({
|
|
165
|
-
nameOnServer: csdlProperty.name,
|
|
166
|
-
dataType: dataType,
|
|
167
|
-
isNullable: isNullable,
|
|
168
|
-
isPartOfKey: isPartOfKey,
|
|
169
|
-
isScalar: !isCollectionType,
|
|
170
|
-
maxLength: maxLength,
|
|
171
|
-
defaultValue: csdlProperty.defaultValue,
|
|
172
|
-
// fixedLength: fixedLength,
|
|
173
|
-
concurrencyMode: csdlProperty.concurrencyMode
|
|
174
|
-
});
|
|
175
|
-
if (dataType === DataType.Undefined) {
|
|
176
|
-
dp.rawTypeName = csdlProperty.type;
|
|
177
|
-
}
|
|
178
|
-
return dp;
|
|
179
|
-
}
|
|
180
|
-
function parseCsdlComplexProperty(parentType, csdlProperty, schema) {
|
|
181
|
-
// Complex properties are never nullable ( per EF specs)
|
|
182
|
-
// let isNullable = csdlProperty.nullable === 'true' || csdlProperty.nullable == null;
|
|
183
|
-
// let complexTypeName = csdlProperty.type.split("Edm.")[1];
|
|
184
|
-
var isCollectionType = isCollection(csdlProperty.type);
|
|
185
|
-
var propertyType = getCollectionType(csdlProperty.type) || csdlProperty.type;
|
|
186
|
-
var complexTypeName = parseTypeNameWithSchema(propertyType, schema).typeName;
|
|
187
|
-
// can't set the name until we go thru namingConventions and these need the dp.
|
|
188
|
-
var dp = new DataProperty({
|
|
189
|
-
nameOnServer: csdlProperty.name,
|
|
190
|
-
complexTypeName: complexTypeName,
|
|
191
|
-
isNullable: false,
|
|
192
|
-
isScalar: !isCollectionType
|
|
193
|
-
});
|
|
194
|
-
return dp;
|
|
195
|
-
}
|
|
196
|
-
function parseCsdlNavProperty(entityType, csdlProperty, schema, schemas) {
|
|
197
|
-
var association = getAssociation(csdlProperty, schema, schemas);
|
|
198
|
-
if (!association) {
|
|
199
|
-
throw new Error("Unable to resolve Foreign Key Association: " + csdlProperty.relationship);
|
|
200
|
-
}
|
|
201
|
-
var toEnd = core.arrayFirst(association.end, function (assocEnd) {
|
|
202
|
-
return assocEnd.role === csdlProperty.toRole;
|
|
203
|
-
});
|
|
204
|
-
var isScalar = toEnd.multiplicity !== "*";
|
|
205
|
-
var dataType = parseTypeNameWithSchema(toEnd.type, schema).typeName;
|
|
206
|
-
var constraint = association.referentialConstraint;
|
|
207
|
-
if (!constraint) {
|
|
208
|
-
// TODO: Revisit this later - right now we just ignore many-many and assocs with missing constraints.
|
|
209
|
-
// Think about adding this back later.
|
|
210
|
-
if (association.end[0].multiplicity === "*" && association.end[1].multiplicity === "*") {
|
|
211
|
-
// ignore many to many relations for now
|
|
212
|
-
return;
|
|
213
|
-
}
|
|
214
|
-
else {
|
|
215
|
-
// For now assume it will be set later directly on the client.
|
|
216
|
-
// other alternative is to throw an error:
|
|
217
|
-
// throw new Error("Foreign Key Associations must be turned on for this model");
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
var cfg = {
|
|
221
|
-
nameOnServer: csdlProperty.name,
|
|
222
|
-
entityTypeName: dataType,
|
|
223
|
-
isScalar: isScalar,
|
|
224
|
-
associationName: association.name,
|
|
225
|
-
};
|
|
226
|
-
if (constraint) {
|
|
227
|
-
var principal = constraint.principal;
|
|
228
|
-
var dependent = constraint.dependent;
|
|
229
|
-
var propRefs = core.toArray(dependent.propertyRef);
|
|
230
|
-
var fkNames = propRefs.map(core.pluck("name"));
|
|
231
|
-
if (csdlProperty.fromRole === principal.role) {
|
|
232
|
-
cfg.invForeignKeyNamesOnServer = fkNames;
|
|
233
|
-
}
|
|
234
|
-
else {
|
|
235
|
-
// will be used later by np._update
|
|
236
|
-
cfg.foreignKeyNamesOnServer = fkNames;
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
var np = new NavigationProperty(cfg);
|
|
240
|
-
entityType._addPropertyCore(np);
|
|
241
|
-
return np;
|
|
242
|
-
}
|
|
243
|
-
function isCollection(propertyType) {
|
|
244
|
-
return RX_COLLECTION.test(propertyType);
|
|
245
|
-
}
|
|
246
|
-
function isEnumType(csdlProperty, schema) {
|
|
247
|
-
if (schema.enumType)
|
|
248
|
-
return isEdmxEnumType(csdlProperty, schema);
|
|
249
|
-
else if (schema.extensions)
|
|
250
|
-
return isODataEnumType(csdlProperty, schema);
|
|
251
|
-
else
|
|
252
|
-
return false;
|
|
253
|
-
}
|
|
254
|
-
function isEdmxEnumType(csdlProperty, schema) {
|
|
255
|
-
var enumTypes = core.toArray(schema.enumType);
|
|
256
|
-
var propertyType = getCollectionType(csdlProperty.type) || csdlProperty.type;
|
|
257
|
-
var typeParts = propertyType.split(".");
|
|
258
|
-
var baseTypeName = typeParts[typeParts.length - 1];
|
|
259
|
-
return enumTypes.some(function (enumType) {
|
|
260
|
-
return enumType.name === baseTypeName;
|
|
261
|
-
});
|
|
262
|
-
}
|
|
263
|
-
function isODataEnumType(csdlProperty, schema) {
|
|
264
|
-
var enumTypes = schema.extensions.filter(function (ext) {
|
|
265
|
-
return ext.name === "EnumType";
|
|
266
|
-
});
|
|
267
|
-
var propertyType = getCollectionType(csdlProperty.type) || csdlProperty.type;
|
|
268
|
-
var typeParts = propertyType.split(".");
|
|
269
|
-
var baseTypeName = typeParts[typeParts.length - 1];
|
|
270
|
-
return enumTypes.some(function (enumType) {
|
|
271
|
-
return enumType.attributes.some(function (attr) {
|
|
272
|
-
return attr.name === "Name" && attr.value === baseTypeName;
|
|
273
|
-
});
|
|
274
|
-
});
|
|
275
|
-
}
|
|
276
|
-
function addValidators(dataProperty) {
|
|
277
|
-
var typeValidator;
|
|
278
|
-
if (!dataProperty.isNullable) {
|
|
279
|
-
dataProperty.validators.push(Validator.required());
|
|
280
|
-
}
|
|
281
|
-
if (dataProperty.isComplexProperty)
|
|
282
|
-
return;
|
|
283
|
-
if (dataProperty.dataType === DataType.String) {
|
|
284
|
-
if (dataProperty.maxLength) {
|
|
285
|
-
var validatorArgs = { maxLength: dataProperty.maxLength };
|
|
286
|
-
typeValidator = Validator.maxLength(validatorArgs);
|
|
287
|
-
}
|
|
288
|
-
else {
|
|
289
|
-
typeValidator = Validator.string();
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
else {
|
|
293
|
-
var validatorCtor = dataProperty.dataType.validatorCtor;
|
|
294
|
-
if (!validatorCtor)
|
|
295
|
-
return;
|
|
296
|
-
typeValidator = validatorCtor();
|
|
297
|
-
}
|
|
298
|
-
dataProperty.validators.push(typeValidator);
|
|
299
|
-
}
|
|
300
|
-
function isIdentityProperty(csdlProperty) {
|
|
301
|
-
// see if web api feed
|
|
302
|
-
var propName = core.arrayFirst(Object.keys(csdlProperty), function (pn) {
|
|
303
|
-
return pn.indexOf("StoreGeneratedPattern") >= 0;
|
|
304
|
-
});
|
|
305
|
-
if (propName) {
|
|
306
|
-
return (csdlProperty[propName] === "Identity");
|
|
307
|
-
}
|
|
308
|
-
else {
|
|
309
|
-
// see if Odata feed
|
|
310
|
-
var extensions = csdlProperty.extensions;
|
|
311
|
-
if (!extensions) {
|
|
312
|
-
return false;
|
|
313
|
-
}
|
|
314
|
-
var identityExtn = core.arrayFirst(extensions, function (extension) {
|
|
315
|
-
return extension.name === "StoreGeneratedPattern" && extension.value === "Identity";
|
|
316
|
-
});
|
|
317
|
-
return !!identityExtn;
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
// Fast version
|
|
321
|
-
// np: schema.entityType[].navigationProperty.relationship -> schema.association
|
|
322
|
-
// match( shortName(np.relationship) == schema.association[].name
|
|
323
|
-
// --> association__
|
|
324
|
-
// Correct version
|
|
325
|
-
// np: schema.entityType[].navigationProperty.relationship -> schema.association
|
|
326
|
-
// match( np.relationship == schema.entityContainer[0].associationSet[].association )
|
|
327
|
-
// -> associationSet.name
|
|
328
|
-
// match ( associationSet.name == schema.association[].name )
|
|
329
|
-
// -> association
|
|
330
|
-
function getAssociation(csdlNavProperty, containingSchema, schemas) {
|
|
331
|
-
var assocFullName = parseTypeNameWithSchema(csdlNavProperty.relationship, containingSchema);
|
|
332
|
-
var assocNamespace = assocFullName.namespace;
|
|
333
|
-
var assocSchema = core.arrayFirst(schemas, function (schema) {
|
|
334
|
-
return schema.namespace === assocNamespace;
|
|
335
|
-
});
|
|
336
|
-
if (!assocSchema)
|
|
337
|
-
return null;
|
|
338
|
-
var assocName = assocFullName.shortTypeName;
|
|
339
|
-
var assocs = assocSchema.association;
|
|
340
|
-
if (!assocs)
|
|
341
|
-
return null;
|
|
342
|
-
if (!Array.isArray(assocs)) {
|
|
343
|
-
assocs = [assocs];
|
|
344
|
-
}
|
|
345
|
-
var association = core.arrayFirst(assocs, function (assoc) {
|
|
346
|
-
return assoc.name === assocName;
|
|
347
|
-
});
|
|
348
|
-
return association;
|
|
349
|
-
}
|
|
350
|
-
// schema is only needed for navProperty type name
|
|
351
|
-
function parseTypeNameWithSchema(entityTypeName, schema) {
|
|
352
|
-
var result = MetadataStore.parseTypeName(entityTypeName);
|
|
353
|
-
if (schema && schema.cSpaceOSpaceMapping) {
|
|
354
|
-
var ns = getNamespaceFor(result.shortTypeName, schema);
|
|
355
|
-
if (ns) {
|
|
356
|
-
result = MetadataStore.makeTypeHash(result.shortTypeName, ns);
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
return result;
|
|
360
|
-
}
|
|
361
|
-
function getCollectionType(propertyType) {
|
|
362
|
-
var match = propertyType.match(RX_COLLECTION);
|
|
363
|
-
return match ? match[1] : null;
|
|
364
|
-
}
|
|
365
|
-
function getNamespaceFor(shortName, schema) {
|
|
366
|
-
var ns;
|
|
367
|
-
var mapping = schema.cSpaceOSpaceMapping;
|
|
368
|
-
if (mapping) {
|
|
369
|
-
var fullName = mapping[schema.namespace + "." + shortName];
|
|
370
|
-
ns = fullName && fullName.substr(0, fullName.length - (shortName.length + 1));
|
|
371
|
-
if (ns)
|
|
372
|
-
return ns;
|
|
373
|
-
}
|
|
374
|
-
// if schema does not also have an entityType node then
|
|
375
|
-
// this is an WebApi2 OData schema which is usually equal to 'Default'; which is useless.
|
|
376
|
-
if (schema.entityType || schema.namespace !== 'Default') {
|
|
377
|
-
return schema.namespace;
|
|
378
|
-
}
|
|
379
|
-
return null;
|
|
380
|
-
}
|
|
381
|
-
/** @hidden @internal */
|
|
382
|
-
export var CsdlMetadataParser = {
|
|
383
|
-
parse: parse
|
|
384
|
-
};
|
|
385
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NkbC1tZXRhZGF0YS1wYXJzZXIuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9icmVlemUtY2xpZW50LyIsInNvdXJjZXMiOlsic3JjL2NzZGwtbWV0YWRhdGEtcGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDOUIsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25JLE9BQU8sRUFBRSxRQUFRLEVBQUcsTUFBTSxhQUFhLENBQUM7QUFDeEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQWN2QyxJQUFNLGFBQWEsR0FBSSxvQkFBb0IsQ0FBQztBQUU1QyxTQUFTLEtBQUssQ0FBQyxhQUE0QixFQUFFLE9BQVksRUFBRSxXQUFnQjtJQUV6RSxhQUFhLENBQUMsc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0lBQzFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxNQUFXO1FBQ25DLElBQUksTUFBTSxDQUFDLG1CQUFtQixFQUFFO1lBQzlCLHFDQUFxQztZQUNyQyx5RkFBeUY7WUFDekYsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUN0RCxJQUFJLFFBQU0sR0FBRyxFQUFFLENBQUM7WUFDaEIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLE9BQVk7Z0JBQ3JDLFFBQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxNQUFNLENBQUMsbUJBQW1CLEdBQUcsUUFBTSxDQUFDO1NBQ3JD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WUFBWSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNoRCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDakMsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLFNBQWlCLEVBQUUsTUFBVztJQUNyRCxJQUFJLEVBQVUsQ0FBQztJQUNmLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztJQUN6QyxJQUFJLE9BQU8sRUFBRTtRQUNYLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLEdBQUcsR0FBRyxTQUFTLENBQUMsQ0FBQztRQUMzRCxFQUFFLEdBQUcsUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUUsSUFBSSxFQUFFO1lBQUUsT0FBTyxFQUFFLENBQUM7S0FDbkI7SUFDRCx1REFBdUQ7SUFDdkQseUZBQXlGO0lBQ3pGLElBQUksTUFBTSxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRTtRQUN2RCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUM7S0FDekI7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCx3QkFBd0I7QUFDeEIsTUFBTSxDQUFDLElBQU0sa0JBQWtCLEdBQUc7SUFDaEMsS0FBSyxFQUFFLEtBQUs7Q0FDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29yZSB9IGZyb20gJy4vY29yZSc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU3RvcmUsIEVudGl0eVR5cGUsIENvbXBsZXhUeXBlLCBEYXRhUHJvcGVydHksIE5hdmlnYXRpb25Qcm9wZXJ0eSwgQXV0b0dlbmVyYXRlZEtleVR5cGUgfSBmcm9tICcuL2VudGl0eS1tZXRhZGF0YSc7XHJcbmltcG9ydCB7IERhdGFUeXBlICB9IGZyb20gJy4vZGF0YS10eXBlJztcclxuaW1wb3J0IHsgVmFsaWRhdG9yIH0gZnJvbSAnLi92YWxpZGF0ZSc7XHJcblxyXG5pbnRlcmZhY2UgSUFzc29jaWF0aW9uIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgZW5kOiBJRW5kW107XHJcbiAgcmVmZXJlbnRpYWxDb25zdHJhaW50OiBhbnk7XHJcbn1cclxuXHJcbmludGVyZmFjZSBJRW5kIHtcclxuICBtdWx0aXBsaWNpdHk6IHN0cmluZztcclxuICB0eXBlOiBzdHJpbmc7XHJcbiAgcm9sZTogc3RyaW5nO1xyXG59XHJcblxyXG5jb25zdCBSWF9DT0xMRUNUSU9OID0gIC9Db2xsZWN0aW9uXFwoKC4qKVxcKS87XHJcblxyXG5mdW5jdGlvbiBwYXJzZShtZXRhZGF0YVN0b3JlOiBNZXRhZGF0YVN0b3JlLCBzY2hlbWFzOiBhbnksIGFsdE1ldGFkYXRhOiBhbnkpIHtcclxuXHJcbiAgbWV0YWRhdGFTdG9yZS5fZW50aXR5VHlwZVJlc291cmNlTWFwID0ge307XHJcbiAgc2NoZW1hcyA9IGNvcmUudG9BcnJheShzY2hlbWFzKTtcclxuICBzY2hlbWFzLmZvckVhY2goZnVuY3Rpb24gKHNjaGVtYTogYW55KSB7XHJcbiAgICBpZiAoc2NoZW1hLmNTcGFjZU9TcGFjZU1hcHBpbmcpIHtcclxuICAgICAgLy8gV2ViIGFwaSBvbmx5IC0gbm90IGF2YWlsIGluIE9EYXRhLlxyXG4gICAgICAvLyBUT0RPIHRocm93IGluZm9ybWF0aXZlIGVycm9yIGlmIGFscmVhZHkgcGFyc2VkIGFuZCBjb252ZXJ0ZWQgdG8gbWFwIG9uIGEgcHJldmlvdXMgcGFzc1xyXG4gICAgICBsZXQgbWFwcGluZ3MgPSBKU09OLnBhcnNlKHNjaGVtYS5jU3BhY2VPU3BhY2VNYXBwaW5nKTtcclxuICAgICAgbGV0IG5ld01hcCA9IHt9O1xyXG4gICAgICBtYXBwaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChtYXBwaW5nOiBhbnkpIHtcclxuICAgICAgICBuZXdNYXBbbWFwcGluZ1swXV0gPSBtYXBwaW5nWzFdO1xyXG4gICAgICB9KTtcclxuICAgICAgc2NoZW1hLmNTcGFjZU9TcGFjZU1hcHBpbmcgPSBuZXdNYXA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNjaGVtYS5lbnRpdHlDb250YWluZXIpIHtcclxuICAgICAgY29yZS50b0FycmF5KHNjaGVtYS5lbnRpdHlDb250YWluZXIpLmZvckVhY2goZnVuY3Rpb24gKGNvbnRhaW5lcikge1xyXG4gICAgICAgIGNvcmUudG9BcnJheShjb250YWluZXIuZW50aXR5U2V0KS5mb3JFYWNoKGZ1bmN0aW9uIChlbnRpdHlTZXQpIHtcclxuICAgICAgICAgIGxldCBlbnRpdHlUeXBlTmFtZSA9IHBhcnNlVHlwZU5hbWVXaXRoU2NoZW1hKGVudGl0eVNldC5lbnRpdHlUeXBlLCBzY2hlbWEpLnR5cGVOYW1lO1xyXG4gICAgICAgICAgbWV0YWRhdGFTdG9yZS5zZXRFbnRpdHlUeXBlRm9yUmVzb3VyY2VOYW1lKGVudGl0eVNldC5uYW1lLCBlbnRpdHlUeXBlTmFtZSk7XHJcbiAgICAgICAgICBtZXRhZGF0YVN0b3JlLl9lbnRpdHlUeXBlUmVzb3VyY2VNYXBbZW50aXR5VHlwZU5hbWVdID0gZW50aXR5U2V0Lm5hbWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHByb2Nlc3MgY29tcGxleHR5cGVzIGJlZm9yZSBlbnRpdHkgdHlwZXMuXHJcbiAgICBpZiAoc2NoZW1hLmNvbXBsZXhUeXBlKSB7XHJcbiAgICAgIGNvcmUudG9BcnJheShzY2hlbWEuY29tcGxleFR5cGUpLmZvckVhY2goZnVuY3Rpb24gKGN0KSB7XHJcbiAgICAgICAgcGFyc2VDc2RsQ29tcGxleFR5cGUoY3QsIHNjaGVtYSwgbWV0YWRhdGFTdG9yZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHNjaGVtYS5lbnRpdHlUeXBlKSB7XHJcbiAgICAgIGNvcmUudG9BcnJheShzY2hlbWEuZW50aXR5VHlwZSkuZm9yRWFjaChmdW5jdGlvbiAoZXQpIHtcclxuICAgICAgICBwYXJzZUNzZGxFbnRpdHlUeXBlKGV0LCBzY2hlbWEsIHNjaGVtYXMsIG1ldGFkYXRhU3RvcmUpO1xyXG5cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gIH0pO1xyXG4gIGxldCBiYWROYXZQcm9wcyA9IG1ldGFkYXRhU3RvcmUuZ2V0SW5jb21wbGV0ZU5hdmlnYXRpb25Qcm9wZXJ0aWVzKCk7XHJcbiAgaWYgKGJhZE5hdlByb3BzLmxlbmd0aCA+IDApIHtcclxuICAgIGxldCBtc2cgPSBiYWROYXZQcm9wcy5tYXAoZnVuY3Rpb24gKG5wYSkge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShucGEpKSB7XHJcbiAgICAgICAgcmV0dXJuIG5wYS5tYXAoZnVuY3Rpb24gKG5wKSB7XHJcbiAgICAgICAgICByZXR1cm4gbnAucGFyZW50VHlwZS5uYW1lICsgXCI6XCIgKyBucC5uYW1lO1xyXG4gICAgICAgIH0pLmpvaW4oJywgJyk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG5wYS5wYXJlbnRUeXBlLm5hbWUgKyBcIjpcIiArIG5wYS5uYW1lO1xyXG4gICAgfSkuam9pbignLCAnKTtcclxuICAgIHRocm93IG5ldyBFcnJvcihcIkluY29tcGxldGUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzOiBcIiArIG1zZyk7XHJcbiAgfVxyXG4gIGlmIChhbHRNZXRhZGF0YSkge1xyXG4gICAgbWV0YWRhdGFTdG9yZS5pbXBvcnRNZXRhZGF0YShhbHRNZXRhZGF0YSwgdHJ1ZSk7XHJcbiAgfVxyXG4gIHJldHVybiBtZXRhZGF0YVN0b3JlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUNzZGxFbnRpdHlUeXBlKGNzZGxFbnRpdHlUeXBlOiBhbnksIHNjaGVtYTogYW55LCBzY2hlbWFzOiBhbnksIG1ldGFkYXRhU3RvcmU6IE1ldGFkYXRhU3RvcmUpIHtcclxuICBsZXQgc2hvcnROYW1lID0gY3NkbEVudGl0eVR5cGUubmFtZTtcclxuICBsZXQgbnMgPSBnZXROYW1lc3BhY2VGb3Ioc2hvcnROYW1lLCBzY2hlbWEpO1xyXG4gIGxldCBlbnRpdHlUeXBlID0gbmV3IEVudGl0eVR5cGUoe1xyXG4gICAgc2hvcnROYW1lOiBzaG9ydE5hbWUsXHJcbiAgICBuYW1lc3BhY2U6IG5zLFxyXG4gICAgaXNBYnN0cmFjdDogY3NkbEVudGl0eVR5cGUuYWJzdHJhY3QgJiYgY3NkbEVudGl0eVR5cGUuYWJzdHJhY3QgPT09ICd0cnVlJ1xyXG4gIH0pO1xyXG4gIGlmIChjc2RsRW50aXR5VHlwZS5iYXNlVHlwZSkge1xyXG4gICAgbGV0IGJhc2VUeXBlTmFtZSA9IHBhcnNlVHlwZU5hbWVXaXRoU2NoZW1hKGNzZGxFbnRpdHlUeXBlLmJhc2VUeXBlLCBzY2hlbWEpLnR5cGVOYW1lO1xyXG4gICAgZW50aXR5VHlwZS5iYXNlVHlwZU5hbWUgPSBiYXNlVHlwZU5hbWU7XHJcbiAgICBsZXQgYmFzZUVudGl0eVR5cGUgPSBtZXRhZGF0YVN0b3JlLl9nZXRTdHJ1Y3R1cmFsVHlwZShiYXNlVHlwZU5hbWUsIHRydWUpO1xyXG4gICAgaWYgKGJhc2VFbnRpdHlUeXBlKSB7XHJcbiAgICAgIGNvbXBsZXRlUGFyc2VDc2RsRW50aXR5VHlwZShlbnRpdHlUeXBlLCBjc2RsRW50aXR5VHlwZSwgc2NoZW1hLCBzY2hlbWFzLCBtZXRhZGF0YVN0b3JlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBkZWZlcnJhbHMgPSBtZXRhZGF0YVN0b3JlLl9kZWZlcnJlZFR5cGVzW2Jhc2VUeXBlTmFtZV07XHJcbiAgICAgIGlmICghZGVmZXJyYWxzKSB7XHJcbiAgICAgICAgZGVmZXJyYWxzID0gW107XHJcbiAgICAgICAgbWV0YWRhdGFTdG9yZS5fZGVmZXJyZWRUeXBlc1tiYXNlVHlwZU5hbWVdID0gZGVmZXJyYWxzO1xyXG4gICAgICB9XHJcbiAgICAgIGRlZmVycmFscy5wdXNoKHsgZW50aXR5VHlwZTogZW50aXR5VHlwZSwgY3NkbEVudGl0eVR5cGU6IGNzZGxFbnRpdHlUeXBlIH0pO1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICBjb21wbGV0ZVBhcnNlQ3NkbEVudGl0eVR5cGUoZW50aXR5VHlwZSwgY3NkbEVudGl0eVR5cGUsIHNjaGVtYSwgc2NoZW1hcywgbWV0YWRhdGFTdG9yZSk7XHJcbiAgfVxyXG4gIC8vIGVudGl0eVR5cGUgbWF5IG9yIG1heSBub3QgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBtZXRhZGF0YVN0b3JlIGF0IHRoaXMgcG9pbnQuXHJcbiAgcmV0dXJuIGVudGl0eVR5cGU7XHJcblxyXG59XHJcblxyXG5mdW5jdGlvbiBjb21wbGV0ZVBhcnNlQ3NkbEVudGl0eVR5cGUoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgY3NkbEVudGl0eVR5cGU6IGFueSwgc2NoZW1hOiBhbnksIHNjaGVtYXM6IGFueSwgbWV0YWRhdGFTdG9yZTogTWV0YWRhdGFTdG9yZSkge1xyXG4gIGxldCBrZXlOYW1lc09uU2VydmVyID0gY3NkbEVudGl0eVR5cGUua2V5ID8gY29yZS50b0FycmF5KGNzZGxFbnRpdHlUeXBlLmtleS5wcm9wZXJ0eVJlZikubWFwKGNvcmUucGx1Y2soXCJuYW1lXCIpKSA6IFtdO1xyXG5cclxuICBjb3JlLnRvQXJyYXkoY3NkbEVudGl0eVR5cGUucHJvcGVydHkpLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcclxuICAgIHBhcnNlQ3NkbERhdGFQcm9wZXJ0eShlbnRpdHlUeXBlLCBwcm9wLCBzY2hlbWEsIGtleU5hbWVzT25TZXJ2ZXIpO1xyXG4gIH0pO1xyXG5cclxuICBjb3JlLnRvQXJyYXkoY3NkbEVudGl0eVR5cGUubmF2aWdhdGlvblByb3BlcnR5KS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XHJcbiAgICBwYXJzZUNzZGxOYXZQcm9wZXJ0eShlbnRpdHlUeXBlLCBwcm9wLCBzY2hlbWEsIHNjaGVtYXMpO1xyXG4gIH0pO1xyXG5cclxuICBtZXRhZGF0YVN0b3JlLmFkZEVudGl0eVR5cGUoZW50aXR5VHlwZSk7XHJcbiAgZW50aXR5VHlwZS5kZWZhdWx0UmVzb3VyY2VOYW1lID0gbWV0YWRhdGFTdG9yZS5fZW50aXR5VHlwZVJlc291cmNlTWFwW2VudGl0eVR5cGUubmFtZV07XHJcblxyXG4gIGxldCBkZWZlcnJlZFR5cGVzID0gbWV0YWRhdGFTdG9yZS5fZGVmZXJyZWRUeXBlcztcclxuICBsZXQgZGVmZXJyYWxzID0gZGVmZXJyZWRUeXBlc1tlbnRpdHlUeXBlLm5hbWVdO1xyXG4gIGlmIChkZWZlcnJhbHMpIHtcclxuICAgIGRlZmVycmFscy5mb3JFYWNoKGZ1bmN0aW9uIChkOiBhbnkpIHtcclxuICAgICAgY29tcGxldGVQYXJzZUNzZGxFbnRpdHlUeXBlKGQuZW50aXR5VHlwZSwgZC5jc2RsRW50aXR5VHlwZSwgc2NoZW1hLCBzY2hlbWFzLCBtZXRhZGF0YVN0b3JlKTtcclxuICAgIH0pO1xyXG4gICAgZGVsZXRlIGRlZmVycmVkVHlwZXNbZW50aXR5VHlwZS5uYW1lXTtcclxuICB9XHJcblxyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUNzZGxDb21wbGV4VHlwZShjc2RsQ29tcGxleFR5cGU6IGFueSwgc2NoZW1hOiBhbnksIG1ldGFkYXRhU3RvcmU6IE1ldGFkYXRhU3RvcmUpIHtcclxuICBsZXQgc2hvcnROYW1lID0gY3NkbENvbXBsZXhUeXBlLm5hbWU7XHJcbiAgbGV0IG5zID0gZ2V0TmFtZXNwYWNlRm9yKHNob3J0TmFtZSwgc2NoZW1hKTtcclxuICBsZXQgY29tcGxleFR5cGUgPSBuZXcgQ29tcGxleFR5cGUoe1xyXG4gICAgc2hvcnROYW1lOiBzaG9ydE5hbWUsXHJcbiAgICBuYW1lc3BhY2U6IG5zXHJcbiAgfSk7XHJcblxyXG4gIGNvcmUudG9BcnJheShjc2RsQ29tcGxleFR5cGUucHJvcGVydHkpLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcclxuICAgIHBhcnNlQ3NkbERhdGFQcm9wZXJ0eShjb21wbGV4VHlwZSwgcHJvcCwgc2NoZW1hKTtcclxuICB9KTtcclxuXHJcbiAgbWV0YWRhdGFTdG9yZS5hZGRFbnRpdHlUeXBlKGNvbXBsZXhUeXBlKTtcclxuICByZXR1cm4gY29tcGxleFR5cGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlQ3NkbERhdGFQcm9wZXJ0eShwYXJlbnRUeXBlOiBFbnRpdHlUeXBlIHwgQ29tcGxleFR5cGUsIGNzZGxQcm9wZXJ0eTogYW55LCBzY2hlbWE6IGFueSwga2V5TmFtZXNPblNlcnZlcj86IHN0cmluZ1tdKSB7XHJcbiAgbGV0IGRwOiBEYXRhUHJvcGVydHkgfCB1bmRlZmluZWQ7XHJcbiAgbGV0IHR5cGVQYXJ0cyA9IGNzZGxQcm9wZXJ0eS50eXBlLnNwbGl0KFwiLlwiKTtcclxuICAvLyBCb3RoIHRlc3RzIG9uIHR5cGVQYXJ0cyBhcmUgbmVjZXNzYXJ5IGJlY2F1c2Ugb2YgZGlmZmVyaW5nIG1ldGFkYXRhIGNvbnZlbnRpb25zIGZvciBPRGF0YSBhbmQgRWRteCBmZWVkcy5cclxuICBpZiAodHlwZVBhcnRzWzBdLmVuZHNXaXRoKFwiRWRtXCIpICYmIHR5cGVQYXJ0cy5sZW5ndGggPT09IDIpIHtcclxuICAgIGRwID0gcGFyc2VDc2RsU2ltcGxlUHJvcGVydHkocGFyZW50VHlwZSwgY3NkbFByb3BlcnR5LCBrZXlOYW1lc09uU2VydmVyKTtcclxuICB9IGVsc2Uge1xyXG4gICAgaWYgKGlzRW51bVR5cGUoY3NkbFByb3BlcnR5LCBzY2hlbWEpKSB7XHJcbiAgICAgIGRwID0gcGFyc2VDc2RsU2ltcGxlUHJvcGVydHkocGFyZW50VHlwZSwgY3NkbFByb3BlcnR5LCBrZXlOYW1lc09uU2VydmVyKTtcclxuICAgICAgaWYgKGRwKSB7XHJcbiAgICAgICAgZHAuZW51bVR5cGUgPSBjc2RsUHJvcGVydHkudHlwZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZHAgPSBwYXJzZUNzZGxDb21wbGV4UHJvcGVydHkocGFyZW50VHlwZSwgY3NkbFByb3BlcnR5LCBzY2hlbWEpO1xyXG4gICAgfVxyXG4gIH1cclxuICBpZiAoZHApIHtcclxuICAgIHBhcmVudFR5cGUuX2FkZFByb3BlcnR5Q29yZShkcCk7XHJcbiAgICBhZGRWYWxpZGF0b3JzKGRwKTtcclxuICB9XHJcbiAgcmV0dXJuIGRwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUNzZGxTaW1wbGVQcm9wZXJ0eShwYXJlbnRUeXBlOiBFbnRpdHlUeXBlIHwgQ29tcGxleFR5cGUsIGNzZGxQcm9wZXJ0eTogYW55LCBrZXlOYW1lc09uU2VydmVyPzogc3RyaW5nW10pIHtcclxuICBsZXQgaXNDb2xsZWN0aW9uVHlwZSA9IGlzQ29sbGVjdGlvbihjc2RsUHJvcGVydHkudHlwZSk7XHJcbiAgbGV0IHByb3BlcnR5VHlwZSA9IGdldENvbGxlY3Rpb25UeXBlKGNzZGxQcm9wZXJ0eS50eXBlKSB8fCBjc2RsUHJvcGVydHkudHlwZTtcclxuICBsZXQgZGF0YVR5cGUgPSBEYXRhVHlwZS5mcm9tRWRtRGF0YVR5cGUocHJvcGVydHlUeXBlKTtcclxuICBpZiAoZGF0YVR5cGUgPT0gbnVsbCkge1xyXG4gICAgcGFyZW50VHlwZS53YXJuaW5ncy5wdXNoKFwiVW5hYmxlIHRvIHJlY29nbml6ZSBEYXRhVHlwZSBmb3IgcHJvcGVydHk6IFwiICsgY3NkbFByb3BlcnR5Lm5hbWUgKyBcIiBEYXRlVHlwZTogXCIgKyBjc2RsUHJvcGVydHkudHlwZSk7XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuICBsZXQgaXNOdWxsYWJsZSA9IGNzZGxQcm9wZXJ0eS5udWxsYWJsZSA9PT0gJ3RydWUnIHx8IGNzZGxQcm9wZXJ0eS5udWxsYWJsZSA9PSBudWxsO1xyXG4gIC8vIGxldCBmaXhlZExlbmd0aCA9IGNzZGxQcm9wZXJ0eS5maXhlZExlbmd0aCA/IGNzZGxQcm9wZXJ0eS5maXhlZExlbmd0aCA9PT0gdHJ1ZSA6IHVuZGVmaW5lZDtcclxuICBsZXQgaXNQYXJ0T2ZLZXkgPSBrZXlOYW1lc09uU2VydmVyICE9IG51bGwgJiYga2V5TmFtZXNPblNlcnZlci5pbmRleE9mKGNzZGxQcm9wZXJ0eS5uYW1lKSA+PSAwO1xyXG4gIGlmIChpc1BhcnRPZktleSAmJiBwYXJlbnRUeXBlIGluc3RhbmNlb2YgRW50aXR5VHlwZSAmJiBwYXJlbnRUeXBlLmF1dG9HZW5lcmF0ZWRLZXlUeXBlID09PSBBdXRvR2VuZXJhdGVkS2V5VHlwZS5Ob25lKSB7XHJcbiAgICBpZiAoaXNJZGVudGl0eVByb3BlcnR5KGNzZGxQcm9wZXJ0eSkpIHtcclxuICAgICAgcGFyZW50VHlwZS5hdXRvR2VuZXJhdGVkS2V5VHlwZSA9IEF1dG9HZW5lcmF0ZWRLZXlUeXBlLklkZW50aXR5O1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyBUT0RPOiBuaXQgLSBkb24ndCBzZXQgbWF4TGVuZ3RoIGlmIG51bGw7XHJcbiAgbGV0IG1heExlbmd0aCA9IGNzZGxQcm9wZXJ0eS5tYXhMZW5ndGg7XHJcbiAgbWF4TGVuZ3RoID0gKG1heExlbmd0aCA9PSBudWxsIHx8IG1heExlbmd0aCA9PT0gXCJNYXhcIikgPyBudWxsIDogcGFyc2VJbnQobWF4TGVuZ3RoLCAxMCk7XHJcbiAgLy8gY2FuJ3Qgc2V0IHRoZSBuYW1lIHVudGlsIHdlIGdvIHRocnUgbmFtaW5nQ29udmVudGlvbnMgYW5kIHRoZXNlIG5lZWQgdGhlIGRwLlxyXG5cclxuICBsZXQgZHAgPSBuZXcgRGF0YVByb3BlcnR5KHtcclxuICAgIG5hbWVPblNlcnZlcjogY3NkbFByb3BlcnR5Lm5hbWUsXHJcbiAgICBkYXRhVHlwZTogZGF0YVR5cGUsXHJcbiAgICBpc051bGxhYmxlOiBpc051bGxhYmxlLFxyXG4gICAgaXNQYXJ0T2ZLZXk6IGlzUGFydE9mS2V5LFxyXG4gICAgaXNTY2FsYXI6ICFpc0NvbGxlY3Rpb25UeXBlLFxyXG4gICAgbWF4TGVuZ3RoOiBtYXhMZW5ndGgsXHJcbiAgICBkZWZhdWx0VmFsdWU6IGNzZGxQcm9wZXJ0eS5kZWZhdWx0VmFsdWUsXHJcbiAgICAvLyBmaXhlZExlbmd0aDogZml4ZWRMZW5ndGgsXHJcbiAgICBjb25jdXJyZW5jeU1vZGU6IGNzZGxQcm9wZXJ0eS5jb25jdXJyZW5jeU1vZGVcclxuICB9KTtcclxuXHJcbiAgaWYgKGRhdGFUeXBlID09PSBEYXRhVHlwZS5VbmRlZmluZWQpIHtcclxuICAgIGRwLnJhd1R5cGVOYW1lID0gY3NkbFByb3BlcnR5LnR5cGU7XHJcbiAgfVxyXG4gIHJldHVybiBkcDtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VDc2RsQ29tcGxleFByb3BlcnR5KHBhcmVudFR5cGU6IEVudGl0eVR5cGUgfCBDb21wbGV4VHlwZSwgY3NkbFByb3BlcnR5OiBhbnksIHNjaGVtYTogYW55KSB7XHJcblxyXG4gIC8vIENvbXBsZXggcHJvcGVydGllcyBhcmUgbmV2ZXIgbnVsbGFibGUgKCBwZXIgRUYgc3BlY3MpXHJcbiAgLy8gbGV0IGlzTnVsbGFibGUgPSBjc2RsUHJvcGVydHkubnVsbGFibGUgPT09ICd0cnVlJyB8fCBjc2RsUHJvcGVydHkubnVsbGFibGUgPT0gbnVsbDtcclxuICAvLyBsZXQgY29tcGxleFR5cGVOYW1lID0gY3NkbFByb3BlcnR5LnR5cGUuc3BsaXQoXCJFZG0uXCIpWzFdO1xyXG4gIGxldCBpc0NvbGxlY3Rpb25UeXBlID0gaXNDb2xsZWN0aW9uKGNzZGxQcm9wZXJ0eS50eXBlKTtcclxuICBsZXQgcHJvcGVydHlUeXBlID0gZ2V0Q29sbGVjdGlvblR5cGUoY3NkbFByb3BlcnR5LnR5cGUpIHx8IGNzZGxQcm9wZXJ0eS50eXBlO1xyXG4gIGxldCBjb21wbGV4VHlwZU5hbWUgPSBwYXJzZVR5cGVOYW1lV2l0aFNjaGVtYShwcm9wZXJ0eVR5cGUsIHNjaGVtYSkudHlwZU5hbWU7XHJcbiAgLy8gY2FuJ3Qgc2V0IHRoZSBuYW1lIHVudGlsIHdlIGdvIHRocnUgbmFtaW5nQ29udmVudGlvbnMgYW5kIHRoZXNlIG5lZWQgdGhlIGRwLlxyXG4gIGxldCBkcCA9IG5ldyBEYXRhUHJvcGVydHkoe1xyXG4gICAgbmFtZU9uU2VydmVyOiBjc2RsUHJvcGVydHkubmFtZSxcclxuICAgIGNvbXBsZXhUeXBlTmFtZTogY29tcGxleFR5cGVOYW1lLFxyXG4gICAgaXNOdWxsYWJsZTogZmFsc2UsXHJcbiAgICBpc1NjYWxhcjogIWlzQ29sbGVjdGlvblR5cGVcclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIGRwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUNzZGxOYXZQcm9wZXJ0eShlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCBjc2RsUHJvcGVydHk6IGFueSwgc2NoZW1hOiBhbnksIHNjaGVtYXM6IGFueVtdKSB7XHJcbiAgbGV0IGFzc29jaWF0aW9uID0gZ2V0QXNzb2NpYXRpb24oY3NkbFByb3BlcnR5LCBzY2hlbWEsIHNjaGVtYXMpO1xyXG4gIGlmICghYXNzb2NpYXRpb24pIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byByZXNvbHZlIEZvcmVpZ24gS2V5IEFzc29jaWF0aW9uOiBcIiArIGNzZGxQcm9wZXJ0eS5yZWxhdGlvbnNoaXApO1xyXG4gIH1cclxuICBsZXQgdG9FbmQgPSBjb3JlLmFycmF5Rmlyc3QoYXNzb2NpYXRpb24uZW5kLCAoYXNzb2NFbmQpID0+IHtcclxuICAgIHJldHVybiBhc3NvY0VuZC5yb2xlID09PSBjc2RsUHJvcGVydHkudG9Sb2xlO1xyXG4gIH0pO1xyXG5cclxuICBsZXQgaXNTY2FsYXIgPSB0b0VuZCEubXVsdGlwbGljaXR5ICE9PSBcIipcIjtcclxuICBsZXQgZGF0YVR5cGUgPSBwYXJzZVR5cGVOYW1lV2l0aFNjaGVtYSh0b0VuZCEudHlwZSwgc2NoZW1hKS50eXBlTmFtZTtcclxuXHJcbiAgbGV0IGNvbnN0cmFpbnQgPSBhc3NvY2lhdGlvbi5yZWZlcmVudGlhbENvbnN0cmFpbnQ7XHJcbiAgaWYgKCFjb25zdHJhaW50KSB7XHJcbiAgICAvLyBUT0RPOiBSZXZpc2l0IHRoaXMgbGF0ZXIgLSByaWdodCBub3cgd2UganVzdCBpZ25vcmUgbWFueS1tYW55IGFuZCBhc3NvY3Mgd2l0aCBtaXNzaW5nIGNvbnN0cmFpbnRzLlxyXG5cclxuICAgIC8vIFRoaW5rIGFib3V0IGFkZGluZyB0aGlzIGJhY2sgbGF0ZXIuXHJcbiAgICBpZiAoYXNzb2NpYXRpb24uZW5kWzBdLm11bHRpcGxpY2l0eSA9PT0gXCIqXCIgJiYgYXNzb2NpYXRpb24uZW5kWzFdLm11bHRpcGxpY2l0eSA9PT0gXCIqXCIpIHtcclxuICAgICAgLy8gaWdub3JlIG1hbnkgdG8gbWFueSByZWxhdGlvbnMgZm9yIG5vd1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBGb3Igbm93IGFzc3VtZSBpdCB3aWxsIGJlIHNldCBsYXRlciBkaXJlY3RseSBvbiB0aGUgY2xpZW50LlxyXG4gICAgICAvLyBvdGhlciBhbHRlcm5hdGl2ZSBpcyB0byB0aHJvdyBhbiBlcnJvcjpcclxuICAgICAgLy8gdGhyb3cgbmV3IEVycm9yKFwiRm9yZWlnbiBLZXkgQXNzb2NpYXRpb25zIG11c3QgYmUgdHVybmVkIG9uIGZvciB0aGlzIG1vZGVsXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBsZXQgY2ZnID0ge1xyXG4gICAgbmFtZU9uU2VydmVyOiBjc2RsUHJvcGVydHkubmFtZSxcclxuICAgIGVudGl0eVR5cGVOYW1lOiBkYXRhVHlwZSxcclxuICAgIGlzU2NhbGFyOiBpc1NjYWxhcixcclxuICAgIGFzc29jaWF0aW9uTmFtZTogYXNzb2NpYXRpb24ubmFtZSxcclxuICB9O1xyXG5cclxuICBpZiAoY29uc3RyYWludCkge1xyXG4gICAgbGV0IHByaW5jaXBhbCA9IGNvbnN0cmFpbnQucHJpbmNpcGFsO1xyXG4gICAgbGV0IGRlcGVuZGVudCA9IGNvbnN0cmFpbnQuZGVwZW5kZW50O1xyXG5cclxuICAgIGxldCBwcm9wUmVmcyA9IGNvcmUudG9BcnJheShkZXBlbmRlbnQucHJvcGVydHlSZWYpO1xyXG4gICAgbGV0IGZrTmFtZXMgPSBwcm9wUmVmcy5tYXAoY29yZS5wbHVjayhcIm5hbWVcIikpO1xyXG4gICAgaWYgKGNzZGxQcm9wZXJ0eS5mcm9tUm9sZSA9PT0gcHJpbmNpcGFsLnJvbGUpIHtcclxuICAgICAgKGNmZyBhcyBhbnkpLmludkZvcmVpZ25LZXlOYW1lc09uU2VydmVyID0gZmtOYW1lcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHdpbGwgYmUgdXNlZCBsYXRlciBieSBucC5fdXBkYXRlXHJcbiAgICAgIChjZmcgYXMgYW55KS5mb3JlaWduS2V5TmFtZXNPblNlcnZlciA9IGZrTmFtZXM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsZXQgbnAgPSBuZXcgTmF2aWdhdGlvblByb3BlcnR5KGNmZyk7XHJcbiAgZW50aXR5VHlwZS5fYWRkUHJvcGVydHlDb3JlKG5wKTtcclxuICByZXR1cm4gbnA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQ29sbGVjdGlvbihwcm9wZXJ0eVR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gIHJldHVybiBSWF9DT0xMRUNUSU9OLnRlc3QocHJvcGVydHlUeXBlKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNFbnVtVHlwZShjc2RsUHJvcGVydHk6IGFueSwgc2NoZW1hOiBhbnkpIHtcclxuICBpZiAoc2NoZW1hLmVudW1UeXBlKSByZXR1cm4gaXNFZG14RW51bVR5cGUoY3NkbFByb3BlcnR5LCBzY2hlbWEpO1xyXG4gIGVsc2UgaWYgKHNjaGVtYS5leHRlbnNpb25zKSByZXR1cm4gaXNPRGF0YUVudW1UeXBlKGNzZGxQcm9wZXJ0eSwgc2NoZW1hKTtcclxuICBlbHNlIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNFZG14RW51bVR5cGUoY3NkbFByb3BlcnR5OiBhbnksIHNjaGVtYTogYW55KSB7XHJcbiAgbGV0IGVudW1UeXBlcyA9IGNvcmUudG9BcnJheShzY2hlbWEuZW51bVR5cGUpO1xyXG4gIGxldCBwcm9wZXJ0eVR5cGUgPSBnZXRDb2xsZWN0aW9uVHlwZShjc2RsUHJvcGVydHkudHlwZSkgfHwgY3NkbFByb3BlcnR5LnR5cGU7XHJcbiAgbGV0IHR5cGVQYXJ0cyA9IHByb3BlcnR5VHlwZS5zcGxpdChcIi5cIik7XHJcbiAgbGV0IGJhc2VUeXBlTmFtZSA9IHR5cGVQYXJ0c1t0eXBlUGFydHMubGVuZ3RoIC0gMV07XHJcbiAgcmV0dXJuIGVudW1UeXBlcy5zb21lKGZ1bmN0aW9uIChlbnVtVHlwZSkge1xyXG4gICAgcmV0dXJuIGVudW1UeXBlLm5hbWUgPT09IGJhc2VUeXBlTmFtZTtcclxuICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNPRGF0YUVudW1UeXBlKGNzZGxQcm9wZXJ0eTogYW55LCBzY2hlbWE6IGFueSkge1xyXG4gIGxldCBlbnVtVHlwZXMgPSBzY2hlbWEuZXh0ZW5zaW9ucy5maWx0ZXIoKGV4dDogYW55KSA9PiB7XHJcbiAgICByZXR1cm4gZXh0Lm5hbWUgPT09IFwiRW51bVR5cGVcIjtcclxuICB9KTtcclxuICBsZXQgcHJvcGVydHlUeXBlID0gZ2V0Q29sbGVjdGlvblR5cGUoY3NkbFByb3BlcnR5LnR5cGUpIHx8IGNzZGxQcm9wZXJ0eS50eXBlO1xyXG4gIGxldCB0eXBlUGFydHMgPSBwcm9wZXJ0eVR5cGUuc3BsaXQoXCIuXCIpO1xyXG4gIGxldCBiYXNlVHlwZU5hbWUgPSB0eXBlUGFydHNbdHlwZVBhcnRzLmxlbmd0aCAtIDFdO1xyXG4gIHJldHVybiBlbnVtVHlwZXMuc29tZSgoZW51bVR5cGU6IGFueSkgPT4ge1xyXG4gICAgcmV0dXJuIGVudW1UeXBlLmF0dHJpYnV0ZXMuc29tZSgoYXR0cjogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiBhdHRyLm5hbWUgPT09IFwiTmFtZVwiICYmIGF0dHIudmFsdWUgPT09IGJhc2VUeXBlTmFtZTtcclxuICAgIH0pO1xyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhZGRWYWxpZGF0b3JzKGRhdGFQcm9wZXJ0eTogRGF0YVByb3BlcnR5KSB7XHJcbiAgbGV0IHR5cGVWYWxpZGF0b3I6IFZhbGlkYXRvcjtcclxuICBpZiAoIWRhdGFQcm9wZXJ0eS5pc051bGxhYmxlKSB7XHJcbiAgICBkYXRhUHJvcGVydHkudmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvci5yZXF1aXJlZCgpKTtcclxuICB9XHJcblxyXG4gIGlmIChkYXRhUHJvcGVydHkuaXNDb21wbGV4UHJvcGVydHkpIHJldHVybjtcclxuXHJcbiAgaWYgKGRhdGFQcm9wZXJ0eS5kYXRhVHlwZSA9PT0gRGF0YVR5cGUuU3RyaW5nKSB7XHJcbiAgICBpZiAoZGF0YVByb3BlcnR5Lm1heExlbmd0aCkge1xyXG4gICAgICBsZXQgdmFsaWRhdG9yQXJncyA9IHsgbWF4TGVuZ3RoOiBkYXRhUHJvcGVydHkubWF4TGVuZ3RoIH07XHJcbiAgICAgIHR5cGVWYWxpZGF0b3IgPSBWYWxpZGF0b3IubWF4TGVuZ3RoKHZhbGlkYXRvckFyZ3MpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdHlwZVZhbGlkYXRvciA9IFZhbGlkYXRvci5zdHJpbmcoKTtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgICBsZXQgdmFsaWRhdG9yQ3RvciA9IChkYXRhUHJvcGVydHkuZGF0YVR5cGUgYXMgYW55KS52YWxpZGF0b3JDdG9yO1xyXG4gICAgICBpZiAoIXZhbGlkYXRvckN0b3IpIHJldHVybjtcclxuICAgICAgdHlwZVZhbGlkYXRvciA9IHZhbGlkYXRvckN0b3IoKTtcclxuICB9XHJcblxyXG4gIGRhdGFQcm9wZXJ0eS52YWxpZGF0b3JzLnB1c2godHlwZVZhbGlkYXRvcik7XHJcblxyXG59XHJcblxyXG5mdW5jdGlvbiBpc0lkZW50aXR5UHJvcGVydHkoY3NkbFByb3BlcnR5OiBhbnkpIHtcclxuICAvLyBzZWUgaWYgd2ViIGFwaSBmZWVkXHJcbiAgbGV0IHByb3BOYW1lID0gY29yZS5hcnJheUZpcnN0KE9iamVjdC5rZXlzKGNzZGxQcm9wZXJ0eSksIChwbikgPT4ge1xyXG4gICAgcmV0dXJuIHBuLmluZGV4T2YoXCJTdG9yZUdlbmVyYXRlZFBhdHRlcm5cIikgPj0gMDtcclxuICB9KTtcclxuICBpZiAocHJvcE5hbWUpIHtcclxuICAgIHJldHVybiAoY3NkbFByb3BlcnR5W3Byb3BOYW1lXSA9PT0gXCJJZGVudGl0eVwiKTtcclxuICB9IGVsc2Uge1xyXG4gICAgLy8gc2VlIGlmIE9kYXRhIGZlZWRcclxuICAgIGxldCBleHRlbnNpb25zID0gY3NkbFByb3BlcnR5LmV4dGVuc2lvbnM7XHJcbiAgICBpZiAoIWV4dGVuc2lvbnMpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgbGV0IGlkZW50aXR5RXh0biA9IGNvcmUuYXJyYXlGaXJzdChleHRlbnNpb25zLCAoZXh0ZW5zaW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiBleHRlbnNpb24ubmFtZSA9PT0gXCJTdG9yZUdlbmVyYXRlZFBhdHRlcm5cIiAmJiBleHRlbnNpb24udmFsdWUgPT09IFwiSWRlbnRpdHlcIjtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuICEhaWRlbnRpdHlFeHRuO1xyXG4gIH1cclxufVxyXG5cclxuLy8gRmFzdCB2ZXJzaW9uXHJcbi8vIG5wOiBzY2hlbWEuZW50aXR5VHlwZVtdLm5hdmlnYXRpb25Qcm9wZXJ0eS5yZWxhdGlvbnNoaXAgLT4gc2NoZW1hLmFzc29jaWF0aW9uXHJcbi8vICAgbWF0Y2goIHNob3J0TmFtZShucC5yZWxhdGlvbnNoaXApID09IHNjaGVtYS5hc3NvY2lhdGlvbltdLm5hbWVcclxuLy8gICAgICAtLT4gYXNzb2NpYXRpb25fX1xyXG5cclxuLy8gQ29ycmVjdCB2ZXJzaW9uXHJcbi8vIG5wOiBzY2hlbWEuZW50aXR5VHlwZVtdLm5hdmlnYXRpb25Qcm9wZXJ0eS5yZWxhdGlvbnNoaXAgLT4gc2NoZW1hLmFzc29jaWF0aW9uXHJcbi8vICAgbWF0Y2goIG5wLnJlbGF0aW9uc2hpcCA9PSBzY2hlbWEuZW50aXR5Q29udGFpbmVyWzBdLmFzc29jaWF0aW9uU2V0W10uYXNzb2NpYXRpb24gKVxyXG4vLyAgICAgIC0+IGFzc29jaWF0aW9uU2V0Lm5hbWVcclxuLy8gICBtYXRjaCAoIGFzc29jaWF0aW9uU2V0Lm5hbWUgPT0gc2NoZW1hLmFzc29jaWF0aW9uW10ubmFtZSApXHJcbi8vICAgICAgLT4gYXNzb2NpYXRpb25cclxuXHJcbmZ1bmN0aW9uIGdldEFzc29jaWF0aW9uKGNzZGxOYXZQcm9wZXJ0eTogYW55LCBjb250YWluaW5nU2NoZW1hOiBhbnksIHNjaGVtYXM6IGFueVtdKSB7XHJcbiAgbGV0IGFzc29jRnVsbE5hbWUgPSBwYXJzZVR5cGVOYW1lV2l0aFNjaGVtYShjc2RsTmF2UHJvcGVydHkucmVsYXRpb25zaGlwLCBjb250YWluaW5nU2NoZW1hKTtcclxuICBsZXQgYXNzb2NOYW1lc3BhY2UgPSBhc3NvY0Z1bGxOYW1lLm5hbWVzcGFjZTtcclxuICBsZXQgYXNzb2NTY2hlbWEgPSBjb3JlLmFycmF5Rmlyc3Qoc2NoZW1hcywgKHNjaGVtYSkgPT4ge1xyXG4gICAgcmV0dXJuIHNjaGVtYS5uYW1lc3BhY2UgPT09IGFzc29jTmFtZXNwYWNlO1xyXG4gIH0pO1xyXG4gIGlmICghYXNzb2NTY2hlbWEpIHJldHVybiBudWxsO1xyXG5cclxuICBsZXQgYXNzb2NOYW1lID0gYXNzb2NGdWxsTmFtZS5zaG9ydFR5cGVOYW1lO1xyXG4gIGxldCBhc3NvY3MgPSBhc3NvY1NjaGVtYS5hc3NvY2lhdGlvbjtcclxuICBpZiAoIWFzc29jcykgcmV0dXJuIG51bGw7XHJcbiAgaWYgKCFBcnJheS5pc0FycmF5KGFzc29jcykpIHtcclxuICAgIGFzc29jcyA9IFthc3NvY3NdO1xyXG4gIH1cclxuICBsZXQgYXNzb2NpYXRpb24gPSBjb3JlLmFycmF5Rmlyc3QoYXNzb2NzLCAoYXNzb2MpID0+IHtcclxuICAgIHJldHVybiBhc3NvYy5uYW1lID09PSBhc3NvY05hbWU7XHJcbiAgfSk7XHJcbiAgcmV0dXJuIGFzc29jaWF0aW9uIGFzIElBc3NvY2lhdGlvbjtcclxufVxyXG5cclxuLy8gc2NoZW1hIGlzIG9ubHkgbmVlZGVkIGZvciBuYXZQcm9wZXJ0eSB0eXBlIG5hbWVcclxuZnVuY3Rpb24gcGFyc2VUeXBlTmFtZVdpdGhTY2hlbWEoZW50aXR5VHlwZU5hbWU6IHN0cmluZywgc2NoZW1hOiBhbnkpIHtcclxuICBsZXQgcmVzdWx0ID0gTWV0YWRhdGFTdG9yZS5wYXJzZVR5cGVOYW1lKGVudGl0eVR5cGVOYW1lKTtcclxuICBpZiAoc2NoZW1hICYmIHNjaGVtYS5jU3BhY2VPU3BhY2VNYXBwaW5nKSB7XHJcbiAgICBsZXQgbnMgPSBnZXROYW1lc3BhY2VGb3IocmVzdWx0IS5zaG9ydFR5cGVOYW1lLCBzY2hlbWEpO1xyXG4gICAgaWYgKG5zKSB7XHJcbiAgICAgIHJlc3VsdCA9IE1ldGFkYXRhU3RvcmUubWFrZVR5cGVIYXNoKHJlc3VsdCEuc2hvcnRUeXBlTmFtZSwgbnMpO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRDb2xsZWN0aW9uVHlwZShwcm9wZXJ0eVR5cGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgY29uc3QgbWF0Y2ggPSBwcm9wZXJ0eVR5cGUubWF0Y2goUlhfQ09MTEVDVElPTik7XHJcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiBudWxsO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXROYW1lc3BhY2VGb3Ioc2hvcnROYW1lOiBzdHJpbmcsIHNjaGVtYTogYW55KSB7XHJcbiAgbGV0IG5zOiBzdHJpbmc7XHJcbiAgbGV0IG1hcHBpbmcgPSBzY2hlbWEuY1NwYWNlT1NwYWNlTWFwcGluZztcclxuICBpZiAobWFwcGluZykge1xyXG4gICAgbGV0IGZ1bGxOYW1lID0gbWFwcGluZ1tzY2hlbWEubmFtZXNwYWNlICsgXCIuXCIgKyBzaG9ydE5hbWVdO1xyXG4gICAgbnMgPSBmdWxsTmFtZSAmJiBmdWxsTmFtZS5zdWJzdHIoMCwgZnVsbE5hbWUubGVuZ3RoIC0gKHNob3J0TmFtZS5sZW5ndGggKyAxKSk7XHJcbiAgICBpZiAobnMpIHJldHVybiBucztcclxuICB9XHJcbiAgLy8gaWYgc2NoZW1hIGRvZXMgbm90IGFsc28gaGF2ZSBhbiBlbnRpdHlUeXBlIG5vZGUgdGhlblxyXG4gIC8vIHRoaXMgaXMgYW4gV2ViQXBpMiBPRGF0YSBzY2hlbWEgd2hpY2ggaXMgdXN1YWxseSBlcXVhbCB0byAnRGVmYXVsdCc7IHdoaWNoIGlzIHVzZWxlc3MuXHJcbiAgaWYgKHNjaGVtYS5lbnRpdHlUeXBlIHx8IHNjaGVtYS5uYW1lc3BhY2UgIT09ICdEZWZhdWx0Jykge1xyXG4gICAgcmV0dXJuIHNjaGVtYS5uYW1lc3BhY2U7XHJcbiAgfVxyXG4gIHJldHVybiBudWxsO1xyXG59XHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuZXhwb3J0IGNvbnN0IENzZGxNZXRhZGF0YVBhcnNlciA9IHtcclxuICBwYXJzZTogcGFyc2VcclxufTtcclxuIl19
|