breeze-client 2.1.6-mjs → 2.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/adapter-ajax-angularjs/{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 +14231 -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 +503 -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 +510 -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/{esm2022/src/naming-convention.mjs → esm5/src/naming-convention.js} +29 -35
- 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} +1624 -2073
- 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 +13953 -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 +11 -93
- package/src/abstract-data-service-adapter.d.ts +20 -0
- 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 +18 -4
- 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 -294
- 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 -507
- 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 -1005
- 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/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,503 @@
|
|
|
1
|
+
import { core } from './core';
|
|
2
|
+
import { BreezeEnum } from './enum';
|
|
3
|
+
import { Validator } from './validate';
|
|
4
|
+
let _localTimeRegex = /.\d{3}$/;
|
|
5
|
+
/**
|
|
6
|
+
DataType is an 'Enum' containing all of the supported data types.
|
|
7
|
+
@dynamic
|
|
8
|
+
**/
|
|
9
|
+
export class DataType extends BreezeEnum {
|
|
10
|
+
static getComparableFn(dataType) {
|
|
11
|
+
if (dataType && dataType.normalize) {
|
|
12
|
+
return dataType.normalize;
|
|
13
|
+
}
|
|
14
|
+
else if (dataType === DataType.Time) {
|
|
15
|
+
// durations must be converted to compare them
|
|
16
|
+
return function (value) {
|
|
17
|
+
return value && core.durationToSeconds(value);
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
// TODO: __identity
|
|
22
|
+
return function (value) {
|
|
23
|
+
return value;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/** Returns the DataType for a specified EDM type name.
|
|
28
|
+
**/
|
|
29
|
+
static fromEdmDataType(typeName) {
|
|
30
|
+
let dt;
|
|
31
|
+
let parts = typeName.split(".");
|
|
32
|
+
if (parts.length > 1) {
|
|
33
|
+
let simpleName = parts[1];
|
|
34
|
+
if (simpleName === "image") {
|
|
35
|
+
// hack
|
|
36
|
+
dt = DataType.Byte;
|
|
37
|
+
}
|
|
38
|
+
else if (parts.length === 2) {
|
|
39
|
+
dt = DataType.fromName(simpleName) || DataType.Undefined;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
// enum
|
|
43
|
+
// dt = DataType.Int32;
|
|
44
|
+
dt = DataType.String;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return dt;
|
|
48
|
+
}
|
|
49
|
+
/** Returns the DataType for a specified input. */
|
|
50
|
+
static fromValue(val) {
|
|
51
|
+
if (core.isDate(val))
|
|
52
|
+
return DataType.DateTime;
|
|
53
|
+
switch (typeof val) {
|
|
54
|
+
case "string":
|
|
55
|
+
if (core.isGuid(val))
|
|
56
|
+
return DataType.Guid;
|
|
57
|
+
// the >3 below is a hack to insure that if we are inferring datatypes that
|
|
58
|
+
// very short strings that are valid but unlikely ISO encoded Time's are treated as strings instead.
|
|
59
|
+
else if (core.isDuration(val) && val.length > 3)
|
|
60
|
+
return DataType.Time;
|
|
61
|
+
else if (core.isDateString(val))
|
|
62
|
+
return DataType.DateTime;
|
|
63
|
+
return DataType.String;
|
|
64
|
+
case "boolean":
|
|
65
|
+
return DataType.Boolean;
|
|
66
|
+
case "number":
|
|
67
|
+
return DataType.Double;
|
|
68
|
+
}
|
|
69
|
+
return DataType.Undefined;
|
|
70
|
+
}
|
|
71
|
+
static parseTimeFromServer(source) {
|
|
72
|
+
if (typeof source === 'string') {
|
|
73
|
+
return source;
|
|
74
|
+
}
|
|
75
|
+
// ODATA v3 format
|
|
76
|
+
if (source && source.__edmType === 'Edm.Time') {
|
|
77
|
+
let seconds = Math.floor(source.ms / 1000);
|
|
78
|
+
return 'PT' + seconds + 'S';
|
|
79
|
+
}
|
|
80
|
+
return source;
|
|
81
|
+
}
|
|
82
|
+
static parseDateAsUTC(source) {
|
|
83
|
+
if (typeof source === 'string') {
|
|
84
|
+
// convert to UTC string if no time zone specifier.
|
|
85
|
+
let isLocalTime = _localTimeRegex.test(source);
|
|
86
|
+
// var isLocalTime = !hasTimeZone(source);
|
|
87
|
+
source = isLocalTime ? source + 'Z' : source;
|
|
88
|
+
}
|
|
89
|
+
source = new Date(Date.parse(source));
|
|
90
|
+
return source;
|
|
91
|
+
}
|
|
92
|
+
/** Parse as UTC then shift to local time */
|
|
93
|
+
static parseDateAsLocal(source) {
|
|
94
|
+
var dt = DataType.parseDateAsUTC(source);
|
|
95
|
+
if (core.isDate(dt)) {
|
|
96
|
+
dt = new Date(dt.getTime() + dt.getTimezoneOffset() * 60000);
|
|
97
|
+
}
|
|
98
|
+
return dt;
|
|
99
|
+
}
|
|
100
|
+
;
|
|
101
|
+
/** if val is a Date, return a date-only string e.g. '2023-12-31' */
|
|
102
|
+
static toDateOnlyString(val) {
|
|
103
|
+
// DateOnly types should not have time component, but JSON.stringify makes a full ISO string.
|
|
104
|
+
// We convert it to string here to prevent that, and shift the time zone because toISOString converts to UTC.
|
|
105
|
+
return val && val.getTime && new Date(val.getTime() - val.getTimezoneOffset() * 60000).toISOString().substring(0, 10) || val;
|
|
106
|
+
}
|
|
107
|
+
/** Returns a raw value converted to the specified DataType */
|
|
108
|
+
static parseRawValue(val, dataType) {
|
|
109
|
+
// undefined values will be the default for most unmapped properties EXCEPT when they are set
|
|
110
|
+
// in a jsonResultsAdapter ( an unusual use case).
|
|
111
|
+
if (val === undefined)
|
|
112
|
+
return undefined;
|
|
113
|
+
if (!val)
|
|
114
|
+
return val;
|
|
115
|
+
if (dataType && dataType.parseRawValue) {
|
|
116
|
+
val = dataType.parseRawValue(val);
|
|
117
|
+
}
|
|
118
|
+
return val;
|
|
119
|
+
}
|
|
120
|
+
/** @hidden @internal */
|
|
121
|
+
// used during initialization; visible on instance for testing purposes.
|
|
122
|
+
static _resetConstants() {
|
|
123
|
+
DataType.constants = {
|
|
124
|
+
stringPrefix: "K_",
|
|
125
|
+
nextNumber: -1,
|
|
126
|
+
nextNumberIncrement: -1
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
DataType.parseDateFromServer = (value) => DataType.parseDateAsUTC(value);
|
|
131
|
+
DataType.String = new DataType({
|
|
132
|
+
defaultValue: "",
|
|
133
|
+
parse: coerceToString,
|
|
134
|
+
fmtOData: fmtString,
|
|
135
|
+
getNext: getNextString
|
|
136
|
+
});
|
|
137
|
+
DataType.Int64 = new DataType({
|
|
138
|
+
defaultValue: 0,
|
|
139
|
+
isNumeric: true,
|
|
140
|
+
isInteger: true,
|
|
141
|
+
quoteJsonOData: true,
|
|
142
|
+
parse: coerceToInt,
|
|
143
|
+
fmtOData: makeFloatFmt("L"),
|
|
144
|
+
getNext: getNextNumber
|
|
145
|
+
});
|
|
146
|
+
DataType.Int32 = new DataType({
|
|
147
|
+
defaultValue: 0,
|
|
148
|
+
isNumeric: true,
|
|
149
|
+
isInteger: true,
|
|
150
|
+
parse: coerceToInt,
|
|
151
|
+
fmtOData: fmtInt,
|
|
152
|
+
getNext: getNextNumber
|
|
153
|
+
});
|
|
154
|
+
DataType.Int16 = new DataType({
|
|
155
|
+
defaultValue: 0,
|
|
156
|
+
isNumeric: true,
|
|
157
|
+
isInteger: true,
|
|
158
|
+
parse: coerceToInt,
|
|
159
|
+
fmtOData: fmtInt,
|
|
160
|
+
getNext: getNextNumber
|
|
161
|
+
});
|
|
162
|
+
DataType.Byte = new DataType({
|
|
163
|
+
defaultValue: 0,
|
|
164
|
+
isNumeric: true,
|
|
165
|
+
isInteger: true,
|
|
166
|
+
parse: coerceToInt,
|
|
167
|
+
fmtOData: fmtInt
|
|
168
|
+
});
|
|
169
|
+
DataType.Decimal = new DataType({
|
|
170
|
+
defaultValue: 0,
|
|
171
|
+
isNumeric: true,
|
|
172
|
+
quoteJsonOData: true,
|
|
173
|
+
isFloat: true,
|
|
174
|
+
parse: coerceToFloat,
|
|
175
|
+
fmtOData: makeFloatFmt("m"),
|
|
176
|
+
getNext: getNextNumber
|
|
177
|
+
});
|
|
178
|
+
DataType.Double = new DataType({
|
|
179
|
+
defaultValue: 0,
|
|
180
|
+
isNumeric: true,
|
|
181
|
+
isFloat: true,
|
|
182
|
+
parse: coerceToFloat,
|
|
183
|
+
fmtOData: makeFloatFmt("d"),
|
|
184
|
+
getNext: getNextNumber
|
|
185
|
+
});
|
|
186
|
+
DataType.Single = new DataType({
|
|
187
|
+
defaultValue: 0,
|
|
188
|
+
isNumeric: true,
|
|
189
|
+
isFloat: true,
|
|
190
|
+
parse: coerceToFloat,
|
|
191
|
+
fmtOData: makeFloatFmt("f"),
|
|
192
|
+
getNext: getNextNumber
|
|
193
|
+
});
|
|
194
|
+
DataType.DateOnly = new DataType({
|
|
195
|
+
defaultValue: new Date(1900, 0, 1),
|
|
196
|
+
isDate: true,
|
|
197
|
+
parse: coerceToDateOnly,
|
|
198
|
+
parseRawValue: parseRawDateOnly,
|
|
199
|
+
normalize: function (value) { return value && value.getTime && (new Date(value.getYear(), value.getMonth(), value.getDate())).getTime(); },
|
|
200
|
+
fmtOData: fmtDateOnly,
|
|
201
|
+
getNext: getNextDateTime,
|
|
202
|
+
getConcurrencyValue: getConcurrencyDateTime
|
|
203
|
+
});
|
|
204
|
+
DataType.DateTime = new DataType({
|
|
205
|
+
defaultValue: new Date(1900, 0, 1),
|
|
206
|
+
isDate: true,
|
|
207
|
+
parse: coerceToDate,
|
|
208
|
+
parseRawValue: parseRawDate,
|
|
209
|
+
normalize: function (value) { return value && value.getTime && value.getTime(); },
|
|
210
|
+
fmtOData: fmtDateTime,
|
|
211
|
+
getNext: getNextDateTime,
|
|
212
|
+
getConcurrencyValue: getConcurrencyDateTime
|
|
213
|
+
});
|
|
214
|
+
DataType.DateTimeOffset = new DataType({
|
|
215
|
+
defaultValue: new Date(1900, 0, 1),
|
|
216
|
+
isDate: true,
|
|
217
|
+
parse: coerceToDate,
|
|
218
|
+
parseRawValue: parseRawDate,
|
|
219
|
+
normalize: function (value) { return value && value.getTime && value.getTime(); },
|
|
220
|
+
fmtOData: fmtDateTimeOffset,
|
|
221
|
+
getNext: getNextDateTime,
|
|
222
|
+
getConcurrencyValue: getConcurrencyDateTime
|
|
223
|
+
});
|
|
224
|
+
DataType.Time = new DataType({
|
|
225
|
+
defaultValue: "PT0S",
|
|
226
|
+
fmtOData: fmtTime,
|
|
227
|
+
parseRawValue: DataType.parseTimeFromServer
|
|
228
|
+
});
|
|
229
|
+
DataType.Boolean = new DataType({
|
|
230
|
+
defaultValue: false,
|
|
231
|
+
parse: coerceToBool,
|
|
232
|
+
fmtOData: fmtBoolean
|
|
233
|
+
});
|
|
234
|
+
DataType.Guid = new DataType({
|
|
235
|
+
defaultValue: "00000000-0000-0000-0000-000000000000",
|
|
236
|
+
parse: coerceToGuid,
|
|
237
|
+
fmtOData: fmtGuid,
|
|
238
|
+
getNext: getNextGuid,
|
|
239
|
+
parseRawValue: function (val) { return val.toLowerCase(); },
|
|
240
|
+
getConcurrencyValue: core.getUuid
|
|
241
|
+
});
|
|
242
|
+
DataType.Binary = new DataType({
|
|
243
|
+
defaultValue: null,
|
|
244
|
+
fmtOData: fmtBinary,
|
|
245
|
+
parseRawValue: parseRawBinary
|
|
246
|
+
});
|
|
247
|
+
DataType.Undefined = new DataType({
|
|
248
|
+
defaultValue: undefined,
|
|
249
|
+
fmtOData: fmtUndefined
|
|
250
|
+
});
|
|
251
|
+
DataType.prototype._$typeName = "DataType";
|
|
252
|
+
Error['x'] = DataType._resetConstants();
|
|
253
|
+
Error['x'] = DataType.resolveSymbols();
|
|
254
|
+
Error['x'] = DataType.getSymbols().forEach((sym) => sym.validatorCtor = getValidatorCtor(sym));
|
|
255
|
+
// private functions;
|
|
256
|
+
function getValidatorCtor(dataType) {
|
|
257
|
+
switch (dataType) {
|
|
258
|
+
case DataType.String:
|
|
259
|
+
return Validator.string;
|
|
260
|
+
case DataType.Int64:
|
|
261
|
+
return Validator.int64;
|
|
262
|
+
case DataType.Int32:
|
|
263
|
+
return Validator.int32;
|
|
264
|
+
case DataType.Int16:
|
|
265
|
+
return Validator.int16;
|
|
266
|
+
case DataType.Decimal:
|
|
267
|
+
return Validator.number;
|
|
268
|
+
case DataType.Double:
|
|
269
|
+
return Validator.number;
|
|
270
|
+
case DataType.Single:
|
|
271
|
+
return Validator.number;
|
|
272
|
+
case DataType.DateTime:
|
|
273
|
+
return Validator.date;
|
|
274
|
+
case DataType.DateTimeOffset:
|
|
275
|
+
return Validator.date;
|
|
276
|
+
case DataType.Boolean:
|
|
277
|
+
return Validator.bool;
|
|
278
|
+
case DataType.Guid:
|
|
279
|
+
return Validator.guid;
|
|
280
|
+
case DataType.Byte:
|
|
281
|
+
return Validator.byte;
|
|
282
|
+
case DataType.Binary:
|
|
283
|
+
// TODO: don't quite know how to validate this yet.
|
|
284
|
+
return Validator.none;
|
|
285
|
+
case DataType.Time:
|
|
286
|
+
return Validator.duration;
|
|
287
|
+
case DataType.Undefined:
|
|
288
|
+
return Validator.none;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
function getNextString() {
|
|
292
|
+
return DataType.constants.stringPrefix + getNextNumber().toString();
|
|
293
|
+
}
|
|
294
|
+
function getNextNumber() {
|
|
295
|
+
let result = DataType.constants.nextNumber;
|
|
296
|
+
DataType.constants.nextNumber += DataType.constants.nextNumberIncrement;
|
|
297
|
+
return result;
|
|
298
|
+
}
|
|
299
|
+
function getNextGuid() {
|
|
300
|
+
return core.getUuid();
|
|
301
|
+
}
|
|
302
|
+
function getNextDateTime() {
|
|
303
|
+
return new Date();
|
|
304
|
+
}
|
|
305
|
+
function getConcurrencyDateTime(val) {
|
|
306
|
+
// use the current datetime but insure that it is different from previous call.
|
|
307
|
+
let dt = new Date();
|
|
308
|
+
let dt2 = new Date();
|
|
309
|
+
while (dt.getTime() === dt2.getTime()) {
|
|
310
|
+
dt2 = new Date();
|
|
311
|
+
}
|
|
312
|
+
return dt2;
|
|
313
|
+
}
|
|
314
|
+
function coerceToString(source, sourceTypeName) {
|
|
315
|
+
return (source == null) ? source : source.toString();
|
|
316
|
+
}
|
|
317
|
+
function coerceToGuid(source, sourceTypeName) {
|
|
318
|
+
if (sourceTypeName === "string") {
|
|
319
|
+
return source.trim().toLowerCase();
|
|
320
|
+
}
|
|
321
|
+
return source;
|
|
322
|
+
}
|
|
323
|
+
function coerceToInt(source, sourceTypeName) {
|
|
324
|
+
if (sourceTypeName === "string") {
|
|
325
|
+
let src = source.trim();
|
|
326
|
+
if (src === "")
|
|
327
|
+
return null;
|
|
328
|
+
let val = parseInt(src, 10);
|
|
329
|
+
return isNaN(val) ? source : val;
|
|
330
|
+
}
|
|
331
|
+
else if (sourceTypeName === "number") {
|
|
332
|
+
return Math.round(source);
|
|
333
|
+
}
|
|
334
|
+
// do we want to coerce floats -> ints
|
|
335
|
+
return source;
|
|
336
|
+
}
|
|
337
|
+
function coerceToFloat(source, sourceTypeName) {
|
|
338
|
+
if (sourceTypeName === "string") {
|
|
339
|
+
let src = source.trim();
|
|
340
|
+
if (src === "")
|
|
341
|
+
return null;
|
|
342
|
+
let val = parseFloat(src);
|
|
343
|
+
return isNaN(val) ? source : val;
|
|
344
|
+
}
|
|
345
|
+
return source;
|
|
346
|
+
}
|
|
347
|
+
function coerceToDate(source, sourceTypeName) {
|
|
348
|
+
let val;
|
|
349
|
+
if (sourceTypeName === "string") {
|
|
350
|
+
let src = source.trim();
|
|
351
|
+
if (src === "")
|
|
352
|
+
return null;
|
|
353
|
+
val = new Date(Date.parse(src));
|
|
354
|
+
return core.isDate(val) ? val : source;
|
|
355
|
+
}
|
|
356
|
+
else if (sourceTypeName === "number") {
|
|
357
|
+
val = new Date(source);
|
|
358
|
+
return core.isDate(val) ? val : source;
|
|
359
|
+
}
|
|
360
|
+
return source;
|
|
361
|
+
}
|
|
362
|
+
/** Trim off time portion before parse if source is string */
|
|
363
|
+
function coerceToDateOnly(source, sourceTypeName) {
|
|
364
|
+
let val;
|
|
365
|
+
if (sourceTypeName === "string") {
|
|
366
|
+
let src = source.trim();
|
|
367
|
+
val = DataType.parseDateAsLocal(val);
|
|
368
|
+
return core.isDate(val) ? val : source;
|
|
369
|
+
}
|
|
370
|
+
else if (sourceTypeName === "number") {
|
|
371
|
+
val = new Date(source);
|
|
372
|
+
return core.isDate(val) ? val : source;
|
|
373
|
+
}
|
|
374
|
+
return source;
|
|
375
|
+
}
|
|
376
|
+
function coerceToBool(source, sourceTypeName) {
|
|
377
|
+
if (sourceTypeName === "string") {
|
|
378
|
+
let src = source.trim().toLowerCase();
|
|
379
|
+
if (src === "false" || src === "") {
|
|
380
|
+
return false;
|
|
381
|
+
}
|
|
382
|
+
else if (src === "true") {
|
|
383
|
+
return true;
|
|
384
|
+
}
|
|
385
|
+
else {
|
|
386
|
+
return source;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
return source;
|
|
390
|
+
}
|
|
391
|
+
function fmtString(val) {
|
|
392
|
+
return val == null ? null : "'" + val.replace(/'/g, "''") + "'";
|
|
393
|
+
}
|
|
394
|
+
function fmtInt(val) {
|
|
395
|
+
return val == null ? null : ((typeof val === "string") ? parseInt(val, 10) : val);
|
|
396
|
+
}
|
|
397
|
+
function makeFloatFmt(fmtSuffix) {
|
|
398
|
+
return function (val) {
|
|
399
|
+
if (val == null)
|
|
400
|
+
return null;
|
|
401
|
+
if (typeof val === "string") {
|
|
402
|
+
val = parseFloat(val);
|
|
403
|
+
}
|
|
404
|
+
return val + fmtSuffix;
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
function fmtDateTime(val) {
|
|
408
|
+
if (val == null)
|
|
409
|
+
return null;
|
|
410
|
+
try {
|
|
411
|
+
return "datetime'" + val.toISOString() + "'";
|
|
412
|
+
}
|
|
413
|
+
catch (e) {
|
|
414
|
+
throwError("'%1' is not a valid dateTime", val);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
function fmtDateOnly(val) {
|
|
418
|
+
if (val == null)
|
|
419
|
+
return null;
|
|
420
|
+
try {
|
|
421
|
+
return "date'" + val.toISOString().substring(0, 10) + "'";
|
|
422
|
+
}
|
|
423
|
+
catch (e) {
|
|
424
|
+
throwError("'%1' is not a valid dateTime", val);
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
function fmtDateTimeOffset(val) {
|
|
428
|
+
if (val == null)
|
|
429
|
+
return null;
|
|
430
|
+
try {
|
|
431
|
+
return "datetimeoffset'" + val.toISOString() + "'";
|
|
432
|
+
}
|
|
433
|
+
catch (e) {
|
|
434
|
+
throwError("'%1' is not a valid dateTime", val);
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
function fmtTime(val) {
|
|
438
|
+
if (val == null)
|
|
439
|
+
return null;
|
|
440
|
+
if (!core.isDuration(val)) {
|
|
441
|
+
throwError("'%1' is not a valid ISO 8601 duration", val);
|
|
442
|
+
}
|
|
443
|
+
return "time'" + val + "'";
|
|
444
|
+
}
|
|
445
|
+
function fmtGuid(val) {
|
|
446
|
+
if (val == null)
|
|
447
|
+
return null;
|
|
448
|
+
if (!core.isGuid(val)) {
|
|
449
|
+
throwError("'%1' is not a valid guid", val);
|
|
450
|
+
}
|
|
451
|
+
return "guid'" + val + "'";
|
|
452
|
+
}
|
|
453
|
+
function fmtBoolean(val) {
|
|
454
|
+
if (val == null)
|
|
455
|
+
return null;
|
|
456
|
+
if (typeof val === "string") {
|
|
457
|
+
return val.trim().toLowerCase() === "true";
|
|
458
|
+
}
|
|
459
|
+
else {
|
|
460
|
+
return !!val;
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
function fmtBinary(val) {
|
|
464
|
+
if (val == null)
|
|
465
|
+
return val;
|
|
466
|
+
return "binary'" + val + "'";
|
|
467
|
+
}
|
|
468
|
+
// TODO: use __identity instead;
|
|
469
|
+
function fmtUndefined(val) {
|
|
470
|
+
return val;
|
|
471
|
+
}
|
|
472
|
+
function throwError(msg, val) {
|
|
473
|
+
msg = core.formatString(msg, val);
|
|
474
|
+
throw new Error(msg);
|
|
475
|
+
}
|
|
476
|
+
function parseRawDate(val) {
|
|
477
|
+
if (!core.isDate(val)) {
|
|
478
|
+
val = DataType.parseDateFromServer(val);
|
|
479
|
+
}
|
|
480
|
+
return val;
|
|
481
|
+
}
|
|
482
|
+
/** Trim off time portion before parse */
|
|
483
|
+
function parseRawDateOnly(val) {
|
|
484
|
+
if (typeof val === 'string') {
|
|
485
|
+
if (val.length > 10) {
|
|
486
|
+
val = val.substring(0, 10);
|
|
487
|
+
}
|
|
488
|
+
val = DataType.parseDateAsLocal(val);
|
|
489
|
+
}
|
|
490
|
+
return val;
|
|
491
|
+
}
|
|
492
|
+
function parseRawBinary(val) {
|
|
493
|
+
if (val && val.$value !== undefined) {
|
|
494
|
+
val = val.$value; // this will be a byte[] encoded as a string
|
|
495
|
+
}
|
|
496
|
+
return val;
|
|
497
|
+
}
|
|
498
|
+
//function hasTimeZone(source) {
|
|
499
|
+
// var ix = source.indexOf("T");
|
|
500
|
+
// var timePart = source.substring(ix+1);
|
|
501
|
+
// return timePart.indexOf("-") >= 0 || timePart.indexOf("+") >= 0 || timePart.indexOf("Z");
|
|
502
|
+
//}
|
|
503
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10eXBlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC8iLCJzb3VyY2VzIjpbInNyYy9kYXRhLXR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM5QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFdkMsSUFBSSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBRWhDOzs7R0FHRztBQUNILE1BQU0sT0FBTyxRQUFTLFNBQVEsVUFBVTtJQTRMdEMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFtQjtRQUN4QyxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFO1lBQ2xDLE9BQU8sUUFBUSxDQUFDLFNBQVMsQ0FBQztTQUMzQjthQUFNLElBQUksUUFBUSxLQUFLLFFBQVEsQ0FBQyxJQUFJLEVBQUU7WUFDckMsOENBQThDO1lBQzlDLE9BQU8sVUFBVSxLQUFVO2dCQUN6QixPQUFPLEtBQUssSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEQsQ0FBQyxDQUFDO1NBQ0g7YUFBTTtZQUNMLG1CQUFtQjtZQUNuQixPQUFPLFVBQVUsS0FBVTtnQkFDekIsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRDtPQUNHO0lBQ0gsTUFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFnQjtRQUNyQyxJQUFJLEVBQXdCLENBQUM7UUFDN0IsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3BCLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQixJQUFJLFVBQVUsS0FB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QWdCLENBQUMsR0FBUTtJQUNoQyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtRQUMzQixJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFO1lBQ25CLEdBQUcsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUM1QjtRQUNELEdBQUcsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDdEM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxHQUFRO0lBQzlCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO1FBQ25DLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsNENBQTRDO0tBQy9EO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsZ0NBQWdDO0FBQ2hDLGlDQUFpQztBQUNqQywwQ0FBMEM7QUFDMUMsOEZBQThGO0FBQzlGLEdBQUciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb3JlIH0gZnJvbSAnLi9jb3JlJztcclxuaW1wb3J0IHsgQnJlZXplRW51bSB9IGZyb20gJy4vZW51bSc7XHJcbmltcG9ydCB7IFZhbGlkYXRvciB9IGZyb20gJy4vdmFsaWRhdGUnO1xyXG5cclxubGV0IF9sb2NhbFRpbWVSZWdleCA9IC8uXFxkezN9JC87XHJcblxyXG4vKiogIFxyXG5EYXRhVHlwZSBpcyBhbiAnRW51bScgY29udGFpbmluZyBhbGwgb2YgdGhlIHN1cHBvcnRlZCBkYXRhIHR5cGVzLlxyXG5AZHluYW1pY1xyXG4qKi9cclxuZXhwb3J0IGNsYXNzIERhdGFUeXBlIGV4dGVuZHMgQnJlZXplRW51bSB7XHJcbiAgLyoqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoaXMgRGF0YVR5cGUuIF9fUmVhZCBPbmx5X18gKiovXHJcbiAgZGVjbGFyZSBkZWZhdWx0VmFsdWU/OiBhbnk7XHJcbiAgLyoqIFdoZXRoZXIgdGhpcyBpcyBhICdudW1lcmljJyBEYXRhVHlwZS4gX19SZWFkIE9ubHlfXyAqKi9cclxuICBkZWNsYXJlIGlzTnVtZXJpYz86IGJvb2xlYW47XHJcbiAgLyoqIFdoZXRoZXIgdGhpcyBpcyBhbiAnaW50ZWdlcicgRGF0YVR5cGUuIF9fUmVhZCBPbmx5X18gKiovXHJcbiAgZGVjbGFyZSBpc0ludGVnZXI/OiBib29sZWFuO1xyXG4gIC8qKiBXaGV0aGVyIHRvIHF1b3RlIHRoZSBqc29uIHZhbHVlIHdoZW4gZm9ybWF0dGluZyB0aGlzIERhdGFUeXBlIGZvciBPRGF0YS4gKi9cclxuICBkZWNsYXJlIHF1b3RlSnNvbk9EYXRhPzogYm9vbGVhbjtcclxuXHJcbiAgLyoqIFRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiB0byBjcmVhdGUgYSBbW1ZhbGlkYXRvcl1dIHRvIGJlIHVzZWQgaW4gdmFsaWRhdGluZyBpbnN0YW5jZXMgb2YgdGhpcyBEYXRhVHlwZS4gKi9cclxuICB2YWxpZGF0b3JDdG9yPyhjb250ZXh0PzogYW55KTogVmFsaWRhdG9yO1xyXG4gIC8qKiBcclxuICBPcHRpb25hbCBmdW5jdGlvbiB0byBub3JtYWxpemUgYSBkYXRhIHZhbHVlIGZvciBjb21wYXJpc29uLCBpZiBpdHMgdmFsdWUgY2Fubm90IGJlIHVzZWQgZGlyZWN0bHkuIFxyXG4gIE5vdGUgdGhhdCB0aGlzIHdpbGwgYmUgY2FsbGVkIGVhY2ggdGltZSBhIHByb3BlcnR5IGlzIGNoYW5nZWQsIHNvIG1ha2UgaXQgZmFzdC5cclxuICBAcmV0dXJuIHZhbHVlIGFwcHJvcHJpYXRlIGZvciB0aGlzIERhdGFUeXBlXHJcbiAgKiovXHJcbiAgbm9ybWFsaXplPyh2YWx1ZTogYW55KTogYW55O1xyXG4gIC8qKlxyXG4gIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYSByYXcgKHNlcnZlcikgdmFsdWUgZnJvbSBzdHJpbmcgdG8gdGhpcyBEYXRhVHlwZS5cclxuICBAcmV0dXJuIHZhbHVlIGFwcHJvcHJpYXRlIGZvciB0aGlzIERhdGFUeXBlXHJcbiAgKiovXHJcbiAgcGFyc2VSYXdWYWx1ZT8odmFsdWU6IGFueSk6IGFueTtcclxuICAvKipcclxuICBPcHRpb25hbCBmdW5jdGlvbiB0byBjb252ZXJ0IGEgdmFsdWUgZnJvbSBzdHJpbmcgdG8gdGhpcyBEYXRhVHlwZS4gIE5vdGUgdGhhdCB0aGlzIHdpbGwgYmUgY2FsbGVkIGVhY2ggdGltZSBhIHByb3BlcnR5IGlzIGNoYW5nZWQsIHNvIG1ha2UgaXQgZmFzdC5cclxuICBAcmV0dXJuIHZhbHVlIGFwcHJvcHJpYXRlIGZvciB0aGlzIERhdGFUeXBlIFxyXG4gICoqL1xyXG4gIHBhcnNlPyhzb3VyY2U6IGFueSwgc291cmNlVHlwZU5hbWU6IHN0cmluZyk6IGFueTtcclxuICAvKiogXHJcbiAgT3B0aW9uYWwgZnVuY3Rpb24gdG8gZm9ybWF0IHRoaXMgRGF0YVR5cGUgZm9yIE9EYXRhIHF1ZXJpZXMuXHJcbiAgQHJldHVybiB2YWx1ZSBhcHByb3ByaWF0ZSBmb3IgT0RhdGEgcXVlcnkgICBcclxuICAqKi9cclxuICBmbXRPRGF0YT8odmFsdWU6IGFueSk6IGFueTtcclxuICAvKiogXHJcbiAgT3B0aW9uYWwgZnVuY3Rpb24gdG8gZ2V0IHRoZSBuZXh0IHZhbHVlIGZvciBrZXkgZ2VuZXJhdGlvbiwgaWYgdGhpcyBkYXRhdHlwZSBpcyB1c2VkIGFzIGEga2V5LiAgVXNlcyBhbiBpbnRlcm5hbCB0YWJsZSBvZiBwcmV2aW91cyB2YWx1ZXMuXHJcbiAgQHJldHVybiB2YWx1ZSBhcHByb3ByaWF0ZSBmb3IgdGhpcyBEYXRhVHlwZSBcclxuICAqKi9cclxuICBnZXROZXh0PygpOiBhbnk7XHJcbiAgLyoqXHJcbiAgT3B0aW9uYWwgZnVuY3Rpb24gdG8gZ2V0IHRoZSBuZXh0IHZhbHVlIHdoZW4gdGhlIGRhdGF0eXBlIGlzIHVzZWQgYXMgYSBjb25jdXJyZW5jeSBwcm9wZXJ0eS5cclxuICBAcGFyYW0gcHJldmlvdXNWYWx1ZVxyXG4gIEByZXR1cm4gdGhlIG5leHQgY29uY3VycmVuY3kgdmFsdWUsIHdoaWNoIG1heSBiZSBhIGZ1bmN0aW9uIG9mIHRoZSBwcmV2aW91c1ZhbHVlLlxyXG4gICoqL1xyXG4gIGdldENvbmN1cnJlbmN5VmFsdWU/KHByZXZpb3VzVmFsdWU/OiBhbnkpOiBhbnk7XHJcblxyXG4gIHN0YXRpYyBwYXJzZURhdGVGcm9tU2VydmVyID0gKHZhbHVlOiBhbnkpID0+IERhdGFUeXBlLnBhcnNlRGF0ZUFzVVRDKHZhbHVlKTtcclxuICAvLyBzYW1lIGVmZmVjdCBhcyBhYm92ZSBidXQgZG9lc24ndCBnaXZlIHJpZ2h0IFRTRE9DLlxyXG4gIC8vIHN0YXRpYyBwYXJzZURhdGVGcm9tU2VydmVyID0gRGF0YVR5cGUucGFyc2VEYXRlQXNVVEM7XHJcblxyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIHN0YXRpYyBjb25zdGFudHM6IHsgc3RyaW5nUHJlZml4OiBzdHJpbmcsIG5leHROdW1iZXI6IG51bWJlciwgbmV4dE51bWJlckluY3JlbWVudDogbnVtYmVyIH07XHJcblxyXG4gIHN0YXRpYyBTdHJpbmcgPSBuZXcgRGF0YVR5cGUoe1xyXG4gICAgZGVmYXVsdFZhbHVlOiBcIlwiLFxyXG4gICAgcGFyc2U6IGNvZXJjZVRvU3RyaW5nLFxyXG4gICAgZm10T0RhdGE6IGZtdFN0cmluZyxcclxuICAgIGdldE5leHQ6IGdldE5leHRTdHJpbmdcclxuICB9KTtcclxuXHJcbiAgc3RhdGljIEludDY0ID0gbmV3IERhdGFUeXBlKHtcclxuICAgIGRlZmF1bHRWYWx1ZTogMCxcclxuICAgIGlzTnVtZXJpYzogdHJ1ZSxcclxuICAgIGlzSW50ZWdlcjogdHJ1ZSxcclxuICAgIHF1b3RlSnNvbk9EYXRhOiB0cnVlLFxyXG4gICAgcGFyc2U6IGNvZXJjZVRvSW50LFxyXG4gICAgZm10T0RhdGE6IG1ha2VGbG9hdEZtdChcIkxcIiksXHJcbiAgICBnZXROZXh0OiBnZXROZXh0TnVtYmVyXHJcbiAgfSk7XHJcblxyXG4gIHN0YXRpYyBJbnQzMiA9IG5ldyBEYXRhVHlwZSh7XHJcbiAgICBkZWZhdWx0VmFsdWU6IDAsXHJcbiAgICBpc051bWVyaWM6IHRydWUsXHJcbiAgICBpc0ludGVnZXI6IHRydWUsXHJcbiAgICBwYXJzZTogY29lcmNlVG9JbnQsXHJcbiAgICBmbXRPRGF0YTogZm10SW50LFxyXG4gICAgZ2V0TmV4dDogZ2V0TmV4dE51bWJlclxyXG4gIH0pO1xyXG5cclxuICBzdGF0aWMgSW50MTYgPSBuZXcgRGF0YVR5cGUoe1xyXG4gICAgZGVmYXVsdFZhbHVlOiAwLFxyXG4gICAgaXNOdW1lcmljOiB0cnVlLFxyXG4gICAgaXNJbnRlZ2VyOiB0cnVlLFxyXG4gICAgcGFyc2U6IGNvZXJjZVRvSW50LFxyXG4gICAgZm10T0RhdGE6IGZtdEludCxcclxuICAgIGdldE5leHQ6IGdldE5leHROdW1iZXJcclxuICB9KTtcclxuXHJcbiAgc3RhdGljIEJ5dGUgPSBuZXcgRGF0YVR5cGUoe1xyXG4gICAgZGVmYXVsdFZhbHVlOiAwLFxyXG4gICAgaXNOdW1lcmljOiB0cnVlLFxyXG4gICAgaXNJbnRlZ2VyOiB0cnVlLFxyXG4gICAgcGFyc2U6IGNvZXJjZVRvSW50LFxyXG4gICAgZm10T0RhdGE6IGZtdEludFxyXG4gIH0pO1xyXG5cclxuICBzdGF0aWMgRGVjaW1hbCA9IG5ldyBEYXRhVHlwZSh7XHJcbiAgICBkZWZhdWx0VmFsdWU6IDAsXHJcbiAgICBpc051bWVyaWM6IHRydWUsXHJcbiAgICBxdW90ZUpzb25PRGF0YTogdHJ1ZSxcclxuICAgIGlzRmxvYXQ6IHRydWUsXHJcbiAgICBwYXJzZTogY29lcmNlVG9GbG9hdCxcclxuICAgIGZtdE9EYXRhOiBtYWtlRmxvYXRGbXQoXCJtXCIpLFxyXG4gICAgZ2V0TmV4dDogZ2V0TmV4dE51bWJlclxyXG4gIH0pO1xyXG5cclxuICBzdGF0aWMgRG91YmxlID0gbmV3IERhdGFUeXBlKHtcclxuICAgIGRlZmF1bHRWYWx1ZTogMCxcclxuICAgIGlzTnVtZXJpYzogdHJ1ZSxcclxuICAgIGlzRmxvYXQ6IHRydWUsXHJcbiAgICBwYXJzZTogY29lcmNlVG9GbG9hdCxcclxuICAgIGZtdE9EYXRhOiBtYWtlRmxvYXRGbXQoXCJkXCIpLFxyXG4gICAgZ2V0TmV4dDogZ2V0TmV4dE51bWJlclxyXG4gIH0pO1xyXG5cclxuICBzdGF0aWMgU2luZ2xlID0gbmV3IERhdGFUeXBlKHtcclxuICAgIGRlZmF1bHRWYWx1ZTogMCxcclxuICAgIGlzTnVtZXJpYzogdHJ1ZSxcclxuICAgIGlzRmxvYXQ6IHRydWUsXHJcbiAgICBwYXJzZTogY29lcmNlVG9GbG9hdCxcclxuICAgIGZtdE9EYXRhOiBtYWtlRmxvYXRGbXQoXCJmXCIpLFxyXG4gICAgZ2V0TmV4dDogZ2V0TmV4dE51bWJlclxyXG4gIH0pO1xyXG5cclxuICBzdGF0aWMgRGF0ZU9ubHkgPSBuZXcgRGF0YVR5cGUoe1xyXG4gICAgZGVmYXVsdFZhbHVlOiBuZXcgRGF0ZSgxOTAwLCAwLCAxKSxcclxuICAgIGlzRGF0ZTogdHJ1ZSxcclxuICAgIHBhcnNlOiBjb2VyY2VUb0RhdGVPbmx5LFxyXG4gICAgcGFyc2VSYXdWYWx1ZTogcGFyc2VSYXdEYXRlT25seSxcclxuICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24gKHZhbHVlOiBhbnkpIHsgcmV0dXJuIHZhbHVlICYmIHZhbHVlLmdldFRpbWUgJiYgKG5ldyBEYXRlKHZhbHVlLmdldFllYXIoKSwgdmFsdWUuZ2V0TW9udGgoKSwgdmFsdWUuZ2V0RGF0ZSgpKSkuZ2V0VGltZSgpOyB9LCAvLyBkYXRlcyBkb24ndCBwZXJmb3JtIGVxdWFsaXR5IGNvbXBhcmlzb25zIHByb3Blcmx5XHJcbiAgICBmbXRPRGF0YTogZm10RGF0ZU9ubHksXHJcbiAgICBnZXROZXh0OiBnZXROZXh0RGF0ZVRpbWUsXHJcbiAgICBnZXRDb25jdXJyZW5jeVZhbHVlOiBnZXRDb25jdXJyZW5jeURhdGVUaW1lXHJcbiAgfSk7XHJcblxyXG4gIHN0YXRpYyBEYXRlVGltZSA9IG5ldyBEYXRhVHlwZSh7XHJcbiAgICBkZWZhdWx0VmFsdWU6IG5ldyBEYXRlKDE5MDAsIDAsIDEpLFxyXG4gICAgaXNEYXRlOiB0cnVlLFxyXG4gICAgcGFyc2U6IGNvZXJjZVRvRGF0ZSxcclxuICAgIHBhcnNlUmF3VmFsdWU6IHBhcnNlUmF3RGF0ZSxcclxuICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24gKHZhbHVlOiBhbnkpIHsgcmV0dXJuIHZhbHVlICYmIHZhbHVlLmdldFRpbWUgJiYgdmFsdWUuZ2V0VGltZSgpOyB9LCAvLyBkYXRlcyBkb24ndCBwZXJmb3JtIGVxdWFsaXR5IGNvbXBhcmlzb25zIHByb3Blcmx5XHJcbiAgICBmbXRPRGF0YTogZm10RGF0ZVRpbWUsXHJcbiAgICBnZXROZXh0OiBnZXROZXh0RGF0ZVRpbWUsXHJcbiAgICBnZXRDb25jdXJyZW5jeVZhbHVlOiBnZXRDb25jdXJyZW5jeURhdGVUaW1lXHJcbiAgfSk7XHJcblxyXG4gIHN0YXRpYyBEYXRlVGltZU9mZnNldCA9IG5ldyBEYXRhVHlwZSh7XHJcbiAgICBkZWZhdWx0VmFsdWU6IG5ldyBEYXRlKDE5MDAsIDAsIDEpLFxyXG4gICAgaXNEYXRlOiB0cnVlLFxyXG4gICAgcGFyc2U6IGNvZXJjZVRvRGF0ZSxcclxuICAgIHBhcnNlUmF3VmFsdWU6IHBhcnNlUmF3RGF0ZSxcclxuICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24gKHZhbHVlOiBhbnkpIHsgcmV0dXJuIHZhbHVlICYmIHZhbHVlLmdldFRpbWUgJiYgdmFsdWUuZ2V0VGltZSgpOyB9LCAvLyBkYXRlcyBkb24ndCBwZXJmb3JtIGVxdWFsaXR5IGNvbXBhcmlzb25zIHByb3Blcmx5XHJcbiAgICBmbXRPRGF0YTogZm10RGF0ZVRpbWVPZmZzZXQsXHJcbiAgICBnZXROZXh0OiBnZXROZXh0RGF0ZVRpbWUsXHJcbiAgICBnZXRDb25jdXJyZW5jeVZhbHVlOiBnZXRDb25jdXJyZW5jeURhdGVUaW1lXHJcbiAgfSk7XHJcblxyXG4gIHN0YXRpYyBUaW1lID0gbmV3IERhdGFUeXBlKHtcclxuICAgIGRlZmF1bHRWYWx1ZTogXCJQVDBTXCIsXHJcbiAgICBmbXRPRGF0YTogZm10VGltZSxcclxuICAgIHBhcnNlUmF3VmFsdWU6IERhdGFUeXBlLnBhcnNlVGltZUZyb21TZXJ2ZXJcclxuICB9KTtcclxuXHJcbiAgc3RhdGljIEJvb2xlYW4gPSBuZXcgRGF0YVR5cGUoe1xyXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcclxuICAgIHBhcnNlOiBjb2VyY2VUb0Jvb2wsXHJcbiAgICBmbXRPRGF0YTogZm10Qm9vbGVhblxyXG4gIH0pO1xyXG5cclxuICBzdGF0aWMgR3VpZCA9IG5ldyBEYXRhVHlwZSh7XHJcbiAgICBkZWZhdWx0VmFsdWU6IFwiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXHJcbiAgICBwYXJzZTogY29lcmNlVG9HdWlkLFxyXG4gICAgZm10T0RhdGE6IGZtdEd1aWQsXHJcbiAgICBnZXROZXh0OiBnZXROZXh0R3VpZCxcclxuICAgIHBhcnNlUmF3VmFsdWU6IGZ1bmN0aW9uICh2YWw6IHN0cmluZykgeyByZXR1cm4gdmFsLnRvTG93ZXJDYXNlKCk7IH0sXHJcbiAgICBnZXRDb25jdXJyZW5jeVZhbHVlOiBjb3JlLmdldFV1aWRcclxuICB9KTtcclxuXHJcbiAgc3RhdGljIEJpbmFyeSA9IG5ldyBEYXRhVHlwZSh7XHJcbiAgICBkZWZhdWx0VmFsdWU6IG51bGwsXHJcbiAgICBmbXRPRGF0YTogZm10QmluYXJ5LFxyXG4gICAgcGFyc2VSYXdWYWx1ZTogcGFyc2VSYXdCaW5hcnlcclxuICB9KTtcclxuXHJcbiAgc3RhdGljIFVuZGVmaW5lZCA9IG5ldyBEYXRhVHlwZSh7XHJcbiAgICBkZWZhdWx0VmFsdWU6IHVuZGVmaW5lZCxcclxuICAgIGZtdE9EYXRhOiBmbXRVbmRlZmluZWRcclxuICB9KTtcclxuXHJcbiAgc3RhdGljIGdldENvbXBhcmFibGVGbihkYXRhVHlwZT86IERhdGFUeXBlKSB7XHJcbiAgICBpZiAoZGF0YVR5cGUgJiYgZGF0YVR5cGUubm9ybWFsaXplKSB7XHJcbiAgICAgIHJldHVybiBkYXRhVHlwZS5ub3JtYWxpemU7XHJcbiAgICB9IGVsc2UgaWYgKGRhdGFUeXBlID09PSBEYXRhVHlwZS5UaW1lKSB7XHJcbiAgICAgIC8vIGR1cmF0aW9ucyBtdXN0IGJlIGNvbnZlcnRlZCB0byBjb21wYXJlIHRoZW1cclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlICYmIGNvcmUuZHVyYXRpb25Ub1NlY29uZHModmFsdWUpO1xyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gVE9ETzogX19pZGVudGl0eVxyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogUmV0dXJucyB0aGUgRGF0YVR5cGUgZm9yIGEgc3BlY2lmaWVkIEVETSB0eXBlIG5hbWUuXHJcbiAgKiovXHJcbiAgc3RhdGljIGZyb21FZG1EYXRhVHlwZSh0eXBlTmFtZTogc3RyaW5nKSB7XHJcbiAgICBsZXQgZHQ6IERhdGFUeXBlIHwgdW5kZWZpbmVkO1xyXG4gICAgbGV0IHBhcnRzID0gdHlwZU5hbWUuc3BsaXQoXCIuXCIpO1xyXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgbGV0IHNpbXBsZU5hbWUgPSBwYXJ0c1sxXTtcclxuICAgICAgaWYgKHNpbXBsZU5hbWUgPT09IFwiaW1hZ2VcIikge1xyXG4gICAgICAgIC8vIGhhY2tcclxuICAgICAgICBkdCA9IERhdGFUeXBlLkJ5dGU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFydHMubGVuZ3RoID09PSAyKSB7XHJcbiAgICAgICAgZHQgPSBEYXRhVHlwZS5mcm9tTmFtZShzaW1wbGVOYW1lKSB8fCBEYXRhVHlwZS5VbmRlZmluZWQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gZW51bVxyXG4gICAgICAgIC8vIGR0ID0gRGF0YVR5cGUuSW50MzI7XHJcbiAgICAgICAgZHQgPSBEYXRhVHlwZS5TdHJpbmc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZHQ7XHJcbiAgfVxyXG5cclxuICAvKiogUmV0dXJucyB0aGUgRGF0YVR5cGUgZm9yIGEgc3BlY2lmaWVkIGlucHV0LiAqL1xyXG4gIHN0YXRpYyBmcm9tVmFsdWUodmFsOiBhbnkpIHtcclxuICAgIGlmIChjb3JlLmlzRGF0ZSh2YWwpKSByZXR1cm4gRGF0YVR5cGUuRGF0ZVRpbWU7XHJcbiAgICBzd2l0Y2ggKHR5cGVvZiB2YWwpIHtcclxuICAgICAgY2FzZSBcInN0cmluZ1wiOlxyXG4gICAgICAgIGlmIChjb3JlLmlzR3VpZCh2YWwpKSByZXR1cm4gRGF0YVR5cGUuR3VpZDtcclxuICAgICAgICAvLyB0aGUgPjMgYmVsb3cgaXMgYSBoYWNrIHRvIGluc3VyZSB0aGF0IGlmIHdlIGFyZSBpbmZlcnJpbmcgZGF0YXR5cGVzIHRoYXRcclxuICAgICAgICAvLyB2ZXJ5IHNob3J0IHN0cmluZ3MgdGhhdCBhcmUgdmFsaWQgYnV0IHVubGlrZWx5IElTTyBlbmNvZGVkIFRpbWUncyBhcmUgdHJlYXRlZCBhcyBzdHJpbmdzIGluc3RlYWQuXHJcbiAgICAgICAgZWxzZSBpZiAoY29yZS5pc0R1cmF0aW9uKHZhbCkgJiYgdmFsLmxlbmd0aCA+IDMpIHJldHVybiBEYXRhVHlwZS5UaW1lO1xyXG4gICAgICAgIGVsc2UgaWYgKGNvcmUuaXNEYXRlU3RyaW5nKHZhbCkpIHJldHVybiBEYXRhVHlwZS5EYXRlVGltZTtcclxuICAgICAgICByZXR1cm4gRGF0YVR5cGUuU3RyaW5nO1xyXG4gICAgICBjYXNlIFwiYm9vbGVhblwiOlxyXG4gICAgICAgIHJldHVybiBEYXRhVHlwZS5Cb29sZWFuO1xyXG4gICAgICBjYXNlIFwibnVtYmVyXCI6XHJcbiAgICAgICAgcmV0dXJuIERhdGFUeXBlLkRvdWJsZTtcclxuICAgIH1cclxuICAgIHJldHVybiBEYXRhVHlwZS5VbmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcGFyc2VUaW1lRnJvbVNlcnZlcihzb3VyY2U6IGFueSkge1xyXG4gICAgaWYgKHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiBzb3VyY2U7XHJcbiAgICB9XHJcbiAgICAvLyBPREFUQSB2MyBmb3JtYXRcclxuICAgIGlmIChzb3VyY2UgJiYgc291cmNlLl9fZWRtVHlwZSA9PT0gJ0VkbS5UaW1lJykge1xyXG4gICAgICBsZXQgc2Vjb25kcyA9IE1hdGguZmxvb3Ioc291cmNlLm1zIC8gMTAwMCk7XHJcbiAgICAgIHJldHVybiAnUFQnICsgc2Vjb25kcyArICdTJztcclxuICAgIH1cclxuICAgIHJldHVybiBzb3VyY2U7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcGFyc2VEYXRlQXNVVEMoc291cmNlOiBhbnkpIHtcclxuICAgIGlmICh0eXBlb2Ygc291cmNlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAvLyBjb252ZXJ0IHRvIFVUQyBzdHJpbmcgaWYgbm8gdGltZSB6b25lIHNwZWNpZmllci5cclxuICAgICAgbGV0IGlzTG9jYWxUaW1lID0gX2xvY2FsVGltZVJlZ2V4LnRlc3Qoc291cmNlKTtcclxuICAgICAgLy8gdmFyIGlzTG9jYWxUaW1lID0gIWhhc1RpbWVab25lKHNvdXJjZSk7XHJcbiAgICAgIHNvdXJjZSA9IGlzTG9jYWxUaW1lID8gc291cmNlICsgJ1onIDogc291cmNlO1xyXG4gICAgfVxyXG4gICAgc291cmNlID0gbmV3IERhdGUoRGF0ZS5wYXJzZShzb3VyY2UpKTtcclxuICAgIHJldHVybiBzb3VyY2U7XHJcbiAgfVxyXG5cclxuICAvKiogUGFyc2UgYXMgVVRDIHRoZW4gc2hpZnQgdG8gbG9jYWwgdGltZSAqL1xyXG4gIHN0YXRpYyBwYXJzZURhdGVBc0xvY2FsKHNvdXJjZTogc3RyaW5nKSB7XHJcbiAgICB2YXIgZHQgPSBEYXRhVHlwZS5wYXJzZURhdGVBc1VUQyhzb3VyY2UpO1xyXG4gICAgaWYgKGNvcmUuaXNEYXRlKGR0KSkge1xyXG4gICAgICAgIGR0ID0gbmV3IERhdGUoZHQuZ2V0VGltZSgpICsgZHQuZ2V0VGltZXpvbmVPZmZzZXQoKSo2MDAwMCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZHQ7XHJcbiAgfTtcclxuXHJcbiAgLyoqIGlmIHZhbCBpcyBhIERhdGUsIHJldHVybiBhIGRhdGUtb25seSBzdHJpbmcgZS5nLiAnMjAyMy0xMi0zMScgKi9cclxuICBzdGF0aWMgdG9EYXRlT25seVN0cmluZyh2YWw6IGFueSkge1xyXG4gICAgLy8gRGF0ZU9ubHkgdHlwZXMgc2hvdWxkIG5vdCBoYXZlIHRpbWUgY29tcG9uZW50LCBidXQgSlNPTi5zdHJpbmdpZnkgbWFrZXMgYSBmdWxsIElTTyBzdHJpbmcuXHJcbiAgICAvLyBXZSBjb252ZXJ0IGl0IHRvIHN0cmluZyBoZXJlIHRvIHByZXZlbnQgdGhhdCwgYW5kIHNoaWZ0IHRoZSB0aW1lIHpvbmUgYmVjYXVzZSB0b0lTT1N0cmluZyBjb252ZXJ0cyB0byBVVEMuXHJcbiAgICByZXR1cm4gdmFsICYmIHZhbC5nZXRUaW1lICYmIG5ldyBEYXRlKHZhbC5nZXRUaW1lKCkgLSB2YWwuZ2V0VGltZXpvbmVPZmZzZXQoKSo2MDAwMCkudG9JU09TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTApIHx8IHZhbDtcclxuICB9XHJcblxyXG4gIC8qKiBSZXR1cm5zIGEgcmF3IHZhbHVlIGNvbnZlcnRlZCB0byB0aGUgc3BlY2lmaWVkIERhdGFUeXBlICovXHJcbiAgc3RhdGljIHBhcnNlUmF3VmFsdWUodmFsOiBhbnksIGRhdGFUeXBlPzogRGF0YVR5cGUpIHtcclxuICAgIC8vIHVuZGVmaW5lZCB2YWx1ZXMgd2lsbCBiZSB0aGUgZGVmYXVsdCBmb3IgbW9zdCB1bm1hcHBlZCBwcm9wZXJ0aWVzIEVYQ0VQVCB3aGVuIHRoZXkgYXJlIHNldFxyXG4gICAgLy8gaW4gYSBqc29uUmVzdWx0c0FkYXB0ZXIgKCBhbiB1bnVzdWFsIHVzZSBjYXNlKS5cclxuICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIGlmICghdmFsKSByZXR1cm4gdmFsO1xyXG4gICAgaWYgKGRhdGFUeXBlICYmIGRhdGFUeXBlLnBhcnNlUmF3VmFsdWUpIHtcclxuICAgICAgdmFsID0gZGF0YVR5cGUucGFyc2VSYXdWYWx1ZSh2YWwpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbDtcclxuICB9XHJcblxyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIC8vIHVzZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uOyB2aXNpYmxlIG9uIGluc3RhbmNlIGZvciB0ZXN0aW5nIHB1cnBvc2VzLlxyXG4gIHN0YXRpYyBfcmVzZXRDb25zdGFudHMoKSB7XHJcbiAgICBEYXRhVHlwZS5jb25zdGFudHMgPSB7XHJcbiAgICAgIHN0cmluZ1ByZWZpeDogXCJLX1wiLFxyXG4gICAgICBuZXh0TnVtYmVyOiAtMSxcclxuICAgICAgbmV4dE51bWJlckluY3JlbWVudDogLTFcclxuICAgIH07XHJcbiAgfVxyXG5cclxufVxyXG5EYXRhVHlwZS5wcm90b3R5cGUuXyR0eXBlTmFtZSA9IFwiRGF0YVR5cGVcIjtcclxuRXJyb3JbJ3gnXSA9IERhdGFUeXBlLl9yZXNldENvbnN0YW50cygpO1xyXG5FcnJvclsneCddID0gRGF0YVR5cGUucmVzb2x2ZVN5bWJvbHMoKTtcclxuRXJyb3JbJ3gnXSA9IERhdGFUeXBlLmdldFN5bWJvbHMoKS5mb3JFYWNoKChzeW06IERhdGFUeXBlKSA9PiBzeW0udmFsaWRhdG9yQ3RvciA9IGdldFZhbGlkYXRvckN0b3Ioc3ltKSk7XHJcblxyXG4vLyBwcml2YXRlIGZ1bmN0aW9ucztcclxuXHJcblxyXG5mdW5jdGlvbiBnZXRWYWxpZGF0b3JDdG9yKGRhdGFUeXBlOiBEYXRhVHlwZSkge1xyXG4gIHN3aXRjaCAoZGF0YVR5cGUpIHtcclxuICAgIGNhc2UgRGF0YVR5cGUuU3RyaW5nOlxyXG4gICAgICByZXR1cm4gVmFsaWRhdG9yLnN0cmluZztcclxuICAgIGNhc2UgRGF0YVR5cGUuSW50NjQ6XHJcbiAgICAgIHJldHVybiBWYWxpZGF0b3IuaW50NjQ7XHJcbiAgICBjYXNlIERhdGFUeXBlLkludDMyOlxyXG4gICAgICByZXR1cm4gVmFsaWRhdG9yLmludDMyO1xyXG4gICAgY2FzZSBEYXRhVHlwZS5JbnQxNjpcclxuICAgICAgcmV0dXJuIFZhbGlkYXRvci5pbnQxNjtcclxuICAgIGNhc2UgRGF0YVR5cGUuRGVjaW1hbDpcclxuICAgICAgcmV0dXJuIFZhbGlkYXRvci5udW1iZXI7XHJcbiAgICBjYXNlIERhdGFUeXBlLkRvdWJsZTpcclxuICAgICAgcmV0dXJuIFZhbGlkYXRvci5udW1iZXI7XHJcbiAgICBjYXNlIERhdGFUeXBlLlNpbmdsZTpcclxuICAgICAgcmV0dXJuIFZhbGlkYXRvci5udW1iZXI7XHJcbiAgICBjYXNlIERhdGFUeXBlLkRhdGVUaW1lOlxyXG4gICAgICByZXR1cm4gVmFsaWRhdG9yLmRhdGU7XHJcbiAgICBjYXNlIERhdGFUeXBlLkRhdGVUaW1lT2Zmc2V0OlxyXG4gICAgICByZXR1cm4gVmFsaWRhdG9yLmRhdGU7XHJcbiAgICBjYXNlIERhdGFUeXBlLkJvb2xlYW46XHJcbiAgICAgIHJldHVybiBWYWxpZGF0b3IuYm9vbDtcclxuICAgIGNhc2UgRGF0YVR5cGUuR3VpZDpcclxuICAgICAgcmV0dXJuIFZhbGlkYXRvci5ndWlkO1xyXG4gICAgY2FzZSBEYXRhVHlwZS5CeXRlOlxyXG4gICAgICByZXR1cm4gVmFsaWRhdG9yLmJ5dGU7XHJcbiAgICBjYXNlIERhdGFUeXBlLkJpbmFyeTpcclxuICAgICAgLy8gVE9ETzogZG9uJ3QgcXVpdGUga25vdyBob3cgdG8gdmFsaWRhdGUgdGhpcyB5ZXQuXHJcbiAgICAgIHJldHVybiBWYWxpZGF0b3Iubm9uZTtcclxuICAgIGNhc2UgRGF0YVR5cGUuVGltZTpcclxuICAgICAgcmV0dXJuIFZhbGlkYXRvci5kdXJhdGlvbjtcclxuICAgIGNhc2UgRGF0YVR5cGUuVW5kZWZpbmVkOlxyXG4gICAgICByZXR1cm4gVmFsaWRhdG9yLm5vbmU7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXROZXh0U3RyaW5nKCkge1xyXG4gIHJldHVybiBEYXRhVHlwZS5jb25zdGFudHMuc3RyaW5nUHJlZml4ICsgZ2V0TmV4dE51bWJlcigpLnRvU3RyaW5nKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldE5leHROdW1iZXIoKSB7XHJcbiAgbGV0IHJlc3VsdCA9IERhdGFUeXBlLmNvbnN0YW50cy5uZXh0TnVtYmVyO1xyXG4gIERhdGFUeXBlLmNvbnN0YW50cy5uZXh0TnVtYmVyICs9IERhdGFUeXBlLmNvbnN0YW50cy5uZXh0TnVtYmVySW5jcmVtZW50O1xyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldE5leHRHdWlkKCkge1xyXG4gIHJldHVybiBjb3JlLmdldFV1aWQoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0TmV4dERhdGVUaW1lKCkge1xyXG4gIHJldHVybiBuZXcgRGF0ZSgpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRDb25jdXJyZW5jeURhdGVUaW1lKHZhbDogYW55KSB7XHJcbiAgLy8gdXNlIHRoZSBjdXJyZW50IGRhdGV0aW1lIGJ1dCBpbnN1cmUgdGhhdCBpdCBpcyBkaWZmZXJlbnQgZnJvbSBwcmV2aW91cyBjYWxsLlxyXG4gIGxldCBkdCA9IG5ldyBEYXRlKCk7XHJcbiAgbGV0IGR0MiA9IG5ldyBEYXRlKCk7XHJcbiAgd2hpbGUgKGR0LmdldFRpbWUoKSA9PT0gZHQyLmdldFRpbWUoKSkge1xyXG4gICAgZHQyID0gbmV3IERhdGUoKTtcclxuICB9XHJcbiAgcmV0dXJuIGR0MjtcclxufVxyXG5cclxuZnVuY3Rpb24gY29lcmNlVG9TdHJpbmcoc291cmNlOiBhbnksIHNvdXJjZVR5cGVOYW1lPzogc3RyaW5nKSB7XHJcbiAgcmV0dXJuIChzb3VyY2UgPT0gbnVsbCkgPyBzb3VyY2UgOiBzb3VyY2UudG9TdHJpbmcoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29lcmNlVG9HdWlkKHNvdXJjZTogYW55LCBzb3VyY2VUeXBlTmFtZTogc3RyaW5nKSB7XHJcbiAgaWYgKHNvdXJjZVR5cGVOYW1lID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICByZXR1cm4gc291cmNlLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gIH1cclxuICByZXR1cm4gc291cmNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb2VyY2VUb0ludChzb3VyY2U6IGFueSwgc291cmNlVHlwZU5hbWU6IHN0cmluZykge1xyXG4gIGlmIChzb3VyY2VUeXBlTmFtZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgbGV0IHNyYyA9IHNvdXJjZS50cmltKCk7XHJcbiAgICBpZiAoc3JjID09PSBcIlwiKSByZXR1cm4gbnVsbDtcclxuICAgIGxldCB2YWwgPSBwYXJzZUludChzcmMsIDEwKTtcclxuICAgIHJldHVybiBpc05hTih2YWwpID8gc291cmNlIDogdmFsO1xyXG4gIH0gZWxzZSBpZiAoc291cmNlVHlwZU5hbWUgPT09IFwibnVtYmVyXCIpIHtcclxuICAgIHJldHVybiBNYXRoLnJvdW5kKHNvdXJjZSk7XHJcbiAgfVxyXG4gIC8vIGRvIHdlIHdhbnQgdG8gY29lcmNlIGZsb2F0cyAtPiBpbnRzXHJcbiAgcmV0dXJuIHNvdXJjZTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29lcmNlVG9GbG9hdChzb3VyY2U6IGFueSwgc291cmNlVHlwZU5hbWU6IHN0cmluZykge1xyXG4gIGlmIChzb3VyY2VUeXBlTmFtZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgbGV0IHNyYyA9IHNvdXJjZS50cmltKCk7XHJcbiAgICBpZiAoc3JjID09PSBcIlwiKSByZXR1cm4gbnVsbDtcclxuICAgIGxldCB2YWwgPSBwYXJzZUZsb2F0KHNyYyk7XHJcbiAgICByZXR1cm4gaXNOYU4odmFsKSA/IHNvdXJjZSA6IHZhbDtcclxuICB9XHJcbiAgcmV0dXJuIHNvdXJjZTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29lcmNlVG9EYXRlKHNvdXJjZTogYW55LCBzb3VyY2VUeXBlTmFtZTogc3RyaW5nKSB7XHJcbiAgbGV0IHZhbDogYW55O1xyXG4gIGlmIChzb3VyY2VUeXBlTmFtZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgbGV0IHNyYyA9IHNvdXJjZS50cmltKCk7XHJcbiAgICBpZiAoc3JjID09PSBcIlwiKSByZXR1cm4gbnVsbDtcclxuICAgIHZhbCA9IG5ldyBEYXRlKERhdGUucGFyc2Uoc3JjKSk7XHJcbiAgICByZXR1cm4gY29yZS5pc0RhdGUodmFsKSA/IHZhbCA6IHNvdXJjZTtcclxuICB9IGVsc2UgaWYgKHNvdXJjZVR5cGVOYW1lID09PSBcIm51bWJlclwiKSB7XHJcbiAgICB2YWwgPSBuZXcgRGF0ZShzb3VyY2UpO1xyXG4gICAgcmV0dXJuIGNvcmUuaXNEYXRlKHZhbCkgPyB2YWwgOiBzb3VyY2U7XHJcbiAgfVxyXG4gIHJldHVybiBzb3VyY2U7XHJcbn1cclxuXHJcbi8qKiBUcmltIG9mZiB0aW1lIHBvcnRpb24gYmVmb3JlIHBhcnNlIGlmIHNvdXJjZSBpcyBzdHJpbmcgKi9cclxuZnVuY3Rpb24gY29lcmNlVG9EYXRlT25seShzb3VyY2U6IGFueSwgc291cmNlVHlwZU5hbWU6IHN0cmluZykge1xyXG4gIGxldCB2YWw6IGFueTtcclxuICBpZiAoc291cmNlVHlwZU5hbWUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgIGxldCBzcmMgPSBzb3VyY2UudHJpbSgpIGFzIHN0cmluZztcclxuICAgIHZhbCA9IERhdGFUeXBlLnBhcnNlRGF0ZUFzTG9jYWwodmFsKTtcclxuICAgIHJldHVybiBjb3JlLmlzRGF0ZSh2YWwpID8gdmFsIDogc291cmNlO1xyXG4gIH0gZWxzZSBpZiAoc291cmNlVHlwZU5hbWUgPT09IFwibnVtYmVyXCIpIHtcclxuICAgIHZhbCA9IG5ldyBEYXRlKHNvdXJjZSk7XHJcbiAgICByZXR1cm4gY29yZS5pc0RhdGUodmFsKSA/IHZhbCA6IHNvdXJjZTtcclxuICB9XHJcbiAgcmV0dXJuIHNvdXJjZTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29lcmNlVG9Cb29sKHNvdXJjZTogYW55LCBzb3VyY2VUeXBlTmFtZTogc3RyaW5nKSB7XHJcbiAgaWYgKHNvdXJjZVR5cGVOYW1lID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICBsZXQgc3JjID0gc291cmNlLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgaWYgKHNyYyA9PT0gXCJmYWxzZVwiIHx8IHNyYyA9PT0gXCJcIikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHNyYyA9PT0gXCJ0cnVlXCIpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gc291cmNlO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gc291cmNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBmbXRTdHJpbmcodmFsOiBhbnkpIHtcclxuICByZXR1cm4gdmFsID09IG51bGwgPyBudWxsIDogXCInXCIgKyB2YWwucmVwbGFjZSgvJy9nLCBcIicnXCIpICsgXCInXCI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZtdEludCh2YWw6IGFueSkge1xyXG4gIHJldHVybiB2YWwgPT0gbnVsbCA/IG51bGwgOiAoKHR5cGVvZiB2YWwgPT09IFwic3RyaW5nXCIpID8gcGFyc2VJbnQodmFsLCAxMCkgOiB2YWwpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBtYWtlRmxvYXRGbXQoZm10U3VmZml4OiBzdHJpbmcpIHtcclxuICByZXR1cm4gZnVuY3Rpb24gKHZhbDogYW55KSB7XHJcbiAgICBpZiAodmFsID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgaWYgKHR5cGVvZiB2YWwgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgdmFsID0gcGFyc2VGbG9hdCh2YWwpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbCArIGZtdFN1ZmZpeDtcclxuICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBmbXREYXRlVGltZSh2YWw6IERhdGUpIHtcclxuICBpZiAodmFsID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gIHRyeSB7XHJcbiAgICByZXR1cm4gXCJkYXRldGltZSdcIiArIHZhbC50b0lTT1N0cmluZygpICsgXCInXCI7XHJcbiAgfSBjYXRjaCAoZSkge1xyXG4gICAgdGhyb3dFcnJvcihcIiclMScgaXMgbm90IGEgdmFsaWQgZGF0ZVRpbWVcIiwgdmFsKTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZtdERhdGVPbmx5KHZhbDogRGF0ZSkge1xyXG4gIGlmICh2YWwgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgdHJ5IHtcclxuICAgIHJldHVybiBcImRhdGUnXCIgKyB2YWwudG9JU09TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTApICsgXCInXCI7XHJcbiAgfSBjYXRjaCAoZSkge1xyXG4gICAgdGhyb3dFcnJvcihcIiclMScgaXMgbm90IGEgdmFsaWQgZGF0ZVRpbWVcIiwgdmFsKTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZtdERhdGVUaW1lT2Zmc2V0KHZhbDogRGF0ZSkge1xyXG4gIGlmICh2YWwgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgdHJ5IHtcclxuICAgIHJldHVybiBcImRhdGV0aW1lb2Zmc2V0J1wiICsgdmFsLnRvSVNPU3RyaW5nKCkgKyBcIidcIjtcclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICB0aHJvd0Vycm9yKFwiJyUxJyBpcyBub3QgYSB2YWxpZCBkYXRlVGltZVwiLCB2YWwpO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZm10VGltZSh2YWw6IGFueSkge1xyXG4gIGlmICh2YWwgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgaWYgKCFjb3JlLmlzRHVyYXRpb24odmFsKSkge1xyXG4gICAgdGhyb3dFcnJvcihcIiclMScgaXMgbm90IGEgdmFsaWQgSVNPIDg2MDEgZHVyYXRpb25cIiwgdmFsKTtcclxuICB9XHJcbiAgcmV0dXJuIFwidGltZSdcIiArIHZhbCArIFwiJ1wiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBmbXRHdWlkKHZhbDogYW55KSB7XHJcbiAgaWYgKHZhbCA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICBpZiAoIWNvcmUuaXNHdWlkKHZhbCkpIHtcclxuICAgIHRocm93RXJyb3IoXCInJTEnIGlzIG5vdCBhIHZhbGlkIGd1aWRcIiwgdmFsKTtcclxuICB9XHJcbiAgcmV0dXJuIFwiZ3VpZCdcIiArIHZhbCArIFwiJ1wiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBmbXRCb29sZWFuKHZhbDogYW55KSB7XHJcbiAgaWYgKHZhbCA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICBpZiAodHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgcmV0dXJuIHZhbC50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiAhIXZhbDtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZtdEJpbmFyeSh2YWw6IGFueSkge1xyXG4gIGlmICh2YWwgPT0gbnVsbCkgcmV0dXJuIHZhbDtcclxuICByZXR1cm4gXCJiaW5hcnknXCIgKyB2YWwgKyBcIidcIjtcclxufVxyXG5cclxuLy8gVE9ETzogdXNlIF9faWRlbnRpdHkgaW5zdGVhZDtcclxuZnVuY3Rpb24gZm10VW5kZWZpbmVkKHZhbDogYW55KSB7XHJcbiAgcmV0dXJuIHZhbDtcclxufVxyXG5cclxuZnVuY3Rpb24gdGhyb3dFcnJvcihtc2c6IHN0cmluZywgdmFsOiBhbnkpIHtcclxuICBtc2cgPSBjb3JlLmZvcm1hdFN0cmluZyhtc2csIHZhbCk7XHJcbiAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlUmF3RGF0ZSh2YWw6IGFueSkge1xyXG4gIGlmICghY29yZS5pc0RhdGUodmFsKSkge1xyXG4gICAgdmFsID0gRGF0YVR5cGUucGFyc2VEYXRlRnJvbVNlcnZlcih2YWwpO1xyXG4gIH1cclxuICByZXR1cm4gdmFsO1xyXG59XHJcblxyXG4vKiogVHJpbSBvZmYgdGltZSBwb3J0aW9uIGJlZm9yZSBwYXJzZSAqL1xyXG5mdW5jdGlvbiBwYXJzZVJhd0RhdGVPbmx5KHZhbDogYW55KSB7XHJcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XHJcbiAgICBpZiAodmFsLmxlbmd0aCA+IDEwKSB7XHJcbiAgICAgIHZhbCA9IHZhbC5zdWJzdHJpbmcoMCwgMTApO1xyXG4gICAgfVxyXG4gICAgdmFsID0gRGF0YVR5cGUucGFyc2VEYXRlQXNMb2NhbCh2YWwpO1xyXG4gIH1cclxuICByZXR1cm4gdmFsO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZVJhd0JpbmFyeSh2YWw6IGFueSkge1xyXG4gIGlmICh2YWwgJiYgdmFsLiR2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICB2YWwgPSB2YWwuJHZhbHVlOyAvLyB0aGlzIHdpbGwgYmUgYSBieXRlW10gZW5jb2RlZCBhcyBhIHN0cmluZ1xyXG4gIH1cclxuICByZXR1cm4gdmFsO1xyXG59XHJcblxyXG4vL2Z1bmN0aW9uIGhhc1RpbWVab25lKHNvdXJjZSkge1xyXG4vLyAgdmFyIGl4ID0gc291cmNlLmluZGV4T2YoXCJUXCIpO1xyXG4vLyAgdmFyIHRpbWVQYXJ0ID0gc291cmNlLnN1YnN0cmluZyhpeCsxKTtcclxuLy8gIHJldHVybiAgdGltZVBhcnQuaW5kZXhPZihcIi1cIikgPj0gMCB8fCB0aW1lUGFydC5pbmRleE9mKFwiK1wiKSA+PSAwIHx8IHRpbWVQYXJ0LmluZGV4T2YoXCJaXCIpO1xyXG4vL31cclxuIl19
|