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,506 @@
|
|
|
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 (!source || !source.trim()) {
|
|
352
|
+
return null;
|
|
353
|
+
}
|
|
354
|
+
val = new Date(Date.parse(src));
|
|
355
|
+
return core.isDate(val) ? val : source;
|
|
356
|
+
}
|
|
357
|
+
else if (sourceTypeName === "number") {
|
|
358
|
+
val = new Date(source);
|
|
359
|
+
return core.isDate(val) ? val : source;
|
|
360
|
+
}
|
|
361
|
+
return source;
|
|
362
|
+
}
|
|
363
|
+
/** Trim off time portion before parse if source is string */
|
|
364
|
+
function coerceToDateOnly(source, sourceTypeName) {
|
|
365
|
+
let val;
|
|
366
|
+
if (sourceTypeName === "string") {
|
|
367
|
+
if (!source || !source.trim()) {
|
|
368
|
+
return null;
|
|
369
|
+
}
|
|
370
|
+
val = DataType.parseDateAsLocal(val);
|
|
371
|
+
return core.isDate(val) ? val : source;
|
|
372
|
+
}
|
|
373
|
+
else if (sourceTypeName === "number") {
|
|
374
|
+
val = new Date(source);
|
|
375
|
+
return core.isDate(val) ? val : source;
|
|
376
|
+
}
|
|
377
|
+
return source;
|
|
378
|
+
}
|
|
379
|
+
function coerceToBool(source, sourceTypeName) {
|
|
380
|
+
if (sourceTypeName === "string") {
|
|
381
|
+
let src = source.trim().toLowerCase();
|
|
382
|
+
if (src === "false" || src === "") {
|
|
383
|
+
return false;
|
|
384
|
+
}
|
|
385
|
+
else if (src === "true") {
|
|
386
|
+
return true;
|
|
387
|
+
}
|
|
388
|
+
else {
|
|
389
|
+
return source;
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
return source;
|
|
393
|
+
}
|
|
394
|
+
function fmtString(val) {
|
|
395
|
+
return val == null ? null : "'" + val.replace(/'/g, "''") + "'";
|
|
396
|
+
}
|
|
397
|
+
function fmtInt(val) {
|
|
398
|
+
return val == null ? null : ((typeof val === "string") ? parseInt(val, 10) : val);
|
|
399
|
+
}
|
|
400
|
+
function makeFloatFmt(fmtSuffix) {
|
|
401
|
+
return function (val) {
|
|
402
|
+
if (val == null)
|
|
403
|
+
return null;
|
|
404
|
+
if (typeof val === "string") {
|
|
405
|
+
val = parseFloat(val);
|
|
406
|
+
}
|
|
407
|
+
return val + fmtSuffix;
|
|
408
|
+
};
|
|
409
|
+
}
|
|
410
|
+
function fmtDateTime(val) {
|
|
411
|
+
if (val == null)
|
|
412
|
+
return null;
|
|
413
|
+
try {
|
|
414
|
+
return "datetime'" + val.toISOString() + "'";
|
|
415
|
+
}
|
|
416
|
+
catch (e) {
|
|
417
|
+
throwError("'%1' is not a valid dateTime", val);
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
function fmtDateOnly(val) {
|
|
421
|
+
if (val == null)
|
|
422
|
+
return null;
|
|
423
|
+
try {
|
|
424
|
+
return "date'" + val.toISOString().substring(0, 10) + "'";
|
|
425
|
+
}
|
|
426
|
+
catch (e) {
|
|
427
|
+
throwError("'%1' is not a valid dateTime", val);
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
function fmtDateTimeOffset(val) {
|
|
431
|
+
if (val == null)
|
|
432
|
+
return null;
|
|
433
|
+
try {
|
|
434
|
+
return "datetimeoffset'" + val.toISOString() + "'";
|
|
435
|
+
}
|
|
436
|
+
catch (e) {
|
|
437
|
+
throwError("'%1' is not a valid dateTime", val);
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
function fmtTime(val) {
|
|
441
|
+
if (val == null)
|
|
442
|
+
return null;
|
|
443
|
+
if (!core.isDuration(val)) {
|
|
444
|
+
throwError("'%1' is not a valid ISO 8601 duration", val);
|
|
445
|
+
}
|
|
446
|
+
return "time'" + val + "'";
|
|
447
|
+
}
|
|
448
|
+
function fmtGuid(val) {
|
|
449
|
+
if (val == null)
|
|
450
|
+
return null;
|
|
451
|
+
if (!core.isGuid(val)) {
|
|
452
|
+
throwError("'%1' is not a valid guid", val);
|
|
453
|
+
}
|
|
454
|
+
return "guid'" + val + "'";
|
|
455
|
+
}
|
|
456
|
+
function fmtBoolean(val) {
|
|
457
|
+
if (val == null)
|
|
458
|
+
return null;
|
|
459
|
+
if (typeof val === "string") {
|
|
460
|
+
return val.trim().toLowerCase() === "true";
|
|
461
|
+
}
|
|
462
|
+
else {
|
|
463
|
+
return !!val;
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
function fmtBinary(val) {
|
|
467
|
+
if (val == null)
|
|
468
|
+
return val;
|
|
469
|
+
return "binary'" + val + "'";
|
|
470
|
+
}
|
|
471
|
+
// TODO: use __identity instead;
|
|
472
|
+
function fmtUndefined(val) {
|
|
473
|
+
return val;
|
|
474
|
+
}
|
|
475
|
+
function throwError(msg, val) {
|
|
476
|
+
msg = core.formatString(msg, val);
|
|
477
|
+
throw new Error(msg);
|
|
478
|
+
}
|
|
479
|
+
function parseRawDate(val) {
|
|
480
|
+
if (!core.isDate(val)) {
|
|
481
|
+
val = DataType.parseDateFromServer(val);
|
|
482
|
+
}
|
|
483
|
+
return val;
|
|
484
|
+
}
|
|
485
|
+
/** Trim off time portion before parse */
|
|
486
|
+
function parseRawDateOnly(val) {
|
|
487
|
+
if (typeof val === 'string') {
|
|
488
|
+
if (val.length > 10) {
|
|
489
|
+
val = val.substring(0, 10);
|
|
490
|
+
}
|
|
491
|
+
val = DataType.parseDateAsLocal(val);
|
|
492
|
+
}
|
|
493
|
+
return val;
|
|
494
|
+
}
|
|
495
|
+
function parseRawBinary(val) {
|
|
496
|
+
if (val && val.$value !== undefined) {
|
|
497
|
+
val = val.$value; // this will be a byte[] encoded as a string
|
|
498
|
+
}
|
|
499
|
+
return val;
|
|
500
|
+
}
|
|
501
|
+
//function hasTimeZone(source) {
|
|
502
|
+
// var ix = source.indexOf("T");
|
|
503
|
+
// var timePart = source.substring(ix+1);
|
|
504
|
+
// return timePart.indexOf("-") >= 0 || timePart.indexOf("+") >= 0 || timePart.indexOf("Z");
|
|
505
|
+
//}
|
|
506
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10eXBlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC8iLCJzb3VyY2VzIjpbInNyYy9kYXRhLXR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM5QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFdkMsSUFBSSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBRWhDOzs7R0FHRztBQUNILE1BQU0sT0FBTyxRQUFTLFNBQVEsVUFBVTtJQTRMdEMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFtQjtRQUN4QyxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFO1lBQ2xDLE9BQU8sUUFBUSxDQUFDLFNBQVMsQ0FBQztTQUMzQjthQUFNLElBQUksUUFBUSxLQUFLLFFBQVEsQ0FBQyxJQUFJLEVBQUU7WUFDckMsOENBQThDO1lBQzlDLE9BQU8sVUFBVSxLQUFVO2dCQUN6QixPQUFPLEtBQUssSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEQsQ0FBQyxDQUFDO1NBQ0g7YUFBTTtZQUNMLG1CQUFtQjtZQUNuQixPQUFPLFVBQVUsS0FBVTtnQkFDekIsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRDtPQUNHO0lBQ0gsTUFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFnQjtRQUNyQyxJQUFJLEVBQXdCLENBQUM7UUFDN0IsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3BCLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQixJQUFJLFVBQVUsS0FB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QUMsQ0FBQztLQUN6QztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELHlDQUF5QztBQUN6QyxTQUFTLGdCQUFnQixDQUFDLEdBQVE7SUFDaEMsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUU7UUFDM0IsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRTtZQUNuQixHQUFHLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDNUI7UUFDRCxHQUFHLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3RDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsR0FBUTtJQUM5QixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtRQUNuQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLDRDQUE0QztLQUMvRDtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELGdDQUFnQztBQUNoQyxpQ0FBaUM7QUFDakMsMENBQTBDO0FBQzFDLDhGQUE4RjtBQUM5RixHQUFHIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29yZSB9IGZyb20gJy4vY29yZSc7XHJcbmltcG9ydCB7IEJyZWV6ZUVudW0gfSBmcm9tICcuL2VudW0nO1xyXG5pbXBvcnQgeyBWYWxpZGF0b3IgfSBmcm9tICcuL3ZhbGlkYXRlJztcclxuXHJcbmxldCBfbG9jYWxUaW1lUmVnZXggPSAvLlxcZHszfSQvO1xyXG5cclxuLyoqICBcclxuRGF0YVR5cGUgaXMgYW4gJ0VudW0nIGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBzdXBwb3J0ZWQgZGF0YSB0eXBlcy5cclxuQGR5bmFtaWNcclxuKiovXHJcbmV4cG9ydCBjbGFzcyBEYXRhVHlwZSBleHRlbmRzIEJyZWV6ZUVudW0ge1xyXG4gIC8qKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGlzIERhdGFUeXBlLiBfX1JlYWQgT25seV9fICoqL1xyXG4gIGRlY2xhcmUgZGVmYXVsdFZhbHVlPzogYW55O1xyXG4gIC8qKiBXaGV0aGVyIHRoaXMgaXMgYSAnbnVtZXJpYycgRGF0YVR5cGUuIF9fUmVhZCBPbmx5X18gKiovXHJcbiAgZGVjbGFyZSBpc051bWVyaWM/OiBib29sZWFuO1xyXG4gIC8qKiBXaGV0aGVyIHRoaXMgaXMgYW4gJ2ludGVnZXInIERhdGFUeXBlLiBfX1JlYWQgT25seV9fICoqL1xyXG4gIGRlY2xhcmUgaXNJbnRlZ2VyPzogYm9vbGVhbjtcclxuICAvKiogV2hldGhlciB0byBxdW90ZSB0aGUganNvbiB2YWx1ZSB3aGVuIGZvcm1hdHRpbmcgdGhpcyBEYXRhVHlwZSBmb3IgT0RhdGEuICovXHJcbiAgZGVjbGFyZSBxdW90ZUpzb25PRGF0YT86IGJvb2xlYW47XHJcblxyXG4gIC8qKiBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gdG8gY3JlYXRlIGEgW1tWYWxpZGF0b3JdXSB0byBiZSB1c2VkIGluIHZhbGlkYXRpbmcgaW5zdGFuY2VzIG9mIHRoaXMgRGF0YVR5cGUuICovXHJcbiAgdmFsaWRhdG9yQ3Rvcj8oY29udGV4dD86IGFueSk6IFZhbGlkYXRvcjtcclxuICAvKiogXHJcbiAgT3B0aW9uYWwgZnVuY3Rpb24gdG8gbm9ybWFsaXplIGEgZGF0YSB2YWx1ZSBmb3IgY29tcGFyaXNvbiwgaWYgaXRzIHZhbHVlIGNhbm5vdCBiZSB1c2VkIGRpcmVjdGx5LiBcclxuICBOb3RlIHRoYXQgdGhpcyB3aWxsIGJlIGNhbGxlZCBlYWNoIHRpbWUgYSBwcm9wZXJ0eSBpcyBjaGFuZ2VkLCBzbyBtYWtlIGl0IGZhc3QuXHJcbiAgQHJldHVybiB2YWx1ZSBhcHByb3ByaWF0ZSBmb3IgdGhpcyBEYXRhVHlwZVxyXG4gICoqL1xyXG4gIG5vcm1hbGl6ZT8odmFsdWU6IGFueSk6IGFueTtcclxuICAvKipcclxuICBPcHRpb25hbCBmdW5jdGlvbiB0byBjb252ZXJ0IGEgcmF3IChzZXJ2ZXIpIHZhbHVlIGZyb20gc3RyaW5nIHRvIHRoaXMgRGF0YVR5cGUuXHJcbiAgQHJldHVybiB2YWx1ZSBhcHByb3ByaWF0ZSBmb3IgdGhpcyBEYXRhVHlwZVxyXG4gICoqL1xyXG4gIHBhcnNlUmF3VmFsdWU/KHZhbHVlOiBhbnkpOiBhbnk7XHJcbiAgLyoqXHJcbiAgT3B0aW9uYWwgZnVuY3Rpb24gdG8gY29udmVydCBhIHZhbHVlIGZyb20gc3RyaW5nIHRvIHRoaXMgRGF0YVR5cGUuICBOb3RlIHRoYXQgdGhpcyB3aWxsIGJlIGNhbGxlZCBlYWNoIHRpbWUgYSBwcm9wZXJ0eSBpcyBjaGFuZ2VkLCBzbyBtYWtlIGl0IGZhc3QuXHJcbiAgQHJldHVybiB2YWx1ZSBhcHByb3ByaWF0ZSBmb3IgdGhpcyBEYXRhVHlwZSBcclxuICAqKi9cclxuICBwYXJzZT8oc291cmNlOiBhbnksIHNvdXJjZVR5cGVOYW1lOiBzdHJpbmcpOiBhbnk7XHJcbiAgLyoqIFxyXG4gIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGZvcm1hdCB0aGlzIERhdGFUeXBlIGZvciBPRGF0YSBxdWVyaWVzLlxyXG4gIEByZXR1cm4gdmFsdWUgYXBwcm9wcmlhdGUgZm9yIE9EYXRhIHF1ZXJ5ICAgXHJcbiAgKiovXHJcbiAgZm10T0RhdGE/KHZhbHVlOiBhbnkpOiBhbnk7XHJcbiAgLyoqIFxyXG4gIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGdldCB0aGUgbmV4dCB2YWx1ZSBmb3Iga2V5IGdlbmVyYXRpb24sIGlmIHRoaXMgZGF0YXR5cGUgaXMgdXNlZCBhcyBhIGtleS4gIFVzZXMgYW4gaW50ZXJuYWwgdGFibGUgb2YgcHJldmlvdXMgdmFsdWVzLlxyXG4gIEByZXR1cm4gdmFsdWUgYXBwcm9wcmlhdGUgZm9yIHRoaXMgRGF0YVR5cGUgXHJcbiAgKiovXHJcbiAgZ2V0TmV4dD8oKTogYW55O1xyXG4gIC8qKlxyXG4gIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGdldCB0aGUgbmV4dCB2YWx1ZSB3aGVuIHRoZSBkYXRhdHlwZSBpcyB1c2VkIGFzIGEgY29uY3VycmVuY3kgcHJvcGVydHkuXHJcbiAgQHBhcmFtIHByZXZpb3VzVmFsdWVcclxuICBAcmV0dXJuIHRoZSBuZXh0IGNvbmN1cnJlbmN5IHZhbHVlLCB3aGljaCBtYXkgYmUgYSBmdW5jdGlvbiBvZiB0aGUgcHJldmlvdXNWYWx1ZS5cclxuICAqKi9cclxuICBnZXRDb25jdXJyZW5jeVZhbHVlPyhwcmV2aW91c1ZhbHVlPzogYW55KTogYW55O1xyXG5cclxuICBzdGF0aWMgcGFyc2VEYXRlRnJvbVNlcnZlciA9ICh2YWx1ZTogYW55KSA9PiBEYXRhVHlwZS5wYXJzZURhdGVBc1VUQyh2YWx1ZSk7XHJcbiAgLy8gc2FtZSBlZmZlY3QgYXMgYWJvdmUgYnV0IGRvZXNuJ3QgZ2l2ZSByaWdodCBUU0RPQy5cclxuICAvLyBzdGF0aWMgcGFyc2VEYXRlRnJvbVNlcnZlciA9IERhdGFUeXBlLnBhcnNlRGF0ZUFzVVRDO1xyXG5cclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBzdGF0aWMgY29uc3RhbnRzOiB7IHN0cmluZ1ByZWZpeDogc3RyaW5nLCBuZXh0TnVtYmVyOiBudW1iZXIsIG5leHROdW1iZXJJbmNyZW1lbnQ6IG51bWJlciB9O1xyXG5cclxuICBzdGF0aWMgU3RyaW5nID0gbmV3IERhdGFUeXBlKHtcclxuICAgIGRlZmF1bHRWYWx1ZTogXCJcIixcclxuICAgIHBhcnNlOiBjb2VyY2VUb1N0cmluZyxcclxuICAgIGZtdE9EYXRhOiBmbXRTdHJpbmcsXHJcbiAgICBnZXROZXh0OiBnZXROZXh0U3RyaW5nXHJcbiAgfSk7XHJcblxyXG4gIHN0YXRpYyBJbnQ2NCA9IG5ldyBEYXRhVHlwZSh7XHJcbiAgICBkZWZhdWx0VmFsdWU6IDAsXHJcbiAgICBpc051bWVyaWM6IHRydWUsXHJcbiAgICBpc0ludGVnZXI6IHRydWUsXHJcbiAgICBxdW90ZUpzb25PRGF0YTogdHJ1ZSxcclxuICAgIHBhcnNlOiBjb2VyY2VUb0ludCxcclxuICAgIGZtdE9EYXRhOiBtYWtlRmxvYXRGbXQoXCJMXCIpLFxyXG4gICAgZ2V0TmV4dDogZ2V0TmV4dE51bWJlclxyXG4gIH0pO1xyXG5cclxuICBzdGF0aWMgSW50MzIgPSBuZXcgRGF0YVR5cGUoe1xyXG4gICAgZGVmYXVsdFZhbHVlOiAwLFxyXG4gICAgaXNOdW1lcmljOiB0cnVlLFxyXG4gICAgaXNJbnRlZ2VyOiB0cnVlLFxyXG4gICAgcGFyc2U6IGNvZXJjZVRvSW50LFxyXG4gICAgZm10T0RhdGE6IGZtdEludCxcclxuICAgIGdldE5leHQ6IGdldE5leHROdW1iZXJcclxuICB9KTtcclxuXHJcbiAgc3RhdGljIEludDE2ID0gbmV3IERhdGFUeXBlKHtcclxuICAgIGRlZmF1bHRWYWx1ZTogMCxcclxuICAgIGlzTnVtZXJpYzogdHJ1ZSxcclxuICAgIGlzSW50ZWdlcjogdHJ1ZSxcclxuICAgIHBhcnNlOiBjb2VyY2VUb0ludCxcclxuICAgIGZtdE9EYXRhOiBmbXRJbnQsXHJcbiAgICBnZXROZXh0OiBnZXROZXh0TnVtYmVyXHJcbiAgfSk7XHJcblxyXG4gIHN0YXRpYyBCeXRlID0gbmV3IERhdGFUeXBlKHtcclxuICAgIGRlZmF1bHRWYWx1ZTogMCxcclxuICAgIGlzTnVtZXJpYzogdHJ1ZSxcclxuICAgIGlzSW50ZWdlcjogdHJ1ZSxcclxuICAgIHBhcnNlOiBjb2VyY2VUb0ludCxcclxuICAgIGZtdE9EYXRhOiBmbXRJbnRcclxuICB9KTtcclxuXHJcbiAgc3RhdGljIERlY2ltYWwgPSBuZXcgRGF0YVR5cGUoe1xyXG4gICAgZGVmYXVsdFZhbHVlOiAwLFxyXG4gICAgaXNOdW1lcmljOiB0cnVlLFxyXG4gICAgcXVvdGVKc29uT0RhdGE6IHRydWUsXHJcbiAgICBpc0Zsb2F0OiB0cnVlLFxyXG4gICAgcGFyc2U6IGNvZXJjZVRvRmxvYXQsXHJcbiAgICBmbXRPRGF0YTogbWFrZUZsb2F0Rm10KFwibVwiKSxcclxuICAgIGdldE5leHQ6IGdldE5leHROdW1iZXJcclxuICB9KTtcclxuXHJcbiAgc3RhdGljIERvdWJsZSA9IG5ldyBEYXRhVHlwZSh7XHJcbiAgICBkZWZhdWx0VmFsdWU6IDAsXHJcbiAgICBpc051bWVyaWM6IHRydWUsXHJcbiAgICBpc0Zsb2F0OiB0cnVlLFxyXG4gICAgcGFyc2U6IGNvZXJjZVRvRmxvYXQsXHJcbiAgICBmbXRPRGF0YTogbWFrZUZsb2F0Rm10KFwiZFwiKSxcclxuICAgIGdldE5leHQ6IGdldE5leHROdW1iZXJcclxuICB9KTtcclxuXHJcbiAgc3RhdGljIFNpbmdsZSA9IG5ldyBEYXRhVHlwZSh7XHJcbiAgICBkZWZhdWx0VmFsdWU6IDAsXHJcbiAgICBpc051bWVyaWM6IHRydWUsXHJcbiAgICBpc0Zsb2F0OiB0cnVlLFxyXG4gICAgcGFyc2U6IGNvZXJjZVRvRmxvYXQsXHJcbiAgICBmbXRPRGF0YTogbWFrZUZsb2F0Rm10KFwiZlwiKSxcclxuICAgIGdldE5leHQ6IGdldE5leHROdW1iZXJcclxuICB9KTtcclxuXHJcbiAgc3RhdGljIERhdGVPbmx5ID0gbmV3IERhdGFUeXBlKHtcclxuICAgIGRlZmF1bHRWYWx1ZTogbmV3IERhdGUoMTkwMCwgMCwgMSksXHJcbiAgICBpc0RhdGU6IHRydWUsXHJcbiAgICBwYXJzZTogY29lcmNlVG9EYXRlT25seSxcclxuICAgIHBhcnNlUmF3VmFsdWU6IHBhcnNlUmF3RGF0ZU9ubHksXHJcbiAgICBub3JtYWxpemU6IGZ1bmN0aW9uICh2YWx1ZTogYW55KSB7IHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5nZXRUaW1lICYmIChuZXcgRGF0ZSh2YWx1ZS5nZXRZZWFyKCksIHZhbHVlLmdldE1vbnRoKCksIHZhbHVlLmdldERhdGUoKSkpLmdldFRpbWUoKTsgfSwgLy8gZGF0ZXMgZG9uJ3QgcGVyZm9ybSBlcXVhbGl0eSBjb21wYXJpc29ucyBwcm9wZXJseVxyXG4gICAgZm10T0RhdGE6IGZtdERhdGVPbmx5LFxyXG4gICAgZ2V0TmV4dDogZ2V0TmV4dERhdGVUaW1lLFxyXG4gICAgZ2V0Q29uY3VycmVuY3lWYWx1ZTogZ2V0Q29uY3VycmVuY3lEYXRlVGltZVxyXG4gIH0pO1xyXG5cclxuICBzdGF0aWMgRGF0ZVRpbWUgPSBuZXcgRGF0YVR5cGUoe1xyXG4gICAgZGVmYXVsdFZhbHVlOiBuZXcgRGF0ZSgxOTAwLCAwLCAxKSxcclxuICAgIGlzRGF0ZTogdHJ1ZSxcclxuICAgIHBhcnNlOiBjb2VyY2VUb0RhdGUsXHJcbiAgICBwYXJzZVJhd1ZhbHVlOiBwYXJzZVJhd0RhdGUsXHJcbiAgICBub3JtYWxpemU6IGZ1bmN0aW9uICh2YWx1ZTogYW55KSB7IHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5nZXRUaW1lICYmIHZhbHVlLmdldFRpbWUoKTsgfSwgLy8gZGF0ZXMgZG9uJ3QgcGVyZm9ybSBlcXVhbGl0eSBjb21wYXJpc29ucyBwcm9wZXJseVxyXG4gICAgZm10T0RhdGE6IGZtdERhdGVUaW1lLFxyXG4gICAgZ2V0TmV4dDogZ2V0TmV4dERhdGVUaW1lLFxyXG4gICAgZ2V0Q29uY3VycmVuY3lWYWx1ZTogZ2V0Q29uY3VycmVuY3lEYXRlVGltZVxyXG4gIH0pO1xyXG5cclxuICBzdGF0aWMgRGF0ZVRpbWVPZmZzZXQgPSBuZXcgRGF0YVR5cGUoe1xyXG4gICAgZGVmYXVsdFZhbHVlOiBuZXcgRGF0ZSgxOTAwLCAwLCAxKSxcclxuICAgIGlzRGF0ZTogdHJ1ZSxcclxuICAgIHBhcnNlOiBjb2VyY2VUb0RhdGUsXHJcbiAgICBwYXJzZVJhd1ZhbHVlOiBwYXJzZVJhd0RhdGUsXHJcbiAgICBub3JtYWxpemU6IGZ1bmN0aW9uICh2YWx1ZTogYW55KSB7IHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5nZXRUaW1lICYmIHZhbHVlLmdldFRpbWUoKTsgfSwgLy8gZGF0ZXMgZG9uJ3QgcGVyZm9ybSBlcXVhbGl0eSBjb21wYXJpc29ucyBwcm9wZXJseVxyXG4gICAgZm10T0RhdGE6IGZtdERhdGVUaW1lT2Zmc2V0LFxyXG4gICAgZ2V0TmV4dDogZ2V0TmV4dERhdGVUaW1lLFxyXG4gICAgZ2V0Q29uY3VycmVuY3lWYWx1ZTogZ2V0Q29uY3VycmVuY3lEYXRlVGltZVxyXG4gIH0pO1xyXG5cclxuICBzdGF0aWMgVGltZSA9IG5ldyBEYXRhVHlwZSh7XHJcbiAgICBkZWZhdWx0VmFsdWU6IFwiUFQwU1wiLFxyXG4gICAgZm10T0RhdGE6IGZtdFRpbWUsXHJcbiAgICBwYXJzZVJhd1ZhbHVlOiBEYXRhVHlwZS5wYXJzZVRpbWVGcm9tU2VydmVyXHJcbiAgfSk7XHJcblxyXG4gIHN0YXRpYyBCb29sZWFuID0gbmV3IERhdGFUeXBlKHtcclxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXHJcbiAgICBwYXJzZTogY29lcmNlVG9Cb29sLFxyXG4gICAgZm10T0RhdGE6IGZtdEJvb2xlYW5cclxuICB9KTtcclxuXHJcbiAgc3RhdGljIEd1aWQgPSBuZXcgRGF0YVR5cGUoe1xyXG4gICAgZGVmYXVsdFZhbHVlOiBcIjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxyXG4gICAgcGFyc2U6IGNvZXJjZVRvR3VpZCxcclxuICAgIGZtdE9EYXRhOiBmbXRHdWlkLFxyXG4gICAgZ2V0TmV4dDogZ2V0TmV4dEd1aWQsXHJcbiAgICBwYXJzZVJhd1ZhbHVlOiBmdW5jdGlvbiAodmFsOiBzdHJpbmcpIHsgcmV0dXJuIHZhbC50b0xvd2VyQ2FzZSgpOyB9LFxyXG4gICAgZ2V0Q29uY3VycmVuY3lWYWx1ZTogY29yZS5nZXRVdWlkXHJcbiAgfSk7XHJcblxyXG4gIHN0YXRpYyBCaW5hcnkgPSBuZXcgRGF0YVR5cGUoe1xyXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsLFxyXG4gICAgZm10T0RhdGE6IGZtdEJpbmFyeSxcclxuICAgIHBhcnNlUmF3VmFsdWU6IHBhcnNlUmF3QmluYXJ5XHJcbiAgfSk7XHJcblxyXG4gIHN0YXRpYyBVbmRlZmluZWQgPSBuZXcgRGF0YVR5cGUoe1xyXG4gICAgZGVmYXVsdFZhbHVlOiB1bmRlZmluZWQsXHJcbiAgICBmbXRPRGF0YTogZm10VW5kZWZpbmVkXHJcbiAgfSk7XHJcblxyXG4gIHN0YXRpYyBnZXRDb21wYXJhYmxlRm4oZGF0YVR5cGU/OiBEYXRhVHlwZSkge1xyXG4gICAgaWYgKGRhdGFUeXBlICYmIGRhdGFUeXBlLm5vcm1hbGl6ZSkge1xyXG4gICAgICByZXR1cm4gZGF0YVR5cGUubm9ybWFsaXplO1xyXG4gICAgfSBlbHNlIGlmIChkYXRhVHlwZSA9PT0gRGF0YVR5cGUuVGltZSkge1xyXG4gICAgICAvLyBkdXJhdGlvbnMgbXVzdCBiZSBjb252ZXJ0ZWQgdG8gY29tcGFyZSB0aGVtXHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSAmJiBjb3JlLmR1cmF0aW9uVG9TZWNvbmRzKHZhbHVlKTtcclxuICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFRPRE86IF9faWRlbnRpdHlcclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIFJldHVybnMgdGhlIERhdGFUeXBlIGZvciBhIHNwZWNpZmllZCBFRE0gdHlwZSBuYW1lLlxyXG4gICoqL1xyXG4gIHN0YXRpYyBmcm9tRWRtRGF0YVR5cGUodHlwZU5hbWU6IHN0cmluZykge1xyXG4gICAgbGV0IGR0OiBEYXRhVHlwZSB8IHVuZGVmaW5lZDtcclxuICAgIGxldCBwYXJ0cyA9IHR5cGVOYW1lLnNwbGl0KFwiLlwiKTtcclxuICAgIGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgIGxldCBzaW1wbGVOYW1lID0gcGFydHNbMV07XHJcbiAgICAgIGlmIChzaW1wbGVOYW1lID09PSBcImltYWdlXCIpIHtcclxuICAgICAgICAvLyBoYWNrXHJcbiAgICAgICAgZHQgPSBEYXRhVHlwZS5CeXRlO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMikge1xyXG4gICAgICAgIGR0ID0gRGF0YVR5cGUuZnJvbU5hbWUoc2ltcGxlTmFtZSkgfHwgRGF0YVR5cGUuVW5kZWZpbmVkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGVudW1cclxuICAgICAgICAvLyBkdCA9IERhdGFUeXBlLkludDMyO1xyXG4gICAgICAgIGR0ID0gRGF0YVR5cGUuU3RyaW5nO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGR0O1xyXG4gIH1cclxuXHJcbiAgLyoqIFJldHVybnMgdGhlIERhdGFUeXBlIGZvciBhIHNwZWNpZmllZCBpbnB1dC4gKi9cclxuICBzdGF0aWMgZnJvbVZhbHVlKHZhbDogYW55KSB7XHJcbiAgICBpZiAoY29yZS5pc0RhdGUodmFsKSkgcmV0dXJuIERhdGFUeXBlLkRhdGVUaW1lO1xyXG4gICAgc3dpdGNoICh0eXBlb2YgdmFsKSB7XHJcbiAgICAgIGNhc2UgXCJzdHJpbmdcIjpcclxuICAgICAgICBpZiAoY29yZS5pc0d1aWQodmFsKSkgcmV0dXJuIERhdGFUeXBlLkd1aWQ7XHJcbiAgICAgICAgLy8gdGhlID4zIGJlbG93IGlzIGEgaGFjayB0byBpbnN1cmUgdGhhdCBpZiB3ZSBhcmUgaW5mZXJyaW5nIGRhdGF0eXBlcyB0aGF0XHJcbiAgICAgICAgLy8gdmVyeSBzaG9ydCBzdHJpbmdzIHRoYXQgYXJlIHZhbGlkIGJ1dCB1bmxpa2VseSBJU08gZW5jb2RlZCBUaW1lJ3MgYXJlIHRyZWF0ZWQgYXMgc3RyaW5ncyBpbnN0ZWFkLlxyXG4gICAgICAgIGVsc2UgaWYgKGNvcmUuaXNEdXJhdGlvbih2YWwpICYmIHZhbC5sZW5ndGggPiAzKSByZXR1cm4gRGF0YVR5cGUuVGltZTtcclxuICAgICAgICBlbHNlIGlmIChjb3JlLmlzRGF0ZVN0cmluZyh2YWwpKSByZXR1cm4gRGF0YVR5cGUuRGF0ZVRpbWU7XHJcbiAgICAgICAgcmV0dXJuIERhdGFUeXBlLlN0cmluZztcclxuICAgICAgY2FzZSBcImJvb2xlYW5cIjpcclxuICAgICAgICByZXR1cm4gRGF0YVR5cGUuQm9vbGVhbjtcclxuICAgICAgY2FzZSBcIm51bWJlclwiOlxyXG4gICAgICAgIHJldHVybiBEYXRhVHlwZS5Eb3VibGU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gRGF0YVR5cGUuVW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHBhcnNlVGltZUZyb21TZXJ2ZXIoc291cmNlOiBhbnkpIHtcclxuICAgIGlmICh0eXBlb2Ygc291cmNlID09PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gc291cmNlO1xyXG4gICAgfVxyXG4gICAgLy8gT0RBVEEgdjMgZm9ybWF0XHJcbiAgICBpZiAoc291cmNlICYmIHNvdXJjZS5fX2VkbVR5cGUgPT09ICdFZG0uVGltZScpIHtcclxuICAgICAgbGV0IHNlY29uZHMgPSBNYXRoLmZsb29yKHNvdXJjZS5tcyAvIDEwMDApO1xyXG4gICAgICByZXR1cm4gJ1BUJyArIHNlY29uZHMgKyAnUyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc291cmNlO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHBhcnNlRGF0ZUFzVVRDKHNvdXJjZTogYW55KSB7XHJcbiAgICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgLy8gY29udmVydCB0byBVVEMgc3RyaW5nIGlmIG5vIHRpbWUgem9uZSBzcGVjaWZpZXIuXHJcbiAgICAgIGxldCBpc0xvY2FsVGltZSA9IF9sb2NhbFRpbWVSZWdleC50ZXN0KHNvdXJjZSk7XHJcbiAgICAgIC8vIHZhciBpc0xvY2FsVGltZSA9ICFoYXNUaW1lWm9uZShzb3VyY2UpO1xyXG4gICAgICBzb3VyY2UgPSBpc0xvY2FsVGltZSA/IHNvdXJjZSArICdaJyA6IHNvdXJjZTtcclxuICAgIH1cclxuICAgIHNvdXJjZSA9IG5ldyBEYXRlKERhdGUucGFyc2Uoc291cmNlKSk7XHJcbiAgICByZXR1cm4gc291cmNlO1xyXG4gIH1cclxuXHJcbiAgLyoqIFBhcnNlIGFzIFVUQyB0aGVuIHNoaWZ0IHRvIGxvY2FsIHRpbWUgKi9cclxuICBzdGF0aWMgcGFyc2VEYXRlQXNMb2NhbChzb3VyY2U6IHN0cmluZykge1xyXG4gICAgdmFyIGR0ID0gRGF0YVR5cGUucGFyc2VEYXRlQXNVVEMoc291cmNlKTtcclxuICAgIGlmIChjb3JlLmlzRGF0ZShkdCkpIHtcclxuICAgICAgICBkdCA9IG5ldyBEYXRlKGR0LmdldFRpbWUoKSArIGR0LmdldFRpbWV6b25lT2Zmc2V0KCkqNjAwMDApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGR0O1xyXG4gIH07XHJcblxyXG4gIC8qKiBpZiB2YWwgaXMgYSBEYXRlLCByZXR1cm4gYSBkYXRlLW9ubHkgc3RyaW5nIGUuZy4gJzIwMjMtMTItMzEnICovXHJcbiAgc3RhdGljIHRvRGF0ZU9ubHlTdHJpbmcodmFsOiBhbnkpIHtcclxuICAgIC8vIERhdGVPbmx5IHR5cGVzIHNob3VsZCBub3QgaGF2ZSB0aW1lIGNvbXBvbmVudCwgYnV0IEpTT04uc3RyaW5naWZ5IG1ha2VzIGEgZnVsbCBJU08gc3RyaW5nLlxyXG4gICAgLy8gV2UgY29udmVydCBpdCB0byBzdHJpbmcgaGVyZSB0byBwcmV2ZW50IHRoYXQsIGFuZCBzaGlmdCB0aGUgdGltZSB6b25lIGJlY2F1c2UgdG9JU09TdHJpbmcgY29udmVydHMgdG8gVVRDLlxyXG4gICAgcmV0dXJuIHZhbCAmJiB2YWwuZ2V0VGltZSAmJiBuZXcgRGF0ZSh2YWwuZ2V0VGltZSgpIC0gdmFsLmdldFRpbWV6b25lT2Zmc2V0KCkqNjAwMDApLnRvSVNPU3RyaW5nKCkuc3Vic3RyaW5nKDAsIDEwKSB8fCB2YWw7XHJcbiAgfVxyXG5cclxuICAvKiogUmV0dXJucyBhIHJhdyB2YWx1ZSBjb252ZXJ0ZWQgdG8gdGhlIHNwZWNpZmllZCBEYXRhVHlwZSAqL1xyXG4gIHN0YXRpYyBwYXJzZVJhd1ZhbHVlKHZhbDogYW55LCBkYXRhVHlwZT86IERhdGFUeXBlKSB7XHJcbiAgICAvLyB1bmRlZmluZWQgdmFsdWVzIHdpbGwgYmUgdGhlIGRlZmF1bHQgZm9yIG1vc3QgdW5tYXBwZWQgcHJvcGVydGllcyBFWENFUFQgd2hlbiB0aGV5IGFyZSBzZXRcclxuICAgIC8vIGluIGEganNvblJlc3VsdHNBZGFwdGVyICggYW4gdW51c3VhbCB1c2UgY2FzZSkuXHJcbiAgICBpZiAodmFsID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICBpZiAoIXZhbCkgcmV0dXJuIHZhbDtcclxuICAgIGlmIChkYXRhVHlwZSAmJiBkYXRhVHlwZS5wYXJzZVJhd1ZhbHVlKSB7XHJcbiAgICAgIHZhbCA9IGRhdGFUeXBlLnBhcnNlUmF3VmFsdWUodmFsKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWw7XHJcbiAgfVxyXG5cclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICAvLyB1c2VkIGR1cmluZyBpbml0aWFsaXphdGlvbjsgdmlzaWJsZSBvbiBpbnN0YW5jZSBmb3IgdGVzdGluZyBwdXJwb3Nlcy5cclxuICBzdGF0aWMgX3Jlc2V0Q29uc3RhbnRzKCkge1xyXG4gICAgRGF0YVR5cGUuY29uc3RhbnRzID0ge1xyXG4gICAgICBzdHJpbmdQcmVmaXg6IFwiS19cIixcclxuICAgICAgbmV4dE51bWJlcjogLTEsXHJcbiAgICAgIG5leHROdW1iZXJJbmNyZW1lbnQ6IC0xXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbn1cclxuRGF0YVR5cGUucHJvdG90eXBlLl8kdHlwZU5hbWUgPSBcIkRhdGFUeXBlXCI7XHJcbkVycm9yWyd4J10gPSBEYXRhVHlwZS5fcmVzZXRDb25zdGFudHMoKTtcclxuRXJyb3JbJ3gnXSA9IERhdGFUeXBlLnJlc29sdmVTeW1ib2xzKCk7XHJcbkVycm9yWyd4J10gPSBEYXRhVHlwZS5nZXRTeW1ib2xzKCkuZm9yRWFjaCgoc3ltOiBEYXRhVHlwZSkgPT4gc3ltLnZhbGlkYXRvckN0b3IgPSBnZXRWYWxpZGF0b3JDdG9yKHN5bSkpO1xyXG5cclxuLy8gcHJpdmF0ZSBmdW5jdGlvbnM7XHJcblxyXG5cclxuZnVuY3Rpb24gZ2V0VmFsaWRhdG9yQ3RvcihkYXRhVHlwZTogRGF0YVR5cGUpIHtcclxuICBzd2l0Y2ggKGRhdGFUeXBlKSB7XHJcbiAgICBjYXNlIERhdGFUeXBlLlN0cmluZzpcclxuICAgICAgcmV0dXJuIFZhbGlkYXRvci5zdHJpbmc7XHJcbiAgICBjYXNlIERhdGFUeXBlLkludDY0OlxyXG4gICAgICByZXR1cm4gVmFsaWRhdG9yLmludDY0O1xyXG4gICAgY2FzZSBEYXRhVHlwZS5JbnQzMjpcclxuICAgICAgcmV0dXJuIFZhbGlkYXRvci5pbnQzMjtcclxuICAgIGNhc2UgRGF0YVR5cGUuSW50MTY6XHJcbiAgICAgIHJldHVybiBWYWxpZGF0b3IuaW50MTY7XHJcbiAgICBjYXNlIERhdGFUeXBlLkRlY2ltYWw6XHJcbiAgICAgIHJldHVybiBWYWxpZGF0b3IubnVtYmVyO1xyXG4gICAgY2FzZSBEYXRhVHlwZS5Eb3VibGU6XHJcbiAgICAgIHJldHVybiBWYWxpZGF0b3IubnVtYmVyO1xyXG4gICAgY2FzZSBEYXRhVHlwZS5TaW5nbGU6XHJcbiAgICAgIHJldHVybiBWYWxpZGF0b3IubnVtYmVyO1xyXG4gICAgY2FzZSBEYXRhVHlwZS5EYXRlVGltZTpcclxuICAgICAgcmV0dXJuIFZhbGlkYXRvci5kYXRlO1xyXG4gICAgY2FzZSBEYXRhVHlwZS5EYXRlVGltZU9mZnNldDpcclxuICAgICAgcmV0dXJuIFZhbGlkYXRvci5kYXRlO1xyXG4gICAgY2FzZSBEYXRhVHlwZS5Cb29sZWFuOlxyXG4gICAgICByZXR1cm4gVmFsaWRhdG9yLmJvb2w7XHJcbiAgICBjYXNlIERhdGFUeXBlLkd1aWQ6XHJcbiAgICAgIHJldHVybiBWYWxpZGF0b3IuZ3VpZDtcclxuICAgIGNhc2UgRGF0YVR5cGUuQnl0ZTpcclxuICAgICAgcmV0dXJuIFZhbGlkYXRvci5ieXRlO1xyXG4gICAgY2FzZSBEYXRhVHlwZS5CaW5hcnk6XHJcbiAgICAgIC8vIFRPRE86IGRvbid0IHF1aXRlIGtub3cgaG93IHRvIHZhbGlkYXRlIHRoaXMgeWV0LlxyXG4gICAgICByZXR1cm4gVmFsaWRhdG9yLm5vbmU7XHJcbiAgICBjYXNlIERhdGFUeXBlLlRpbWU6XHJcbiAgICAgIHJldHVybiBWYWxpZGF0b3IuZHVyYXRpb247XHJcbiAgICBjYXNlIERhdGFUeXBlLlVuZGVmaW5lZDpcclxuICAgICAgcmV0dXJuIFZhbGlkYXRvci5ub25lO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0TmV4dFN0cmluZygpIHtcclxuICByZXR1cm4gRGF0YVR5cGUuY29uc3RhbnRzLnN0cmluZ1ByZWZpeCArIGdldE5leHROdW1iZXIoKS50b1N0cmluZygpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXROZXh0TnVtYmVyKCkge1xyXG4gIGxldCByZXN1bHQgPSBEYXRhVHlwZS5jb25zdGFudHMubmV4dE51bWJlcjtcclxuICBEYXRhVHlwZS5jb25zdGFudHMubmV4dE51bWJlciArPSBEYXRhVHlwZS5jb25zdGFudHMubmV4dE51bWJlckluY3JlbWVudDtcclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXROZXh0R3VpZCgpIHtcclxuICByZXR1cm4gY29yZS5nZXRVdWlkKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldE5leHREYXRlVGltZSgpIHtcclxuICByZXR1cm4gbmV3IERhdGUoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Q29uY3VycmVuY3lEYXRlVGltZSh2YWw6IGFueSkge1xyXG4gIC8vIHVzZSB0aGUgY3VycmVudCBkYXRldGltZSBidXQgaW5zdXJlIHRoYXQgaXQgaXMgZGlmZmVyZW50IGZyb20gcHJldmlvdXMgY2FsbC5cclxuICBsZXQgZHQgPSBuZXcgRGF0ZSgpO1xyXG4gIGxldCBkdDIgPSBuZXcgRGF0ZSgpO1xyXG4gIHdoaWxlIChkdC5nZXRUaW1lKCkgPT09IGR0Mi5nZXRUaW1lKCkpIHtcclxuICAgIGR0MiA9IG5ldyBEYXRlKCk7XHJcbiAgfVxyXG4gIHJldHVybiBkdDI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvZXJjZVRvU3RyaW5nKHNvdXJjZTogYW55LCBzb3VyY2VUeXBlTmFtZT86IHN0cmluZykge1xyXG4gIHJldHVybiAoc291cmNlID09IG51bGwpID8gc291cmNlIDogc291cmNlLnRvU3RyaW5nKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvZXJjZVRvR3VpZChzb3VyY2U6IGFueSwgc291cmNlVHlwZU5hbWU6IHN0cmluZykge1xyXG4gIGlmIChzb3VyY2VUeXBlTmFtZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgcmV0dXJuIHNvdXJjZS50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICB9XHJcbiAgcmV0dXJuIHNvdXJjZTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29lcmNlVG9JbnQoc291cmNlOiBhbnksIHNvdXJjZVR5cGVOYW1lOiBzdHJpbmcpIHtcclxuICBpZiAoc291cmNlVHlwZU5hbWUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgIGxldCBzcmMgPSBzb3VyY2UudHJpbSgpO1xyXG4gICAgaWYgKHNyYyA9PT0gXCJcIikgcmV0dXJuIG51bGw7XHJcbiAgICBsZXQgdmFsID0gcGFyc2VJbnQoc3JjLCAxMCk7XHJcbiAgICByZXR1cm4gaXNOYU4odmFsKSA/IHNvdXJjZSA6IHZhbDtcclxuICB9IGVsc2UgaWYgKHNvdXJjZVR5cGVOYW1lID09PSBcIm51bWJlclwiKSB7XHJcbiAgICByZXR1cm4gTWF0aC5yb3VuZChzb3VyY2UpO1xyXG4gIH1cclxuICAvLyBkbyB3ZSB3YW50IHRvIGNvZXJjZSBmbG9hdHMgLT4gaW50c1xyXG4gIHJldHVybiBzb3VyY2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvZXJjZVRvRmxvYXQoc291cmNlOiBhbnksIHNvdXJjZVR5cGVOYW1lOiBzdHJpbmcpIHtcclxuICBpZiAoc291cmNlVHlwZU5hbWUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgIGxldCBzcmMgPSBzb3VyY2UudHJpbSgpO1xyXG4gICAgaWYgKHNyYyA9PT0gXCJcIikgcmV0dXJuIG51bGw7XHJcbiAgICBsZXQgdmFsID0gcGFyc2VGbG9hdChzcmMpO1xyXG4gICAgcmV0dXJuIGlzTmFOKHZhbCkgPyBzb3VyY2UgOiB2YWw7XHJcbiAgfVxyXG4gIHJldHVybiBzb3VyY2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvZXJjZVRvRGF0ZShzb3VyY2U6IGFueSwgc291cmNlVHlwZU5hbWU6IHN0cmluZykge1xyXG4gIGxldCB2YWw6IGFueTtcclxuICBpZiAoc291cmNlVHlwZU5hbWUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgIGxldCBzcmMgPSBzb3VyY2UudHJpbSgpO1xyXG4gICAgaWYgKCFzb3VyY2UgfHwgIXNvdXJjZS50cmltKCkpIHsgcmV0dXJuIG51bGw7IH1cclxuICAgIHZhbCA9IG5ldyBEYXRlKERhdGUucGFyc2Uoc3JjKSk7XHJcbiAgICByZXR1cm4gY29yZS5pc0RhdGUodmFsKSA/IHZhbCA6IHNvdXJjZTtcclxuICB9IGVsc2UgaWYgKHNvdXJjZVR5cGVOYW1lID09PSBcIm51bWJlclwiKSB7XHJcbiAgICB2YWwgPSBuZXcgRGF0ZShzb3VyY2UpO1xyXG4gICAgcmV0dXJuIGNvcmUuaXNEYXRlKHZhbCkgPyB2YWwgOiBzb3VyY2U7XHJcbiAgfVxyXG4gIHJldHVybiBzb3VyY2U7XHJcbn1cclxuXHJcbi8qKiBUcmltIG9mZiB0aW1lIHBvcnRpb24gYmVmb3JlIHBhcnNlIGlmIHNvdXJjZSBpcyBzdHJpbmcgKi9cclxuZnVuY3Rpb24gY29lcmNlVG9EYXRlT25seShzb3VyY2U6IGFueSwgc291cmNlVHlwZU5hbWU6IHN0cmluZykge1xyXG4gIGxldCB2YWw6IGFueTtcclxuICBpZiAoc291cmNlVHlwZU5hbWUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgIGlmICghc291cmNlIHx8ICFzb3VyY2UudHJpbSgpKSB7IHJldHVybiBudWxsOyB9XHJcbiAgICB2YWwgPSBEYXRhVHlwZS5wYXJzZURhdGVBc0xvY2FsKHZhbCk7XHJcbiAgICByZXR1cm4gY29yZS5pc0RhdGUodmFsKSA/IHZhbCA6IHNvdXJjZTtcclxuICB9IGVsc2UgaWYgKHNvdXJjZVR5cGVOYW1lID09PSBcIm51bWJlclwiKSB7XHJcbiAgICB2YWwgPSBuZXcgRGF0ZShzb3VyY2UpO1xyXG4gICAgcmV0dXJuIGNvcmUuaXNEYXRlKHZhbCkgPyB2YWwgOiBzb3VyY2U7XHJcbiAgfVxyXG4gIHJldHVybiBzb3VyY2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvZXJjZVRvQm9vbChzb3VyY2U6IGFueSwgc291cmNlVHlwZU5hbWU6IHN0cmluZykge1xyXG4gIGlmIChzb3VyY2VUeXBlTmFtZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgbGV0IHNyYyA9IHNvdXJjZS50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgIGlmIChzcmMgPT09IFwiZmFsc2VcIiB8fCBzcmMgPT09IFwiXCIpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmIChzcmMgPT09IFwidHJ1ZVwiKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHNvdXJjZTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIHNvdXJjZTtcclxufVxyXG5cclxuZnVuY3Rpb24gZm10U3RyaW5nKHZhbDogYW55KSB7XHJcbiAgcmV0dXJuIHZhbCA9PSBudWxsID8gbnVsbCA6IFwiJ1wiICsgdmFsLnJlcGxhY2UoLycvZywgXCInJ1wiKSArIFwiJ1wiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBmbXRJbnQodmFsOiBhbnkpIHtcclxuICByZXR1cm4gdmFsID09IG51bGwgPyBudWxsIDogKCh0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiKSA/IHBhcnNlSW50KHZhbCwgMTApIDogdmFsKTtcclxufVxyXG5cclxuZnVuY3Rpb24gbWFrZUZsb2F0Rm10KGZtdFN1ZmZpeDogc3RyaW5nKSB7XHJcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWw6IGFueSkge1xyXG4gICAgaWYgKHZhbCA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgIGlmICh0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIHZhbCA9IHBhcnNlRmxvYXQodmFsKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWwgKyBmbXRTdWZmaXg7XHJcbiAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gZm10RGF0ZVRpbWUodmFsOiBEYXRlKSB7XHJcbiAgaWYgKHZhbCA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICB0cnkge1xyXG4gICAgcmV0dXJuIFwiZGF0ZXRpbWUnXCIgKyB2YWwudG9JU09TdHJpbmcoKSArIFwiJ1wiO1xyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIHRocm93RXJyb3IoXCInJTEnIGlzIG5vdCBhIHZhbGlkIGRhdGVUaW1lXCIsIHZhbCk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBmbXREYXRlT25seSh2YWw6IERhdGUpIHtcclxuICBpZiAodmFsID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gIHRyeSB7XHJcbiAgICByZXR1cm4gXCJkYXRlJ1wiICsgdmFsLnRvSVNPU3RyaW5nKCkuc3Vic3RyaW5nKDAsIDEwKSArIFwiJ1wiO1xyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIHRocm93RXJyb3IoXCInJTEnIGlzIG5vdCBhIHZhbGlkIGRhdGVUaW1lXCIsIHZhbCk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBmbXREYXRlVGltZU9mZnNldCh2YWw6IERhdGUpIHtcclxuICBpZiAodmFsID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gIHRyeSB7XHJcbiAgICByZXR1cm4gXCJkYXRldGltZW9mZnNldCdcIiArIHZhbC50b0lTT1N0cmluZygpICsgXCInXCI7XHJcbiAgfSBjYXRjaCAoZSkge1xyXG4gICAgdGhyb3dFcnJvcihcIiclMScgaXMgbm90IGEgdmFsaWQgZGF0ZVRpbWVcIiwgdmFsKTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZtdFRpbWUodmFsOiBhbnkpIHtcclxuICBpZiAodmFsID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gIGlmICghY29yZS5pc0R1cmF0aW9uKHZhbCkpIHtcclxuICAgIHRocm93RXJyb3IoXCInJTEnIGlzIG5vdCBhIHZhbGlkIElTTyA4NjAxIGR1cmF0aW9uXCIsIHZhbCk7XHJcbiAgfVxyXG4gIHJldHVybiBcInRpbWUnXCIgKyB2YWwgKyBcIidcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gZm10R3VpZCh2YWw6IGFueSkge1xyXG4gIGlmICh2YWwgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgaWYgKCFjb3JlLmlzR3VpZCh2YWwpKSB7XHJcbiAgICB0aHJvd0Vycm9yKFwiJyUxJyBpcyBub3QgYSB2YWxpZCBndWlkXCIsIHZhbCk7XHJcbiAgfVxyXG4gIHJldHVybiBcImd1aWQnXCIgKyB2YWwgKyBcIidcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gZm10Qm9vbGVhbih2YWw6IGFueSkge1xyXG4gIGlmICh2YWwgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgaWYgKHR5cGVvZiB2YWwgPT09IFwic3RyaW5nXCIpIHtcclxuICAgIHJldHVybiB2YWwudHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gISF2YWw7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBmbXRCaW5hcnkodmFsOiBhbnkpIHtcclxuICBpZiAodmFsID09IG51bGwpIHJldHVybiB2YWw7XHJcbiAgcmV0dXJuIFwiYmluYXJ5J1wiICsgdmFsICsgXCInXCI7XHJcbn1cclxuXHJcbi8vIFRPRE86IHVzZSBfX2lkZW50aXR5IGluc3RlYWQ7XHJcbmZ1bmN0aW9uIGZtdFVuZGVmaW5lZCh2YWw6IGFueSkge1xyXG4gIHJldHVybiB2YWw7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRocm93RXJyb3IobXNnOiBzdHJpbmcsIHZhbDogYW55KSB7XHJcbiAgbXNnID0gY29yZS5mb3JtYXRTdHJpbmcobXNnLCB2YWwpO1xyXG4gIHRocm93IG5ldyBFcnJvcihtc2cpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZVJhd0RhdGUodmFsOiBhbnkpIHtcclxuICBpZiAoIWNvcmUuaXNEYXRlKHZhbCkpIHtcclxuICAgIHZhbCA9IERhdGFUeXBlLnBhcnNlRGF0ZUZyb21TZXJ2ZXIodmFsKTtcclxuICB9XHJcbiAgcmV0dXJuIHZhbDtcclxufVxyXG5cclxuLyoqIFRyaW0gb2ZmIHRpbWUgcG9ydGlvbiBiZWZvcmUgcGFyc2UgKi9cclxuZnVuY3Rpb24gcGFyc2VSYXdEYXRlT25seSh2YWw6IGFueSkge1xyXG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xyXG4gICAgaWYgKHZhbC5sZW5ndGggPiAxMCkge1xyXG4gICAgICB2YWwgPSB2YWwuc3Vic3RyaW5nKDAsIDEwKTtcclxuICAgIH1cclxuICAgIHZhbCA9IERhdGFUeXBlLnBhcnNlRGF0ZUFzTG9jYWwodmFsKTtcclxuICB9XHJcbiAgcmV0dXJuIHZhbDtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VSYXdCaW5hcnkodmFsOiBhbnkpIHtcclxuICBpZiAodmFsICYmIHZhbC4kdmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgdmFsID0gdmFsLiR2YWx1ZTsgLy8gdGhpcyB3aWxsIGJlIGEgYnl0ZVtdIGVuY29kZWQgYXMgYSBzdHJpbmdcclxuICB9XHJcbiAgcmV0dXJuIHZhbDtcclxufVxyXG5cclxuLy9mdW5jdGlvbiBoYXNUaW1lWm9uZShzb3VyY2UpIHtcclxuLy8gIHZhciBpeCA9IHNvdXJjZS5pbmRleE9mKFwiVFwiKTtcclxuLy8gIHZhciB0aW1lUGFydCA9IHNvdXJjZS5zdWJzdHJpbmcoaXgrMSk7XHJcbi8vICByZXR1cm4gIHRpbWVQYXJ0LmluZGV4T2YoXCItXCIpID49IDAgfHwgdGltZVBhcnQuaW5kZXhPZihcIitcIikgPj0gMCB8fCB0aW1lUGFydC5pbmRleE9mKFwiWlwiKTtcclxuLy99XHJcbiJdfQ==
|