breeze-client 2.2.0 → 2.2.1-cjs
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/adapter-ajax-angularjs/{index.d.ts → breeze-client-adapter-ajax-angularjs.d.ts} +0 -1
- package/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.metadata.json +1 -0
- package/adapter-ajax-angularjs/package.json +13 -0
- package/adapter-ajax-fetch/{index.d.ts → breeze-client-adapter-ajax-fetch.d.ts} +0 -1
- package/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.metadata.json +1 -0
- package/adapter-ajax-fetch/package.json +13 -0
- package/adapter-ajax-httpclient/{index.d.ts → breeze-client-adapter-ajax-httpclient.d.ts} +0 -1
- package/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.metadata.json +1 -0
- package/adapter-ajax-httpclient/package.json +13 -0
- package/adapter-ajax-jquery/{index.d.ts → breeze-client-adapter-ajax-jquery.d.ts} +0 -1
- package/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.metadata.json +1 -0
- package/adapter-ajax-jquery/package.json +13 -0
- package/adapter-ajax-post/{index.d.ts → breeze-client-adapter-ajax-post.d.ts} +0 -1
- package/adapter-ajax-post/breeze-client-adapter-ajax-post.metadata.json +1 -0
- package/adapter-ajax-post/package.json +13 -0
- package/adapter-data-service-odata/{index.d.ts → breeze-client-adapter-data-service-odata.d.ts} +0 -1
- package/adapter-data-service-odata/breeze-client-adapter-data-service-odata.metadata.json +1 -0
- package/adapter-data-service-odata/package.json +13 -0
- package/adapter-data-service-webapi/{index.d.ts → breeze-client-adapter-data-service-webapi.d.ts} +0 -1
- package/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.metadata.json +1 -0
- package/adapter-data-service-webapi/package.json +13 -0
- package/adapter-model-library-backing-store/{index.d.ts → breeze-client-adapter-model-library-backing-store.d.ts} +0 -1
- package/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.metadata.json +1 -0
- package/adapter-model-library-backing-store/package.json +13 -0
- package/adapter-model-library-ko/{index.d.ts → breeze-client-adapter-model-library-ko.d.ts} +0 -1
- package/adapter-model-library-ko/breeze-client-adapter-model-library-ko.metadata.json +1 -0
- package/adapter-model-library-ko/package.json +13 -0
- package/adapter-uri-builder-json/{index.d.ts → breeze-client-adapter-uri-builder-json.d.ts} +0 -1
- package/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.metadata.json +1 -0
- package/adapter-uri-builder-json/package.json +13 -0
- package/adapter-uri-builder-odata/{index.d.ts → breeze-client-adapter-uri-builder-odata.d.ts} +0 -1
- package/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.metadata.json +1 -0
- package/adapter-uri-builder-odata/package.json +13 -0
- package/breeze-client.d.ts +8 -0
- package/breeze-client.metadata.json +1 -0
- package/bundles/breeze-client-adapter-ajax-angularjs.umd.js +190 -0
- package/bundles/breeze-client-adapter-ajax-angularjs.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js +2 -0
- package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js.map +1 -0
- package/bundles/breeze-client-adapter-ajax-fetch.umd.js +190 -0
- package/bundles/breeze-client-adapter-ajax-fetch.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js +2 -0
- package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js.map +1 -0
- package/bundles/breeze-client-adapter-ajax-httpclient.umd.js +195 -0
- package/bundles/breeze-client-adapter-ajax-httpclient.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js +2 -0
- package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js.map +1 -0
- package/bundles/breeze-client-adapter-ajax-jquery.umd.js +115 -0
- package/bundles/breeze-client-adapter-ajax-jquery.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js +2 -0
- package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js.map +1 -0
- package/bundles/breeze-client-adapter-ajax-post.umd.js +92 -0
- package/bundles/breeze-client-adapter-ajax-post.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-ajax-post.umd.min.js +2 -0
- package/bundles/breeze-client-adapter-ajax-post.umd.min.js.map +1 -0
- package/bundles/breeze-client-adapter-data-service-odata.umd.js +747 -0
- package/bundles/breeze-client-adapter-data-service-odata.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-data-service-odata.umd.min.js +16 -0
- package/bundles/breeze-client-adapter-data-service-odata.umd.min.js.map +1 -0
- package/bundles/breeze-client-adapter-data-service-webapi.umd.js +333 -0
- package/bundles/breeze-client-adapter-data-service-webapi.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js +16 -0
- package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js.map +1 -0
- package/bundles/breeze-client-adapter-model-library-backing-store.umd.js +280 -0
- package/bundles/breeze-client-adapter-model-library-backing-store.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js +2 -0
- package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js.map +1 -0
- package/bundles/breeze-client-adapter-model-library-ko.umd.js +252 -0
- package/bundles/breeze-client-adapter-model-library-ko.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-model-library-ko.umd.min.js +2 -0
- package/bundles/breeze-client-adapter-model-library-ko.umd.min.js.map +1 -0
- package/bundles/breeze-client-adapter-uri-builder-json.umd.js +96 -0
- package/bundles/breeze-client-adapter-uri-builder-json.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js +2 -0
- package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js.map +1 -0
- package/bundles/breeze-client-adapter-uri-builder-odata.umd.js +262 -0
- package/bundles/breeze-client-adapter-uri-builder-odata.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js +2 -0
- package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js.map +1 -0
- package/bundles/breeze-client-mixin-get-entity-graph.umd.js +258 -0
- package/bundles/breeze-client-mixin-get-entity-graph.umd.js.map +1 -0
- package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js +2 -0
- package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js.map +1 -0
- package/bundles/breeze-client-mixin-save-queuing.umd.js +579 -0
- package/bundles/breeze-client-mixin-save-queuing.umd.js.map +1 -0
- package/bundles/breeze-client-mixin-save-queuing.umd.min.js +16 -0
- package/bundles/breeze-client-mixin-save-queuing.umd.min.js.map +1 -0
- package/bundles/breeze-client.umd.js +14234 -0
- package/bundles/breeze-client.umd.js.map +1 -0
- package/bundles/breeze-client.umd.min.js +16 -0
- package/bundles/breeze-client.umd.min.js.map +1 -0
- package/esm2015/adapter-ajax-angularjs/adapter-ajax-angularjs.js +130 -0
- package/esm2015/adapter-ajax-angularjs/adapter-core.js +49 -0
- package/esm2015/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +5 -0
- package/esm2015/adapter-ajax-fetch/adapter-ajax-fetch.js +130 -0
- package/esm2015/adapter-ajax-fetch/adapter-core.js +49 -0
- package/esm2015/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +5 -0
- package/esm2015/adapter-ajax-httpclient/adapter-ajax-httpclient.js +137 -0
- package/esm2015/adapter-ajax-httpclient/adapter-core.js +49 -0
- package/esm2015/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +5 -0
- package/esm2015/adapter-ajax-jquery/adapter-ajax-jquery.js +103 -0
- package/esm2015/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +5 -0
- package/esm2015/adapter-ajax-post/adapter-ajax-post.js +77 -0
- package/esm2015/adapter-ajax-post/breeze-client-adapter-ajax-post.js +5 -0
- package/esm2015/adapter-data-service-odata/adapter-core.js +49 -0
- package/esm2015/adapter-data-service-odata/adapter-data-service-odata.js +463 -0
- package/esm2015/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +5 -0
- package/esm2015/adapter-data-service-webapi/adapter-data-service-webapi.js +100 -0
- package/esm2015/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +5 -0
- package/esm2015/adapter-model-library-backing-store/adapter-model-library-backing-store.js +268 -0
- package/esm2015/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +5 -0
- package/esm2015/adapter-model-library-ko/adapter-model-library-ko.js +240 -0
- package/esm2015/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +5 -0
- package/esm2015/adapter-uri-builder-json/adapter-core.js +49 -0
- package/esm2015/adapter-uri-builder-json/adapter-uri-builder-json.js +36 -0
- package/esm2015/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +5 -0
- package/esm2015/adapter-uri-builder-odata/adapter-core.js +49 -0
- package/esm2015/adapter-uri-builder-odata/adapter-uri-builder-odata.js +192 -0
- package/esm2015/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +5 -0
- package/esm2015/breeze-client.js +9 -0
- package/esm2015/index.js +2 -0
- package/esm2015/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +5 -0
- package/esm2015/mixin-get-entity-graph/mixin-get-entity-graph.js +269 -0
- package/esm2015/mixin-save-queuing/breeze-client-mixin-save-queuing.js +5 -0
- package/esm2015/mixin-save-queuing/mixin-save-queuing.js +400 -0
- package/esm2015/src/abstract-data-service-adapter.js +327 -0
- package/esm2015/src/array.js +4 -0
- package/esm2015/src/assert-param.js +312 -0
- package/esm2015/src/breeze.js +85 -0
- package/esm2015/src/complex-array.js +119 -0
- package/esm2015/src/config.js +223 -0
- package/esm2015/src/core.js +714 -0
- package/esm2015/src/csdl-metadata-parser.js +385 -0
- package/esm2015/src/data-service.js +203 -0
- package/esm2015/src/data-type.js +506 -0
- package/esm2015/src/default-property-interceptor.js +460 -0
- package/{esm2022/src/entity-action.mjs → esm2015/src/entity-action.js} +25 -25
- package/esm2015/src/entity-aspect.js +804 -0
- package/esm2015/src/entity-group.js +187 -0
- package/esm2015/src/entity-key.js +116 -0
- package/esm2015/src/entity-manager.js +2094 -0
- package/esm2015/src/entity-metadata.js +2109 -0
- package/esm2015/src/entity-query.js +1015 -0
- package/esm2015/src/entity-state.js +107 -0
- package/esm2015/src/enum.js +141 -0
- package/esm2015/src/event.js +256 -0
- package/esm2015/src/interface-registry.js +41 -0
- package/esm2015/src/key-generator.js +108 -0
- package/esm2015/src/local-query-comparison-options.js +65 -0
- package/esm2015/src/mapping-context.js +411 -0
- package/esm2015/src/naming-convention.js +88 -0
- package/esm2015/src/observable-array.js +185 -0
- package/esm2015/src/predicate.js +1242 -0
- package/esm2015/src/primitive-array.js +87 -0
- package/esm2015/src/query-options.js +152 -0
- package/esm2015/src/relation-array.js +175 -0
- package/esm2015/src/save-options.js +41 -0
- package/esm2015/src/unattached-children-map.js +58 -0
- package/esm2015/src/validate.js +991 -0
- package/esm2015/src/validation-options.js +64 -0
- package/esm5/adapter-ajax-angularjs/adapter-ajax-angularjs.js +132 -0
- package/esm5/adapter-ajax-angularjs/adapter-core.js +49 -0
- package/esm5/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +5 -0
- package/esm5/adapter-ajax-fetch/adapter-ajax-fetch.js +132 -0
- package/esm5/adapter-ajax-fetch/adapter-core.js +49 -0
- package/esm5/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +5 -0
- package/esm5/adapter-ajax-httpclient/adapter-ajax-httpclient.js +139 -0
- package/esm5/adapter-ajax-httpclient/adapter-core.js +49 -0
- package/esm5/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +5 -0
- package/esm5/adapter-ajax-jquery/adapter-ajax-jquery.js +105 -0
- package/esm5/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +5 -0
- package/esm5/adapter-ajax-post/adapter-ajax-post.js +81 -0
- package/esm5/adapter-ajax-post/breeze-client-adapter-ajax-post.js +5 -0
- package/esm5/adapter-data-service-odata/adapter-core.js +49 -0
- package/{esm2022/adapter-data-service-odata/adapter-data-service-odata.mjs → esm5/adapter-data-service-odata/adapter-data-service-odata.js} +147 -138
- package/esm5/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +5 -0
- package/esm5/adapter-data-service-webapi/adapter-data-service-webapi.js +105 -0
- package/esm5/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +5 -0
- package/esm5/adapter-model-library-backing-store/adapter-model-library-backing-store.js +270 -0
- package/esm5/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +5 -0
- package/esm5/adapter-model-library-ko/adapter-model-library-ko.js +242 -0
- package/esm5/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +5 -0
- package/esm5/adapter-uri-builder-json/adapter-core.js +49 -0
- package/esm5/adapter-uri-builder-json/adapter-uri-builder-json.js +38 -0
- package/esm5/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +5 -0
- package/esm5/adapter-uri-builder-odata/adapter-core.js +49 -0
- package/esm5/adapter-uri-builder-odata/adapter-uri-builder-odata.js +197 -0
- package/esm5/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +5 -0
- package/esm5/breeze-client.js +9 -0
- package/esm5/index.js +2 -0
- package/esm5/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +5 -0
- package/esm5/mixin-get-entity-graph/mixin-get-entity-graph.js +269 -0
- package/esm5/mixin-save-queuing/breeze-client-mixin-save-queuing.js +5 -0
- package/esm5/mixin-save-queuing/mixin-save-queuing.js +412 -0
- package/esm5/src/abstract-data-service-adapter.js +333 -0
- package/esm5/src/array.js +4 -0
- package/esm5/src/assert-param.js +317 -0
- package/esm5/src/breeze.js +85 -0
- package/esm5/src/complex-array.js +119 -0
- package/esm5/src/config.js +228 -0
- package/esm5/src/core.js +722 -0
- package/esm5/src/csdl-metadata-parser.js +385 -0
- package/esm5/src/data-service.js +207 -0
- package/esm5/src/data-type.js +513 -0
- package/esm5/src/default-property-interceptor.js +460 -0
- package/esm5/src/entity-action.js +52 -0
- package/esm5/src/entity-aspect.js +810 -0
- package/esm5/src/entity-group.js +189 -0
- package/esm5/src/entity-key.js +118 -0
- package/esm5/src/entity-manager.js +2112 -0
- package/esm5/src/entity-metadata.js +2144 -0
- package/esm5/src/entity-query.js +1042 -0
- package/esm5/src/entity-state.js +114 -0
- package/esm5/src/enum.js +144 -0
- package/esm5/src/event.js +259 -0
- package/esm5/src/interface-registry.js +43 -0
- package/esm5/src/key-generator.js +111 -0
- package/esm5/src/local-query-comparison-options.js +67 -0
- package/esm5/src/mapping-context.js +413 -0
- package/esm5/src/naming-convention.js +90 -0
- package/esm5/src/observable-array.js +201 -0
- package/esm5/src/predicate.js +1307 -0
- package/esm5/src/primitive-array.js +87 -0
- package/esm5/src/query-options.js +167 -0
- package/esm5/src/relation-array.js +175 -0
- package/esm5/src/save-options.js +43 -0
- package/esm5/src/unattached-children-map.js +60 -0
- package/{esm2022/src/validate.mjs → esm5/src/validate.js} +110 -116
- package/esm5/src/validation-options.js +66 -0
- package/{fesm2022/breeze-client-adapter-ajax-angularjs.mjs → fesm2015/breeze-client-adapter-ajax-angularjs.js} +1 -6
- package/fesm2015/breeze-client-adapter-ajax-angularjs.js.map +1 -0
- package/{fesm2022/breeze-client-adapter-ajax-fetch.mjs → fesm2015/breeze-client-adapter-ajax-fetch.js} +4 -9
- package/fesm2015/breeze-client-adapter-ajax-fetch.js.map +1 -0
- package/{fesm2022/breeze-client-adapter-ajax-httpclient.mjs → fesm2015/breeze-client-adapter-ajax-httpclient.js} +4 -6
- package/fesm2015/breeze-client-adapter-ajax-httpclient.js.map +1 -0
- package/{fesm2022/breeze-client-adapter-ajax-jquery.mjs → fesm2015/breeze-client-adapter-ajax-jquery.js} +2 -6
- package/fesm2015/breeze-client-adapter-ajax-jquery.js.map +1 -0
- package/{fesm2022/breeze-client-adapter-ajax-post.mjs → fesm2015/breeze-client-adapter-ajax-post.js} +1 -1
- package/fesm2015/breeze-client-adapter-ajax-post.js.map +1 -0
- package/{fesm2022/breeze-client-adapter-data-service-odata.mjs → fesm2015/breeze-client-adapter-data-service-odata.js} +69 -68
- package/fesm2015/breeze-client-adapter-data-service-odata.js.map +1 -0
- package/{fesm2022/breeze-client-adapter-data-service-webapi.mjs → fesm2015/breeze-client-adapter-data-service-webapi.js} +30 -30
- package/fesm2015/breeze-client-adapter-data-service-webapi.js.map +1 -0
- package/{fesm2022/breeze-client-adapter-model-library-backing-store.mjs → fesm2015/breeze-client-adapter-model-library-backing-store.js} +13 -14
- package/fesm2015/breeze-client-adapter-model-library-backing-store.js.map +1 -0
- package/{fesm2022/breeze-client-adapter-model-library-ko.mjs → fesm2015/breeze-client-adapter-model-library-ko.js} +13 -14
- package/fesm2015/breeze-client-adapter-model-library-ko.js.map +1 -0
- package/{fesm2022/breeze-client-adapter-uri-builder-json.mjs → fesm2015/breeze-client-adapter-uri-builder-json.js} +8 -9
- package/fesm2015/breeze-client-adapter-uri-builder-json.js.map +1 -0
- package/{fesm2022/breeze-client-adapter-uri-builder-odata.mjs → fesm2015/breeze-client-adapter-uri-builder-odata.js} +86 -86
- package/fesm2015/breeze-client-adapter-uri-builder-odata.js.map +1 -0
- package/{fesm2022/breeze-client-mixin-get-entity-graph.mjs → fesm2015/breeze-client-mixin-get-entity-graph.js} +1 -1
- package/fesm2015/breeze-client-mixin-get-entity-graph.js.map +1 -0
- package/{fesm2022/breeze-client-mixin-save-queuing.mjs → fesm2015/breeze-client-mixin-save-queuing.js} +2 -23
- package/fesm2015/breeze-client-mixin-save-queuing.js.map +1 -0
- package/{fesm2022/breeze-client.mjs → fesm2015/breeze-client.js} +1543 -2042
- package/fesm2015/breeze-client.js.map +1 -0
- package/fesm5/breeze-client-adapter-ajax-angularjs.js +186 -0
- package/fesm5/breeze-client-adapter-ajax-angularjs.js.map +1 -0
- package/fesm5/breeze-client-adapter-ajax-fetch.js +186 -0
- package/fesm5/breeze-client-adapter-ajax-fetch.js.map +1 -0
- package/fesm5/breeze-client-adapter-ajax-httpclient.js +193 -0
- package/fesm5/breeze-client-adapter-ajax-httpclient.js.map +1 -0
- package/fesm5/breeze-client-adapter-ajax-jquery.js +111 -0
- package/fesm5/breeze-client-adapter-ajax-jquery.js.map +1 -0
- package/fesm5/breeze-client-adapter-ajax-post.js +86 -0
- package/fesm5/breeze-client-adapter-ajax-post.js.map +1 -0
- package/fesm5/breeze-client-adapter-data-service-odata.js +523 -0
- package/fesm5/breeze-client-adapter-data-service-odata.js.map +1 -0
- package/fesm5/breeze-client-adapter-data-service-webapi.js +111 -0
- package/fesm5/breeze-client-adapter-data-service-webapi.js.map +1 -0
- package/fesm5/breeze-client-adapter-model-library-backing-store.js +276 -0
- package/fesm5/breeze-client-adapter-model-library-backing-store.js.map +1 -0
- package/fesm5/breeze-client-adapter-model-library-ko.js +248 -0
- package/fesm5/breeze-client-adapter-model-library-ko.js.map +1 -0
- package/fesm5/breeze-client-adapter-uri-builder-json.js +92 -0
- package/fesm5/breeze-client-adapter-uri-builder-json.js.map +1 -0
- package/fesm5/breeze-client-adapter-uri-builder-odata.js +250 -0
- package/fesm5/breeze-client-adapter-uri-builder-odata.js.map +1 -0
- package/fesm5/breeze-client-mixin-get-entity-graph.js +254 -0
- package/fesm5/breeze-client-mixin-get-entity-graph.js.map +1 -0
- package/fesm5/breeze-client-mixin-save-queuing.js +356 -0
- package/fesm5/breeze-client-mixin-save-queuing.js.map +1 -0
- package/fesm5/breeze-client.js +13956 -0
- package/fesm5/breeze-client.js.map +1 -0
- package/mixin-get-entity-graph/{index.d.ts → breeze-client-mixin-get-entity-graph.d.ts} +0 -1
- package/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.metadata.json +1 -0
- package/mixin-get-entity-graph/package.json +13 -0
- package/mixin-save-queuing/{index.d.ts → breeze-client-mixin-save-queuing.d.ts} +0 -1
- package/mixin-save-queuing/breeze-client-mixin-save-queuing.metadata.json +1 -0
- package/mixin-save-queuing/package.json +13 -0
- package/package.json +12 -94
- package/src/config.d.ts +1 -1
- package/src/core.d.ts +1 -1
- package/src/entity-aspect.d.ts +1 -1
- package/src/entity-metadata.d.ts +6 -8
- package/src/entity-query.d.ts +1 -1
- package/esm2022/adapter-ajax-angularjs/adapter-ajax-angularjs.mjs +0 -135
- package/esm2022/adapter-ajax-angularjs/adapter-core.mjs +0 -49
- package/esm2022/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.mjs +0 -5
- package/esm2022/adapter-ajax-fetch/adapter-ajax-fetch.mjs +0 -135
- package/esm2022/adapter-ajax-fetch/adapter-core.mjs +0 -49
- package/esm2022/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.mjs +0 -5
- package/esm2022/adapter-ajax-httpclient/adapter-ajax-httpclient.mjs +0 -139
- package/esm2022/adapter-ajax-httpclient/adapter-core.mjs +0 -49
- package/esm2022/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.mjs +0 -5
- package/esm2022/adapter-ajax-jquery/adapter-ajax-jquery.mjs +0 -107
- package/esm2022/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.mjs +0 -5
- package/esm2022/adapter-ajax-post/adapter-ajax-post.mjs +0 -77
- package/esm2022/adapter-ajax-post/breeze-client-adapter-ajax-post.mjs +0 -5
- package/esm2022/adapter-data-service-odata/adapter-core.mjs +0 -49
- package/esm2022/adapter-data-service-odata/breeze-client-adapter-data-service-odata.mjs +0 -5
- package/esm2022/adapter-data-service-webapi/adapter-data-service-webapi.mjs +0 -100
- package/esm2022/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.mjs +0 -5
- package/esm2022/adapter-model-library-backing-store/adapter-model-library-backing-store.mjs +0 -269
- package/esm2022/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.mjs +0 -5
- package/esm2022/adapter-model-library-ko/adapter-model-library-ko.mjs +0 -241
- package/esm2022/adapter-model-library-ko/breeze-client-adapter-model-library-ko.mjs +0 -5
- package/esm2022/adapter-uri-builder-json/adapter-core.mjs +0 -49
- package/esm2022/adapter-uri-builder-json/adapter-uri-builder-json.mjs +0 -37
- package/esm2022/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.mjs +0 -5
- package/esm2022/adapter-uri-builder-odata/adapter-core.mjs +0 -49
- package/esm2022/adapter-uri-builder-odata/adapter-uri-builder-odata.mjs +0 -191
- package/esm2022/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.mjs +0 -5
- package/esm2022/breeze-client.mjs +0 -5
- package/esm2022/index.mjs +0 -2
- package/esm2022/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.mjs +0 -5
- package/esm2022/mixin-get-entity-graph/mixin-get-entity-graph.mjs +0 -269
- package/esm2022/mixin-save-queuing/breeze-client-mixin-save-queuing.mjs +0 -5
- package/esm2022/mixin-save-queuing/mixin-save-queuing.mjs +0 -421
- package/esm2022/src/abstract-data-service-adapter.mjs +0 -325
- package/esm2022/src/array.mjs +0 -4
- package/esm2022/src/assert-param.mjs +0 -330
- package/esm2022/src/breeze.mjs +0 -85
- package/esm2022/src/complex-array.mjs +0 -117
- package/esm2022/src/config.mjs +0 -232
- package/esm2022/src/core.mjs +0 -712
- package/esm2022/src/csdl-metadata-parser.mjs +0 -385
- package/esm2022/src/data-service.mjs +0 -239
- package/esm2022/src/data-type.mjs +0 -510
- package/esm2022/src/default-property-interceptor.mjs +0 -460
- package/esm2022/src/entity-aspect.mjs +0 -897
- package/esm2022/src/entity-group.mjs +0 -192
- package/esm2022/src/entity-key.mjs +0 -127
- package/esm2022/src/entity-manager.mjs +0 -2183
- package/esm2022/src/entity-metadata.mjs +0 -2242
- package/esm2022/src/entity-query.mjs +0 -1024
- package/esm2022/src/entity-state.mjs +0 -107
- package/esm2022/src/enum.mjs +0 -143
- package/esm2022/src/event.mjs +0 -264
- package/esm2022/src/interface-registry.mjs +0 -39
- package/esm2022/src/key-generator.mjs +0 -110
- package/esm2022/src/local-query-comparison-options.mjs +0 -75
- package/esm2022/src/mapping-context.mjs +0 -422
- package/esm2022/src/naming-convention.mjs +0 -96
- package/esm2022/src/observable-array.mjs +0 -183
- package/esm2022/src/predicate.mjs +0 -1259
- package/esm2022/src/primitive-array.mjs +0 -85
- package/esm2022/src/query-options.mjs +0 -160
- package/esm2022/src/relation-array.mjs +0 -173
- package/esm2022/src/save-options.mjs +0 -51
- package/esm2022/src/unattached-children-map.mjs +0 -56
- package/esm2022/src/validation-options.mjs +0 -78
- package/fesm2022/breeze-client-adapter-ajax-angularjs.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-ajax-fetch.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-ajax-httpclient.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-ajax-jquery.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-ajax-post.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-data-service-odata.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-data-service-webapi.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-model-library-backing-store.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-model-library-ko.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-uri-builder-json.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-uri-builder-odata.mjs.map +0 -1
- package/fesm2022/breeze-client-mixin-get-entity-graph.mjs.map +0 -1
- package/fesm2022/breeze-client-mixin-save-queuing.mjs.map +0 -1
- package/fesm2022/breeze-client.mjs.map +0 -1
|
@@ -0,0 +1,385 @@
|
|
|
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
|
+
const 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
|
+
let mappings = JSON.parse(schema.cSpaceOSpaceMapping);
|
|
14
|
+
let newMap = {};
|
|
15
|
+
mappings.forEach(function (mapping) {
|
|
16
|
+
newMap[mapping[0]] = mapping[1];
|
|
17
|
+
});
|
|
18
|
+
schema.cSpaceOSpaceMapping = newMap;
|
|
19
|
+
}
|
|
20
|
+
if (schema.entityContainer) {
|
|
21
|
+
core.toArray(schema.entityContainer).forEach(function (container) {
|
|
22
|
+
core.toArray(container.entitySet).forEach(function (entitySet) {
|
|
23
|
+
let 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
|
+
let badNavProps = metadataStore.getIncompleteNavigationProperties();
|
|
42
|
+
if (badNavProps.length > 0) {
|
|
43
|
+
let 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
|
+
let shortName = csdlEntityType.name;
|
|
60
|
+
let ns = getNamespaceFor(shortName, schema);
|
|
61
|
+
let entityType = new EntityType({
|
|
62
|
+
shortName: shortName,
|
|
63
|
+
namespace: ns,
|
|
64
|
+
isAbstract: csdlEntityType.abstract && csdlEntityType.abstract === 'true'
|
|
65
|
+
});
|
|
66
|
+
if (csdlEntityType.baseType) {
|
|
67
|
+
let baseTypeName = parseTypeNameWithSchema(csdlEntityType.baseType, schema).typeName;
|
|
68
|
+
entityType.baseTypeName = baseTypeName;
|
|
69
|
+
let baseEntityType = metadataStore._getStructuralType(baseTypeName, true);
|
|
70
|
+
if (baseEntityType) {
|
|
71
|
+
completeParseCsdlEntityType(entityType, csdlEntityType, schema, schemas, metadataStore);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
let 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
|
+
let 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
|
+
let deferredTypes = metadataStore._deferredTypes;
|
|
99
|
+
let 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
|
+
let shortName = csdlComplexType.name;
|
|
109
|
+
let ns = getNamespaceFor(shortName, schema);
|
|
110
|
+
let 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
|
+
let dp;
|
|
122
|
+
let 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
|
+
let isCollectionType = isCollection(csdlProperty.type);
|
|
146
|
+
let propertyType = getCollectionType(csdlProperty.type) || csdlProperty.type;
|
|
147
|
+
let 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
|
+
let isNullable = csdlProperty.nullable === 'true' || csdlProperty.nullable == null;
|
|
153
|
+
// let fixedLength = csdlProperty.fixedLength ? csdlProperty.fixedLength === true : undefined;
|
|
154
|
+
let 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
|
+
let 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
|
+
let 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
|
+
let isCollectionType = isCollection(csdlProperty.type);
|
|
185
|
+
let propertyType = getCollectionType(csdlProperty.type) || csdlProperty.type;
|
|
186
|
+
let complexTypeName = parseTypeNameWithSchema(propertyType, schema).typeName;
|
|
187
|
+
// can't set the name until we go thru namingConventions and these need the dp.
|
|
188
|
+
let 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
|
+
let association = getAssociation(csdlProperty, schema, schemas);
|
|
198
|
+
if (!association) {
|
|
199
|
+
throw new Error("Unable to resolve Foreign Key Association: " + csdlProperty.relationship);
|
|
200
|
+
}
|
|
201
|
+
let toEnd = core.arrayFirst(association.end, (assocEnd) => {
|
|
202
|
+
return assocEnd.role === csdlProperty.toRole;
|
|
203
|
+
});
|
|
204
|
+
let isScalar = toEnd.multiplicity !== "*";
|
|
205
|
+
let dataType = parseTypeNameWithSchema(toEnd.type, schema).typeName;
|
|
206
|
+
let 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
|
+
let cfg = {
|
|
221
|
+
nameOnServer: csdlProperty.name,
|
|
222
|
+
entityTypeName: dataType,
|
|
223
|
+
isScalar: isScalar,
|
|
224
|
+
associationName: association.name,
|
|
225
|
+
};
|
|
226
|
+
if (constraint) {
|
|
227
|
+
let principal = constraint.principal;
|
|
228
|
+
let dependent = constraint.dependent;
|
|
229
|
+
let propRefs = core.toArray(dependent.propertyRef);
|
|
230
|
+
let 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
|
+
let 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
|
+
let enumTypes = core.toArray(schema.enumType);
|
|
256
|
+
let propertyType = getCollectionType(csdlProperty.type) || csdlProperty.type;
|
|
257
|
+
let typeParts = propertyType.split(".");
|
|
258
|
+
let baseTypeName = typeParts[typeParts.length - 1];
|
|
259
|
+
return enumTypes.some(function (enumType) {
|
|
260
|
+
return enumType.name === baseTypeName;
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
function isODataEnumType(csdlProperty, schema) {
|
|
264
|
+
let enumTypes = schema.extensions.filter((ext) => {
|
|
265
|
+
return ext.name === "EnumType";
|
|
266
|
+
});
|
|
267
|
+
let propertyType = getCollectionType(csdlProperty.type) || csdlProperty.type;
|
|
268
|
+
let typeParts = propertyType.split(".");
|
|
269
|
+
let baseTypeName = typeParts[typeParts.length - 1];
|
|
270
|
+
return enumTypes.some((enumType) => {
|
|
271
|
+
return enumType.attributes.some((attr) => {
|
|
272
|
+
return attr.name === "Name" && attr.value === baseTypeName;
|
|
273
|
+
});
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
function addValidators(dataProperty) {
|
|
277
|
+
let 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
|
+
let validatorArgs = { maxLength: dataProperty.maxLength };
|
|
286
|
+
typeValidator = Validator.maxLength(validatorArgs);
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
typeValidator = Validator.string();
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
let 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
|
+
let propName = core.arrayFirst(Object.keys(csdlProperty), (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
|
+
let extensions = csdlProperty.extensions;
|
|
311
|
+
if (!extensions) {
|
|
312
|
+
return false;
|
|
313
|
+
}
|
|
314
|
+
let identityExtn = core.arrayFirst(extensions, (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
|
+
let assocFullName = parseTypeNameWithSchema(csdlNavProperty.relationship, containingSchema);
|
|
332
|
+
let assocNamespace = assocFullName.namespace;
|
|
333
|
+
let assocSchema = core.arrayFirst(schemas, (schema) => {
|
|
334
|
+
return schema.namespace === assocNamespace;
|
|
335
|
+
});
|
|
336
|
+
if (!assocSchema)
|
|
337
|
+
return null;
|
|
338
|
+
let assocName = assocFullName.shortTypeName;
|
|
339
|
+
let assocs = assocSchema.association;
|
|
340
|
+
if (!assocs)
|
|
341
|
+
return null;
|
|
342
|
+
if (!Array.isArray(assocs)) {
|
|
343
|
+
assocs = [assocs];
|
|
344
|
+
}
|
|
345
|
+
let association = core.arrayFirst(assocs, (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
|
+
let result = MetadataStore.parseTypeName(entityTypeName);
|
|
353
|
+
if (schema && schema.cSpaceOSpaceMapping) {
|
|
354
|
+
let 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
|
+
const match = propertyType.match(RX_COLLECTION);
|
|
363
|
+
return match ? match[1] : null;
|
|
364
|
+
}
|
|
365
|
+
function getNamespaceFor(shortName, schema) {
|
|
366
|
+
let ns;
|
|
367
|
+
let mapping = schema.cSpaceOSpaceMapping;
|
|
368
|
+
if (mapping) {
|
|
369
|
+
let 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 const CsdlMetadataParser = {
|
|
383
|
+
parse: parse
|
|
384
|
+
};
|
|
385
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NkbC1tZXRhZGF0YS1wYXJzZXIuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9icmVlemUtY2xpZW50LyIsInNvdXJjZXMiOlsic3JjL2NzZGwtbWV0YWRhdGEtcGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDOUIsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25JLE9BQU8sRUFBRSxRQUFRLEVBQUcsTUFBTSxhQUFhLENBQUM7QUFDeEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQWN2QyxNQUFNLGFBQWEsR0FBSSxvQkFBb0IsQ0FBQztBQUU1QyxTQUFTLEtBQUssQ0FBQyxhQUE0QixFQUFFLE9BQVksRUFBRSxXQUFnQjtJQUV6RSxhQUFhLENBQUMsc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0lBQzFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxNQUFXO1FBQ25DLElBQUksTUFBTSxDQUFDLG1CQUFtQixFQUFFO1lBQzlCLHFDQUFxQztZQUNyQyx5RkFBeUY7WUFDekYsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUN0RCxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDaEIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLE9BQVk7Z0JBQ3JDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxNQUFNLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxDQUFDO1NBQ3JD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SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxZQUFvQjtJQUM3QyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2hELE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNqQyxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsU0FBaUIsRUFBRSxNQUFXO0lBQ3JELElBQUksRUFBVSxDQUFDO0lBQ2YsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDO0lBQ3pDLElBQUksT0FBTyxFQUFFO1FBQ1gsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLFNBQVMsQ0FBQyxDQUFDO1FBQzNELEVBQUUsR0FBRyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5RSxJQUFJLEVBQUU7WUFBRSxPQUFPLEVBQUUsQ0FBQztLQUNuQjtJQUNELHVEQUF1RDtJQUN2RCx5RkFBeUY7SUFDekYsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFO1FBQ3ZELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQztLQUN6QjtJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELHdCQUF3QjtBQUN4QixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRztJQUNoQyxLQUFLLEVBQUUsS0FBSztDQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb3JlIH0gZnJvbSAnLi9jb3JlJztcclxuaW1wb3J0IHsgTWV0YWRhdGFTdG9yZSwgRW50aXR5VHlwZSwgQ29tcGxleFR5cGUsIERhdGFQcm9wZXJ0eSwgTmF2aWdhdGlvblByb3BlcnR5LCBBdXRvR2VuZXJhdGVkS2V5VHlwZSB9IGZyb20gJy4vZW50aXR5LW1ldGFkYXRhJztcclxuaW1wb3J0IHsgRGF0YVR5cGUgIH0gZnJvbSAnLi9kYXRhLXR5cGUnO1xyXG5pbXBvcnQgeyBWYWxpZGF0b3IgfSBmcm9tICcuL3ZhbGlkYXRlJztcclxuXHJcbmludGVyZmFjZSBJQXNzb2NpYXRpb24ge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBlbmQ6IElFbmRbXTtcclxuICByZWZlcmVudGlhbENvbnN0cmFpbnQ6IGFueTtcclxufVxyXG5cclxuaW50ZXJmYWNlIElFbmQge1xyXG4gIG11bHRpcGxpY2l0eTogc3RyaW5nO1xyXG4gIHR5cGU6IHN0cmluZztcclxuICByb2xlOiBzdHJpbmc7XHJcbn1cclxuXHJcbmNvbnN0IFJYX0NPTExFQ1RJT04gPSAgL0NvbGxlY3Rpb25cXCgoLiopXFwpLztcclxuXHJcbmZ1bmN0aW9uIHBhcnNlKG1ldGFkYXRhU3RvcmU6IE1ldGFkYXRhU3RvcmUsIHNjaGVtYXM6IGFueSwgYWx0TWV0YWRhdGE6IGFueSkge1xyXG5cclxuICBtZXRhZGF0YVN0b3JlLl9lbnRpdHlUeXBlUmVzb3VyY2VNYXAgPSB7fTtcclxuICBzY2hlbWFzID0gY29yZS50b0FycmF5KHNjaGVtYXMpO1xyXG4gIHNjaGVtYXMuZm9yRWFjaChmdW5jdGlvbiAoc2NoZW1hOiBhbnkpIHtcclxuICAgIGlmIChzY2hlbWEuY1NwYWNlT1NwYWNlTWFwcGluZykge1xyXG4gICAgICAvLyBXZWIgYXBpIG9ubHkgLSBub3QgYXZhaWwgaW4gT0RhdGEuXHJcbiAgICAgIC8vIFRPRE8gdGhyb3cgaW5mb3JtYXRpdmUgZXJyb3IgaWYgYWxyZWFkeSBwYXJzZWQgYW5kIGNvbnZlcnRlZCB0byBtYXAgb24gYSBwcmV2aW91cyBwYXNzXHJcbiAgICAgIGxldCBtYXBwaW5ncyA9IEpTT04ucGFyc2Uoc2NoZW1hLmNTcGFjZU9TcGFjZU1hcHBpbmcpO1xyXG4gICAgICBsZXQgbmV3TWFwID0ge307XHJcbiAgICAgIG1hcHBpbmdzLmZvckVhY2goZnVuY3Rpb24gKG1hcHBpbmc6IGFueSkge1xyXG4gICAgICAgIG5ld01hcFttYXBwaW5nWzBdXSA9IG1hcHBpbmdbMV07XHJcbiAgICAgIH0pO1xyXG4gICAgICBzY2hlbWEuY1NwYWNlT1NwYWNlTWFwcGluZyA9IG5ld01hcDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2NoZW1hLmVudGl0eUNvbnRhaW5lcikge1xyXG4gICAgICBjb3JlLnRvQXJyYXkoc2NoZW1hLmVudGl0eUNvbnRhaW5lcikuZm9yRWFjaChmdW5jdGlvbiAoY29udGFpbmVyKSB7XHJcbiAgICAgICAgY29yZS50b0FycmF5KGNvbnRhaW5lci5lbnRpdHlTZXQpLmZvckVhY2goZnVuY3Rpb24gKGVudGl0eVNldCkge1xyXG4gICAgICAgICAgbGV0IGVudGl0eVR5cGVOYW1lID0gcGFyc2VUeXBlTmFtZVdpdGhTY2hlbWEoZW50aXR5U2V0LmVudGl0eVR5cGUsIHNjaGVtYSkudHlwZU5hbWU7XHJcbiAgICAgICAgICBtZXRhZGF0YVN0b3JlLnNldEVudGl0eVR5cGVGb3JSZXNvdXJjZU5hbWUoZW50aXR5U2V0Lm5hbWUsIGVudGl0eVR5cGVOYW1lKTtcclxuICAgICAgICAgIG1ldGFkYXRhU3RvcmUuX2VudGl0eVR5cGVSZXNvdXJjZU1hcFtlbnRpdHlUeXBlTmFtZV0gPSBlbnRpdHlTZXQubmFtZTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcHJvY2VzcyBjb21wbGV4dHlwZXMgYmVmb3JlIGVudGl0eSB0eXBlcy5cclxuICAgIGlmIChzY2hlbWEuY29tcGxleFR5cGUpIHtcclxuICAgICAgY29yZS50b0FycmF5KHNjaGVtYS5jb21wbGV4VHlwZSkuZm9yRWFjaChmdW5jdGlvbiAoY3QpIHtcclxuICAgICAgICBwYXJzZUNzZGxDb21wbGV4VHlwZShjdCwgc2NoZW1hLCBtZXRhZGF0YVN0b3JlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAoc2NoZW1hLmVudGl0eVR5cGUpIHtcclxuICAgICAgY29yZS50b0FycmF5KHNjaGVtYS5lbnRpdHlUeXBlKS5mb3JFYWNoKGZ1bmN0aW9uIChldCkge1xyXG4gICAgICAgIHBhcnNlQ3NkbEVudGl0eVR5cGUoZXQsIHNjaGVtYSwgc2NoZW1hcywgbWV0YWRhdGFTdG9yZSk7XHJcblxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgfSk7XHJcbiAgbGV0IGJhZE5hdlByb3BzID0gbWV0YWRhdGFTdG9yZS5nZXRJbmNvbXBsZXRlTmF2aWdhdGlvblByb3BlcnRpZXMoKTtcclxuICBpZiAoYmFkTmF2UHJvcHMubGVuZ3RoID4gMCkge1xyXG4gICAgbGV0IG1zZyA9IGJhZE5hdlByb3BzLm1hcChmdW5jdGlvbiAobnBhKSB7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG5wYSkpIHtcclxuICAgICAgICByZXR1cm4gbnBhLm1hcChmdW5jdGlvbiAobnApIHtcclxuICAgICAgICAgIHJldHVybiBucC5wYXJlbnRUeXBlLm5hbWUgKyBcIjpcIiArIG5wLm5hbWU7XHJcbiAgICAgICAgfSkuam9pbignLCAnKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnBhLnBhcmVudFR5cGUubmFtZSArIFwiOlwiICsgbnBhLm5hbWU7XHJcbiAgICB9KS5qb2luKCcsICcpO1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW5jb21wbGV0ZSBuYXZpZ2F0aW9uIHByb3BlcnRpZXM6IFwiICsgbXNnKTtcclxuICB9XHJcbiAgaWYgKGFsdE1ldGFkYXRhKSB7XHJcbiAgICBtZXRhZGF0YVN0b3JlLmltcG9ydE1ldGFkYXRhKGFsdE1ldGFkYXRhLCB0cnVlKTtcclxuICB9XHJcbiAgcmV0dXJuIG1ldGFkYXRhU3RvcmU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlQ3NkbEVudGl0eVR5cGUoY3NkbEVudGl0eVR5cGU6IGFueSwgc2NoZW1hOiBhbnksIHNjaGVtYXM6IGFueSwgbWV0YWRhdGFTdG9yZTogTWV0YWRhdGFTdG9yZSkge1xyXG4gIGxldCBzaG9ydE5hbWUgPSBjc2RsRW50aXR5VHlwZS5uYW1lO1xyXG4gIGxldCBucyA9IGdldE5hbWVzcGFjZUZvcihzaG9ydE5hbWUsIHNjaGVtYSk7XHJcbiAgbGV0IGVudGl0eVR5cGUgPSBuZXcgRW50aXR5VHlwZSh7XHJcbiAgICBzaG9ydE5hbWU6IHNob3J0TmFtZSxcclxuICAgIG5hbWVzcGFjZTogbnMsXHJcbiAgICBpc0Fic3RyYWN0OiBjc2RsRW50aXR5VHlwZS5hYnN0cmFjdCAmJiBjc2RsRW50aXR5VHlwZS5hYnN0cmFjdCA9PT0gJ3RydWUnXHJcbiAgfSk7XHJcbiAgaWYgKGNzZGxFbnRpdHlUeXBlLmJhc2VUeXBlKSB7XHJcbiAgICBsZXQgYmFzZVR5cGVOYW1lID0gcGFyc2VUeXBlTmFtZVdpdGhTY2hlbWEoY3NkbEVudGl0eVR5cGUuYmFzZVR5cGUsIHNjaGVtYSkudHlwZU5hbWU7XHJcbiAgICBlbnRpdHlUeXBlLmJhc2VUeXBlTmFtZSA9IGJhc2VUeXBlTmFtZTtcclxuICAgIGxldCBiYXNlRW50aXR5VHlwZSA9IG1ldGFkYXRhU3RvcmUuX2dldFN0cnVjdHVyYWxUeXBlKGJhc2VUeXBlTmFtZSwgdHJ1ZSk7XHJcbiAgICBpZiAoYmFzZUVudGl0eVR5cGUpIHtcclxuICAgICAgY29tcGxldGVQYXJzZUNzZGxFbnRpdHlUeXBlKGVudGl0eVR5cGUsIGNzZGxFbnRpdHlUeXBlLCBzY2hlbWEsIHNjaGVtYXMsIG1ldGFkYXRhU3RvcmUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGRlZmVycmFscyA9IG1ldGFkYXRhU3RvcmUuX2RlZmVycmVkVHlwZXNbYmFzZVR5cGVOYW1lXTtcclxuICAgICAgaWYgKCFkZWZlcnJhbHMpIHtcclxuICAgICAgICBkZWZlcnJhbHMgPSBbXTtcclxuICAgICAgICBtZXRhZGF0YVN0b3JlLl9kZWZlcnJlZFR5cGVzW2Jhc2VUeXBlTmFtZV0gPSBkZWZlcnJhbHM7XHJcbiAgICAgIH1cclxuICAgICAgZGVmZXJyYWxzLnB1c2goeyBlbnRpdHlUeXBlOiBlbnRpdHlUeXBlLCBjc2RsRW50aXR5VHlwZTogY3NkbEVudGl0eVR5cGUgfSk7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGNvbXBsZXRlUGFyc2VDc2RsRW50aXR5VHlwZShlbnRpdHlUeXBlLCBjc2RsRW50aXR5VHlwZSwgc2NoZW1hLCBzY2hlbWFzLCBtZXRhZGF0YVN0b3JlKTtcclxuICB9XHJcbiAgLy8gZW50aXR5VHlwZSBtYXkgb3IgbWF5IG5vdCBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIG1ldGFkYXRhU3RvcmUgYXQgdGhpcyBwb2ludC5cclxuICByZXR1cm4gZW50aXR5VHlwZTtcclxuXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbXBsZXRlUGFyc2VDc2RsRW50aXR5VHlwZShlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCBjc2RsRW50aXR5VHlwZTogYW55LCBzY2hlbWE6IGFueSwgc2NoZW1hczogYW55LCBtZXRhZGF0YVN0b3JlOiBNZXRhZGF0YVN0b3JlKSB7XHJcbiAgbGV0IGtleU5hbWVzT25TZXJ2ZXIgPSBjc2RsRW50aXR5VHlwZS5rZXkgPyBjb3JlLnRvQXJyYXkoY3NkbEVudGl0eVR5cGUua2V5LnByb3BlcnR5UmVmKS5tYXAoY29yZS5wbHVjayhcIm5hbWVcIikpIDogW107XHJcblxyXG4gIGNvcmUudG9BcnJheShjc2RsRW50aXR5VHlwZS5wcm9wZXJ0eSkuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xyXG4gICAgcGFyc2VDc2RsRGF0YVByb3BlcnR5KGVudGl0eVR5cGUsIHByb3AsIHNjaGVtYSwga2V5TmFtZXNPblNlcnZlcik7XHJcbiAgfSk7XHJcblxyXG4gIGNvcmUudG9BcnJheShjc2RsRW50aXR5VHlwZS5uYXZpZ2F0aW9uUHJvcGVydHkpLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcclxuICAgIHBhcnNlQ3NkbE5hdlByb3BlcnR5KGVudGl0eVR5cGUsIHByb3AsIHNjaGVtYSwgc2NoZW1hcyk7XHJcbiAgfSk7XHJcblxyXG4gIG1ldGFkYXRhU3RvcmUuYWRkRW50aXR5VHlwZShlbnRpdHlUeXBlKTtcclxuICBlbnRpdHlUeXBlLmRlZmF1bHRSZXNvdXJjZU5hbWUgPSBtZXRhZGF0YVN0b3JlLl9lbnRpdHlUeXBlUmVzb3VyY2VNYXBbZW50aXR5VHlwZS5uYW1lXTtcclxuXHJcbiAgbGV0IGRlZmVycmVkVHlwZXMgPSBtZXRhZGF0YVN0b3JlLl9kZWZlcnJlZFR5cGVzO1xyXG4gIGxldCBkZWZlcnJhbHMgPSBkZWZlcnJlZFR5cGVzW2VudGl0eVR5cGUubmFtZV07XHJcbiAgaWYgKGRlZmVycmFscykge1xyXG4gICAgZGVmZXJyYWxzLmZvckVhY2goZnVuY3Rpb24gKGQ6IGFueSkge1xyXG4gICAgICBjb21wbGV0ZVBhcnNlQ3NkbEVudGl0eVR5cGUoZC5lbnRpdHlUeXBlLCBkLmNzZGxFbnRpdHlUeXBlLCBzY2hlbWEsIHNjaGVtYXMsIG1ldGFkYXRhU3RvcmUpO1xyXG4gICAgfSk7XHJcbiAgICBkZWxldGUgZGVmZXJyZWRUeXBlc1tlbnRpdHlUeXBlLm5hbWVdO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlQ3NkbENvbXBsZXhUeXBlKGNzZGxDb21wbGV4VHlwZTogYW55LCBzY2hlbWE6IGFueSwgbWV0YWRhdGFTdG9yZTogTWV0YWRhdGFTdG9yZSkge1xyXG4gIGxldCBzaG9ydE5hbWUgPSBjc2RsQ29tcGxleFR5cGUubmFtZTtcclxuICBsZXQgbnMgPSBnZXROYW1lc3BhY2VGb3Ioc2hvcnROYW1lLCBzY2hlbWEpO1xyXG4gIGxldCBjb21wbGV4VHlwZSA9IG5ldyBDb21wbGV4VHlwZSh7XHJcbiAgICBzaG9ydE5hbWU6IHNob3J0TmFtZSxcclxuICAgIG5hbWVzcGFjZTogbnNcclxuICB9KTtcclxuXHJcbiAgY29yZS50b0FycmF5KGNzZGxDb21wbGV4VHlwZS5wcm9wZXJ0eSkuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xyXG4gICAgcGFyc2VDc2RsRGF0YVByb3BlcnR5KGNvbXBsZXhUeXBlLCBwcm9wLCBzY2hlbWEpO1xyXG4gIH0pO1xyXG5cclxuICBtZXRhZGF0YVN0b3JlLmFkZEVudGl0eVR5cGUoY29tcGxleFR5cGUpO1xyXG4gIHJldHVybiBjb21wbGV4VHlwZTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VDc2RsRGF0YVByb3BlcnR5KHBhcmVudFR5cGU6IEVudGl0eVR5cGUgfCBDb21wbGV4VHlwZSwgY3NkbFByb3BlcnR5OiBhbnksIHNjaGVtYTogYW55LCBrZXlOYW1lc09uU2VydmVyPzogc3RyaW5nW10pIHtcclxuICBsZXQgZHA6IERhdGFQcm9wZXJ0eSB8IHVuZGVmaW5lZDtcclxuICBsZXQgdHlwZVBhcnRzID0gY3NkbFByb3BlcnR5LnR5cGUuc3BsaXQoXCIuXCIpO1xyXG4gIC8vIEJvdGggdGVzdHMgb24gdHlwZVBhcnRzIGFyZSBuZWNlc3NhcnkgYmVjYXVzZSBvZiBkaWZmZXJpbmcgbWV0YWRhdGEgY29udmVudGlvbnMgZm9yIE9EYXRhIGFuZCBFZG14IGZlZWRzLlxyXG4gIGlmICh0eXBlUGFydHNbMF0uZW5kc1dpdGgoXCJFZG1cIikgJiYgdHlwZVBhcnRzLmxlbmd0aCA9PT0gMikge1xyXG4gICAgZHAgPSBwYXJzZUNzZGxTaW1wbGVQcm9wZXJ0eShwYXJlbnRUeXBlLCBjc2RsUHJvcGVydHksIGtleU5hbWVzT25TZXJ2ZXIpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBpZiAoaXNFbnVtVHlwZShjc2RsUHJvcGVydHksIHNjaGVtYSkpIHtcclxuICAgICAgZHAgPSBwYXJzZUNzZGxTaW1wbGVQcm9wZXJ0eShwYXJlbnRUeXBlLCBjc2RsUHJvcGVydHksIGtleU5hbWVzT25TZXJ2ZXIpO1xyXG4gICAgICBpZiAoZHApIHtcclxuICAgICAgICBkcC5lbnVtVHlwZSA9IGNzZGxQcm9wZXJ0eS50eXBlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkcCA9IHBhcnNlQ3NkbENvbXBsZXhQcm9wZXJ0eShwYXJlbnRUeXBlLCBjc2RsUHJvcGVydHksIHNjaGVtYSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmIChkcCkge1xyXG4gICAgcGFyZW50VHlwZS5fYWRkUHJvcGVydHlDb3JlKGRwKTtcclxuICAgIGFkZFZhbGlkYXRvcnMoZHApO1xyXG4gIH1cclxuICByZXR1cm4gZHA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlQ3NkbFNpbXBsZVByb3BlcnR5KHBhcmVudFR5cGU6IEVudGl0eVR5cGUgfCBDb21wbGV4VHlwZSwgY3NkbFByb3BlcnR5OiBhbnksIGtleU5hbWVzT25TZXJ2ZXI/OiBzdHJpbmdbXSkge1xyXG4gIGxldCBpc0NvbGxlY3Rpb25UeXBlID0gaXNDb2xsZWN0aW9uKGNzZGxQcm9wZXJ0eS50eXBlKTtcclxuICBsZXQgcHJvcGVydHlUeXBlID0gZ2V0Q29sbGVjdGlvblR5cGUoY3NkbFByb3BlcnR5LnR5cGUpIHx8IGNzZGxQcm9wZXJ0eS50eXBlO1xyXG4gIGxldCBkYXRhVHlwZSA9IERhdGFUeXBlLmZyb21FZG1EYXRhVHlwZShwcm9wZXJ0eVR5cGUpO1xyXG4gIGlmIChkYXRhVHlwZSA9PSBudWxsKSB7XHJcbiAgICBwYXJlbnRUeXBlLndhcm5pbmdzLnB1c2goXCJVbmFibGUgdG8gcmVjb2duaXplIERhdGFUeXBlIGZvciBwcm9wZXJ0eTogXCIgKyBjc2RsUHJvcGVydHkubmFtZSArIFwiIERhdGVUeXBlOiBcIiArIGNzZGxQcm9wZXJ0eS50eXBlKTtcclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG4gIGxldCBpc051bGxhYmxlID0gY3NkbFByb3BlcnR5Lm51bGxhYmxlID09PSAndHJ1ZScgfHwgY3NkbFByb3BlcnR5Lm51bGxhYmxlID09IG51bGw7XHJcbiAgLy8gbGV0IGZpeGVkTGVuZ3RoID0gY3NkbFByb3BlcnR5LmZpeGVkTGVuZ3RoID8gY3NkbFByb3BlcnR5LmZpeGVkTGVuZ3RoID09PSB0cnVlIDogdW5kZWZpbmVkO1xyXG4gIGxldCBpc1BhcnRPZktleSA9IGtleU5hbWVzT25TZXJ2ZXIgIT0gbnVsbCAmJiBrZXlOYW1lc09uU2VydmVyLmluZGV4T2YoY3NkbFByb3BlcnR5Lm5hbWUpID49IDA7XHJcbiAgaWYgKGlzUGFydE9mS2V5ICYmIHBhcmVudFR5cGUgaW5zdGFuY2VvZiBFbnRpdHlUeXBlICYmIHBhcmVudFR5cGUuYXV0b0dlbmVyYXRlZEtleVR5cGUgPT09IEF1dG9HZW5lcmF0ZWRLZXlUeXBlLk5vbmUpIHtcclxuICAgIGlmIChpc0lkZW50aXR5UHJvcGVydHkoY3NkbFByb3BlcnR5KSkge1xyXG4gICAgICBwYXJlbnRUeXBlLmF1dG9HZW5lcmF0ZWRLZXlUeXBlID0gQXV0b0dlbmVyYXRlZEtleVR5cGUuSWRlbnRpdHk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIFRPRE86IG5pdCAtIGRvbid0IHNldCBtYXhMZW5ndGggaWYgbnVsbDtcclxuICBsZXQgbWF4TGVuZ3RoID0gY3NkbFByb3BlcnR5Lm1heExlbmd0aDtcclxuICBtYXhMZW5ndGggPSAobWF4TGVuZ3RoID09IG51bGwgfHwgbWF4TGVuZ3RoID09PSBcIk1heFwiKSA/IG51bGwgOiBwYXJzZUludChtYXhMZW5ndGgsIDEwKTtcclxuICAvLyBjYW4ndCBzZXQgdGhlIG5hbWUgdW50aWwgd2UgZ28gdGhydSBuYW1pbmdDb252ZW50aW9ucyBhbmQgdGhlc2UgbmVlZCB0aGUgZHAuXHJcblxyXG4gIGxldCBkcCA9IG5ldyBEYXRhUHJvcGVydHkoe1xyXG4gICAgbmFtZU9uU2VydmVyOiBjc2RsUHJvcGVydHkubmFtZSxcclxuICAgIGRhdGFUeXBlOiBkYXRhVHlwZSxcclxuICAgIGlzTnVsbGFibGU6IGlzTnVsbGFibGUsXHJcbiAgICBpc1BhcnRPZktleTogaXNQYXJ0T2ZLZXksXHJcbiAgICBpc1NjYWxhcjogIWlzQ29sbGVjdGlvblR5cGUsXHJcbiAgICBtYXhMZW5ndGg6IG1heExlbmd0aCxcclxuICAgIGRlZmF1bHRWYWx1ZTogY3NkbFByb3BlcnR5LmRlZmF1bHRWYWx1ZSxcclxuICAgIC8vIGZpeGVkTGVuZ3RoOiBmaXhlZExlbmd0aCxcclxuICAgIGNvbmN1cnJlbmN5TW9kZTogY3NkbFByb3BlcnR5LmNvbmN1cnJlbmN5TW9kZVxyXG4gIH0pO1xyXG5cclxuICBpZiAoZGF0YVR5cGUgPT09IERhdGFUeXBlLlVuZGVmaW5lZCkge1xyXG4gICAgZHAucmF3VHlwZU5hbWUgPSBjc2RsUHJvcGVydHkudHlwZTtcclxuICB9XHJcbiAgcmV0dXJuIGRwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUNzZGxDb21wbGV4UHJvcGVydHkocGFyZW50VHlwZTogRW50aXR5VHlwZSB8IENvbXBsZXhUeXBlLCBjc2RsUHJvcGVydHk6IGFueSwgc2NoZW1hOiBhbnkpIHtcclxuXHJcbiAgLy8gQ29tcGxleCBwcm9wZXJ0aWVzIGFyZSBuZXZlciBudWxsYWJsZSAoIHBlciBFRiBzcGVjcylcclxuICAvLyBsZXQgaXNOdWxsYWJsZSA9IGNzZGxQcm9wZXJ0eS5udWxsYWJsZSA9PT0gJ3RydWUnIHx8IGNzZGxQcm9wZXJ0eS5udWxsYWJsZSA9PSBudWxsO1xyXG4gIC8vIGxldCBjb21wbGV4VHlwZU5hbWUgPSBjc2RsUHJvcGVydHkudHlwZS5zcGxpdChcIkVkbS5cIilbMV07XHJcbiAgbGV0IGlzQ29sbGVjdGlvblR5cGUgPSBpc0NvbGxlY3Rpb24oY3NkbFByb3BlcnR5LnR5cGUpO1xyXG4gIGxldCBwcm9wZXJ0eVR5cGUgPSBnZXRDb2xsZWN0aW9uVHlwZShjc2RsUHJvcGVydHkudHlwZSkgfHwgY3NkbFByb3BlcnR5LnR5cGU7XHJcbiAgbGV0IGNvbXBsZXhUeXBlTmFtZSA9IHBhcnNlVHlwZU5hbWVXaXRoU2NoZW1hKHByb3BlcnR5VHlwZSwgc2NoZW1hKS50eXBlTmFtZTtcclxuICAvLyBjYW4ndCBzZXQgdGhlIG5hbWUgdW50aWwgd2UgZ28gdGhydSBuYW1pbmdDb252ZW50aW9ucyBhbmQgdGhlc2UgbmVlZCB0aGUgZHAuXHJcbiAgbGV0IGRwID0gbmV3IERhdGFQcm9wZXJ0eSh7XHJcbiAgICBuYW1lT25TZXJ2ZXI6IGNzZGxQcm9wZXJ0eS5uYW1lLFxyXG4gICAgY29tcGxleFR5cGVOYW1lOiBjb21wbGV4VHlwZU5hbWUsXHJcbiAgICBpc051bGxhYmxlOiBmYWxzZSxcclxuICAgIGlzU2NhbGFyOiAhaXNDb2xsZWN0aW9uVHlwZVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gZHA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlQ3NkbE5hdlByb3BlcnR5KGVudGl0eVR5cGU6IEVudGl0eVR5cGUsIGNzZGxQcm9wZXJ0eTogYW55LCBzY2hlbWE6IGFueSwgc2NoZW1hczogYW55W10pIHtcclxuICBsZXQgYXNzb2NpYXRpb24gPSBnZXRBc3NvY2lhdGlvbihjc2RsUHJvcGVydHksIHNjaGVtYSwgc2NoZW1hcyk7XHJcbiAgaWYgKCFhc3NvY2lhdGlvbikge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIHJlc29sdmUgRm9yZWlnbiBLZXkgQXNzb2NpYXRpb246IFwiICsgY3NkbFByb3BlcnR5LnJlbGF0aW9uc2hpcCk7XHJcbiAgfVxyXG4gIGxldCB0b0VuZCA9IGNvcmUuYXJyYXlGaXJzdChhc3NvY2lhdGlvbi5lbmQsIChhc3NvY0VuZCkgPT4ge1xyXG4gICAgcmV0dXJuIGFzc29jRW5kLnJvbGUgPT09IGNzZGxQcm9wZXJ0eS50b1JvbGU7XHJcbiAgfSk7XHJcblxyXG4gIGxldCBpc1NjYWxhciA9IHRvRW5kIS5tdWx0aXBsaWNpdHkgIT09IFwiKlwiO1xyXG4gIGxldCBkYXRhVHlwZSA9IHBhcnNlVHlwZU5hbWVXaXRoU2NoZW1hKHRvRW5kIS50eXBlLCBzY2hlbWEpLnR5cGVOYW1lO1xyXG5cclxuICBsZXQgY29uc3RyYWludCA9IGFzc29jaWF0aW9uLnJlZmVyZW50aWFsQ29uc3RyYWludDtcclxuICBpZiAoIWNvbnN0cmFpbnQpIHtcclxuICAgIC8vIFRPRE86IFJldmlzaXQgdGhpcyBsYXRlciAtIHJpZ2h0IG5vdyB3ZSBqdXN0IGlnbm9yZSBtYW55LW1hbnkgYW5kIGFzc29jcyB3aXRoIG1pc3NpbmcgY29uc3RyYWludHMuXHJcblxyXG4gICAgLy8gVGhpbmsgYWJvdXQgYWRkaW5nIHRoaXMgYmFjayBsYXRlci5cclxuICAgIGlmIChhc3NvY2lhdGlvbi5lbmRbMF0ubXVsdGlwbGljaXR5ID09PSBcIipcIiAmJiBhc3NvY2lhdGlvbi5lbmRbMV0ubXVsdGlwbGljaXR5ID09PSBcIipcIikge1xyXG4gICAgICAvLyBpZ25vcmUgbWFueSB0byBtYW55IHJlbGF0aW9ucyBmb3Igbm93XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEZvciBub3cgYXNzdW1lIGl0IHdpbGwgYmUgc2V0IGxhdGVyIGRpcmVjdGx5IG9uIHRoZSBjbGllbnQuXHJcbiAgICAgIC8vIG90aGVyIGFsdGVybmF0aXZlIGlzIHRvIHRocm93IGFuIGVycm9yOlxyXG4gICAgICAvLyB0aHJvdyBuZXcgRXJyb3IoXCJGb3JlaWduIEtleSBBc3NvY2lhdGlvbnMgbXVzdCBiZSB0dXJuZWQgb24gZm9yIHRoaXMgbW9kZWxcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGxldCBjZmcgPSB7XHJcbiAgICBuYW1lT25TZXJ2ZXI6IGNzZGxQcm9wZXJ0eS5uYW1lLFxyXG4gICAgZW50aXR5VHlwZU5hbWU6IGRhdGFUeXBlLFxyXG4gICAgaXNTY2FsYXI6IGlzU2NhbGFyLFxyXG4gICAgYXNzb2NpYXRpb25OYW1lOiBhc3NvY2lhdGlvbi5uYW1lLFxyXG4gIH07XHJcblxyXG4gIGlmIChjb25zdHJhaW50KSB7XHJcbiAgICBsZXQgcHJpbmNpcGFsID0gY29uc3RyYWludC5wcmluY2lwYWw7XHJcbiAgICBsZXQgZGVwZW5kZW50ID0gY29uc3RyYWludC5kZXBlbmRlbnQ7XHJcblxyXG4gICAgbGV0IHByb3BSZWZzID0gY29yZS50b0FycmF5KGRlcGVuZGVudC5wcm9wZXJ0eVJlZik7XHJcbiAgICBsZXQgZmtOYW1lcyA9IHByb3BSZWZzLm1hcChjb3JlLnBsdWNrKFwibmFtZVwiKSk7XHJcbiAgICBpZiAoY3NkbFByb3BlcnR5LmZyb21Sb2xlID09PSBwcmluY2lwYWwucm9sZSkge1xyXG4gICAgICAoY2ZnIGFzIGFueSkuaW52Rm9yZWlnbktleU5hbWVzT25TZXJ2ZXIgPSBma05hbWVzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gd2lsbCBiZSB1c2VkIGxhdGVyIGJ5IG5wLl91cGRhdGVcclxuICAgICAgKGNmZyBhcyBhbnkpLmZvcmVpZ25LZXlOYW1lc09uU2VydmVyID0gZmtOYW1lcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxldCBucCA9IG5ldyBOYXZpZ2F0aW9uUHJvcGVydHkoY2ZnKTtcclxuICBlbnRpdHlUeXBlLl9hZGRQcm9wZXJ0eUNvcmUobnApO1xyXG4gIHJldHVybiBucDtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNDb2xsZWN0aW9uKHByb3BlcnR5VHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIFJYX0NPTExFQ1RJT04udGVzdChwcm9wZXJ0eVR5cGUpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0VudW1UeXBlKGNzZGxQcm9wZXJ0eTogYW55LCBzY2hlbWE6IGFueSkge1xyXG4gIGlmIChzY2hlbWEuZW51bVR5cGUpIHJldHVybiBpc0VkbXhFbnVtVHlwZShjc2RsUHJvcGVydHksIHNjaGVtYSk7XHJcbiAgZWxzZSBpZiAoc2NoZW1hLmV4dGVuc2lvbnMpIHJldHVybiBpc09EYXRhRW51bVR5cGUoY3NkbFByb3BlcnR5LCBzY2hlbWEpO1xyXG4gIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0VkbXhFbnVtVHlwZShjc2RsUHJvcGVydHk6IGFueSwgc2NoZW1hOiBhbnkpIHtcclxuICBsZXQgZW51bVR5cGVzID0gY29yZS50b0FycmF5KHNjaGVtYS5lbnVtVHlwZSk7XHJcbiAgbGV0IHByb3BlcnR5VHlwZSA9IGdldENvbGxlY3Rpb25UeXBlKGNzZGxQcm9wZXJ0eS50eXBlKSB8fCBjc2RsUHJvcGVydHkudHlwZTtcclxuICBsZXQgdHlwZVBhcnRzID0gcHJvcGVydHlUeXBlLnNwbGl0KFwiLlwiKTtcclxuICBsZXQgYmFzZVR5cGVOYW1lID0gdHlwZVBhcnRzW3R5cGVQYXJ0cy5sZW5ndGggLSAxXTtcclxuICByZXR1cm4gZW51bVR5cGVzLnNvbWUoZnVuY3Rpb24gKGVudW1UeXBlKSB7XHJcbiAgICByZXR1cm4gZW51bVR5cGUubmFtZSA9PT0gYmFzZVR5cGVOYW1lO1xyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc09EYXRhRW51bVR5cGUoY3NkbFByb3BlcnR5OiBhbnksIHNjaGVtYTogYW55KSB7XHJcbiAgbGV0IGVudW1UeXBlcyA9IHNjaGVtYS5leHRlbnNpb25zLmZpbHRlcigoZXh0OiBhbnkpID0+IHtcclxuICAgIHJldHVybiBleHQubmFtZSA9PT0gXCJFbnVtVHlwZVwiO1xyXG4gIH0pO1xyXG4gIGxldCBwcm9wZXJ0eVR5cGUgPSBnZXRDb2xsZWN0aW9uVHlwZShjc2RsUHJvcGVydHkudHlwZSkgfHwgY3NkbFByb3BlcnR5LnR5cGU7XHJcbiAgbGV0IHR5cGVQYXJ0cyA9IHByb3BlcnR5VHlwZS5zcGxpdChcIi5cIik7XHJcbiAgbGV0IGJhc2VUeXBlTmFtZSA9IHR5cGVQYXJ0c1t0eXBlUGFydHMubGVuZ3RoIC0gMV07XHJcbiAgcmV0dXJuIGVudW1UeXBlcy5zb21lKChlbnVtVHlwZTogYW55KSA9PiB7XHJcbiAgICByZXR1cm4gZW51bVR5cGUuYXR0cmlidXRlcy5zb21lKChhdHRyOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIGF0dHIubmFtZSA9PT0gXCJOYW1lXCIgJiYgYXR0ci52YWx1ZSA9PT0gYmFzZVR5cGVOYW1lO1xyXG4gICAgfSk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZFZhbGlkYXRvcnMoZGF0YVByb3BlcnR5OiBEYXRhUHJvcGVydHkpIHtcclxuICBsZXQgdHlwZVZhbGlkYXRvcjogVmFsaWRhdG9yO1xyXG4gIGlmICghZGF0YVByb3BlcnR5LmlzTnVsbGFibGUpIHtcclxuICAgIGRhdGFQcm9wZXJ0eS52YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9yLnJlcXVpcmVkKCkpO1xyXG4gIH1cclxuXHJcbiAgaWYgKGRhdGFQcm9wZXJ0eS5pc0NvbXBsZXhQcm9wZXJ0eSkgcmV0dXJuO1xyXG5cclxuICBpZiAoZGF0YVByb3BlcnR5LmRhdGFUeXBlID09PSBEYXRhVHlwZS5TdHJpbmcpIHtcclxuICAgIGlmIChkYXRhUHJvcGVydHkubWF4TGVuZ3RoKSB7XHJcbiAgICAgIGxldCB2YWxpZGF0b3JBcmdzID0geyBtYXhMZW5ndGg6IGRhdGFQcm9wZXJ0eS5tYXhMZW5ndGggfTtcclxuICAgICAgdHlwZVZhbGlkYXRvciA9IFZhbGlkYXRvci5tYXhMZW5ndGgodmFsaWRhdG9yQXJncyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0eXBlVmFsaWRhdG9yID0gVmFsaWRhdG9yLnN0cmluZygpO1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICAgIGxldCB2YWxpZGF0b3JDdG9yID0gKGRhdGFQcm9wZXJ0eS5kYXRhVHlwZSBhcyBhbnkpLnZhbGlkYXRvckN0b3I7XHJcbiAgICAgIGlmICghdmFsaWRhdG9yQ3RvcikgcmV0dXJuO1xyXG4gICAgICB0eXBlVmFsaWRhdG9yID0gdmFsaWRhdG9yQ3RvcigpO1xyXG4gIH1cclxuXHJcbiAgZGF0YVByb3BlcnR5LnZhbGlkYXRvcnMucHVzaCh0eXBlVmFsaWRhdG9yKTtcclxuXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzSWRlbnRpdHlQcm9wZXJ0eShjc2RsUHJvcGVydHk6IGFueSkge1xyXG4gIC8vIHNlZSBpZiB3ZWIgYXBpIGZlZWRcclxuICBsZXQgcHJvcE5hbWUgPSBjb3JlLmFycmF5Rmlyc3QoT2JqZWN0LmtleXMoY3NkbFByb3BlcnR5KSwgKHBuKSA9PiB7XHJcbiAgICByZXR1cm4gcG4uaW5kZXhPZihcIlN0b3JlR2VuZXJhdGVkUGF0dGVyblwiKSA+PSAwO1xyXG4gIH0pO1xyXG4gIGlmIChwcm9wTmFtZSkge1xyXG4gICAgcmV0dXJuIChjc2RsUHJvcGVydHlbcHJvcE5hbWVdID09PSBcIklkZW50aXR5XCIpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBzZWUgaWYgT2RhdGEgZmVlZFxyXG4gICAgbGV0IGV4dGVuc2lvbnMgPSBjc2RsUHJvcGVydHkuZXh0ZW5zaW9ucztcclxuICAgIGlmICghZXh0ZW5zaW9ucykge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBsZXQgaWRlbnRpdHlFeHRuID0gY29yZS5hcnJheUZpcnN0KGV4dGVuc2lvbnMsIChleHRlbnNpb24pID0+IHtcclxuICAgICAgcmV0dXJuIGV4dGVuc2lvbi5uYW1lID09PSBcIlN0b3JlR2VuZXJhdGVkUGF0dGVyblwiICYmIGV4dGVuc2lvbi52YWx1ZSA9PT0gXCJJZGVudGl0eVwiO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gISFpZGVudGl0eUV4dG47XHJcbiAgfVxyXG59XHJcblxyXG4vLyBGYXN0IHZlcnNpb25cclxuLy8gbnA6IHNjaGVtYS5lbnRpdHlUeXBlW10ubmF2aWdhdGlvblByb3BlcnR5LnJlbGF0aW9uc2hpcCAtPiBzY2hlbWEuYXNzb2NpYXRpb25cclxuLy8gICBtYXRjaCggc2hvcnROYW1lKG5wLnJlbGF0aW9uc2hpcCkgPT0gc2NoZW1hLmFzc29jaWF0aW9uW10ubmFtZVxyXG4vLyAgICAgIC0tPiBhc3NvY2lhdGlvbl9fXHJcblxyXG4vLyBDb3JyZWN0IHZlcnNpb25cclxuLy8gbnA6IHNjaGVtYS5lbnRpdHlUeXBlW10ubmF2aWdhdGlvblByb3BlcnR5LnJlbGF0aW9uc2hpcCAtPiBzY2hlbWEuYXNzb2NpYXRpb25cclxuLy8gICBtYXRjaCggbnAucmVsYXRpb25zaGlwID09IHNjaGVtYS5lbnRpdHlDb250YWluZXJbMF0uYXNzb2NpYXRpb25TZXRbXS5hc3NvY2lhdGlvbiApXHJcbi8vICAgICAgLT4gYXNzb2NpYXRpb25TZXQubmFtZVxyXG4vLyAgIG1hdGNoICggYXNzb2NpYXRpb25TZXQubmFtZSA9PSBzY2hlbWEuYXNzb2NpYXRpb25bXS5uYW1lIClcclxuLy8gICAgICAtPiBhc3NvY2lhdGlvblxyXG5cclxuZnVuY3Rpb24gZ2V0QXNzb2NpYXRpb24oY3NkbE5hdlByb3BlcnR5OiBhbnksIGNvbnRhaW5pbmdTY2hlbWE6IGFueSwgc2NoZW1hczogYW55W10pIHtcclxuICBsZXQgYXNzb2NGdWxsTmFtZSA9IHBhcnNlVHlwZU5hbWVXaXRoU2NoZW1hKGNzZGxOYXZQcm9wZXJ0eS5yZWxhdGlvbnNoaXAsIGNvbnRhaW5pbmdTY2hlbWEpO1xyXG4gIGxldCBhc3NvY05hbWVzcGFjZSA9IGFzc29jRnVsbE5hbWUubmFtZXNwYWNlO1xyXG4gIGxldCBhc3NvY1NjaGVtYSA9IGNvcmUuYXJyYXlGaXJzdChzY2hlbWFzLCAoc2NoZW1hKSA9PiB7XHJcbiAgICByZXR1cm4gc2NoZW1hLm5hbWVzcGFjZSA9PT0gYXNzb2NOYW1lc3BhY2U7XHJcbiAgfSk7XHJcbiAgaWYgKCFhc3NvY1NjaGVtYSkgcmV0dXJuIG51bGw7XHJcblxyXG4gIGxldCBhc3NvY05hbWUgPSBhc3NvY0Z1bGxOYW1lLnNob3J0VHlwZU5hbWU7XHJcbiAgbGV0IGFzc29jcyA9IGFzc29jU2NoZW1hLmFzc29jaWF0aW9uO1xyXG4gIGlmICghYXNzb2NzKSByZXR1cm4gbnVsbDtcclxuICBpZiAoIUFycmF5LmlzQXJyYXkoYXNzb2NzKSkge1xyXG4gICAgYXNzb2NzID0gW2Fzc29jc107XHJcbiAgfVxyXG4gIGxldCBhc3NvY2lhdGlvbiA9IGNvcmUuYXJyYXlGaXJzdChhc3NvY3MsIChhc3NvYykgPT4ge1xyXG4gICAgcmV0dXJuIGFzc29jLm5hbWUgPT09IGFzc29jTmFtZTtcclxuICB9KTtcclxuICByZXR1cm4gYXNzb2NpYXRpb24gYXMgSUFzc29jaWF0aW9uO1xyXG59XHJcblxyXG4vLyBzY2hlbWEgaXMgb25seSBuZWVkZWQgZm9yIG5hdlByb3BlcnR5IHR5cGUgbmFtZVxyXG5mdW5jdGlvbiBwYXJzZVR5cGVOYW1lV2l0aFNjaGVtYShlbnRpdHlUeXBlTmFtZTogc3RyaW5nLCBzY2hlbWE6IGFueSkge1xyXG4gIGxldCByZXN1bHQgPSBNZXRhZGF0YVN0b3JlLnBhcnNlVHlwZU5hbWUoZW50aXR5VHlwZU5hbWUpO1xyXG4gIGlmIChzY2hlbWEgJiYgc2NoZW1hLmNTcGFjZU9TcGFjZU1hcHBpbmcpIHtcclxuICAgIGxldCBucyA9IGdldE5hbWVzcGFjZUZvcihyZXN1bHQhLnNob3J0VHlwZU5hbWUsIHNjaGVtYSk7XHJcbiAgICBpZiAobnMpIHtcclxuICAgICAgcmVzdWx0ID0gTWV0YWRhdGFTdG9yZS5tYWtlVHlwZUhhc2gocmVzdWx0IS5zaG9ydFR5cGVOYW1lLCBucyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldENvbGxlY3Rpb25UeXBlKHByb3BlcnR5VHlwZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICBjb25zdCBtYXRjaCA9IHByb3BlcnR5VHlwZS5tYXRjaChSWF9DT0xMRUNUSU9OKTtcclxuICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXSA6IG51bGw7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldE5hbWVzcGFjZUZvcihzaG9ydE5hbWU6IHN0cmluZywgc2NoZW1hOiBhbnkpIHtcclxuICBsZXQgbnM6IHN0cmluZztcclxuICBsZXQgbWFwcGluZyA9IHNjaGVtYS5jU3BhY2VPU3BhY2VNYXBwaW5nO1xyXG4gIGlmIChtYXBwaW5nKSB7XHJcbiAgICBsZXQgZnVsbE5hbWUgPSBtYXBwaW5nW3NjaGVtYS5uYW1lc3BhY2UgKyBcIi5cIiArIHNob3J0TmFtZV07XHJcbiAgICBucyA9IGZ1bGxOYW1lICYmIGZ1bGxOYW1lLnN1YnN0cigwLCBmdWxsTmFtZS5sZW5ndGggLSAoc2hvcnROYW1lLmxlbmd0aCArIDEpKTtcclxuICAgIGlmIChucykgcmV0dXJuIG5zO1xyXG4gIH1cclxuICAvLyBpZiBzY2hlbWEgZG9lcyBub3QgYWxzbyBoYXZlIGFuIGVudGl0eVR5cGUgbm9kZSB0aGVuXHJcbiAgLy8gdGhpcyBpcyBhbiBXZWJBcGkyIE9EYXRhIHNjaGVtYSB3aGljaCBpcyB1c3VhbGx5IGVxdWFsIHRvICdEZWZhdWx0Jzsgd2hpY2ggaXMgdXNlbGVzcy5cclxuICBpZiAoc2NoZW1hLmVudGl0eVR5cGUgfHwgc2NoZW1hLm5hbWVzcGFjZSAhPT0gJ0RlZmF1bHQnKSB7XHJcbiAgICByZXR1cm4gc2NoZW1hLm5hbWVzcGFjZTtcclxuICB9XHJcbiAgcmV0dXJuIG51bGw7XHJcbn1cclxuXHJcbi8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG5leHBvcnQgY29uc3QgQ3NkbE1ldGFkYXRhUGFyc2VyID0ge1xyXG4gIHBhcnNlOiBwYXJzZVxyXG59O1xyXG4iXX0=
|