{"_id":"@polymer/app-storage","_rev":"52-b28e0a23f51060f398d7fc366d110f66","name":"@polymer/app-storage","dist-tags":{"preview":"0.9.8-pre.3","next":"3.0.0-pre.20","latest":"3.0.3"},"versions":{"0.9.8-pre.1":{"name":"@polymer/app-storage","version":"0.9.8-pre.1","license":"SEE LICENSE IN http://polymer.github.io/LICENSE.txt","_id":"@polymer/app-storage@0.9.8-pre.1","maintainers":[{"name":"polymer","email":"admin@polymer-project.org"}],"contributors":[{"name":"The Polymer Authors"}],"homepage":"","dist":{"shasum":"398ffd952b2941ac5059eb25301feb7df4290eea","tarball":"https://registry.npmjs.org/@polymer/app-storage/-/app-storage-0.9.8-pre.1.tgz","integrity":"sha512-N+87X00n/OMfrjh/wLIJO72Nia9kGxV3GUi/Qdu8YsgXUTMUaXJ6+NsqvWMyCPoSg7ibX5k8sC95FmrSEy/3Kw==","signatures":[{"sig":"MEQCICjacvacIJiCzL/gBk1oP5KPZqnn0mpmQ1reqP1/8Q/6AiB+byxVmm3Y3biMnoFCq6zRvJpkn3keDvoBXM9IF0g14Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"flat":true,"_from":".","_shasum":"398ffd952b2941ac5059eb25301feb7df4290eea","scripts":{},"_npmUser":{"name":"polymer","email":"admin@polymer-project.org"},"_npmVersion":"3.10.3","description":"Web Components for managing user data in web apps","directories":{},"_nodeVersion":"6.4.0","dependencies":{"@polymer/polymer":"gloo","@polymer/promise-polyfill":"gloo"},"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/app-storage-0.9.8-pre.1.tgz_1484953771120_0.6469486779533327","host":"packages-12-west.internal.npmjs.com"}},"0.9.8-pre.2":{"name":"@polymer/app-storage","version":"0.9.8-pre.2","license":"SEE LICENSE IN http://polymer.github.io/LICENSE.txt","_id":"@polymer/app-storage@0.9.8-pre.2","maintainers":[{"name":"polymer","email":"admin@polymer-project.org"}],"contributors":[{"name":"The Polymer Authors"}],"homepage":"","dist":{"shasum":"1431147ca6803dffbf7ff751533971e357d072a2","tarball":"https://registry.npmjs.org/@polymer/app-storage/-/app-storage-0.9.8-pre.2.tgz","integrity":"sha512-jEIhfwfuBORoshyxb5byXra7SBeL53A7UVSoDiiK7R+QWKVTwpUkfWZTJzUTCJEYx2GEfhlaoBa6LxuwGBGDqg==","signatures":[{"sig":"MEQCIEeYI3KVPqz8YzLkmds645vdXRoZoPOoV1nQFw40sqsMAiA7FvLnal9Tt9QprW+0D8M+QmO8e929Swz/8FEI079VkA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"flat":true,"_from":".","_shasum":"1431147ca6803dffbf7ff751533971e357d072a2","scripts":{},"_npmUser":{"name":"polymer","email":"admin@polymer-project.org"},"_npmVersion":"3.10.3","description":"Web Components for managing user data in web apps","directories":{},"_nodeVersion":"6.4.0","dependencies":{"@polymer/polymer":"gloo","@polymer/promise-polyfill":"gloo"},"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/app-storage-0.9.8-pre.2.tgz_1484954610642_0.8000626286957413","host":"packages-18-east.internal.npmjs.com"}},"0.9.8-pre.3":{"name":"@polymer/app-storage","version":"0.9.8-pre.3","license":"SEE LICENSE IN http://polymer.github.io/LICENSE.txt","_id":"@polymer/app-storage@0.9.8-pre.3","maintainers":[{"name":"polymer","email":"admin@polymer-project.org"}],"contributors":[{"name":"The Polymer Authors"}],"homepage":"","dist":{"shasum":"dc51dfc867bb237fb3439b0b3da87342477ffc00","tarball":"https://registry.npmjs.org/@polymer/app-storage/-/app-storage-0.9.8-pre.3.tgz","integrity":"sha512-DLXAg54X5hcjTv3f/slud6WC2HF8CKvABF1o5VuPOkU9haCRrLqaBqGJaOo2tE7dIGXKeYKeliX9kQf93bJLsw==","signatures":[{"sig":"MEYCIQCZSL8epOxwaqtXYwm+dQT8TAgx8HHcU3uB7drQY+MSTAIhAJE/eMVoTr0yh5DzNc05Z7CMwO2m4EBX2IHHE/cslc/L","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"flat":true,"_from":".","_shasum":"dc51dfc867bb237fb3439b0b3da87342477ffc00","scripts":{},"_npmUser":{"name":"polymer","email":"admin@polymer-project.org"},"_npmVersion":"3.10.3","description":"Web Components for managing user data in web apps","directories":{},"_nodeVersion":"6.4.0","dependencies":{"@polymer/polymer":"preview","@polymer/promise-polyfill":"gloo"},"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/app-storage-0.9.8-pre.3.tgz_1485217214367_0.6234893321525306","host":"packages-18-east.internal.npmjs.com"}},"3.0.0-pre.1":{"name":"@polymer/app-storage","version":"3.0.0-pre.1","license":"http://polymer.github.io/LICENSE.txt","_id":"@polymer/app-storage@3.0.0-pre.1","maintainers":[{"name":"polymer","email":"admin@polymer-project.org"}],"contributors":[{"name":"The Polymer Authors"}],"homepage":"","dist":{"shasum":"b4a26b1f227f3bde74c27e7adac64be07a674572","tarball":"https://registry.npmjs.org/@polymer/app-storage/-/app-storage-3.0.0-pre.1.tgz","integrity":"sha512-PceefBUEQzNGK7mB3nX0/3WjmVN2S0Qclq+pLBk+JBmz3xdrK1k3K3qiiXmkJEJxGSUaVfg16zz8tdfzU1evUw==","signatures":[{"sig":"MEYCIQCT84OZqiofQXXSjci09x2wAuUdQKgyO8QQ3Db3Or8sjAIhAOCPxPT+P/qYHZZmAhA4t02kbgytolnftDxqXFUSdbtY","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"flat":true,"gitHead":"8ef472996a41472c06dfbab3ca0c9240477005eb","_npmUser":{"name":"polymer","email":"admin@polymer-project.org"},"_npmVersion":"5.3.0","description":"Web Components for managing user data in web apps","directories":{},"_nodeVersion":"8.2.1","dependencies":{"@polymer/polymer":"^3.0.0-pre.1"},"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/app-storage-3.0.0-pre.1.tgz_1503386256033_0.08072922308929265","host":"s3://npm-registry-packages"}},"3.0.0-pre.2":{"name":"@polymer/app-storage","version":"3.0.0-pre.2","license":"BSD-3-Clause","_id":"@polymer/app-storage@3.0.0-pre.2","maintainers":[{"name":"polymer","email":"admin@polymer-project.org"}],"contributors":[{"name":"The Polymer Authors"}],"homepage":"","dist":{"shasum":"16ebdb1d074a7f296b700cd5a67ff0d8bc634d54","tarball":"https://registry.npmjs.org/@polymer/app-storage/-/app-storage-3.0.0-pre.2.tgz","integrity":"sha512-S+/6eeSNoPOB+raGl1ETWl+xzwY95/cwj5QN24UtqA+26Zof1fMKXuU/ltCSyBZXxIDhOonwJsK5wIDg6BvWTQ==","signatures":[{"sig":"MEYCIQDsQnwFz8i9tD/7PyXdJ98Tyz8ETeL9nFOBLq+GsUhFUQIhAOKKz2k278TtIIuECJ19SCAZLhVRgSdqOS8BE4wUBFG0","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"flat":true,"gitHead":"2b2a1573857cc4c08b56eff808e64505184c86d8","_npmUser":{"name":"polymer","email":"admin@polymer-project.org"},"_npmVersion":"5.5.1","description":"Web Components for managing user data in web apps","directories":{},"resolutions":{"samsam":"1.1.3","inherits":"2.0.3","type-detect":"1.0.0","supports-color":"3.1.2"},"_nodeVersion":"9.2.0","dependencies":{"@polymer/polymer":"^3.0.0-pre.1"},"devDependencies":{"@polymer/iron-icon":"^3.0.0-pre.1","@polymer/paper-fab":"^3.0.0-pre.1","wct-browser-legacy":"0.0.1-pre.11","@polymer/iron-icons":"^3.0.0-pre.1","@polymer/font-roboto":"^3.0.0-pre.1","@polymer/paper-input":"^3.0.0-pre.1","@polymer/paper-button":"^3.0.0-pre.1","@polymer/paper-styles":"^3.0.0-pre.1","@polymer/iron-flex-layout":"^3.0.0-pre.1","@polymer/promise-polyfill":"^3.0.0-pre.1","@webcomponents/webcomponentsjs":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/app-storage-3.0.0-pre.2.tgz_1515721318510_0.88186249230057","host":"s3://npm-registry-packages"}},"3.0.0-pre.4":{"name":"@polymer/app-storage","version":"3.0.0-pre.4","license":"BSD-3-Clause","_id":"@polymer/app-storage@3.0.0-pre.4","maintainers":[{"name":"polymer","email":"admin@polymer-project.org"}],"contributors":[{"name":"The Polymer Authors"}],"homepage":"","dist":{"shasum":"501fd6766e879a7dbf2f44696b239e334c33c26b","tarball":"https://registry.npmjs.org/@polymer/app-storage/-/app-storage-3.0.0-pre.4.tgz","integrity":"sha512-6Py20HL8Fd6H/6G9ZXdfEMxMqa9FWW74HT4G8sI87SvmhM82YHRfl50s+8cdzPMJfYVNY2eCyGHXSmQ01nIJhQ==","signatures":[{"sig":"MEQCIANvMA6/GYwlHokm1ufSVxKTf6JuS44fLX/Au/7dqo5KAiAshvVtdg071e+jYH220CaiNCWFpPsxL0BHzI9nNytQeQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"flat":true,"gitHead":"b2f5af20570270c78f33cd4e6e4482aaf0f037a4","_npmUser":{"name":"polymer","email":"admin@polymer-project.org"},"_npmVersion":"5.5.1","description":"Web Components for managing user data in web apps","directories":{},"resolutions":{"samsam":"1.1.3","inherits":"2.0.3","type-detect":"1.0.0","supports-color":"3.1.2"},"_nodeVersion":"9.2.0","dependencies":{"@polymer/polymer":"^3.0.0-pre.4"},"devDependencies":{"@polymer/iron-icon":"^3.0.0-pre.4","@polymer/paper-fab":"^3.0.0-pre.4","wct-browser-legacy":"0.0.1-pre.10","@polymer/iron-icons":"^3.0.0-pre.4","@polymer/font-roboto":"^3.0.0-pre.4","@polymer/paper-input":"^3.0.0-pre.4","@polymer/paper-button":"^3.0.0-pre.4","@polymer/paper-styles":"^3.0.0-pre.4","@polymer/iron-flex-layout":"^3.0.0-pre.4","@polymer/promise-polyfill":"^3.0.0-pre.4","@webcomponents/webcomponentsjs":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/app-storage-3.0.0-pre.4.tgz_1516146835644_0.8624011210631579","host":"s3://npm-registry-packages"}},"3.0.0-pre.6":{"name":"@polymer/app-storage","version":"3.0.0-pre.6","license":"BSD-3-Clause","_id":"@polymer/app-storage@3.0.0-pre.6","maintainers":[{"name":"polymer","email":"admin@polymer-project.org"}],"contributors":[{"name":"The Polymer Authors"}],"homepage":"","dist":{"shasum":"644e8666c94b916d701087283e28eed317a31c7e","tarball":"https://registry.npmjs.org/@polymer/app-storage/-/app-storage-3.0.0-pre.6.tgz","integrity":"sha512-0FHOHMHmY+SjVFYAt7gCW4pX3tkAn+FgZkzq0slzBFKZ1GmXXPXBgE2AWddsdwfyKmO+iQfn16R1F7iZMHizjA==","signatures":[{"sig":"MEUCIAKEIrDjNSk796+W2KfLKv5avrOcWcQyd3N3XEEf5YBKAiEAzxW8wEmYTCB0wJFVZyknkdtSEU9FoZ6MJHtVbIuhq+M=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"flat":true,"gitHead":"6d0e278ea33b9038fa701996f80ea31d975120ac","_npmUser":{"name":"polymer","email":"admin@polymer-project.org"},"_npmVersion":"5.6.0","description":"Web Components for managing user data in web apps","directories":{},"resolutions":{"samsam":"1.1.3","inherits":"2.0.3","type-detect":"1.0.0","supports-color":"3.1.2"},"_nodeVersion":"9.4.0","dependencies":{"@polymer/polymer":"^3.0.0-pre.6"},"devDependencies":{"@polymer/iron-icon":"^3.0.0-pre.6","@polymer/paper-fab":"^3.0.0-pre.6","wct-browser-legacy":"0.0.1-pre.11","@polymer/iron-icons":"^3.0.0-pre.6","@polymer/font-roboto":"^3.0.0-pre.6","@polymer/paper-input":"^3.0.0-pre.6","@polymer/paper-button":"^3.0.0-pre.6","@polymer/paper-styles":"^3.0.0-pre.6","@polymer/iron-flex-layout":"^3.0.0-pre.6","@polymer/promise-polyfill":"^3.0.0-pre.6","@webcomponents/webcomponentsjs":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/app-storage-3.0.0-pre.6.tgz_1516835030745_0.2721413825638592","host":"s3://npm-registry-packages"}},"3.0.0-pre.7":{"name":"@polymer/app-storage","version":"3.0.0-pre.7","license":"BSD-3-Clause","_id":"@polymer/app-storage@3.0.0-pre.7","maintainers":[{"name":"polymer","email":"admin@polymer-project.org"}],"contributors":[{"name":"The Polymer Authors"}],"homepage":"","dist":{"shasum":"7e34f8f68cb2df8e3810b96627e93a7567407a03","tarball":"https://registry.npmjs.org/@polymer/app-storage/-/app-storage-3.0.0-pre.7.tgz","integrity":"sha512-w+p+SeTR0QlWEnE+JagUGLnYLPAA9niqfYkM1e8VrDSstLPdI3IuJAP57SRjaxY8egDkvAfykQr4AkdfYjLhJA==","signatures":[{"sig":"MEUCIQChtkhJhWqSqmYLk10zq2Kc6mRum7sj4nfVoLSq92b+agIgYCjljHdMKpRYEGGhg1eO0dnnWSTGenDzLnb0fs2A5C8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"flat":true,"gitHead":"35f69b022df7c44c661e4f41c9c8a97aa6a3e1de","_npmUser":{"name":"polymer","email":"admin@polymer-project.org"},"_npmVersion":"5.6.0","description":"Web Components for managing user data in web apps","directories":{},"resolutions":{"samsam":"1.1.3","inherits":"2.0.3","type-detect":"1.0.0","supports-color":"3.1.2"},"_nodeVersion":"9.4.0","dependencies":{"@polymer/polymer":"^3.0.0-pre.7"},"devDependencies":{"@polymer/iron-icon":"^3.0.0-pre.7","@polymer/paper-fab":"^3.0.0-pre.7","wct-browser-legacy":"0.0.1-pre.11","@polymer/iron-icons":"^3.0.0-pre.7","@polymer/font-roboto":"^3.0.0-pre.7","@polymer/paper-input":"^3.0.0-pre.7","@polymer/paper-button":"^3.0.0-pre.7","@polymer/paper-styles":"^3.0.0-pre.7","@polymer/iron-flex-layout":"^3.0.0-pre.7","@polymer/promise-polyfill":"^3.0.0-pre.7","@webcomponents/webcomponentsjs":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/app-storage-3.0.0-pre.7.tgz_1517338109909_0.1455613502766937","host":"s3://npm-registry-packages"}},"3.0.0-pre.8":{"name":"@polymer/app-storage","version":"3.0.0-pre.8","license":"BSD-3-Clause","_id":"@polymer/app-storage@3.0.0-pre.8","maintainers":[{"name":"polymer","email":"admin@polymer-project.org"}],"contributors":[{"name":"The Polymer Authors"}],"homepage":"","dist":{"shasum":"1b9bdcf2e9f3dc3ab5aee59e2aa60f24cd783eee","tarball":"https://registry.npmjs.org/@polymer/app-storage/-/app-storage-3.0.0-pre.8.tgz","fileCount":22,"integrity":"sha512-15S8uld+ueik1JeZD3haN5FuoPGL2uS36Gh4IvjfY4ocDNhL8R/aqETKUUDHI7OsVtkYcqIstx6dHJBM5gC9vg==","signatures":[{"sig":"MEQCICQmndyoDfi7sGvAidSRZnCoZUfrq7lXVq5nDpNMeBKjAiABIB02EUdK9AHOqMguwefrBNu9OwNtX9ta7i28+ewC4w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":83891},"flat":true,"readme":"\n<!---\n\nThis README is automatically generated from the comments in these files:\napp-indexeddb-mirror.html  app-localstorage-document.html  app-network-status-behavior.html  app-storage-behavior.html\n\nEdit those files, and our readme bot will duplicate them over here!\nEdit this file, and the bot will squash your changes :)\n\nThe bot does some handling of markdown. Please file a bug if it does the wrong\nthing! https://github.com/PolymerLabs/tedium/issues\n\n-->\n![status](https://travis-ci.org/PolymerElements/app-storage.svg?branch=2.0-preview)\n## Changes in 2.0\n* Promise polyfill is no longer shipped with the element. It is now a dev dependency.\n\n## Polymer.AppStorageBehavior\n\nAppStorageBehavior is an abstract behavior that makes it easy to\nsynchronize in-memory data and a persistant storage system, such as\nthe browser's IndexedDB, or a remote database like Firebase.\n\nFor examples of how to use this behavior to write your own app storage\nelements see `<app-localstorage-document>` here, or check out\n[polymerfire](https://github.com/Firebase/polymerfire) and\n[app-pouchdb](https://github.com/PolymerElements/app-pouchdb).\n\n\n\n## &lt;app-indexeddb-mirror&gt;\n\n`app-indexeddb-mirror` is a purpose-built element to easily add read-only\noffline access of application data that is typically only available when the\nuser is connected to the network.\n\nWhen an app using this element is connected to the network, the element acts as\na pass-through for live application data. Data is bound into the `data`\nproperty, and consumers of the data can bind to the correlated `persistedData`\nproperty. As live data changes, `app-indexeddb-mirror` caches a copy of the live\ndata in a local IndexedDB database. When the app is no longer connected to the\nnetwork, `app-indexeddb-mirror` toggles its `persistedData` property to refer\nto a read-only copy of the corresponding data in IndexedDB.\n\nThis element is particularly useful in cases where an API or storage layer (such\nas Firebase, for example) does not support caching data for later use during\nuser sessions that begin while the user is disconnected from the network.\n\nHere is an example of using `app-indexeddb-mirror` with `iron-ajax`:\n\n```html\n<iron-ajax\n    url=\"/api/cats\"\n    handle-as=\"json\"\n    last-response=\"{{liveData}}\">\n</iron-ajax>\n<app-indexeddb-mirror\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n\n<template is=\"dom-repeat\" items=\"{{persistedData}}\" as=\"cat\">\n  <div>[[cat.name]]</div>\n</template>\n```\n\nIn the example above, `persistedData` will always be populated with\nthe most recently requested list of cats, even when the user is offline, and\neven if the user refreshes the app, as long as the request as been made at\nleast once while connected to the network.\n\nOf course, in the case of `iron-ajax`, it's totally possible to selectively\ncache network requests in a ServiceWorker for the same effect. However, this is\nnot the true for all data sources. For example, if a data source is provided\nover a WebSocket, it will not be cacheable by a ServiceWorker. Cases like this\nare where `app-indexeddb-mirror` really shines:\n\n```html\n<firebase-query\n    app-name=\"cats-app\"\n    path=\"/cats\"\n    order-by-child=\"name\"\n    data=\"{{liveData}}\">\n</firebase-query>\n<app-indexeddb-mirror\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n\n<template is=\"dom-repeat\" items=\"{{persistedData}}\" as=\"cat\">\n  <div>[[cat.name]]</div>\n</template>\n```\n\nFirebase data is typically provided over a WebSocket connection, so it is very\ntricky to cache it for offline access. With `app-indexeddb-mirror`, offline\naccess to Firebase data is trivially easy to implement.\n\n## User sessions\n\n`app-indexeddb-mirror` caches data in a local IndexedDB database. If your app\nfeatures user authentication, it is usually desireable to ensure that this data\ndoes not leak across the sessions of different users on the same device.\n\nIn support of this, each `app-indexeddb-mirror` is configured with a unique\nsession key. When the session key changes, it will automatically wipe the local\nIndexedDB copy of any data that has been persisted.\n\n```html\n<app-indexeddb-mirror\n    session=\"a-unique-session-key-413\"\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n```\n\nWhen `someUniqueSessionKey` changes to a different value, `app-indexeddb-mirror`\nwill delete the local data it is persisting at the `\"cats\"` key.\n\n## Important considerations regarding WebWorkers\n\nIn order to ensure that operations on IndexedDB block the main browser thread as\nlittle as possible, `app-indexeddb-mirror` relies on a WebWorker to operate on\nits corresponding IndexedDB database. If you are vulcanizing or otherwise\ncombining your source files before your app is deployed, make sure that you\ninclude the corresponding worker script (`app-indexeddb-mirror-worker.js`)\namong your deployable files. You can configure the path to the worker script\nwith the `worker-url` attribute.\n\n`app-indexeddb-mirror` will prefer SharedWorker if it is available in the\nbrowser where the app is running. If SharedWorker is not available, it will\nattempt to fall back to a standard WebWorker. When using a standard WebWorker,\nall `app-indexeddb-mirror` instances with the same `workerUrl` will share the\nsame WebWorker instance.\n\nIf WebWorkers are not supported in the browser, persisted offline data will not\nbe available through this element.\n\n\n\n## &lt;app-localstorage-document&gt;\n\napp-localstorage-document synchronizes storage between an in-memory\nvalue and a location in the browser's localStorage system.\n\nlocalStorage is a simple and widely supported storage API that provides both\npermanent and session-based storage options. Using app-localstorage-document\nyou can easily integrate localStorage into your app via normal Polymer\ndatabinding.\n\napp-localstorage-document is the reference implementation of an element\nthat uses `AppStorageBehavior`. Reading its code is a good way to get\nstarted writing your own storage element.\n\nExample use:\n\n```html\n<paper-input value=\"{{search}}\"></paper-input>\n<app-localstorage-document key=\"search\" data=\"{{search}}\">\n</app-localstorage-document>\n```\n\napp-localstorage-document automatically synchronizes changes to the\nsame key across multiple tabs.\n\nOnly supports storing JSON-serializable values.\n\n\n\n## Polymer.AppNetworkStatusBehavior\n\n`Polymer.AppNetworkStatusBehavior` tracks the status of whether the browser\nis online or offline. True if the browser is online, and false if the browser is\noffline matching the HTML browser state spec.\n\n\n","gitHead":"064c8e715f239059aa34fb8b5bb21150d89a10a4","_npmUser":{"name":"polymer","email":"admin@polymer-project.org"},"_npmVersion":"5.5.1","description":"Web Components for managing user data in web apps","directories":{},"resolutions":{"samsam":"1.1.3","inherits":"2.0.3","type-detect":"1.0.0","supports-color":"3.1.2"},"_nodeVersion":"9.2.0","dependencies":{"@polymer/polymer":"^3.0.0-pre.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"@polymer/iron-icon":"^3.0.0-pre.7","@polymer/paper-fab":"^3.0.0-pre.7","wct-browser-legacy":"0.0.1-pre.11","@polymer/iron-icons":"^3.0.0-pre.7","@polymer/font-roboto":"^3.0.0-pre.7","@polymer/paper-input":"^3.0.0-pre.7","@polymer/paper-button":"^3.0.0-pre.7","@polymer/paper-styles":"^3.0.0-pre.7","@polymer/iron-flex-layout":"^3.0.0-pre.7","@polymer/promise-polyfill":"^3.0.0-pre.7","@webcomponents/webcomponentsjs":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/app-storage_3.0.0-pre.8_1518029783791_0.5802791875579405","host":"s3://npm-registry-packages"}},"3.0.0-pre.10":{"name":"@polymer/app-storage","version":"3.0.0-pre.10","license":"BSD-3-Clause","_id":"@polymer/app-storage@3.0.0-pre.10","maintainers":[{"name":"polymer","email":"admin@polymer-project.org"}],"contributors":[{"name":"The Polymer Authors"}],"homepage":"","dist":{"shasum":"abfed67aeea7c60bb579f0bc1a1f2c6a2b705e7d","tarball":"https://registry.npmjs.org/@polymer/app-storage/-/app-storage-3.0.0-pre.10.tgz","fileCount":24,"integrity":"sha512-mGfILnubtlKg4mQOTh1h1zg77ot+VJJl+/AMHquxVIdTaj7IIBgBOqDgg4wR7kdS2Btnre/kpwU6kr0Ekn80KQ==","signatures":[{"sig":"MEUCICafFmi7hsU9fPGokDwwOnVPcf+GVgYeHH8Bq41TFTGEAiEAoyKHNaVTMDhX6mki6oBZe8d2nej8HSP9WJZLE0yQXgM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":80345},"flat":true,"readme":"\n<!---\n\nThis README is automatically generated from the comments in these files:\napp-indexeddb-mirror.html  app-localstorage-document.html  app-network-status-behavior.html  app-storage-behavior.html\n\nEdit those files, and our readme bot will duplicate them over here!\nEdit this file, and the bot will squash your changes :)\n\nThe bot does some handling of markdown. Please file a bug if it does the wrong\nthing! https://github.com/PolymerLabs/tedium/issues\n\n-->\n![status](https://travis-ci.org/PolymerElements/app-storage.svg?branch=2.0-preview)\n## Changes in 2.0\n* Promise polyfill is no longer shipped with the element. It is now a dev dependency.\n\n## Polymer.AppStorageBehavior\n\nAppStorageBehavior is an abstract behavior that makes it easy to\nsynchronize in-memory data and a persistant storage system, such as\nthe browser's IndexedDB, or a remote database like Firebase.\n\nFor examples of how to use this behavior to write your own app storage\nelements see `<app-localstorage-document>` here, or check out\n[polymerfire](https://github.com/Firebase/polymerfire) and\n[app-pouchdb](https://github.com/PolymerElements/app-pouchdb).\n\n\n\n## &lt;app-indexeddb-mirror&gt;\n\n`app-indexeddb-mirror` is a purpose-built element to easily add read-only\noffline access of application data that is typically only available when the\nuser is connected to the network.\n\nWhen an app using this element is connected to the network, the element acts as\na pass-through for live application data. Data is bound into the `data`\nproperty, and consumers of the data can bind to the correlated `persistedData`\nproperty. As live data changes, `app-indexeddb-mirror` caches a copy of the live\ndata in a local IndexedDB database. When the app is no longer connected to the\nnetwork, `app-indexeddb-mirror` toggles its `persistedData` property to refer\nto a read-only copy of the corresponding data in IndexedDB.\n\nThis element is particularly useful in cases where an API or storage layer (such\nas Firebase, for example) does not support caching data for later use during\nuser sessions that begin while the user is disconnected from the network.\n\nHere is an example of using `app-indexeddb-mirror` with `iron-ajax`:\n\n```html\n<iron-ajax\n    url=\"/api/cats\"\n    handle-as=\"json\"\n    last-response=\"{{liveData}}\">\n</iron-ajax>\n<app-indexeddb-mirror\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n\n<template is=\"dom-repeat\" items=\"{{persistedData}}\" as=\"cat\">\n  <div>[[cat.name]]</div>\n</template>\n```\n\nIn the example above, `persistedData` will always be populated with\nthe most recently requested list of cats, even when the user is offline, and\neven if the user refreshes the app, as long as the request as been made at\nleast once while connected to the network.\n\nOf course, in the case of `iron-ajax`, it's totally possible to selectively\ncache network requests in a ServiceWorker for the same effect. However, this is\nnot the true for all data sources. For example, if a data source is provided\nover a WebSocket, it will not be cacheable by a ServiceWorker. Cases like this\nare where `app-indexeddb-mirror` really shines:\n\n```html\n<firebase-query\n    app-name=\"cats-app\"\n    path=\"/cats\"\n    order-by-child=\"name\"\n    data=\"{{liveData}}\">\n</firebase-query>\n<app-indexeddb-mirror\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n\n<template is=\"dom-repeat\" items=\"{{persistedData}}\" as=\"cat\">\n  <div>[[cat.name]]</div>\n</template>\n```\n\nFirebase data is typically provided over a WebSocket connection, so it is very\ntricky to cache it for offline access. With `app-indexeddb-mirror`, offline\naccess to Firebase data is trivially easy to implement.\n\n## User sessions\n\n`app-indexeddb-mirror` caches data in a local IndexedDB database. If your app\nfeatures user authentication, it is usually desireable to ensure that this data\ndoes not leak across the sessions of different users on the same device.\n\nIn support of this, each `app-indexeddb-mirror` is configured with a unique\nsession key. When the session key changes, it will automatically wipe the local\nIndexedDB copy of any data that has been persisted.\n\n```html\n<app-indexeddb-mirror\n    session=\"a-unique-session-key-413\"\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n```\n\nWhen `someUniqueSessionKey` changes to a different value, `app-indexeddb-mirror`\nwill delete the local data it is persisting at the `\"cats\"` key.\n\n## Important considerations regarding WebWorkers\n\nIn order to ensure that operations on IndexedDB block the main browser thread as\nlittle as possible, `app-indexeddb-mirror` relies on a WebWorker to operate on\nits corresponding IndexedDB database. If you are vulcanizing or otherwise\ncombining your source files before your app is deployed, make sure that you\ninclude the corresponding worker script (`app-indexeddb-mirror-worker.js`)\namong your deployable files. You can configure the path to the worker script\nwith the `worker-url` attribute.\n\n`app-indexeddb-mirror` will prefer SharedWorker if it is available in the\nbrowser where the app is running. If SharedWorker is not available, it will\nattempt to fall back to a standard WebWorker. When using a standard WebWorker,\nall `app-indexeddb-mirror` instances with the same `workerUrl` will share the\nsame WebWorker instance.\n\nIf WebWorkers are not supported in the browser, persisted offline data will not\nbe available through this element.\n\n\n\n## &lt;app-localstorage-document&gt;\n\napp-localstorage-document synchronizes storage between an in-memory\nvalue and a location in the browser's localStorage system.\n\nlocalStorage is a simple and widely supported storage API that provides both\npermanent and session-based storage options. Using app-localstorage-document\nyou can easily integrate localStorage into your app via normal Polymer\ndatabinding.\n\napp-localstorage-document is the reference implementation of an element\nthat uses `AppStorageBehavior`. Reading its code is a good way to get\nstarted writing your own storage element.\n\nExample use:\n\n```html\n<paper-input value=\"{{search}}\"></paper-input>\n<app-localstorage-document key=\"search\" data=\"{{search}}\">\n</app-localstorage-document>\n```\n\napp-localstorage-document automatically synchronizes changes to the\nsame key across multiple tabs.\n\nOnly supports storing JSON-serializable values.\n\n\n\n## Polymer.AppNetworkStatusBehavior\n\n`Polymer.AppNetworkStatusBehavior` tracks the status of whether the browser\nis online or offline. True if the browser is online, and false if the browser is\noffline matching the HTML browser state spec.\n\n\n","gitHead":"956ca0e28a17068eb8429d6b5343d15712a4d79f","_npmUser":{"name":"polymer","email":"admin@polymer-project.org"},"_npmVersion":"5.4.1","description":"Web Components for managing user data in web apps","directories":{},"resolutions":{"samsam":"1.1.3","inherits":"2.0.3","type-detect":"1.0.0","supports-color":"3.1.2"},"_nodeVersion":"8.2.1","dependencies":{"@polymer/polymer":"^3.0.0-pre.10"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"@polymer/iron-icon":"^3.0.0-pre.10","@polymer/paper-fab":"^3.0.0-pre.10","wct-browser-legacy":"0.0.1-pre.11","@polymer/iron-icons":"^3.0.0-pre.10","@polymer/font-roboto":"^3.0.0-pre.10","@polymer/paper-input":"^3.0.0-pre.10","@polymer/paper-button":"^3.0.0-pre.10","@polymer/paper-styles":"^3.0.0-pre.10","@polymer/iron-flex-layout":"^3.0.0-pre.10","@polymer/promise-polyfill":"^3.0.0-pre.10","@webcomponents/webcomponentsjs":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/app-storage_3.0.0-pre.10_1519341311977_0.17759724149918577","host":"s3://npm-registry-packages"}},"3.0.0-pre.11":{"name":"@polymer/app-storage","version":"3.0.0-pre.11","author":{"name":"The Polymer Authors"},"license":"BSD-3-Clause","_id":"@polymer/app-storage@3.0.0-pre.11","maintainers":[{"name":"polymer","email":"admin@polymer-project.org"}],"homepage":"","dist":{"shasum":"26fcbc2069ae2cdd4c44048cc3e84c7f3bb7e7a9","tarball":"https://registry.npmjs.org/@polymer/app-storage/-/app-storage-3.0.0-pre.11.tgz","fileCount":21,"integrity":"sha512-OQukCi2sOHNgFLhKxsrI+jiBp5HnOzzT6ppWoMBGJyEcz6C2TJBgXyTyduGL0Coue/Bgino+VhW8A3ShVIpjKA==","signatures":[{"sig":"MEQCIAHOHD4h72hi8CJ5WR19As0KO7chk2b+MBigd8PCuTJ9AiBayYPgYRi/ooIiVYrencgi95VLa2ABffseUu1qzh/hTg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":83122},"readme":"\n<!---\n\nThis README is automatically generated from the comments in these files:\napp-indexeddb-mirror.html  app-localstorage-document.html  app-network-status-behavior.html  app-storage-behavior.html\n\nEdit those files, and our readme bot will duplicate them over here!\nEdit this file, and the bot will squash your changes :)\n\nThe bot does some handling of markdown. Please file a bug if it does the wrong\nthing! https://github.com/PolymerLabs/tedium/issues\n\n-->\n![status](https://travis-ci.org/PolymerElements/app-storage.svg?branch=master)\n## Changes in 2.0\n* Promise polyfill is no longer shipped with the element. It is now a dev dependency.\n\n## Polymer.AppStorageBehavior\n\nAppStorageBehavior is an abstract behavior that makes it easy to\nsynchronize in-memory data and a persistant storage system, such as\nthe browser's IndexedDB, or a remote database like Firebase.\n\nFor examples of how to use this behavior to write your own app storage\nelements see `<app-localstorage-document>` here, or check out\n[polymerfire](https://github.com/Firebase/polymerfire) and\n[app-pouchdb](https://github.com/PolymerElements/app-pouchdb).\n\n\n\n## &lt;app-indexeddb-mirror&gt;\n\n`app-indexeddb-mirror` is a purpose-built element to easily add read-only\noffline access of application data that is typically only available when the\nuser is connected to the network.\n\nWhen an app using this element is connected to the network, the element acts as\na pass-through for live application data. Data is bound into the `data`\nproperty, and consumers of the data can bind to the correlated `persistedData`\nproperty. As live data changes, `app-indexeddb-mirror` caches a copy of the live\ndata in a local IndexedDB database. When the app is no longer connected to the\nnetwork, `app-indexeddb-mirror` toggles its `persistedData` property to refer\nto a read-only copy of the corresponding data in IndexedDB.\n\nThis element is particularly useful in cases where an API or storage layer (such\nas Firebase, for example) does not support caching data for later use during\nuser sessions that begin while the user is disconnected from the network.\n\nHere is an example of using `app-indexeddb-mirror` with `iron-ajax`:\n\n```html\n<iron-ajax\n    url=\"/api/cats\"\n    handle-as=\"json\"\n    last-response=\"{{liveData}}\">\n</iron-ajax>\n<app-indexeddb-mirror\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n\n<template is=\"dom-repeat\" items=\"{{persistedData}}\" as=\"cat\">\n  <div>[[cat.name]]</div>\n</template>\n```\n\nIn the example above, `persistedData` will always be populated with\nthe most recently requested list of cats, even when the user is offline, and\neven if the user refreshes the app, as long as the request as been made at\nleast once while connected to the network.\n\nOf course, in the case of `iron-ajax`, it's totally possible to selectively\ncache network requests in a ServiceWorker for the same effect. However, this is\nnot the true for all data sources. For example, if a data source is provided\nover a WebSocket, it will not be cacheable by a ServiceWorker. Cases like this\nare where `app-indexeddb-mirror` really shines:\n\n```html\n<firebase-query\n    app-name=\"cats-app\"\n    path=\"/cats\"\n    order-by-child=\"name\"\n    data=\"{{liveData}}\">\n</firebase-query>\n<app-indexeddb-mirror\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n\n<template is=\"dom-repeat\" items=\"{{persistedData}}\" as=\"cat\">\n  <div>[[cat.name]]</div>\n</template>\n```\n\nFirebase data is typically provided over a WebSocket connection, so it is very\ntricky to cache it for offline access. With `app-indexeddb-mirror`, offline\naccess to Firebase data is trivially easy to implement.\n\n## User sessions\n\n`app-indexeddb-mirror` caches data in a local IndexedDB database. If your app\nfeatures user authentication, it is usually desireable to ensure that this data\ndoes not leak across the sessions of different users on the same device.\n\nIn support of this, each `app-indexeddb-mirror` is configured with a unique\nsession key. When the session key changes, it will automatically wipe the local\nIndexedDB copy of any data that has been persisted.\n\n```html\n<app-indexeddb-mirror\n    session=\"a-unique-session-key-413\"\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n```\n\nWhen `someUniqueSessionKey` changes to a different value, `app-indexeddb-mirror`\nwill delete the local data it is persisting at the `\"cats\"` key.\n\n## Important considerations regarding WebWorkers\n\nIn order to ensure that operations on IndexedDB block the main browser thread as\nlittle as possible, `app-indexeddb-mirror` relies on a WebWorker to operate on\nits corresponding IndexedDB database. If you are vulcanizing or otherwise\ncombining your source files before your app is deployed, make sure that you\ninclude the corresponding worker script (`app-indexeddb-mirror-worker.js`)\namong your deployable files. You can configure the path to the worker script\nwith the `worker-url` attribute.\n\n`app-indexeddb-mirror` will prefer SharedWorker if it is available in the\nbrowser where the app is running. If SharedWorker is not available, it will\nattempt to fall back to a standard WebWorker. When using a standard WebWorker,\nall `app-indexeddb-mirror` instances with the same `workerUrl` will share the\nsame WebWorker instance.\n\nIf WebWorkers are not supported in the browser, persisted offline data will not\nbe available through this element.\n\n\n\n## &lt;app-localstorage-document&gt;\n\napp-localstorage-document synchronizes storage between an in-memory\nvalue and a location in the browser's localStorage system.\n\nlocalStorage is a simple and widely supported storage API that provides both\npermanent and session-based storage options. Using app-localstorage-document\nyou can easily integrate localStorage into your app via normal Polymer\ndatabinding.\n\napp-localstorage-document is the reference implementation of an element\nthat uses `AppStorageBehavior`. Reading its code is a good way to get\nstarted writing your own storage element.\n\nExample use:\n\n```html\n<paper-input value=\"{{search}}\"></paper-input>\n<app-localstorage-document key=\"search\" data=\"{{search}}\">\n</app-localstorage-document>\n```\n\napp-localstorage-document automatically synchronizes changes to the\nsame key across multiple tabs.\n\nOnly supports storing JSON-serializable values.\n\n\n\n## Polymer.AppNetworkStatusBehavior\n\n`Polymer.AppNetworkStatusBehavior` tracks the status of whether the browser\nis online or offline. True if the browser is online, and false if the browser is\noffline matching the HTML browser state spec.\n\n\n","gitHead":"c742ce95fffb34276d1df63e4e7f3174a1a97e01","scripts":{"update-types":"bower install && gen-typescript-declarations --deleteExisting --outDir ."},"_npmUser":{"name":"polymer","email":"admin@polymer-project.org"},"_npmVersion":"5.6.0","description":"Web Components for managing user data in web apps","directories":{},"resolutions":{"samsam":"1.1.3","inherits":"2.0.3","type-detect":"1.0.0","supports-color":"3.1.2"},"_nodeVersion":"9.7.1","dependencies":{"@polymer/polymer":"^3.0.0-pre.10"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"bower":"^1.8.0","@polymer/iron-icon":"^3.0.0-pre.10","@polymer/paper-fab":"^3.0.0-pre.10","wct-browser-legacy":"0.0.1-pre.11","@polymer/iron-icons":"^3.0.0-pre.10","@polymer/font-roboto":"^3.0.0-pre.10","@polymer/paper-input":"^3.0.0-pre.10","@polymer/paper-button":"^3.0.0-pre.10","@polymer/paper-styles":"^3.0.0-pre.10","@polymer/iron-flex-layout":"^3.0.0-pre.10","@polymer/promise-polyfill":"^3.0.0-pre.10","@webcomponents/webcomponentsjs":"^1.0.0","@polymer/gen-typescript-declarations":"^1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/app-storage_3.0.0-pre.11_1520558227988_0.045432959583652455","host":"s3://npm-registry-packages"}},"3.0.0-pre.12":{"name":"@polymer/app-storage","version":"3.0.0-pre.12","author":{"name":"The Polymer Authors"},"license":"BSD-3-Clause","_id":"@polymer/app-storage@3.0.0-pre.12","maintainers":[{"name":"polymer","email":"admin@polymer-project.org"}],"homepage":"","dist":{"shasum":"de65134f3dd09e5851069d0f942aa432e0448c60","tarball":"https://registry.npmjs.org/@polymer/app-storage/-/app-storage-3.0.0-pre.12.tgz","fileCount":22,"integrity":"sha512-mX3K+p4RFj3X1MorOioCbs2rY5hPG1CHxnhFc4W8lUM2B3uKsBSubUTZjSPpfVRyVm75DRgQLMJ1r8DRq8gt2Q==","signatures":[{"sig":"MEUCIQDT+R5MEqf/KsKR/VZi2XaSieXEcyaX2BlOCHro82IdHgIgXdXn5HSxju5aAmjJHjkOjkA+dkaqyfi4inyPAzyRPsA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":84980},"readme":"\n<!---\n\nThis README is automatically generated from the comments in these files:\napp-indexeddb-mirror.html  app-localstorage-document.html  app-network-status-behavior.html  app-storage-behavior.html\n\nEdit those files, and our readme bot will duplicate them over here!\nEdit this file, and the bot will squash your changes :)\n\nThe bot does some handling of markdown. Please file a bug if it does the wrong\nthing! https://github.com/PolymerLabs/tedium/issues\n\n-->\n![status](https://travis-ci.org/PolymerElements/app-storage.svg?branch=master)\n## Changes in 2.0\n* Promise polyfill is no longer shipped with the element. It is now a dev dependency.\n\n## Polymer.AppStorageBehavior\n\nAppStorageBehavior is an abstract behavior that makes it easy to\nsynchronize in-memory data and a persistant storage system, such as\nthe browser's IndexedDB, or a remote database like Firebase.\n\nFor examples of how to use this behavior to write your own app storage\nelements see `<app-localstorage-document>` here, or check out\n[polymerfire](https://github.com/Firebase/polymerfire) and\n[app-pouchdb](https://github.com/PolymerElements/app-pouchdb).\n\n\n\n## &lt;app-indexeddb-mirror&gt;\n\n`app-indexeddb-mirror` is a purpose-built element to easily add read-only\noffline access of application data that is typically only available when the\nuser is connected to the network.\n\nWhen an app using this element is connected to the network, the element acts as\na pass-through for live application data. Data is bound into the `data`\nproperty, and consumers of the data can bind to the correlated `persistedData`\nproperty. As live data changes, `app-indexeddb-mirror` caches a copy of the live\ndata in a local IndexedDB database. When the app is no longer connected to the\nnetwork, `app-indexeddb-mirror` toggles its `persistedData` property to refer\nto a read-only copy of the corresponding data in IndexedDB.\n\nThis element is particularly useful in cases where an API or storage layer (such\nas Firebase, for example) does not support caching data for later use during\nuser sessions that begin while the user is disconnected from the network.\n\nHere is an example of using `app-indexeddb-mirror` with `iron-ajax`:\n\n```html\n<iron-ajax\n    url=\"/api/cats\"\n    handle-as=\"json\"\n    last-response=\"{{liveData}}\">\n</iron-ajax>\n<app-indexeddb-mirror\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n\n<template is=\"dom-repeat\" items=\"{{persistedData}}\" as=\"cat\">\n  <div>[[cat.name]]</div>\n</template>\n```\n\nIn the example above, `persistedData` will always be populated with\nthe most recently requested list of cats, even when the user is offline, and\neven if the user refreshes the app, as long as the request as been made at\nleast once while connected to the network.\n\nOf course, in the case of `iron-ajax`, it's totally possible to selectively\ncache network requests in a ServiceWorker for the same effect. However, this is\nnot the true for all data sources. For example, if a data source is provided\nover a WebSocket, it will not be cacheable by a ServiceWorker. Cases like this\nare where `app-indexeddb-mirror` really shines:\n\n```html\n<firebase-query\n    app-name=\"cats-app\"\n    path=\"/cats\"\n    order-by-child=\"name\"\n    data=\"{{liveData}}\">\n</firebase-query>\n<app-indexeddb-mirror\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n\n<template is=\"dom-repeat\" items=\"{{persistedData}}\" as=\"cat\">\n  <div>[[cat.name]]</div>\n</template>\n```\n\nFirebase data is typically provided over a WebSocket connection, so it is very\ntricky to cache it for offline access. With `app-indexeddb-mirror`, offline\naccess to Firebase data is trivially easy to implement.\n\n## User sessions\n\n`app-indexeddb-mirror` caches data in a local IndexedDB database. If your app\nfeatures user authentication, it is usually desireable to ensure that this data\ndoes not leak across the sessions of different users on the same device.\n\nIn support of this, each `app-indexeddb-mirror` is configured with a unique\nsession key. When the session key changes, it will automatically wipe the local\nIndexedDB copy of any data that has been persisted.\n\n```html\n<app-indexeddb-mirror\n    session=\"a-unique-session-key-413\"\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n```\n\nWhen `someUniqueSessionKey` changes to a different value, `app-indexeddb-mirror`\nwill delete the local data it is persisting at the `\"cats\"` key.\n\n## Important considerations regarding WebWorkers\n\nIn order to ensure that operations on IndexedDB block the main browser thread as\nlittle as possible, `app-indexeddb-mirror` relies on a WebWorker to operate on\nits corresponding IndexedDB database. If you are vulcanizing or otherwise\ncombining your source files before your app is deployed, make sure that you\ninclude the corresponding worker script (`app-indexeddb-mirror-worker.js`)\namong your deployable files. You can configure the path to the worker script\nwith the `worker-url` attribute.\n\n`app-indexeddb-mirror` will prefer SharedWorker if it is available in the\nbrowser where the app is running. If SharedWorker is not available, it will\nattempt to fall back to a standard WebWorker. When using a standard WebWorker,\nall `app-indexeddb-mirror` instances with the same `workerUrl` will share the\nsame WebWorker instance.\n\nIf WebWorkers are not supported in the browser, persisted offline data will not\nbe available through this element.\n\n\n\n## &lt;app-localstorage-document&gt;\n\napp-localstorage-document synchronizes storage between an in-memory\nvalue and a location in the browser's localStorage system.\n\nlocalStorage is a simple and widely supported storage API that provides both\npermanent and session-based storage options. Using app-localstorage-document\nyou can easily integrate localStorage into your app via normal Polymer\ndatabinding.\n\napp-localstorage-document is the reference implementation of an element\nthat uses `AppStorageBehavior`. Reading its code is a good way to get\nstarted writing your own storage element.\n\nExample use:\n\n```html\n<paper-input value=\"{{search}}\"></paper-input>\n<app-localstorage-document key=\"search\" data=\"{{search}}\">\n</app-localstorage-document>\n```\n\napp-localstorage-document automatically synchronizes changes to the\nsame key across multiple tabs.\n\nOnly supports storing JSON-serializable values.\n\n\n\n## Polymer.AppNetworkStatusBehavior\n\n`Polymer.AppNetworkStatusBehavior` tracks the status of whether the browser\nis online or offline. True if the browser is online, and false if the browser is\noffline matching the HTML browser state spec.\n\n\n","gitHead":"238e96cbb123fb964998e0a1158acd3d06f9a3e6","scripts":{"update-types":"bower install && gen-typescript-declarations --deleteExisting --outDir ."},"_npmUser":{"name":"polymer","email":"admin@polymer-project.org"},"_npmVersion":"5.5.1","description":"Web Components for managing user data in web apps","directories":{},"resolutions":{"samsam":"1.1.3","inherits":"2.0.3","type-detect":"1.0.0","supports-color":"3.1.2"},"_nodeVersion":"9.2.0","dependencies":{"@polymer/polymer":"3.0.0-pre.12"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"bower":"^1.8.0","@polymer/iron-icon":"3.0.0-pre.12","@polymer/paper-fab":"3.0.0-pre.12","wct-browser-legacy":"0.0.1-pre.11","@polymer/iron-icons":"3.0.0-pre.12","@polymer/font-roboto":"3.0.0-pre.12","@polymer/paper-input":"3.0.0-pre.12","@polymer/paper-button":"3.0.0-pre.12","@polymer/paper-styles":"3.0.0-pre.12","@polymer/iron-flex-layout":"3.0.0-pre.12","@polymer/promise-polyfill":"3.0.0-pre.12","@webcomponents/webcomponentsjs":"^1.0.0","@polymer/gen-typescript-declarations":"^1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/app-storage_3.0.0-pre.12_1521737789839_0.35555778851906483","host":"s3://npm-registry-packages"}},"3.0.0-pre.13":{"name":"@polymer/app-storage","version":"3.0.0-pre.13","author":{"name":"The Polymer Authors"},"license":"BSD-3-Clause","_id":"@polymer/app-storage@3.0.0-pre.13","maintainers":[{"name":"polymer","email":"admin@polymer-project.org"}],"homepage":"","dist":{"shasum":"cd94ddbe8122403f9530218c3a1da1ab48b454b1","tarball":"https://registry.npmjs.org/@polymer/app-storage/-/app-storage-3.0.0-pre.13.tgz","fileCount":22,"integrity":"sha512-gPUYnQlM7S65+NSpJyVF8E9OBCsZsCgBGQhGUg9bNwELFGYc2NnE1VFVgcdkLyKMqEPSQrdF/AxLuDXju7HATg==","signatures":[{"sig":"MEQCIApvRoxdu5P9xG7UTjAjDosIGJ8x/XAAZCEnkWTMmoRiAiBSpjpPAs+JpBvxHtTKxEKArkZParL/eM92llCQDlSUjA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":93885,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa6PCFCRA9TVsSAnZWagAAbccP/3I/hgBg0d3VoOieQf2c\ns6zcLUq8U4JX9BVksBdpTWVLTXDKd7+93RMHxqWrjvqYn4dox7jwtSwrIn1a\nhv4tpwILEXuojayMbPyhbaf2gIsh10J5Vt73Lt1zG7LY1YCn6sVc4t43qNLJ\nUqLGwi76HI38IjW5eJcewhPKXz8LjpWSLZ5Ji0IdBui4IbtGPGJF1r8Mxe9E\nIKxfoJ65vDl1a812HExryVEJZzX/MiT6Hg3cKgzPy9RHUSicZrRZo7VjBIRG\nYGrTNyOmj2M7zzSEavpDP4mtlxCWQTF5bKTuKPwkh/ZnI7eFl3ToMyihaglr\n53l9abw/uwyfSu6O56/0ZfTIQGVvR6agdNwb+4fwKtHM8izY8roS7W5mMN7a\nfIMGDiqjHgoWVzK8JRqgLhU0hZFp+MW8PWxOvqk4olTWl0vFlkSw+rLNbLxF\nv2wbWI1AKYgiq9atESSBayyxrbGRyohFE/iz2axTUVba8v6qbOCNL0BsFB5E\nywx1ZcjHjW8u1sNk7opCWhPohgGJJoqhhGPOkx5m1jtTK7PkmQGNqkWsnBFL\nY7T5hIEVBeYxcTCO4MFOFe130qpYwD8hEyuu1HysJtGJcBPbIu5z7dDSdVtl\n9akHSJ6R2RDnph4jGSXi4CRQSTn5kFcCYlxXSg4CSeqJhSVeQsR+5aCW+THk\nlLSU\r\n=qLp0\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"\n<!---\n\nThis README is automatically generated from the comments in these files:\napp-indexeddb-mirror.html  app-localstorage-document.html  app-network-status-behavior.html  app-storage-behavior.html\n\nEdit those files, and our readme bot will duplicate them over here!\nEdit this file, and the bot will squash your changes :)\n\nThe bot does some handling of markdown. Please file a bug if it does the wrong\nthing! https://github.com/PolymerLabs/tedium/issues\n\n-->\n![status](https://travis-ci.org/PolymerElements/app-storage.svg?branch=master)\n## Changes in 2.0\n* Promise polyfill is no longer shipped with the element. It is now a dev dependency.\n\n## Polymer.AppStorageBehavior\n\nAppStorageBehavior is an abstract behavior that makes it easy to\nsynchronize in-memory data and a persistant storage system, such as\nthe browser's IndexedDB, or a remote database like Firebase.\n\nFor examples of how to use this behavior to write your own app storage\nelements see `<app-localstorage-document>` here, or check out\n[polymerfire](https://github.com/Firebase/polymerfire) and\n[app-pouchdb](https://github.com/PolymerElements/app-pouchdb).\n\n\n\n## &lt;app-indexeddb-mirror&gt;\n\n`app-indexeddb-mirror` is a purpose-built element to easily add read-only\noffline access of application data that is typically only available when the\nuser is connected to the network.\n\nWhen an app using this element is connected to the network, the element acts as\na pass-through for live application data. Data is bound into the `data`\nproperty, and consumers of the data can bind to the correlated `persistedData`\nproperty. As live data changes, `app-indexeddb-mirror` caches a copy of the live\ndata in a local IndexedDB database. When the app is no longer connected to the\nnetwork, `app-indexeddb-mirror` toggles its `persistedData` property to refer\nto a read-only copy of the corresponding data in IndexedDB.\n\nThis element is particularly useful in cases where an API or storage layer (such\nas Firebase, for example) does not support caching data for later use during\nuser sessions that begin while the user is disconnected from the network.\n\nHere is an example of using `app-indexeddb-mirror` with `iron-ajax`:\n\n```html\n<iron-ajax\n    url=\"/api/cats\"\n    handle-as=\"json\"\n    last-response=\"{{liveData}}\">\n</iron-ajax>\n<app-indexeddb-mirror\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n\n<template is=\"dom-repeat\" items=\"{{persistedData}}\" as=\"cat\">\n  <div>[[cat.name]]</div>\n</template>\n```\n\nIn the example above, `persistedData` will always be populated with\nthe most recently requested list of cats, even when the user is offline, and\neven if the user refreshes the app, as long as the request as been made at\nleast once while connected to the network.\n\nOf course, in the case of `iron-ajax`, it's totally possible to selectively\ncache network requests in a ServiceWorker for the same effect. However, this is\nnot the true for all data sources. For example, if a data source is provided\nover a WebSocket, it will not be cacheable by a ServiceWorker. Cases like this\nare where `app-indexeddb-mirror` really shines:\n\n```html\n<firebase-query\n    app-name=\"cats-app\"\n    path=\"/cats\"\n    order-by-child=\"name\"\n    data=\"{{liveData}}\">\n</firebase-query>\n<app-indexeddb-mirror\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n\n<template is=\"dom-repeat\" items=\"{{persistedData}}\" as=\"cat\">\n  <div>[[cat.name]]</div>\n</template>\n```\n\nFirebase data is typically provided over a WebSocket connection, so it is very\ntricky to cache it for offline access. With `app-indexeddb-mirror`, offline\naccess to Firebase data is trivially easy to implement.\n\n## User sessions\n\n`app-indexeddb-mirror` caches data in a local IndexedDB database. If your app\nfeatures user authentication, it is usually desireable to ensure that this data\ndoes not leak across the sessions of different users on the same device.\n\nIn support of this, each `app-indexeddb-mirror` is configured with a unique\nsession key. When the session key changes, it will automatically wipe the local\nIndexedDB copy of any data that has been persisted.\n\n```html\n<app-indexeddb-mirror\n    session=\"a-unique-session-key-413\"\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n```\n\nWhen `someUniqueSessionKey` changes to a different value, `app-indexeddb-mirror`\nwill delete the local data it is persisting at the `\"cats\"` key.\n\n## Important considerations regarding WebWorkers\n\nIn order to ensure that operations on IndexedDB block the main browser thread as\nlittle as possible, `app-indexeddb-mirror` relies on a WebWorker to operate on\nits corresponding IndexedDB database. If you are vulcanizing or otherwise\ncombining your source files before your app is deployed, make sure that you\ninclude the corresponding worker script (`app-indexeddb-mirror-worker.js`)\namong your deployable files. You can configure the path to the worker script\nwith the `worker-url` attribute.\n\n`app-indexeddb-mirror` will prefer SharedWorker if it is available in the\nbrowser where the app is running. If SharedWorker is not available, it will\nattempt to fall back to a standard WebWorker. When using a standard WebWorker,\nall `app-indexeddb-mirror` instances with the same `workerUrl` will share the\nsame WebWorker instance.\n\nIf WebWorkers are not supported in the browser, persisted offline data will not\nbe available through this element.\n\n\n\n## &lt;app-localstorage-document&gt;\n\napp-localstorage-document synchronizes storage between an in-memory\nvalue and a location in the browser's localStorage system.\n\nlocalStorage is a simple and widely supported storage API that provides both\npermanent and session-based storage options. Using app-localstorage-document\nyou can easily integrate localStorage into your app via normal Polymer\ndatabinding.\n\napp-localstorage-document is the reference implementation of an element\nthat uses `AppStorageBehavior`. Reading its code is a good way to get\nstarted writing your own storage element.\n\nExample use:\n\n```html\n<paper-input value=\"{{search}}\"></paper-input>\n<app-localstorage-document key=\"search\" data=\"{{search}}\">\n</app-localstorage-document>\n```\n\napp-localstorage-document automatically synchronizes changes to the\nsame key across multiple tabs.\n\nOnly supports storing JSON-serializable values.\n\n\n\n## Polymer.AppNetworkStatusBehavior\n\n`Polymer.AppNetworkStatusBehavior` tracks the status of whether the browser\nis online or offline. True if the browser is online, and false if the browser is\noffline matching the HTML browser state spec.\n\n\n","gitHead":"c676db9bb531804ecff09583229f88e9441b8113","scripts":{"format":"webmat && npm run update-types","update-types":"bower install && gen-typescript-declarations --deleteExisting --outDir ."},"_npmUser":{"name":"polymer","email":"admin@polymer-project.org"},"_npmVersion":"6.0.0","description":"Web Components for managing user data in web apps","directories":{},"resolutions":{"samsam":"1.1.3","inherits":"2.0.3","type-detect":"1.0.0","supports-color":"3.1.2"},"_nodeVersion":"9.8.0","dependencies":{"@polymer/polymer":"^3.0.0-pre.13"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"bower":"^1.8.0","webmat":"^0.2.0","@polymer/iron-icon":"^3.0.0-pre.13","@polymer/paper-fab":"^3.0.0-pre.13","wct-browser-legacy":"^0.0.1-pre.11","@polymer/iron-icons":"^3.0.0-pre.13","@polymer/font-roboto":"^3.0.0-pre.13","@polymer/paper-input":"^3.0.0-pre.13","@polymer/paper-button":"^3.0.0-pre.13","@polymer/paper-styles":"^3.0.0-pre.13","@polymer/iron-flex-layout":"^3.0.0-pre.13","@polymer/promise-polyfill":"^3.0.0-pre.13","@webcomponents/webcomponentsjs":"^2.0.0-0","@polymer/gen-typescript-declarations":"^1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/app-storage_3.0.0-pre.13_1525215364948_0.09493490234970592","host":"s3://npm-registry-packages"}},"3.0.0-pre.14":{"name":"@polymer/app-storage","version":"3.0.0-pre.14","author":{"name":"The Polymer Authors"},"license":"BSD-3-Clause","_id":"@polymer/app-storage@3.0.0-pre.14","maintainers":[{"name":"polymer","email":"admin@polymer-project.org"}],"homepage":"","dist":{"shasum":"9516e34606b915b64106f097c742c1ee6795825c","tarball":"https://registry.npmjs.org/@polymer/app-storage/-/app-storage-3.0.0-pre.14.tgz","fileCount":22,"integrity":"sha512-XyAt6Iq243/w2FUSOitTgBFyS/OPmbr7h1sFMB+4JToYc8qWa7IzW+13L7BEE408t2T3BbJ3RfdCPNBqTiVofA==","signatures":[{"sig":"MEUCIFQxN1Dhv8onEFIIqvbEYcmt54XiMm2maq25NFmBFPmvAiEAweGVp3SO+wdgBQ+rngmSt2JSQwOdAAhFaiIc+wxJDp8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":93912,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa6QglCRA9TVsSAnZWagAAiZIP/1G1FTSh/kGj8z7VCf/e\nAdPoHTpWCBIZxPAJSRboDl8N/nW2h43Ac8UQaPHpUmOUs9WLyFs16EwPpcdD\nx2LRCE97AWPIBhi8+qhoPym9qHNU+XqYVxtS1HAlIUKBH+zOnPpdNx0AZ83h\ngSGqy24Q03oFFfKr3qS6+E68Bd1bSGKGxx/HsjEwAMsSUXhXJzO2a99Gjrsb\n1RrOyAetahKKVkWKB69Z5MgvxVJekXYf2ZXJnFIezqHpV9AHbviQ7xZ6PwLQ\n/q6mUv67BDqOWNFTdDqojlyNVxQFJBCC9h3ANUgur3zEKWApbgLcxKaf+tvo\nBaFzS+s14t9Lw5vRZBhpviO0/qHwzSP4HV8+eQ3FD8mfgYt8AIjPv5SEuseh\nkhnIh6Y5Y9lKygz6Vado9moO0pgu1Z6lwBI1MwjmaXnW7n1Gl+AtmOq5VewJ\nVAHExJI31CL3V+pm+c+TY2P587jZ3nvifjwvNtm8wWQB/igKtBgo/cVmQ0tM\ndE+e0t5oadGWm/jLdE9CCjCQacAsC28cdPvqUgjgS9isKJMiNLju8q/OsPss\nmd/xCPV9gJmK4p70NRRWP+ETMkmPxw7bducUNWvtpqgMccKq+ukItOS25yHM\nAOvg+0zb/4Shl/bjl7nkFKBap+/KAkxIzqr37uGAbCtJ8rRyxxQVj2+wn71y\nytPV\r\n=ROgN\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"\n<!---\n\nThis README is automatically generated from the comments in these files:\napp-indexeddb-mirror.html  app-localstorage-document.html  app-network-status-behavior.html  app-storage-behavior.html\n\nEdit those files, and our readme bot will duplicate them over here!\nEdit this file, and the bot will squash your changes :)\n\nThe bot does some handling of markdown. Please file a bug if it does the wrong\nthing! https://github.com/PolymerLabs/tedium/issues\n\n-->\n![status](https://travis-ci.org/PolymerElements/app-storage.svg?branch=master)\n## Changes in 2.0\n* Promise polyfill is no longer shipped with the element. It is now a dev dependency.\n\n## Polymer.AppStorageBehavior\n\nAppStorageBehavior is an abstract behavior that makes it easy to\nsynchronize in-memory data and a persistant storage system, such as\nthe browser's IndexedDB, or a remote database like Firebase.\n\nFor examples of how to use this behavior to write your own app storage\nelements see `<app-localstorage-document>` here, or check out\n[polymerfire](https://github.com/Firebase/polymerfire) and\n[app-pouchdb](https://github.com/PolymerElements/app-pouchdb).\n\n\n\n## &lt;app-indexeddb-mirror&gt;\n\n`app-indexeddb-mirror` is a purpose-built element to easily add read-only\noffline access of application data that is typically only available when the\nuser is connected to the network.\n\nWhen an app using this element is connected to the network, the element acts as\na pass-through for live application data. Data is bound into the `data`\nproperty, and consumers of the data can bind to the correlated `persistedData`\nproperty. As live data changes, `app-indexeddb-mirror` caches a copy of the live\ndata in a local IndexedDB database. When the app is no longer connected to the\nnetwork, `app-indexeddb-mirror` toggles its `persistedData` property to refer\nto a read-only copy of the corresponding data in IndexedDB.\n\nThis element is particularly useful in cases where an API or storage layer (such\nas Firebase, for example) does not support caching data for later use during\nuser sessions that begin while the user is disconnected from the network.\n\nHere is an example of using `app-indexeddb-mirror` with `iron-ajax`:\n\n```html\n<iron-ajax\n    url=\"/api/cats\"\n    handle-as=\"json\"\n    last-response=\"{{liveData}}\">\n</iron-ajax>\n<app-indexeddb-mirror\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n\n<template is=\"dom-repeat\" items=\"{{persistedData}}\" as=\"cat\">\n  <div>[[cat.name]]</div>\n</template>\n```\n\nIn the example above, `persistedData` will always be populated with\nthe most recently requested list of cats, even when the user is offline, and\neven if the user refreshes the app, as long as the request as been made at\nleast once while connected to the network.\n\nOf course, in the case of `iron-ajax`, it's totally possible to selectively\ncache network requests in a ServiceWorker for the same effect. However, this is\nnot the true for all data sources. For example, if a data source is provided\nover a WebSocket, it will not be cacheable by a ServiceWorker. Cases like this\nare where `app-indexeddb-mirror` really shines:\n\n```html\n<firebase-query\n    app-name=\"cats-app\"\n    path=\"/cats\"\n    order-by-child=\"name\"\n    data=\"{{liveData}}\">\n</firebase-query>\n<app-indexeddb-mirror\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n\n<template is=\"dom-repeat\" items=\"{{persistedData}}\" as=\"cat\">\n  <div>[[cat.name]]</div>\n</template>\n```\n\nFirebase data is typically provided over a WebSocket connection, so it is very\ntricky to cache it for offline access. With `app-indexeddb-mirror`, offline\naccess to Firebase data is trivially easy to implement.\n\n## User sessions\n\n`app-indexeddb-mirror` caches data in a local IndexedDB database. If your app\nfeatures user authentication, it is usually desireable to ensure that this data\ndoes not leak across the sessions of different users on the same device.\n\nIn support of this, each `app-indexeddb-mirror` is configured with a unique\nsession key. When the session key changes, it will automatically wipe the local\nIndexedDB copy of any data that has been persisted.\n\n```html\n<app-indexeddb-mirror\n    session=\"a-unique-session-key-413\"\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n```\n\nWhen `someUniqueSessionKey` changes to a different value, `app-indexeddb-mirror`\nwill delete the local data it is persisting at the `\"cats\"` key.\n\n## Important considerations regarding WebWorkers\n\nIn order to ensure that operations on IndexedDB block the main browser thread as\nlittle as possible, `app-indexeddb-mirror` relies on a WebWorker to operate on\nits corresponding IndexedDB database. If you are vulcanizing or otherwise\ncombining your source files before your app is deployed, make sure that you\ninclude the corresponding worker script (`app-indexeddb-mirror-worker.js`)\namong your deployable files. You can configure the path to the worker script\nwith the `worker-url` attribute.\n\n`app-indexeddb-mirror` will prefer SharedWorker if it is available in the\nbrowser where the app is running. If SharedWorker is not available, it will\nattempt to fall back to a standard WebWorker. When using a standard WebWorker,\nall `app-indexeddb-mirror` instances with the same `workerUrl` will share the\nsame WebWorker instance.\n\nIf WebWorkers are not supported in the browser, persisted offline data will not\nbe available through this element.\n\n\n\n## &lt;app-localstorage-document&gt;\n\napp-localstorage-document synchronizes storage between an in-memory\nvalue and a location in the browser's localStorage system.\n\nlocalStorage is a simple and widely supported storage API that provides both\npermanent and session-based storage options. Using app-localstorage-document\nyou can easily integrate localStorage into your app via normal Polymer\ndatabinding.\n\napp-localstorage-document is the reference implementation of an element\nthat uses `AppStorageBehavior`. Reading its code is a good way to get\nstarted writing your own storage element.\n\nExample use:\n\n```html\n<paper-input value=\"{{search}}\"></paper-input>\n<app-localstorage-document key=\"search\" data=\"{{search}}\">\n</app-localstorage-document>\n```\n\napp-localstorage-document automatically synchronizes changes to the\nsame key across multiple tabs.\n\nOnly supports storing JSON-serializable values.\n\n\n\n## Polymer.AppNetworkStatusBehavior\n\n`Polymer.AppNetworkStatusBehavior` tracks the status of whether the browser\nis online or offline. True if the browser is online, and false if the browser is\noffline matching the HTML browser state spec.\n\n\n","gitHead":"fcb5b8d1d259578078ba241bc240666999b1f1be","scripts":{"format":"webmat && npm run update-types","update-types":"bower install && gen-typescript-declarations --deleteExisting --outDir ."},"_npmUser":{"name":"polymer","email":"admin@polymer-project.org"},"_npmVersion":"6.0.0","description":"Web Components for managing user data in web apps","directories":{},"resolutions":{"samsam":"1.1.3","inherits":"2.0.3","type-detect":"1.0.0","supports-color":"3.1.2"},"_nodeVersion":"9.8.0","dependencies":{"@polymer/polymer":"^3.0.0-pre.13"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"bower":"^1.8.0","webmat":"^0.2.0","@polymer/iron-icon":"^3.0.0-pre.14","@polymer/paper-fab":"^3.0.0-pre.14","wct-browser-legacy":"^0.0.1-pre.11","@polymer/iron-icons":"^3.0.0-pre.14","@polymer/font-roboto":"^3.0.0-pre.14","@polymer/paper-input":"^3.0.0-pre.14","@polymer/paper-button":"^3.0.0-pre.14","@polymer/paper-styles":"^3.0.0-pre.14","@polymer/iron-flex-layout":"^3.0.0-pre.14","@polymer/promise-polyfill":"^3.0.0-pre.14","@webcomponents/webcomponentsjs":"^2.0.0-0","@polymer/gen-typescript-declarations":"^1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/app-storage_3.0.0-pre.14_1525221412381_0.3166244588526299","host":"s3://npm-registry-packages"}},"3.0.0-pre.15":{"name":"@polymer/app-storage","version":"3.0.0-pre.15","author":{"name":"The Polymer Authors"},"license":"BSD-3-Clause","_id":"@polymer/app-storage@3.0.0-pre.15","maintainers":[{"name":"polymer","email":"admin@polymer-project.org"}],"homepage":"","dist":{"shasum":"3522446030969504cf0290a279c49711d10388c7","tarball":"https://registry.npmjs.org/@polymer/app-storage/-/app-storage-3.0.0-pre.15.tgz","fileCount":23,"integrity":"sha512-Tj1GshzTVriYWzd9K9VQvuwZMBNbrmX/PkTEowtE55Mz0pLWrZcdQkcZTBFmX5tBWYssQnLp/jJAW44UjhhyGQ==","signatures":[{"sig":"MEUCIAmp9kEX8PMdgvzs3WPEYt2WutyDkGORMVwtzsY0Qa8+AiEAteC6H3C80Ffg1QFoT0OjUPBT2WOf4eM+K2qffw4RW/0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":96139,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa6iVjCRA9TVsSAnZWagAA1soP/330myKkw1TnOmS3ErJ0\nzr2y1uExFQFqKACHdEiyV7r18fdHrOn41P+M/Fgh2bkajHzaAYsm0CLt9R99\nTWwDL4LSLz7k4CpR7WAliDJSHw4WZ+hSEkR6cQbjNNmh6MOn0Ek3cesdHipZ\nCUoE7K0Pm+FpIBbMUXEMPSHMH69vmTRXelirDfGFp/iUY6Amcgm8jE4K3Xpt\nexN0cFzHaqederiOJVWraJQ9fP6lJQCUC7jSoIs+BJlGruLO5n6eneP4B1tg\nYA8KymUBCDgtaDb/3JaQhILPrHcXX46aSDulKxrq/ZQtJdZiwDHPvG9wkD7D\nkcLdFTbxI6/SIsUviwky5LizHsXPQk22f5nanrcy5RtH31nYo6fTrPK1oVsb\ninhLfZVfjwMZYY6VhmwCRj3MIELdK01czkaT6uS1hsFVPxSyMYaH6q69CpGo\nSRFEd3xP3UXYEh3SSW+aX8T4pOmqDikeRCD5HgQuv3pyYNXzlVWYBWQFpeZM\nSjNqPlzRFsw5D79hhV+0Edwwaz9UZlGtS4p1L+GzXaKzqFv8J9V/E7jY45Hf\n+CCBz5NULWkun9kGgeF/wpqT1gSigDyOqXf72Pru7IQG9MoYHavwQXYKaDft\nhDCGAiAHbnSHYviAreYgJMM4z+CpDVuaK2mDtZojPOVuyCftcYNkLfmcw3aN\nnOAZ\r\n=ziNO\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"\n<!---\n\nThis README is automatically generated from the comments in these files:\napp-indexeddb-mirror.html  app-localstorage-document.html  app-network-status-behavior.html  app-storage-behavior.html\n\nEdit those files, and our readme bot will duplicate them over here!\nEdit this file, and the bot will squash your changes :)\n\nThe bot does some handling of markdown. Please file a bug if it does the wrong\nthing! https://github.com/PolymerLabs/tedium/issues\n\n-->\n![status](https://travis-ci.org/PolymerElements/app-storage.svg?branch=master)\n## Changes in 2.0\n* Promise polyfill is no longer shipped with the element. It is now a dev dependency.\n\n## Polymer.AppStorageBehavior\n\nAppStorageBehavior is an abstract behavior that makes it easy to\nsynchronize in-memory data and a persistant storage system, such as\nthe browser's IndexedDB, or a remote database like Firebase.\n\nFor examples of how to use this behavior to write your own app storage\nelements see `<app-localstorage-document>` here, or check out\n[polymerfire](https://github.com/Firebase/polymerfire) and\n[app-pouchdb](https://github.com/PolymerElements/app-pouchdb).\n\n\n\n## &lt;app-indexeddb-mirror&gt;\n\n`app-indexeddb-mirror` is a purpose-built element to easily add read-only\noffline access of application data that is typically only available when the\nuser is connected to the network.\n\nWhen an app using this element is connected to the network, the element acts as\na pass-through for live application data. Data is bound into the `data`\nproperty, and consumers of the data can bind to the correlated `persistedData`\nproperty. As live data changes, `app-indexeddb-mirror` caches a copy of the live\ndata in a local IndexedDB database. When the app is no longer connected to the\nnetwork, `app-indexeddb-mirror` toggles its `persistedData` property to refer\nto a read-only copy of the corresponding data in IndexedDB.\n\nThis element is particularly useful in cases where an API or storage layer (such\nas Firebase, for example) does not support caching data for later use during\nuser sessions that begin while the user is disconnected from the network.\n\nHere is an example of using `app-indexeddb-mirror` with `iron-ajax`:\n\n```html\n<iron-ajax\n    url=\"/api/cats\"\n    handle-as=\"json\"\n    last-response=\"{{liveData}}\">\n</iron-ajax>\n<app-indexeddb-mirror\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n\n<template is=\"dom-repeat\" items=\"{{persistedData}}\" as=\"cat\">\n  <div>[[cat.name]]</div>\n</template>\n```\n\nIn the example above, `persistedData` will always be populated with\nthe most recently requested list of cats, even when the user is offline, and\neven if the user refreshes the app, as long as the request as been made at\nleast once while connected to the network.\n\nOf course, in the case of `iron-ajax`, it's totally possible to selectively\ncache network requests in a ServiceWorker for the same effect. However, this is\nnot the true for all data sources. For example, if a data source is provided\nover a WebSocket, it will not be cacheable by a ServiceWorker. Cases like this\nare where `app-indexeddb-mirror` really shines:\n\n```html\n<firebase-query\n    app-name=\"cats-app\"\n    path=\"/cats\"\n    order-by-child=\"name\"\n    data=\"{{liveData}}\">\n</firebase-query>\n<app-indexeddb-mirror\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n\n<template is=\"dom-repeat\" items=\"{{persistedData}}\" as=\"cat\">\n  <div>[[cat.name]]</div>\n</template>\n```\n\nFirebase data is typically provided over a WebSocket connection, so it is very\ntricky to cache it for offline access. With `app-indexeddb-mirror`, offline\naccess to Firebase data is trivially easy to implement.\n\n## User sessions\n\n`app-indexeddb-mirror` caches data in a local IndexedDB database. If your app\nfeatures user authentication, it is usually desireable to ensure that this data\ndoes not leak across the sessions of different users on the same device.\n\nIn support of this, each `app-indexeddb-mirror` is configured with a unique\nsession key. When the session key changes, it will automatically wipe the local\nIndexedDB copy of any data that has been persisted.\n\n```html\n<app-indexeddb-mirror\n    session=\"a-unique-session-key-413\"\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n```\n\nWhen `someUniqueSessionKey` changes to a different value, `app-indexeddb-mirror`\nwill delete the local data it is persisting at the `\"cats\"` key.\n\n## Important considerations regarding WebWorkers\n\nIn order to ensure that operations on IndexedDB block the main browser thread as\nlittle as possible, `app-indexeddb-mirror` relies on a WebWorker to operate on\nits corresponding IndexedDB database. If you are vulcanizing or otherwise\ncombining your source files before your app is deployed, make sure that you\ninclude the corresponding worker script (`app-indexeddb-mirror-worker.js`)\namong your deployable files. You can configure the path to the worker script\nwith the `worker-url` attribute.\n\n`app-indexeddb-mirror` will prefer SharedWorker if it is available in the\nbrowser where the app is running. If SharedWorker is not available, it will\nattempt to fall back to a standard WebWorker. When using a standard WebWorker,\nall `app-indexeddb-mirror` instances with the same `workerUrl` will share the\nsame WebWorker instance.\n\nIf WebWorkers are not supported in the browser, persisted offline data will not\nbe available through this element.\n\n\n\n## &lt;app-localstorage-document&gt;\n\napp-localstorage-document synchronizes storage between an in-memory\nvalue and a location in the browser's localStorage system.\n\nlocalStorage is a simple and widely supported storage API that provides both\npermanent and session-based storage options. Using app-localstorage-document\nyou can easily integrate localStorage into your app via normal Polymer\ndatabinding.\n\napp-localstorage-document is the reference implementation of an element\nthat uses `AppStorageBehavior`. Reading its code is a good way to get\nstarted writing your own storage element.\n\nExample use:\n\n```html\n<paper-input value=\"{{search}}\"></paper-input>\n<app-localstorage-document key=\"search\" data=\"{{search}}\">\n</app-localstorage-document>\n```\n\napp-localstorage-document automatically synchronizes changes to the\nsame key across multiple tabs.\n\nOnly supports storing JSON-serializable values.\n\n\n\n## Polymer.AppNetworkStatusBehavior\n\n`Polymer.AppNetworkStatusBehavior` tracks the status of whether the browser\nis online or offline. True if the browser is online, and false if the browser is\noffline matching the HTML browser state spec.\n\n\n","gitHead":"c781e08703b53b8e18e5bad6934a9b1ae85e0640","scripts":{"format":"webmat && npm run update-types","update-types":"bower install && gen-typescript-declarations --deleteExisting --outDir ."},"_npmUser":{"name":"polymer","email":"admin@polymer-project.org"},"_npmVersion":"6.0.0","description":"Web Components for managing user data in web apps","directories":{},"resolutions":{"samsam":"1.1.3","inherits":"2.0.3","type-detect":"1.0.0","supports-color":"3.1.2","@webcomponents/webcomponentsjs":"2.0.0-beta.2"},"_nodeVersion":"9.8.0","dependencies":{"@polymer/polymer":"^3.0.0-pre.13"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"bower":"^1.8.0","webmat":"^0.2.0","@polymer/iron-icon":"^3.0.0-pre.15","@polymer/paper-fab":"^3.0.0-pre.15","wct-browser-legacy":"^0.0.1-pre.11","@polymer/iron-icons":"^3.0.0-pre.15","@polymer/font-roboto":"^3.0.0-pre.15","@polymer/paper-input":"^3.0.0-pre.15","@polymer/paper-button":"^3.0.0-pre.15","@polymer/paper-styles":"^3.0.0-pre.15","@polymer/iron-flex-layout":"^3.0.0-pre.15","@polymer/promise-polyfill":"^3.0.0-pre.15","@webcomponents/webcomponentsjs":"^2.0.0-beta.2","@polymer/gen-typescript-declarations":"^1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/app-storage_3.0.0-pre.15_1525294430669_0.6781409071645919","host":"s3://npm-registry-packages"}},"3.0.0-pre.16":{"name":"@polymer/app-storage","version":"3.0.0-pre.16","author":{"name":"The Polymer Authors"},"license":"BSD-3-Clause","_id":"@polymer/app-storage@3.0.0-pre.16","maintainers":[{"name":"polymer","email":"admin@polymer-project.org"}],"homepage":"","dist":{"shasum":"4132f7ff3be7ae8045cb7adf5617579cc1708c86","tarball":"https://registry.npmjs.org/@polymer/app-storage/-/app-storage-3.0.0-pre.16.tgz","fileCount":23,"integrity":"sha512-qRUCDnV9tufKMTXJC4GPM9W+Y8/EgeFzS2QNjHayjycrb/O36BUnB8N35sYjat3JXsWtfSXfZHanvcYcUlyRZA==","signatures":[{"sig":"MEUCIBpZzzX5zVQo6YfjhTg1AB6qYWFInoCgwm/JRuYA9TZ2AiEA5HQ3wg/K8h4VpjYyBQhd7ujvxYhyXmGKJS/RUb8PYs4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":96139,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa7L/XCRA9TVsSAnZWagAAYsAP/0f1LiD/iXNLhEzMo4jx\nYR/xk5OCIWxM0B8KdWHyOZu0ncckOX+dO2sGAhJ8cFkQhcoHj6ZnJ16iAD9h\na+BJITLZvD5amn2xv5ZMeI1GZ7wuuseOYUXr7egRz/cjm8SR7wpjeW4OB/PA\nP0MnBYQkBZ4svmeW5fn5Zp0oJx2epQ1DRoMlgAME/srNKV5GxCb2+xzNhp6N\nM4uCGosuW/M5ZF0ammHWKcP41DUPrN/asl36T04aezJloePzMpguuKnFaF5U\n0rCcduvhBwECAMPi0AFDZfGS0c/ws6gtfZqt5ijF3hqkhgMDGcFEaM7ZwI6p\n1K17Tk9OPNWVe6PyBmPQsdtG9UhkQKzPQckkdEu/m/cYc/R03t9j55pBD/n5\n6m20ElBF88RD/bw0WtIBWWRXkUUYa0IbmTyfqdbdBw0kqprqLNVjtv0uFu9D\n852NOPdAinPRf0EANJOWO60E3Ev7GvhnT4HlQdu5uJpIV9wIPZAy7LbIEJ/g\nNOm6MdBsRxL3+PnqjwkqnRYYBOjpKALxy+mX2577TzzEw+5Dh3qF0UyGz+sy\n+1QFZRHE0jkujmqpijbQ4Figm1AnVcTESizdWx3u4St3llXJR4HIr8zsufrC\nBPSKt4Onh5xHDwDBS//WfbmhOK2Gka0RpLhmB/jiSQjVPeKyBCSri9VmWP+m\njMNP\r\n=p/U8\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"\n<!---\n\nThis README is automatically generated from the comments in these files:\napp-indexeddb-mirror.html  app-localstorage-document.html  app-network-status-behavior.html  app-storage-behavior.html\n\nEdit those files, and our readme bot will duplicate them over here!\nEdit this file, and the bot will squash your changes :)\n\nThe bot does some handling of markdown. Please file a bug if it does the wrong\nthing! https://github.com/PolymerLabs/tedium/issues\n\n-->\n![status](https://travis-ci.org/PolymerElements/app-storage.svg?branch=master)\n## Changes in 2.0\n* Promise polyfill is no longer shipped with the element. It is now a dev dependency.\n\n## Polymer.AppStorageBehavior\n\nAppStorageBehavior is an abstract behavior that makes it easy to\nsynchronize in-memory data and a persistant storage system, such as\nthe browser's IndexedDB, or a remote database like Firebase.\n\nFor examples of how to use this behavior to write your own app storage\nelements see `<app-localstorage-document>` here, or check out\n[polymerfire](https://github.com/Firebase/polymerfire) and\n[app-pouchdb](https://github.com/PolymerElements/app-pouchdb).\n\n\n\n## &lt;app-indexeddb-mirror&gt;\n\n`app-indexeddb-mirror` is a purpose-built element to easily add read-only\noffline access of application data that is typically only available when the\nuser is connected to the network.\n\nWhen an app using this element is connected to the network, the element acts as\na pass-through for live application data. Data is bound into the `data`\nproperty, and consumers of the data can bind to the correlated `persistedData`\nproperty. As live data changes, `app-indexeddb-mirror` caches a copy of the live\ndata in a local IndexedDB database. When the app is no longer connected to the\nnetwork, `app-indexeddb-mirror` toggles its `persistedData` property to refer\nto a read-only copy of the corresponding data in IndexedDB.\n\nThis element is particularly useful in cases where an API or storage layer (such\nas Firebase, for example) does not support caching data for later use during\nuser sessions that begin while the user is disconnected from the network.\n\nHere is an example of using `app-indexeddb-mirror` with `iron-ajax`:\n\n```html\n<iron-ajax\n    url=\"/api/cats\"\n    handle-as=\"json\"\n    last-response=\"{{liveData}}\">\n</iron-ajax>\n<app-indexeddb-mirror\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n\n<template is=\"dom-repeat\" items=\"{{persistedData}}\" as=\"cat\">\n  <div>[[cat.name]]</div>\n</template>\n```\n\nIn the example above, `persistedData` will always be populated with\nthe most recently requested list of cats, even when the user is offline, and\neven if the user refreshes the app, as long as the request as been made at\nleast once while connected to the network.\n\nOf course, in the case of `iron-ajax`, it's totally possible to selectively\ncache network requests in a ServiceWorker for the same effect. However, this is\nnot the true for all data sources. For example, if a data source is provided\nover a WebSocket, it will not be cacheable by a ServiceWorker. Cases like this\nare where `app-indexeddb-mirror` really shines:\n\n```html\n<firebase-query\n    app-name=\"cats-app\"\n    path=\"/cats\"\n    order-by-child=\"name\"\n    data=\"{{liveData}}\">\n</firebase-query>\n<app-indexeddb-mirror\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n\n<template is=\"dom-repeat\" items=\"{{persistedData}}\" as=\"cat\">\n  <div>[[cat.name]]</div>\n</template>\n```\n\nFirebase data is typically provided over a WebSocket connection, so it is very\ntricky to cache it for offline access. With `app-indexeddb-mirror`, offline\naccess to Firebase data is trivially easy to implement.\n\n## User sessions\n\n`app-indexeddb-mirror` caches data in a local IndexedDB database. If your app\nfeatures user authentication, it is usually desireable to ensure that this data\ndoes not leak across the sessions of different users on the same device.\n\nIn support of this, each `app-indexeddb-mirror` is configured with a unique\nsession key. When the session key changes, it will automatically wipe the local\nIndexedDB copy of any data that has been persisted.\n\n```html\n<app-indexeddb-mirror\n    session=\"a-unique-session-key-413\"\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n```\n\nWhen `someUniqueSessionKey` changes to a different value, `app-indexeddb-mirror`\nwill delete the local data it is persisting at the `\"cats\"` key.\n\n## Important considerations regarding WebWorkers\n\nIn order to ensure that operations on IndexedDB block the main browser thread as\nlittle as possible, `app-indexeddb-mirror` relies on a WebWorker to operate on\nits corresponding IndexedDB database. If you are vulcanizing or otherwise\ncombining your source files before your app is deployed, make sure that you\ninclude the corresponding worker script (`app-indexeddb-mirror-worker.js`)\namong your deployable files. You can configure the path to the worker script\nwith the `worker-url` attribute.\n\n`app-indexeddb-mirror` will prefer SharedWorker if it is available in the\nbrowser where the app is running. If SharedWorker is not available, it will\nattempt to fall back to a standard WebWorker. When using a standard WebWorker,\nall `app-indexeddb-mirror` instances with the same `workerUrl` will share the\nsame WebWorker instance.\n\nIf WebWorkers are not supported in the browser, persisted offline data will not\nbe available through this element.\n\n\n\n## &lt;app-localstorage-document&gt;\n\napp-localstorage-document synchronizes storage between an in-memory\nvalue and a location in the browser's localStorage system.\n\nlocalStorage is a simple and widely supported storage API that provides both\npermanent and session-based storage options. Using app-localstorage-document\nyou can easily integrate localStorage into your app via normal Polymer\ndatabinding.\n\napp-localstorage-document is the reference implementation of an element\nthat uses `AppStorageBehavior`. Reading its code is a good way to get\nstarted writing your own storage element.\n\nExample use:\n\n```html\n<paper-input value=\"{{search}}\"></paper-input>\n<app-localstorage-document key=\"search\" data=\"{{search}}\">\n</app-localstorage-document>\n```\n\napp-localstorage-document automatically synchronizes changes to the\nsame key across multiple tabs.\n\nOnly supports storing JSON-serializable values.\n\n\n\n## Polymer.AppNetworkStatusBehavior\n\n`Polymer.AppNetworkStatusBehavior` tracks the status of whether the browser\nis online or offline. True if the browser is online, and false if the browser is\noffline matching the HTML browser state spec.\n\n\n","gitHead":"d8c02001b43e0a43e5fb7e150815c34da4517398","scripts":{"format":"webmat && npm run update-types","update-types":"bower install && gen-typescript-declarations --deleteExisting --outDir ."},"_npmUser":{"name":"polymer","email":"admin@polymer-project.org"},"_npmVersion":"6.0.0","description":"Web Components for managing user data in web apps","directories":{},"resolutions":{"samsam":"1.1.3","inherits":"2.0.3","type-detect":"1.0.0","supports-color":"3.1.2","@webcomponents/webcomponentsjs":"2.0.0-beta.2"},"_nodeVersion":"9.8.0","dependencies":{"@polymer/polymer":"^3.0.0-pre.13"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"bower":"^1.8.0","webmat":"^0.2.0","@polymer/iron-icon":"^3.0.0-pre.16","@polymer/paper-fab":"^3.0.0-pre.16","wct-browser-legacy":"^0.0.1-pre.11","@polymer/iron-icons":"^3.0.0-pre.16","@polymer/font-roboto":"^3.0.0-pre.16","@polymer/paper-input":"^3.0.0-pre.16","@polymer/paper-button":"^3.0.0-pre.16","@polymer/paper-styles":"^3.0.0-pre.16","@polymer/iron-flex-layout":"^3.0.0-pre.16","@polymer/promise-polyfill":"^3.0.0-pre.16","@webcomponents/webcomponentsjs":"^2.0.0-beta.2","@polymer/gen-typescript-declarations":"^1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/app-storage_3.0.0-pre.16_1525465047349_0.06917609808921221","host":"s3://npm-registry-packages"}},"3.0.0-pre.17":{"name":"@polymer/app-storage","version":"3.0.0-pre.17","author":{"name":"The Polymer Authors"},"license":"BSD-3-Clause","_id":"@polymer/app-storage@3.0.0-pre.17","maintainers":[{"name":"polymer","email":"admin@polymer-project.org"}],"homepage":"","dist":{"shasum":"fb3dd396211113da5541bb8b1d68a2305a13b576","tarball":"https://registry.npmjs.org/@polymer/app-storage/-/app-storage-3.0.0-pre.17.tgz","fileCount":23,"integrity":"sha512-6j0pyYfgHvLrb/Eo77GWF1YkqZRw4ONxtIIdZqDsCm9+jXbjR/OoGqNnQb/9d6Xg4Zfo7uwaQIMarl2TyPWJ8w==","signatures":[{"sig":"MEYCIQC1UkdGbBjzPFt9Y2xFPPHxToqfmnE5Es/HlItnZ8OyRAIhAMJks3FsEzp5fzSzyX81df0APhyu4i+L8GPf8Aud7RbR","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":96191,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa8TDBCRA9TVsSAnZWagAA96sP/RXHsS7NO1hOIl+c2vn7\nXUwmWunzZhtldZJTH9IuqaoHPIVHN+UBVY1n/iMCGP7YtI9u8+cT6Lvw5SNe\nn4tDGu/0BeY4iAsiS72WUE7yrBcgz1sDWcqR4e3zVnzYc1uPjEklRInICOhJ\nFeYRUWyKNhSJi43F14nZXXAFiE3MVNAZ3LzaIRA3ROW9SI5H/pLbdgCPi3Lj\nxPIz3hJvAo5x+N6jBy8MeH27+hzEmA2/FJeCI/AuppLa5FbWm0PmsYq8Z6Bw\nN4MlQ9epc5namKlFJo+/zFARwMuKq9lIYMhgJm2jDlDp+RvWm2uYrKlSzR4u\n6q3OV0GgUNMIAC4WVhXYPpeE/UrfvqWNbFJujEDa8xPpyLQhOSofgohwDpQP\nxZtw8uMHPswTm2EO+QcFPClgO0MW6F6ep+EJs0ckPeWL9N1+pKDhpNMtXLCT\nM0IHSdGoQf7j0UqMDhXEofkc04Sy24kvRTL9E/b3rihtWJfo4ge4GV/mqhoN\nS3cqCa9pyIgTH8sD4GRZnJoAKQVL8JGU36fC87NJlQXwegYfzteDKytyTJoS\nNXKP/ETsf7uNUYfTGMSNmeV1BbvlklSTSpmzgdDre7sPjLc0rLaeiZt3JSpz\njtc8e3iaiY0haHJAq1FtA5NZZ82pYWVnWFHghFhdijUM1+loph06DW8UotiU\nvuQ3\r\n=aScS\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"\n<!---\n\nThis README is automatically generated from the comments in these files:\napp-indexeddb-mirror.html  app-localstorage-document.html  app-network-status-behavior.html  app-storage-behavior.html\n\nEdit those files, and our readme bot will duplicate them over here!\nEdit this file, and the bot will squash your changes :)\n\nThe bot does some handling of markdown. Please file a bug if it does the wrong\nthing! https://github.com/PolymerLabs/tedium/issues\n\n-->\n![status](https://travis-ci.org/PolymerElements/app-storage.svg?branch=master)\n## Changes in 2.0\n* Promise polyfill is no longer shipped with the element. It is now a dev dependency.\n\n## Polymer.AppStorageBehavior\n\nAppStorageBehavior is an abstract behavior that makes it easy to\nsynchronize in-memory data and a persistant storage system, such as\nthe browser's IndexedDB, or a remote database like Firebase.\n\nFor examples of how to use this behavior to write your own app storage\nelements see `<app-localstorage-document>` here, or check out\n[polymerfire](https://github.com/Firebase/polymerfire) and\n[app-pouchdb](https://github.com/PolymerElements/app-pouchdb).\n\n\n\n## &lt;app-indexeddb-mirror&gt;\n\n`app-indexeddb-mirror` is a purpose-built element to easily add read-only\noffline access of application data that is typically only available when the\nuser is connected to the network.\n\nWhen an app using this element is connected to the network, the element acts as\na pass-through for live application data. Data is bound into the `data`\nproperty, and consumers of the data can bind to the correlated `persistedData`\nproperty. As live data changes, `app-indexeddb-mirror` caches a copy of the live\ndata in a local IndexedDB database. When the app is no longer connected to the\nnetwork, `app-indexeddb-mirror` toggles its `persistedData` property to refer\nto a read-only copy of the corresponding data in IndexedDB.\n\nThis element is particularly useful in cases where an API or storage layer (such\nas Firebase, for example) does not support caching data for later use during\nuser sessions that begin while the user is disconnected from the network.\n\nHere is an example of using `app-indexeddb-mirror` with `iron-ajax`:\n\n```html\n<iron-ajax\n    url=\"/api/cats\"\n    handle-as=\"json\"\n    last-response=\"{{liveData}}\">\n</iron-ajax>\n<app-indexeddb-mirror\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n\n<template is=\"dom-repeat\" items=\"{{persistedData}}\" as=\"cat\">\n  <div>[[cat.name]]</div>\n</template>\n```\n\nIn the example above, `persistedData` will always be populated with\nthe most recently requested list of cats, even when the user is offline, and\neven if the user refreshes the app, as long as the request as been made at\nleast once while connected to the network.\n\nOf course, in the case of `iron-ajax`, it's totally possible to selectively\ncache network requests in a ServiceWorker for the same effect. However, this is\nnot the true for all data sources. For example, if a data source is provided\nover a WebSocket, it will not be cacheable by a ServiceWorker. Cases like this\nare where `app-indexeddb-mirror` really shines:\n\n```html\n<firebase-query\n    app-name=\"cats-app\"\n    path=\"/cats\"\n    order-by-child=\"name\"\n    data=\"{{liveData}}\">\n</firebase-query>\n<app-indexeddb-mirror\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n\n<template is=\"dom-repeat\" items=\"{{persistedData}}\" as=\"cat\">\n  <div>[[cat.name]]</div>\n</template>\n```\n\nFirebase data is typically provided over a WebSocket connection, so it is very\ntricky to cache it for offline access. With `app-indexeddb-mirror`, offline\naccess to Firebase data is trivially easy to implement.\n\n## User sessions\n\n`app-indexeddb-mirror` caches data in a local IndexedDB database. If your app\nfeatures user authentication, it is usually desireable to ensure that this data\ndoes not leak across the sessions of different users on the same device.\n\nIn support of this, each `app-indexeddb-mirror` is configured with a unique\nsession key. When the session key changes, it will automatically wipe the local\nIndexedDB copy of any data that has been persisted.\n\n```html\n<app-indexeddb-mirror\n    session=\"a-unique-session-key-413\"\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n```\n\nWhen `someUniqueSessionKey` changes to a different value, `app-indexeddb-mirror`\nwill delete the local data it is persisting at the `\"cats\"` key.\n\n## Important considerations regarding WebWorkers\n\nIn order to ensure that operations on IndexedDB block the main browser thread as\nlittle as possible, `app-indexeddb-mirror` relies on a WebWorker to operate on\nits corresponding IndexedDB database. If you are vulcanizing or otherwise\ncombining your source files before your app is deployed, make sure that you\ninclude the corresponding worker script (`app-indexeddb-mirror-worker.js`)\namong your deployable files. You can configure the path to the worker script\nwith the `worker-url` attribute.\n\n`app-indexeddb-mirror` will prefer SharedWorker if it is available in the\nbrowser where the app is running. If SharedWorker is not available, it will\nattempt to fall back to a standard WebWorker. When using a standard WebWorker,\nall `app-indexeddb-mirror` instances with the same `workerUrl` will share the\nsame WebWorker instance.\n\nIf WebWorkers are not supported in the browser, persisted offline data will not\nbe available through this element.\n\n\n\n## &lt;app-localstorage-document&gt;\n\napp-localstorage-document synchronizes storage between an in-memory\nvalue and a location in the browser's localStorage system.\n\nlocalStorage is a simple and widely supported storage API that provides both\npermanent and session-based storage options. Using app-localstorage-document\nyou can easily integrate localStorage into your app via normal Polymer\ndatabinding.\n\napp-localstorage-document is the reference implementation of an element\nthat uses `AppStorageBehavior`. Reading its code is a good way to get\nstarted writing your own storage element.\n\nExample use:\n\n```html\n<paper-input value=\"{{search}}\"></paper-input>\n<app-localstorage-document key=\"search\" data=\"{{search}}\">\n</app-localstorage-document>\n```\n\napp-localstorage-document automatically synchronizes changes to the\nsame key across multiple tabs.\n\nOnly supports storing JSON-serializable values.\n\n\n\n## Polymer.AppNetworkStatusBehavior\n\n`Polymer.AppNetworkStatusBehavior` tracks the status of whether the browser\nis online or offline. True if the browser is online, and false if the browser is\noffline matching the HTML browser state spec.\n\n\n","gitHead":"ee91c479e83a0da7c2167e45d6c899f53eac2cb9","scripts":{"format":"webmat && npm run update-types","update-types":"bower install && gen-typescript-declarations --deleteExisting --outDir ."},"_npmUser":{"name":"polymer","email":"admin@polymer-project.org"},"_npmVersion":"6.0.0","description":"Web Components for managing user data in web apps","directories":{},"resolutions":{"samsam":"1.1.3","inherits":"2.0.3","type-detect":"1.0.0","supports-color":"3.1.2","@webcomponents/webcomponentsjs":"2.0.0-beta.2"},"_nodeVersion":"9.8.0","dependencies":{"@polymer/polymer":"^3.0.0-pre.13"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"bower":"^1.8.0","webmat":"^0.2.0","@polymer/iron-icon":"^3.0.0-pre.17","@polymer/paper-fab":"^3.0.0-pre.17","wct-browser-legacy":"^0.0.1-pre.11","@polymer/iron-icons":"^3.0.0-pre.17","@polymer/font-roboto":"^3.0.0-pre.17","@polymer/paper-input":"^3.0.0-pre.17","@polymer/paper-button":"^3.0.0-pre.17","@polymer/paper-styles":"^3.0.0-pre.17","@polymer/iron-flex-layout":"^3.0.0-pre.17","@polymer/promise-polyfill":"^3.0.0-pre.17","@webcomponents/webcomponentsjs":"^2.0.0-beta.2","@polymer/gen-typescript-declarations":"^1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/app-storage_3.0.0-pre.17_1525756097287_0.9321482813695787","host":"s3://npm-registry-packages"}},"3.0.0-pre.18":{"name":"@polymer/app-storage","version":"3.0.0-pre.18","author":{"name":"The Polymer Authors"},"license":"BSD-3-Clause","_id":"@polymer/app-storage@3.0.0-pre.18","maintainers":[{"name":"polymer","email":"admin@polymer-project.org"}],"homepage":"","dist":{"shasum":"e75292d4f36a3c07fd2f8077ed253f7d5c29e813","tarball":"https://registry.npmjs.org/@polymer/app-storage/-/app-storage-3.0.0-pre.18.tgz","fileCount":21,"integrity":"sha512-/aX9HZKwg7zvV509BaMJ14C+Fi3A9e9xnqusVuw19DQjYnTZak/8GyjnDfFDHMsVT0vcyQ5LMVjPWN6ioQBB2w==","signatures":[{"sig":"MEUCIQCCGDuotClZQHYXlECSJewyGD4F41DadQYdwnENjRzikQIgdbdqWm96vBAE7vo8npB7QNM5Hm/NM9nXBh8KRorIPWQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":92215,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa8saiCRA9TVsSAnZWagAAd9QP/1K6LyJEKKFpWHRGAxr2\njWxow6Ln7hz1Htup81kGpujGP4rnL7OiaPB0DaS2PxG+VA3cf/ECTDNJLl7A\nlQsrnI5LFbV7MYj1+V4eqwRY9LrFSYAE0+8TGzIXcAS4mvVmolwKUXl+xGZL\nuX8y/FrSDGIAnjKYJqPbV9HJgo0tdQoImoKmW7qdOon3JopUGN5HDQM0aNgY\nfeGuVUhYWIG9VYhhRSdSdzEUN1gzXmbbcyjZqqqS9TPld+uPdQ2pbYRuLwfU\nFpDa7dEWn7tnAo0XNlsBj5C+WPe5+Tpj2DvLUil1GnX4Mja40MgN982hX4d8\nbbvC5/JhT9+vum5DBV9g2wTrTx0FQEOg6DK7QcRTgfNdIPvILUqLFOUNZycE\ndmzpEYbUMgIuQWDjN0E+Unsv+QQ109ZnzCcTfOrZ03BAKdNlSGLtKcWNdMJB\nhQCILvdT7rbIpDury6/r35/X2RovbgxlkPQz9KizF5458gsZKxeJZ7a592Ws\niDR9FSwPbh0ZC/D3O2eAnHnrWWxL0evRnawBp2K00mWVn0xBLHTF8kZF0mwY\na8v99L6DRmZ8BndkMnDsjMRBNaXm+RKeP4TiqXi2EmhYVkc+6eL4LKqrGaO6\n2XVNbzecE+tavo/ZifhRG8skfUEOVZy7pK8aCAGPCM1WcnIu6l9Wcc/+3b5+\nyqdm\r\n=4/QQ\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"\n<!---\n\nThis README is automatically generated from the comments in these files:\napp-indexeddb-mirror.html  app-localstorage-document.html  app-network-status-behavior.html  app-storage-behavior.html\n\nEdit those files, and our readme bot will duplicate them over here!\nEdit this file, and the bot will squash your changes :)\n\nThe bot does some handling of markdown. Please file a bug if it does the wrong\nthing! https://github.com/PolymerLabs/tedium/issues\n\n-->\n![status](https://travis-ci.org/PolymerElements/app-storage.svg?branch=master)\n## Changes in 2.0\n* Promise polyfill is no longer shipped with the element. It is now a dev dependency.\n\n## Polymer.AppStorageBehavior\n\nAppStorageBehavior is an abstract behavior that makes it easy to\nsynchronize in-memory data and a persistant storage system, such as\nthe browser's IndexedDB, or a remote database like Firebase.\n\nFor examples of how to use this behavior to write your own app storage\nelements see `<app-localstorage-document>` here, or check out\n[polymerfire](https://github.com/Firebase/polymerfire) and\n[app-pouchdb](https://github.com/PolymerElements/app-pouchdb).\n\n\n\n## &lt;app-indexeddb-mirror&gt;\n\n`app-indexeddb-mirror` is a purpose-built element to easily add read-only\noffline access of application data that is typically only available when the\nuser is connected to the network.\n\nWhen an app using this element is connected to the network, the element acts as\na pass-through for live application data. Data is bound into the `data`\nproperty, and consumers of the data can bind to the correlated `persistedData`\nproperty. As live data changes, `app-indexeddb-mirror` caches a copy of the live\ndata in a local IndexedDB database. When the app is no longer connected to the\nnetwork, `app-indexeddb-mirror` toggles its `persistedData` property to refer\nto a read-only copy of the corresponding data in IndexedDB.\n\nThis element is particularly useful in cases where an API or storage layer (such\nas Firebase, for example) does not support caching data for later use during\nuser sessions that begin while the user is disconnected from the network.\n\nHere is an example of using `app-indexeddb-mirror` with `iron-ajax`:\n\n```html\n<iron-ajax\n    url=\"/api/cats\"\n    handle-as=\"json\"\n    last-response=\"{{liveData}}\">\n</iron-ajax>\n<app-indexeddb-mirror\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n\n<template is=\"dom-repeat\" items=\"{{persistedData}}\" as=\"cat\">\n  <div>[[cat.name]]</div>\n</template>\n```\n\nIn the example above, `persistedData` will always be populated with\nthe most recently requested list of cats, even when the user is offline, and\neven if the user refreshes the app, as long as the request as been made at\nleast once while connected to the network.\n\nOf course, in the case of `iron-ajax`, it's totally possible to selectively\ncache network requests in a ServiceWorker for the same effect. However, this is\nnot the true for all data sources. For example, if a data source is provided\nover a WebSocket, it will not be cacheable by a ServiceWorker. Cases like this\nare where `app-indexeddb-mirror` really shines:\n\n```html\n<firebase-query\n    app-name=\"cats-app\"\n    path=\"/cats\"\n    order-by-child=\"name\"\n    data=\"{{liveData}}\">\n</firebase-query>\n<app-indexeddb-mirror\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n\n<template is=\"dom-repeat\" items=\"{{persistedData}}\" as=\"cat\">\n  <div>[[cat.name]]</div>\n</template>\n```\n\nFirebase data is typically provided over a WebSocket connection, so it is very\ntricky to cache it for offline access. With `app-indexeddb-mirror`, offline\naccess to Firebase data is trivially easy to implement.\n\n## User sessions\n\n`app-indexeddb-mirror` caches data in a local IndexedDB database. If your app\nfeatures user authentication, it is usually desireable to ensure that this data\ndoes not leak across the sessions of different users on the same device.\n\nIn support of this, each `app-indexeddb-mirror` is configured with a unique\nsession key. When the session key changes, it will automatically wipe the local\nIndexedDB copy of any data that has been persisted.\n\n```html\n<app-indexeddb-mirror\n    session=\"a-unique-session-key-413\"\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n```\n\nWhen `someUniqueSessionKey` changes to a different value, `app-indexeddb-mirror`\nwill delete the local data it is persisting at the `\"cats\"` key.\n\n## Important considerations regarding WebWorkers\n\nIn order to ensure that operations on IndexedDB block the main browser thread as\nlittle as possible, `app-indexeddb-mirror` relies on a WebWorker to operate on\nits corresponding IndexedDB database. If you are vulcanizing or otherwise\ncombining your source files before your app is deployed, make sure that you\ninclude the corresponding worker script (`app-indexeddb-mirror-worker.js`)\namong your deployable files. You can configure the path to the worker script\nwith the `worker-url` attribute.\n\n`app-indexeddb-mirror` will prefer SharedWorker if it is available in the\nbrowser where the app is running. If SharedWorker is not available, it will\nattempt to fall back to a standard WebWorker. When using a standard WebWorker,\nall `app-indexeddb-mirror` instances with the same `workerUrl` will share the\nsame WebWorker instance.\n\nIf WebWorkers are not supported in the browser, persisted offline data will not\nbe available through this element.\n\n\n\n## &lt;app-localstorage-document&gt;\n\napp-localstorage-document synchronizes storage between an in-memory\nvalue and a location in the browser's localStorage system.\n\nlocalStorage is a simple and widely supported storage API that provides both\npermanent and session-based storage options. Using app-localstorage-document\nyou can easily integrate localStorage into your app via normal Polymer\ndatabinding.\n\napp-localstorage-document is the reference implementation of an element\nthat uses `AppStorageBehavior`. Reading its code is a good way to get\nstarted writing your own storage element.\n\nExample use:\n\n```html\n<paper-input value=\"{{search}}\"></paper-input>\n<app-localstorage-document key=\"search\" data=\"{{search}}\">\n</app-localstorage-document>\n```\n\napp-localstorage-document automatically synchronizes changes to the\nsame key across multiple tabs.\n\nOnly supports storing JSON-serializable values.\n\n\n\n## Polymer.AppNetworkStatusBehavior\n\n`Polymer.AppNetworkStatusBehavior` tracks the status of whether the browser\nis online or offline. True if the browser is online, and false if the browser is\noffline matching the HTML browser state spec.\n\n\n","gitHead":"909382908d6fe57b664c2f2eb98f740133ddd833","scripts":{"format":"webmat && npm run update-types","update-types":"bower install && gen-typescript-declarations --deleteExisting --outDir ."},"_npmUser":{"name":"polymer","email":"admin@polymer-project.org"},"_npmVersion":"6.0.0","description":"Web Components for managing user data in web apps","directories":{},"resolutions":{"samsam":"1.1.3","inherits":"2.0.3","type-detect":"1.0.0","supports-color":"3.1.2","@webcomponents/webcomponentsjs":"2.0.0-beta.2"},"_nodeVersion":"9.8.0","dependencies":{"@polymer/polymer":"^3.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"bower":"^1.8.0","webmat":"^0.2.0","@polymer/iron-icon":"^3.0.0-pre.18","@polymer/paper-fab":"^3.0.0-pre.18","wct-browser-legacy":"^0.0.1-pre.11","@polymer/iron-icons":"^3.0.0-pre.18","@polymer/font-roboto":"^3.0.0-pre.18","@polymer/paper-input":"^3.0.0-pre.18","@polymer/paper-button":"^3.0.0-pre.18","@polymer/paper-styles":"^3.0.0-pre.18","@polymer/iron-flex-layout":"^3.0.0-pre.18","@polymer/promise-polyfill":"^3.0.0-pre.18","@webcomponents/webcomponentsjs":"^2.0.0","@polymer/gen-typescript-declarations":"^1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/app-storage_3.0.0-pre.18_1525860002499_0.4011280329151694","host":"s3://npm-registry-packages"}},"3.0.0-pre.19":{"name":"@polymer/app-storage","version":"3.0.0-pre.19","author":{"name":"The Polymer Authors"},"license":"BSD-3-Clause","_id":"@polymer/app-storage@3.0.0-pre.19","maintainers":[{"name":"polymer","email":"admin@polymer-project.org"}],"homepage":"","dist":{"shasum":"5a8a5ab40e3cdb71f4df90c5a49ab4e455c6ed49","tarball":"https://registry.npmjs.org/@polymer/app-storage/-/app-storage-3.0.0-pre.19.tgz","fileCount":21,"integrity":"sha512-eNv3I3TV/cuQu5jlm+mSpWDKhhB/sC68lgEAiJMJcEjGiqF1PffRRzHyRTlEabxZg1dgBjSRj2dFYb1yQr5nUw==","signatures":[{"sig":"MEYCIQDZJ9q030FxP/ARcIo21FObRwDOE8eRakujD3St1ZRTRAIhAO1rmGeHFmfkphavL+Sg84nobBo1D1K2IzpXvPzgTVYO","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":92215,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa81giCRA9TVsSAnZWagAA898P/0zMIRFrSxZc8sDnbWBx\nK3EiD0E8wcgwRcFE6o6dvPdNh/54EFbwb800lsonofGmu+b5kWq77jeXcm0Z\nzbm6BVnwTmKyuZ99CiI9M10Lg/Tcz1FD5XyjWkT4UxQIeFXH29KUIIEtYgmG\neKpx68YiiW/mGGNfi/D8muiRGKyiqMhAGUnXM0o9YXMpOBhhwN2Ii1YEGYi3\naSyRjqyuzH1/hRMU96zxl8zebvdQdxeVxYorQhqrlnUeDBgiUD0scAHpEc4+\nJkoTiti+MLCpazulis8W8l4Ab0Ed2I2MfYl1MgfTg4hcOAI5Etnuq2VSgQtG\nTktocDdNF3xTKeoJ0bjuJqQPLn90ZWIE9vDs3uCuAGscfS7LXFuF9eFE4UOJ\nsSoCmougoM+i6+xOy2RIzEQpPOvRUAeAp7UJK9xf7Kw0hpWz9uuE85uBJh/7\nfH5nyc5NXBPpe15veuCW6XwLW/3OEVb5IlDu+gtDrEjBLoj+ghMaw3U3gWYv\nc68qRwe2RAZFsrRC/GWFnOD3w+TyCocrg2wiblVqsYLmKYT0vhuD7ofDqQNr\nkOZCP49pN7cncxksxCrXVloLwedinCuQdPShkr0hgMpkQzYvA+CwIc3gTZ9I\nIUm4jGezuwI+g2mVnh1+U3qsJaW5BU3MgpSsxZ0VwqgdCi+ePrwkGBZ7ADj/\nBri/\r\n=E3aa\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"4b539dc33b2c430aeccde89ab8c3d6a72277e497","scripts":{"format":"webmat && npm run update-types","update-types":"bower install && gen-typescript-declarations --deleteExisting --outDir ."},"_npmUser":{"name":"polymer","email":"admin@polymer-project.org"},"_npmVersion":"6.0.0","description":"Web Components for managing user data in web apps","directories":{},"resolutions":{"samsam":"1.1.3","inherits":"2.0.3","type-detect":"1.0.0","supports-color":"3.1.2","@webcomponents/webcomponentsjs":"2.0.0-beta.2"},"_nodeVersion":"9.8.0","dependencies":{"@polymer/polymer":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"bower":"^1.8.0","webmat":"^0.2.0","@polymer/iron-icon":"^3.0.0-pre.19","@polymer/paper-fab":"^3.0.0-pre.19","wct-browser-legacy":"^0.0.1-pre.11","@polymer/iron-icons":"^3.0.0-pre.19","@polymer/font-roboto":"^3.0.0-pre.19","@polymer/paper-input":"^3.0.0-pre.19","@polymer/paper-button":"^3.0.0-pre.19","@polymer/paper-styles":"^3.0.0-pre.19","@polymer/iron-flex-layout":"^3.0.0-pre.19","@polymer/promise-polyfill":"^3.0.0-pre.19","@webcomponents/webcomponentsjs":"^2.0.0","@polymer/gen-typescript-declarations":"^1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/app-storage_3.0.0-pre.19_1525897249340_0.29970805954285207","host":"s3://npm-registry-packages"}},"3.0.0-pre.20":{"name":"@polymer/app-storage","version":"3.0.0-pre.20","author":{"name":"The Polymer Authors"},"license":"BSD-3-Clause","_id":"@polymer/app-storage@3.0.0-pre.20","maintainers":[{"name":"aomarks","email":"aomarks@google.com"},{"name":"azakus","email":"dfreedm2@gmail.com"},{"name":"emarquez","email":"emarquez@google.com"},{"name":"keanulee","email":"npm@keanulee.com"},{"name":"notwaldorf","email":"notwaldorf@gmail.com"},{"name":"polymer-devs","email":"admin@polymer-project.org"},{"name":"usergenic","email":"brendan@usergenic.com"}],"homepage":"","dist":{"shasum":"ac04780941467e03a4e20a5e8fc09a3995c11678","tarball":"https://registry.npmjs.org/@polymer/app-storage/-/app-storage-3.0.0-pre.20.tgz","fileCount":23,"integrity":"sha512-pHjTB9Zr19xET5u3KYeN9WLCKCyrNODYR2xlnh6uauE2+KF0va31ZLOJpiFDJGaaPNywAaUsnBr3pX+Z1maLbg==","signatures":[{"sig":"MEUCICSTTUKZn4P119r5AtXdiCsReo1Fw7u9OOQj5LkL6JDnAiEAieRBRPinZNmVURYaDn75Za05hdgA7zKOIXA5o6MzH04=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":93887,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbLZGjCRA9TVsSAnZWagAAZ5EP/j3Md+FYT+k+QtnsVPzF\ndRGDySTIG5K0QZZUYN2MSZlt64PqSnRHCoedLlXaLy/JZ3Nddw6h8VZzCLMi\ng0OwLs7GQiN4Dd2arwbI91t683MfeGCvVgboFW4kjR+XURxYfu5Spq6YoTzc\nrTN7VBXoInozkxKtkiRpKNWvtd9TYlPZ3IK1kmq0lD8KEX03ZAsVNBrGGX8a\nMtBLWRCa0sfEMUxFSVavhOUXiVPVqKDGKeGsiZoPCcumHZ+1xRA0iy70gM2k\n/A0VynX07jo39B2XWhGHLCkJWWtWjZG8lW4AlOG/pczOLedJt+Beuq8sCKr1\nqPZVGvOYzjStUCFx4+nvmbDw2BlXrvW2voWnRyykxArU5Oe1lVuEmS3QLcWq\nV2JiAgAaLBouK2X9bXRhWa4a5+orffehjGNv9l1Vl14pRCZqAfpZRbpYdEkw\neuxunHg7YmaGHIjy12+thDuuvTBp+A5F9s3se9LTZim8qjLv5+yZs/O5lB61\nAJuEepbLzfWLLuxH9xiQKN03yQkcO72YmQMSld7wBhfDSe6VnR1T1ZXQeL3D\neNjMqIKRef2kq7wZjNRP8PvujKnan1+BC/OFWcRaXuYbgC5KtHRrX/zD7kZX\nxPR2wHUiuhWvndEG/c2kEry/apGo4M9N/FoR3QtAe0V+stLBPzu7Sas+Wldy\nOlUO\r\n=MzID\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"\n<!---\n\nThis README is automatically generated from the comments in these files:\napp-indexeddb-mirror.html  app-localstorage-document.html  app-network-status-behavior.html  app-storage-behavior.html\n\nEdit those files, and our readme bot will duplicate them over here!\nEdit this file, and the bot will squash your changes :)\n\nThe bot does some handling of markdown. Please file a bug if it does the wrong\nthing! https://github.com/PolymerLabs/tedium/issues\n\n-->\n![status](https://travis-ci.org/PolymerElements/app-storage.svg?branch=master)\n## Changes in 2.0\n* Promise polyfill is no longer shipped with the element. It is now a dev dependency.\n\n## Polymer.AppStorageBehavior\n\nAppStorageBehavior is an abstract behavior that makes it easy to\nsynchronize in-memory data and a persistant storage system, such as\nthe browser's IndexedDB, or a remote database like Firebase.\n\nFor examples of how to use this behavior to write your own app storage\nelements see `<app-localstorage-document>` here, or check out\n[polymerfire](https://github.com/Firebase/polymerfire) and\n[app-pouchdb](https://github.com/PolymerElements/app-pouchdb).\n\n\n\n## &lt;app-indexeddb-mirror&gt;\n\n`app-indexeddb-mirror` is a purpose-built element to easily add read-only\noffline access of application data that is typically only available when the\nuser is connected to the network.\n\nWhen an app using this element is connected to the network, the element acts as\na pass-through for live application data. Data is bound into the `data`\nproperty, and consumers of the data can bind to the correlated `persistedData`\nproperty. As live data changes, `app-indexeddb-mirror` caches a copy of the live\ndata in a local IndexedDB database. When the app is no longer connected to the\nnetwork, `app-indexeddb-mirror` toggles its `persistedData` property to refer\nto a read-only copy of the corresponding data in IndexedDB.\n\nThis element is particularly useful in cases where an API or storage layer (such\nas Firebase, for example) does not support caching data for later use during\nuser sessions that begin while the user is disconnected from the network.\n\nHere is an example of using `app-indexeddb-mirror` with `iron-ajax`:\n\n```html\n<iron-ajax\n    url=\"/api/cats\"\n    handle-as=\"json\"\n    last-response=\"{{liveData}}\">\n</iron-ajax>\n<app-indexeddb-mirror\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n\n<template is=\"dom-repeat\" items=\"{{persistedData}}\" as=\"cat\">\n  <div>[[cat.name]]</div>\n</template>\n```\n\nIn the example above, `persistedData` will always be populated with\nthe most recently requested list of cats, even when the user is offline, and\neven if the user refreshes the app, as long as the request as been made at\nleast once while connected to the network.\n\nOf course, in the case of `iron-ajax`, it's totally possible to selectively\ncache network requests in a ServiceWorker for the same effect. However, this is\nnot the true for all data sources. For example, if a data source is provided\nover a WebSocket, it will not be cacheable by a ServiceWorker. Cases like this\nare where `app-indexeddb-mirror` really shines:\n\n```html\n<firebase-query\n    app-name=\"cats-app\"\n    path=\"/cats\"\n    order-by-child=\"name\"\n    data=\"{{liveData}}\">\n</firebase-query>\n<app-indexeddb-mirror\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n\n<template is=\"dom-repeat\" items=\"{{persistedData}}\" as=\"cat\">\n  <div>[[cat.name]]</div>\n</template>\n```\n\nFirebase data is typically provided over a WebSocket connection, so it is very\ntricky to cache it for offline access. With `app-indexeddb-mirror`, offline\naccess to Firebase data is trivially easy to implement.\n\n## User sessions\n\n`app-indexeddb-mirror` caches data in a local IndexedDB database. If your app\nfeatures user authentication, it is usually desireable to ensure that this data\ndoes not leak across the sessions of different users on the same device.\n\nIn support of this, each `app-indexeddb-mirror` is configured with a unique\nsession key. When the session key changes, it will automatically wipe the local\nIndexedDB copy of any data that has been persisted.\n\n```html\n<app-indexeddb-mirror\n    session=\"a-unique-session-key-413\"\n    key=\"cats\"\n    data=\"{{liveData}}\"\n    persisted-data=\"{{persistedData}}\">\n</app-indexeddb-mirror>\n```\n\nWhen `someUniqueSessionKey` changes to a different value, `app-indexeddb-mirror`\nwill delete the local data it is persisting at the `\"cats\"` key.\n\n## Important considerations regarding WebWorkers\n\nIn order to ensure that operations on IndexedDB block the main browser thread as\nlittle as possible, `app-indexeddb-mirror` relies on a WebWorker to operate on\nits corresponding IndexedDB database. If you are vulcanizing or otherwise\ncombining your source files before your app is deployed, make sure that you\ninclude the corresponding worker script (`app-indexeddb-mirror-worker.js`)\namong your deployable files. You can configure the path to the worker script\nwith the `worker-url` attribute.\n\n`app-indexeddb-mirror` will prefer SharedWorker if it is available in the\nbrowser where the app is running. If SharedWorker is not available, it will\nattempt to fall back to a standard WebWorker. When using a standard WebWorker,\nall `app-indexeddb-mirror` instances with the same `workerUrl` will share the\nsame WebWorker instance.\n\nIf WebWorkers are not supported in the browser, persisted offline data will not\nbe available through this element.\n\n\n\n## &lt;app-localstorage-document&gt;\n\napp-localstorage-document synchronizes storage between an in-memory\nvalue and a location in the browser's localStorage system.\n\nlocalStorage is a simple and widely supported storage API that provides both\npermanent and session-based storage options. Using app-localstorage-document\nyou can easily integrate localStorage into your app via normal Polymer\ndatabinding.\n\napp-localstorage-document is the reference implementation of an element\nthat uses `AppStorageBehavior`. Reading its code is a good way to get\nstarted writing your own storage element.\n\nExample use:\n\n```html\n<paper-input value=\"{{search}}\"></paper-input>\n<app-localstorage-document key=\"search\" data=\"{{search}}\">\n</app-localstorage-document>\n```\n\napp-localstorage-document automatically synchronizes changes to the\nsame key across multiple tabs.\n\nOnly supports storing JSON-serializable values.\n\n\n\n## Polymer.AppNetworkStatusBehavior\n\n`Polymer.AppNetworkStatusBehavior` tracks the status of whether the browser\nis online or offline. True if the browser is online, and false if the browser is\noffline matching the HTML browser state spec.\n\n\n","gitHead":"9c188157c6816b7a506134cbde232155afe97821","scripts":{"format":"webmat && npm run update-types","update-types":"bower install && gen-typescript-declarations --deleteExisting --outDir ."},"_npmUser":{"name":"emarquez","email":"emarquez@google.com"},"_npmVersion":"6.1.0","description":"Web Components for managing user data in web apps","directories":{},"resolutions":{"samsam":"1.1.3","inherits":"2.0.3","type-detect":"1.0.0","supports-color":"3.1.2","@webcomponents/webcomponentsjs":"2.0.0-beta.2"},"_nodeVersion":"9.8.0","dependencies":{"@polymer/polymer":"^3.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"bower":"^1.8.0","webmat":"^0.2.0","@polymer/iron-icon":"^3.0.0-pre.20","@polymer/paper-fab":"^3.0.0-pre.20","wct-browser-legacy":"^1.0.1","@polymer/iron-icons":"^3.0.0-pre.20","@polymer/font-roboto":"^3.0.0-pre.20","@polymer/paper-input":"^3.0.0-pre.20","@polymer/paper-button":"^3.0.0-pre.20","@polymer/paper-styles":"^3.0.0-pre.20","@polymer/iron-flex-layout":"^3.0.0-pre.20","@polymer/promise-polyfill":"^3.0.0-pre.20","@webcomponents/webcomponentsjs":"^2.0.0","@polymer/gen-typescript-declarations":"^1.2.2"},"_npmOperationalInternal":{"tmp":"tmp/app-storage_3.0.0-pre.20_1529713059485_0.9699196344612688","host":"s3://npm-registry-packages"}},"3.0.0-pre.21":{"name":"@polymer/app-storage","version":"3.0.0-pre.21","author":{"name":"The Polymer Authors"},"license":"BSD-3-Clause","_id":"@polymer/app-storage@3.0.0-pre.21","maintainers":[{"name":"aomarks","email":"aomarks@google.com"},{"name":"azakus","email":"dfreedm2@gmail.com"},{"name":"emarquez","email":"emarquez@google.com"},{"name":"keanulee","email":"npm@keanulee.com"},{"name":"notwaldorf","email":"notwaldorf@gmail.com"},{"name":"polymer-devs","email":"admin@polymer-project.org"},{"name":"usergenic","email":"brendan@usergenic.com"}],"homepage":"","dist":{"shasum":"0b6a42fcb5b6eb641e9fe014aabe0a628e54d437","tarball":"https://registry.npmjs.org/@polymer/app-storage/-/app-storage-3.0.0-pre.21.tgz","fileCount":23,"integrity":"sha512-Ewn/ZNhKbBQwEsfD+uHg33KeXRimwZEzq7zP2rmsG+4QMSwllP/iHyOOJI5hmAjHqDq015h4fVZUzE5FwZNcsA==","signatures":[{"sig":"MEQCICTQRSkJXfggceqJup9ECURazNN4J6wVU0qxAsnzqu/PAiAWWDTHIyX9EKpnHhe9RZ8vYiq9IZbOndYKrsA1RTDxQw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":93887,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbLZzoCRA9TVsSAnZWagAAhGsP/2DLj4IS3G662qeV0Yti\nSWaRCnOa9P/Xb+1ZWHsQY8I1PFDqiX+27GKEWJzjRZtYcd2Q+Mg4BhFJXVh9\nMxjqcF56rz8eQr5VTXsOerMKypmS/nzqEydKt90ZfvK/cxkP/uuk65z9xww6\nJQhShk5Rrpqx+JHdUsWBcwMGxcakub1Cq8+zhk5JkOs6eRJuyjriWQTpfQN5\n/XTyy3vP97tnQdNWI7KiAe5ajKKoLpEsevmlEQY4hCiQNgfK4c7K3XZcN4au\ni4tfVvSgE4d0A3+1scu0A8IPfLh4niPGzzlmFAN1k6WUuDzsyf7up4fbqLGl\nF5pI91aiXAIBPYZJNEigKU7W3nYKDF8a2oeT1rp3duCWHx/yGIf7yCB1Z+OU\nhd2trjXXRM8LjFTzX5L8naeUCyGVD4xhoBxXRPMJtyfbNsVw3BKU/buYL3pz\nOryrHXXgR6xcd8IWXAFPQca2tguAKYt80DwDPMDESTZH1Su4/zeEZtPwTIu8\nZqc1nZkIjCu4seNuH95QErAl1XbiBMA5S+UuWw7hXcS2NuP2E2l2KSq/Tqa5\nfkhBNZoyWufkFs161MnMslZBZlStkyl71abHDZCQzx38UZy2s7+HqsI5JdbT\nNlPlL58muKMklJWQLnpqeZ5rOdb6QbKYMbL6jQMFYALuU2QxLookTr0CSXKy\nEF1D\r\n=4/yn\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"8f7f356789a2c8f300ac4d003c90b67d3df8c88e","scripts":{"format":"webmat && npm run update-types","update-types":"bower install && gen-typescript-declarations --deleteExisting --outDir ."},"_npmUser":{"name":"emarquez","email":"emarquez@google.com"},"_npmVersion":"6.1.0","description":"Web Components for managing user data in web apps","directories":{},"resolutions":{"samsam":"1.1.3","inherits":"2.0.3","type-detect":"1.0.0","supports-color":"3.1.2","@webcomponents/webcomponentsjs":"2.0.0-beta.2"},"_nodeVersion":"9.8.0","dependencies":{"@polymer/polymer":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"bower":"^1.8.0","webmat":"^0.2.0","@polymer/iron-icon":"^3.0.0-pre.21","@polymer/paper-fab":"^3.0.0-pre.21","wct-browser-legacy":"^1.0.1","@polymer/iron-icons":"^3.0.0-pre.21","@polymer/font-roboto":"^3.0.0-pre.21","@polymer/paper-input":"^3.0.0-pre.21","@polymer/paper-button":"^3.0.0-pre.21","@polymer/paper-styles":"^3.0.0-pre.21","@polymer/iron-flex-layout":"^3.0.0-pre.21","@polymer/promise-polyfill":"^3.0.0-pre.21","@webcomponents/webcomponentsjs":"^2.0.0","@polymer/gen-typescript-declarations":"^1.2.2"},"_npmOperationalInternal":{"tmp":"tmp/app-storage_3.0.0-pre.21_1529715944313_0.23530832914352273","host":"s3://npm-registry-packages"}},"3.0.0-pre.22":{"name":"@polymer/app-storage","version":"3.0.0-pre.22","author":{"name":"The Polymer Authors"},"license":"BSD-3-Clause","_id":"@polymer/app-storage@3.0.0-pre.22","maintainers":[{"name":"aomarks","email":"aomarks@google.com"},{"name":"azakus","email":"dfreedm2@gmail.com"},{"name":"bicknellr","email":"bicknellr@gmail.com"},{"name":"emarquez","email":"emarquez@google.com"},{"name":"keanulee","email":"npm@keanulee.com"},{"name":"notwaldorf","email":"notwaldorf@gmail.com"},{"name":"polymer-devs","email":"admin@polymer-project.org"},{"name":"sorvell","email":"sorvell@google.com"},{"name":"usergenic","email":"brendan@usergenic.com"}],"homepage":"","dist":{"shasum":"5f7d52f408cfad2de1aa24f4ba3445d972b70ec3","tarball":"https://registry.npmjs.org/@polymer/app-storage/-/app-storage-3.0.0-pre.22.tgz","fileCount":20,"integrity":"sha512-WFgv5DdI5GM+pUCVv6mcDKDygApvCvtKHhyT11OaeM+ElWpDGs7gm9rsDMZ/supxK6YidDGfxLJf6Gea618dOA==","signatures":[{"sig":"MEUCICAcFw7bm4yFqY0/C5EGfF9Z1PfEhG9yjgg1jl3yHebiAiEA5lP+cAXD9SXX8CMZL0nc2m8r22nhsiQw9m39jxwgi00=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":85248,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbgMtoCRA9TVsSAnZWagAABVoP/1DEF2y9FMtxgpimtd2i\n3sYnZ3wP9xC6PVDbnkWtFz52Rm0Aj5m+pErgeOX+U/M5+pIT6apbBJ3LCbY6\ngLLgfR2MAGQiI4Kv4i0m3KIq3h1YtMcrfXNw8JqORGnfAjqrz8K7Mi5PkFUB\noMrqSE2Tzs6ZC/P/CyE/7lqDg/CiC4eVNVl/ezLRwEyrpBrw8vj7yb3p1F+O\nzrxlnKnNkcBm0LtRFDorJm/NHUdNwi0WRoCIe2RgIdpN+QOcO5l8ctqvISnv\nwT7l549/HzZ7YbQJKFwMyNmqjxWT57ccapERhdc69FIPvouDdTEft7IuNnxi\ngBDwaJdsSyrRCjQQ7rXJv58gcCf2UxWrnlBMMVKkCJKP4EsZTMTu0JnR9kwi\ntI3q3/cUsmhKOxIWf+UyK37qlKRf3kyJ8OiknE768TFEbI58FPQrUvwCY+Rn\nwDDj4j3i/VT11YN7mbCZWCv8d8REcGtKHkGeqJZrGztYOlAEgLSVeQNyUEmc\nI9jmd1y45n3UDo69jAv+687EbHCDqFkEY4HgVm9h+fGqUAzc2twDGvKtYp+o\nfPu3x2P5ZmwhVWpFpyOIYlNHFD6vr8mbNhoiqJNW1N45WDnKay9sYuhLLfww\nkHOx/rxTp47pL9di2GrPTv/VU0qloD8D7mwRESKMmFGpU8iuz09d+PuS9EUv\niLWW\r\n=uS+p\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"5bf568f5ff8f7579237f91b3f12f8a511d202bb5","scripts":{"format":"webmat","prepack":"npm run generate-types","generate-types":"gen-typescript-declarations --deleteExisting --outDir ."},"_npmUser":{"name":"bicknellr","email":"bicknellr@gmail.com"},"_npmVersion":"6.4.0","description":"Web Components for managing user data in web apps","directories":{},"_nodeVersion":"10.9.0","dependencies":{"@polymer/polymer":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"webmat":"^0.2.0","@polymer/iron-icon":"^3.0.0-pre.20","@polymer/paper-fab":"^3.0.0-pre.20","wct-browser-legacy":"^1.0.1","@polymer/iron-icons":"^3.0.0-pre.20","@polymer/font-roboto":"^3.0.0-pre.20","@polymer/paper-input":"^3.0.0-pre.20","@polymer/paper-button":"^3.0.0-pre.20","@polymer/paper-styles":"^3.0.0-pre.20","@polymer/iron-flex-layout":"^3.0.0-pre.20","@webcomponents/webcomponentsjs":"^2.0.0","@polymer/gen-typescript-declarations":"^1.5.0"},"_npmOperationalInternal":{"tmp":"tmp/app-storage_3.0.0-pre.22_1535167335773_0.011393898265666946","host":"s3://npm-registry-packages"}},"3.0.0-pre.23":{"name":"@polymer/app-storage","version":"3.0.0-pre.23","author":{"name":"The Polymer Authors"},"license":"BSD-3-Clause","_id":"@polymer/app-storage@3.0.0-pre.23","maintainers":[{"name":"aomarks","email":"aomarks@google.com"},{"name":"azakus","email":"dfreedm2@gmail.com"},{"name":"bicknellr","email":"bicknellr@gmail.com"},{"name":"emarquez","email":"emarquez@google.com"},{"name":"keanulee","email":"npm@keanulee.com"},{"name":"notwaldorf","email":"notwaldorf@gmail.com"},{"name":"polymer-devs","email":"admin@polymer-project.org"},{"name":"sorvell","email":"sorvell@google.com"},{"name":"usergenic","email":"brendan@usergenic.com"}],"homepage":"","dist":{"shasum":"0022af5039c2b1d90b0baa5f6dd793d915f97902","tarball":"https://registry.npmjs.org/@polymer/app-storage/-/app-storage-3.0.0-pre.23.tgz","fileCount":20,"integrity":"sha512-nUa3b0yf+uZ+821oMQ9qOhdKq0oXP+m4+NkvjLc4vE3Dcg42H1XJh7ggxg4MiErlO2g+hHfnFKcOo+9B5xECyA==","signatures":[{"sig":"MEUCIQCDGIFdxpuCx7LKKHNEIkogpxpKDdjZD+p5B/aLSPjBNQIgTr9w1oOM+OBBGnIgwnVC1DY5h9uJuh67yCMNwvx1Ucw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":85257,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbgQHgCRA9TVsSAnZWagAAp8IP/RHt9Nw4nbZHiedO1BEq\nxt01WfQne8l9YrqGB7TRa3jyp/IxuMiOXtYgzlHdkrWo9Dg8aPVT1Byi3nnK\njs/oBxPIys6gFZBn9ln8yOyK87OICftLlqbFuPaWU2VH3vWjFHEAUO7Nkwo3\nLzNm52z2FJwKYNDnJ5y7DF7jcWkTNWR5XLbSJMpA2I9psCtnPJDeZrb9kj47\n9p7I8wHsN5ZLoATzSjvl85J34i3Jek0/BLfJDapWvEfp6cZwbjlEmFtn1Ih+\nbnlgUAEco9q+lxPcxzrScCKxDaZ12yR8r3O8BlMMx81nuTXDksYuQfyv+j/5\n1dFwIyujwKkXaueXLY3RQnuDlbN6Xk+D0dtqkUWqA4yeqiGbqJpmgdJwu7Zu\n3gHbRBhNPTznf8wZLl9eMJVZUzLpukhchN1g4txLZbIBs6Diaf0i5Tk1WLMV\nV6OZ/cQpRegbO/g3TkJHEijCuNZ1+lawIaO50UjJEcbrSN8yAmTas6e+Szlc\nR+GHcHol/zPVoDUv22tFN+/ia75QVELZVdHDxJiu9j8Ut6iM8sd6HX5cflzW\ntPomWplP2Qud2gJHfGntqt1gjBSNUvYRaNuXc5cUYpZY2ZY5kbDMCm/V0e0b\nMyg1JCF9aIlRWSxA2dga43rp5+TDI5a6rJZ76UxVmZJ9lel+kojNcJle7atv\nXPMn\r\n=J+kt\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"8455d69f86b04c38595c5ee78b35ffe682f1d556","scripts":{"format":"webmat","prepack":"npm run generate-types","generate-types":"gen-typescript-declarations --deleteExisting --outDir . --verify"},"_npmUser":{"name":"bicknellr","email":"bicknellr@gmail.com"},"_npmVersion":"6.4.0","description":"Web Components for managing user data in web apps","directories":{},"_nodeVersion":"10.9.0","dependencies":{"@polymer/polymer":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"webmat":"^0.2.0","@polymer/iron-icon":"^3.0.0-pre.22","@polymer/paper-fab":"^3.0.0-pre.22","wct-browser-legacy":"^1.0.1","@polymer/iron-icons":"^3.0.0-pre.22","@polymer/font-roboto":"^3.0.0-pre.22","@polymer/paper-input":"^3.0.0-pre.22","@polymer/paper-button":"^3.0.0-pre.22","@polymer/paper-styles":"^3.0.0-pre.22","@polymer/iron-flex-layout":"^3.0.0-pre.22","@webcomponents/webcomponentsjs":"^2.0.0","@polymer/gen-typescript-declarations":"^1.5.0"},"_npmOperationalInternal":{"tmp":"tmp/app-storage_3.0.0-pre.23_1535181280170_0.8639610909824536","host":"s3://npm-registry-packages"}},"3.0.0-pre.24":{"name":"@polymer/app-storage","version":"3.0.0-pre.24","author":{"name":"The Polymer Authors"},"license":"BSD-3-Clause","_id":"@polymer/app-storage@3.0.0-pre.24","maintainers":[{"name":"aomarks","email":"aomarks@google.com"},{"name":"azakus","email":"dfreedm2@gmail.com"},{"name":"bicknellr","email":"bicknellr@gmail.com"},{"name":"emarquez","email":"emarquez@google.com"},{"name":"justinfagnani","email":"justin@fagnani.com"},{"name":"keanulee","email":"npm@keanulee.com"},{"name":"notwaldorf","email":"notwaldorf@gmail.com"},{"name":"polymer-devs","email":"admin@polymer-project.org"},{"name":"samli","email":"sam@sam.li"},{"name":"sorvell","email":"sorvell@google.com"},{"name":"usergenic","email":"brendan@usergenic.com"}],"homepage":"","dist":{"shasum":"95ec7fc5bae546cbb9312c5ea14756dfe275f94a","tarball":"https://registry.npmjs.org/@polymer/app-storage/-/app-storage-3.0.0-pre.24.tgz","fileCount":20,"integrity":"sha512-upgoySkF0ap/kylARvfUKgQvQMMTbOzNHmIa4IuM9wfO5gfy1+FooVuiR9p7KvzlGFmH+S6Asqn6/Mn8H+IOLA==","signatures":[{"sig":"MEUCIQCZaP2377JUgbNjynPMu2KN1IlFOCUAQgtfBfeP+PA2CQIgWqZr0yxCwnvZmwCeiRFH83Zjq3nPBbRgx+PgSbfuCIk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":85336,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbhglqCRA9TVsSAnZWagAAgzcP+wb+EGp/44iz+cULKel6\n3bi0r16UpMPetd9D28O9HzumH0qOoza7PyqFH+AW3yA+DvHh34UPgs6DeU0P\ngkdsFfPE89qow5sjid+4cFpA8snNeM+qi+qCJ7NfdYlefIZP2M8c5BGW+WiM\npWFsIj/2J/jf7Umng+Zwk8Oco1Y44Znm9s7yyoLgUc6AETv6bG3hxAC5nqod\nURKHIshAOfqDO9IOuaJZ4WFgQbCsFcIdU6rpJSu/cUtF4DzwGxz7GMxxwDD9\nBgcdT6vyvHy1YpASPd0RqHoUumOpKfHzNMgOZUTM8gdLjxdRlm/e+84z+nAO\nTAollqDSdq4kqAlhD9fBHvC1i/KelMWXqRn2nd/UAAHsQH8JXJ8WWpa+saJB\nMK3euu4h3bE4t85eB/SZWOgWsTIvD+8E+4vuKdJfZvac9A6VpTCVKXfKKlnu\npmD5QP2FX2/PkWNOjOUyeF0Ww4/E9cOMWqSfrAceOuxXlkTJK11pcgGvjnzK\nA6ZdCx977UJCe9Wg2y5iiXUkJaUZQF06SJPKARX5XLuEGvNQQdIpvi2QEBI9\nYG8lWVlfxwRnQ2gKc5mc++b0tFhyX5cWdmCtc0us1ex5Lw6TH9GUCro/ljHK\nWqmZMHMP99rvqc2c6F39WDQKO8Dy26eTKX1bGUlO7MJqQzqOgdw08+9yK1lR\nJas5\r\n=XH0L\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"d7417165c167f30fee7d519e236a6d4f932db4f8","scripts":{"format":"webmat","prepack":"npm run generate-types","generate-types":"gen-typescript-declarations --deleteExisting --outDir . --verify"},"_npmUser":{"name":"bicknellr","email":"bicknellr@gmail.com"},"_npmVersion":"6.4.0","description":"Web Components for managing user data in web apps","directories":{},"_nodeVersion":"10.9.0","dependencies":{"@polymer/polymer":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"webmat":"^0.2.0","@polymer/iron-icon":"^3.0.0-pre.22","@polymer/paper-fab":"^3.0.0-pre.22","wct-browser-legacy":"^1.0.1","@polymer/iron-icons":"^3.0.0-pre.22","@polymer/font-roboto":"^3.0.0-pre.22","@polymer/paper-input":"^3.0.0-pre.22","@polymer/paper-button":"^3.0.0-pre.22","@polymer/paper-styles":"^3.0.0-pre.22","@polymer/iron-flex-layout":"^3.0.0-pre.22","@webcomponents/webcomponentsjs":"^2.0.0","@polymer/gen-typescript-declarations":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/app-storage_3.0.0-pre.24_1535510890235_0.5098449482138967","host":"s3://npm-registry-packages"}},"3.0.0-pre.25":{"name":"@polymer/app-storage","version":"3.0.0-pre.25","author":{"name":"The Polymer Authors"},"license":"BSD-3-Clause","_id":"@polymer/app-storage@3.0.0-pre.25","maintainers":[{"name":"aomarks","email":"aomarks@google.com"},{"name":"azakus","email":"dfreedm2@gmail.com"},{"name":"bicknellr","email":"bicknellr@gmail.com"},{"name":"emarquez","email":"emarquez@google.com"},{"name":"justinfagnani","email":"justin@fagnani.com"},{"name":"keanulee","email":"npm@keanulee.com"},{"name":"notwaldorf","email":"notwaldorf@gmail.com"},{"name":"polymer-devs","email":"admin@polymer-project.org"},{"name":"samli","email":"sam@sam.li"},{"name":"sorvell","email":"sorvell@google.com"},{"name":"usergenic","email":"brendan@usergenic.com"}],"homepage":"","dist":{"shasum":"1825d4d5438f27bec3543e69db4baf0570de6825","tarball":"https://registry.npmjs.org/@polymer/app-storage/-/app-storage-3.0.0-pre.25.tgz","fileCount":20,"integrity":"sha512-qnarPwICHDjTf1WePbbkEyANlk7XDlTUvO797xAD3+3OSV4EagooeC38zmUQAKHYodXO73jLdVXUiXyyc9Z2yA==","signatures":[{"sig":"MEQCIE5wnhPQxkqNXvSN+5+6kQQ3Q5p32nbbWaVjms4fv7+QAiAnEe598mC1YB8dIuhWWOc4U8T9YN8OPeo6/WEUMKFoMQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":85336,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbhhqZCRA9TVsSAnZWagAAnhwP/RvoAh+BfENIkNxMZzw1\n1vMSNIfsTTvJjoPoneG7AvjFrlNuUHpC4Jf7qyTJaQ4S8jzgGrbmRNqJq4/x\nf5woECyxeedNuQfHQAYMDa6R87IcZdIKl2oqx2yYZkKrCsrGzj2dVLwtZ19/\nJTaGbBsebELo99YcS53/OsP5+Jq2EzWgrDWE2AZP0TDM1gXeamrB0Pk9Xq2e\nc9+PzaHEwr848bopHLRuMHaO2CQ61+znr+1IL11ztsLrDSD36KtPNWyrIFTS\nL5UA7byrKl9Ivz+9MGbbqAK6h6iVp9XhRjh3wVSa0LM6lL2A+EA2N+FGBtwW\nom4IyD9PR24+TZ/u0up3HTDv9W68GWpGecJFyHF7fbPmBRwTZFd3xx7ILsLQ\ncl1pKILo+iQ/hYqGp6/z1lZtfDPxAuiwUDy3VeD2wvawel2Av5fWuviboBQ1\nE1JSsebVxcp1VutWhYIcqNeV6gRbNuzyP0C3dI7l9+OXRapELQseQ57Ks9eh\nxb53RlwsExqKP4E/Cz7jUmAs/9pyTStxY33vGft4dGYJKDKTmPA9Ji/kgYne\nLZZt/IqpcYOHB7BDXdvV9czkLDTHNCQoLJ0p4J/Ty1F5E3PUpZh9X4ZslJ0l\nu0jBCuBfMZF9YyjPQN2rmYQQatz2G5/pjxtSZcYyJkGtYF37gr81sXD6Qrbi\nItDA\r\n=Eldc\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"bab85373b2d481cbfe568e1f45a4597c860c71fe","scripts":{"format":"webmat","prepack":"npm run generate-types","generate-types":"gen-typescript-declarations --deleteExisting --outDir . --verify"},"_npmUser":{"name":"bicknellr","email":"bicknellr@gmail.com"},"_npmVersion":"6.4.0","description":"Web Components for managing user data in web apps","directories":{},"_nodeVersion":"10.9.0","dependencies":{"@polymer/polymer":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"webmat":"^0.2.0","@polymer/iron-icon":"^3.0.0-pre.24","@polymer/paper-fab":"^3.0.0-pre.24","wct-browser-legacy":"^1.0.1","@polymer/iron-icons":"^3.0.0-pre.24","@polymer/font-roboto":"^3.0.0-pre.24","@polymer/paper-input":"^3.0.0-pre.24","@polymer/paper-button":"^3.0.0-pre.24","@polymer/paper-styles":"^3.0.0-pre.24","@polymer/iron-flex-layout":"^3.0.0-pre.24","@webcomponents/webcomponentsjs":"^2.0.0","@polymer/gen-typescript-declarations":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/app-storage_3.0.0-pre.25_1535515288549_0.6324556861695316","host":"s3://npm-registry-packages"}},"3.0.0-pre.26":{"name":"@polymer/app-storage","version":"3.0.0-pre.26","author":{"name":"The Polymer Authors"},"license":"BSD-3-Clause","_id":"@polymer/app-storage@3.0.0-pre.26","maintainers":[{"name":"aomarks","email":"aomarks@google.com"},{"name":"azakus","email":"dfreedm2@gmail.com"},{"name":"bicknellr","email":"bicknellr@gmail.com"},{"name":"emarquez","email":"emarquez@google.com"},{"name":"justinfagnani","email":"justin@fagnani.com"},{"name":"keanulee","email":"npm@keanulee.com"},{"name":"notwaldorf","email":"notwaldorf@gmail.com"},{"name":"polymer-devs","email":"admin@polymer-project.org"},{"name":"samli","email":"sam@sam.li"},{"name":"sorvell","email":"sorvell@google.com"},{"name":"usergenic","email":"brendan@usergenic.com"}],"homepage":"","dist":{"shasum":"3d80281fd45d3cd62ea668523c93c207045a3911","tarball":"https://registry.npmjs.org/@polymer/app-storage/-/app-storage-3.0.0-pre.26.tgz","fileCount":20,"integrity":"sha512-2JwdrM8F4K/RQrDUjBSbBidigTdcjAciAxwumQohB1vuZ1GgszRqV9YXP8Fb9zuKUzLTZT+xjh9lmFDFxGBmrA==","signatures":[{"sig":"MEUCIQDgSSTLbPyQtq/+YAiICDKzvszy7dX/CoAAfSi+0SZbYQIgEhUjoVjGDsvqG/8mIcoSiEx0vM/niGXD+CRXcy4f0xU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":85329,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbmGhECRA9TVsSAnZWagAALjYP/AvVtgwB0keeY0F+J/RN\nEiamYYNmqyXfvyBiTMQBsWsVOW+Q0BJ8GS9IFvSJaBNI8e6Cl7JZctR/s35i\natEf9R00qVz+OOqYnNiBLI89Us87PPbRunNpOhbLQ5Qka77T2TvkSH1O26m4\ny41dC7HrSHZaG6MQ4yvr1lRTg/NFuma/NMbBMnH/l6uK38urAtwG6GDeU7wn\n6Dd7W9VQJOmTUoSB5IChuuOGoYZxP3q9H45XS2Jpqap5wCtrJbAYjAl1Vjx0\nFLA2ma92q4/zmreyDYAUJdBeGkJFtIAwsoAXE50lX1Ri1Jp4WuyRgduqVM8C\nj/hNjN0TRPNEhHGNFaKg2U0T5NmfjMiX/cGaEFL/I+/o0ad2tkL18rpPGGFT\nGkvVQ0csv6liUFEIXZOm7lH9F+7dS1zhgDCSJcez9ulKQjlI7MQPfRV5BmP8\n9xTj3/h0rhbUqvQlLWanUKz0F+JMtfL4aWKtUKAfUD7Z8PJ/YnAtE6gfEpeS\n5lkIjYyi7HqE/uKHqMcyfck7cobIPm2ctlkySe3/Syv7/j9sXRyr9vQRiA1L\nFFqlLsJqkVNgWz/y6qsYxuQqEfuh9M9yFdmki63u/cQZOu/NQ/2Li2R5fy47\ntam6WSWiV4PnHbjjlVYIUY/skUFNCrE2naVS2usyeZlf/wkf5Jg7Ma4hQLmK\n4eZE\r\n=z+za\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"eba0ab1f027091fa6e199b5e4c01448462ecc844","scripts":{"format":"webmat","prepare":"npm run generate-types","generate-types":"gen-typescript-declarations --deleteExisting --outDir . --verify"},"_npmUser":{"name":"bicknellr","email":"bicknellr@gmail.com"},"_npmVersion":"6.4.1","description":"Web Components for managing user data in web apps","directories":{},"_nodeVersion":"10.9.0","dependencies":{"@polymer/polymer":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"webmat":"^0.2.0","@polymer/iron-icon":"^3.0.0-pre.25","@polymer/paper-fab":"^3.0.0-pre.25","wct-browser-legacy":"^1.0.1","@polymer/iron-icons":"^3.0.0-pre.25","@polymer/font-roboto":"^3.0.1","@polymer/paper-input":"^3.0.0-pre.25","@polymer/paper-button":"^3.0.0-pre.25","@polymer/paper-styles":"^3.0.0-pre.25","@polymer/iron-flex-layout":"^3.0.0-pre.25","@webcomponents/webcomponentsjs":"^2.0.0","@polymer/gen-typescript-declarations":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/app-storage_3.0.0-pre.26_1536714819805_0.5645191937892509","host":"s3://npm-registry-packages"}},"3.0.0":{"name":"@polymer/app-storage","version":"3.0.0","author":{"name":"The Polymer Authors"},"license":"BSD-3-Clause","_id":"@polymer/app-storage@3.0.0","maintainers":[{"name":"aomarks","email":"aomarks@google.com"},{"name":"azakus","email":"dfreedm2@gmail.com"},{"name":"bicknellr","email":"bicknellr@gmail.com"},{"name":"emarquez","email":"emarquez@google.com"},{"name":"justinfagnani","email":"justin@fagnani.com"},{"name":"keanulee","email":"npm@keanulee.com"},{"name":"notwaldorf","email":"notwaldorf@gmail.com"},{"name":"polymer-devs","email":"admin@polymer-project.org"},{"name":"samli","email":"sam@sam.li"},{"name":"sorvell","email":"sorvell@google.com"},{"name":"usergenic","email":"brendan@usergenic.com"}],"homepage":"","dist":{"shasum":"759ab72e67e1e094c96a55f93457d29005a63c14","tarball":"https://registry.npmjs.org/@polymer/app-storage/-/app-storage-3.0.0.tgz","fileCount":20,"integrity":"sha512-Q8vaSLjyMha4ppQv3EJxEAQdsusgbIDcQMGrASaSAGraMxtHPZOcjvwEE8u9FkJtf9PJvjCxsF4vj6iinMTrVw==","signatures":[{"sig":"MEYCIQCVh6wxjMMLn2BjrwmDg4Abn578MGIm3WfBy/fq2D2HXAIhAM0n19VnKf9ARSKdK2ZThvU7oWORExuPuEuIiRdNNjyA","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":85322,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbmeDPCRA9TVsSAnZWagAAB/cP/AiWF5iWeZWe1mb6j39g\nM/EslOOAtIgGEDL1Ghw1CQlDRjJkXN0bjGcw1DNV+eUIDVnQdsvY2nhBkbFP\nbeH+Uwx9rKERPNzUQmevvNkMGXY8N9sxP2Is75BXUpWHc/Z49eg0A9zbFhFN\nn50i/c15Zcj8epGqlS9W4+MI2Dt/Rt7wWv3MgKno+hnVvd6zhGcd9rtwpBxQ\nP7E0t8SLgD8hPMjFmU/upC/ycYCP4bMqJ070bOKz11OTqupXhFbRC6k4cyyI\n2DF5YOTpv6MFqFsgwSVsIStjfCo+pHD3hK4RSAiyYJAmI+CIURXc6T1+IKSa\nIwk8MTc85SPQw5Ov/zo8xAes6+I04BEDl+TP/C+1/67WRxOPKVnLynuJG2An\nwqULMuQkcH4WIHwmV9HBmwjSI8FSodg67hIYoYL3R8HqVSpARdTRTDjdYGq/\nsQ/e/fYaYw6mO85MGXOsqoZZ1aPWaXGGUAgcPL7X/8NHaLoVmZ8zCPiWKidX\nDK0KpcA5Nkv4Lx8o/Hf2T3dLbL5fiRROM7fVFiU2Tgj24CfQZmZP8NPpHQcR\n2qRAaFLFXikdf8jl3OZ1RlsN7h1FFrE2V2ZwS0YzekTafvfiuYngQ3K6DszW\nO0diQrHQsqBI4+7HLGwxs5acV2rC2Y1PF3Ty0dOcJGkQMAd8DcrbNs3TT0Uo\nRyof\r\n=UCTz\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"ca547fcd3c4b9454f3d9fb316d9144b9930a0a12","scripts":{"format":"webmat","prepare":"npm run generate-types","generate-types":"gen-typescript-declarations --deleteExisting --outDir . --verify"},"_npmUser":{"name":"bicknellr","email":"bicknellr@gmail.com"},"_npmVersion":"6.4.1","description":"Web Components for managing user data in web apps","directories":{},"_nodeVersion":"10.9.0","dependencies":{"@polymer/polymer":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"webmat":"^0.2.0","@polymer/iron-icon":"^3.0.0-pre.26","@polymer/paper-fab":"^3.0.0-pre.26","wct-browser-legacy":"^1.0.1","@polymer/iron-icons":"^3.0.0-pre.26","@polymer/font-roboto":"^3.0.1","@polymer/paper-input":"^3.0.0-pre.26","@polymer/paper-button":"^3.0.0-pre.26","@polymer/paper-styles":"^3.0.0-pre.26","@polymer/iron-flex-layout":"^3.0.0-pre.26","@webcomponents/webcomponentsjs":"^2.0.0","@polymer/gen-typescript-declarations":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/app-storage_3.0.0_1536811214259_0.8372608016701115","host":"s3://npm-registry-packages"}},"3.0.1":{"name":"@polymer/app-storage","version":"3.0.1","author":{"name":"The Polymer Authors"},"license":"BSD-3-Clause","_id":"@polymer/app-storage@3.0.1","maintainers":[{"name":"aomarks","email":"aomarks@google.com"},{"name":"azakus","email":"dfreedm2@gmail.com"},{"name":"bicknellr","email":"bicknellr@gmail.com"},{"name":"emarquez","email":"emarquez@google.com"},{"name":"justinfagnani","email":"justin@fagnani.com"},{"name":"keanulee","email":"npm@keanulee.com"},{"name":"notwaldorf","email":"notwaldorf@gmail.com"},{"name":"polymer-devs","email":"admin@polymer-project.org"},{"name":"samli","email":"sam@sam.li"},{"name":"sorvell","email":"sorvell@google.com"},{"name":"usergenic","email":"brendan@usergenic.com"}],"homepage":"https://github.com/PolymerElements/app-storage#readme","bugs":{"url":"https://github.com/PolymerElements/app-storage/issues"},"dist":{"shasum":"b60a80691908ea40c499302859e9f9cb8e7f639e","tarball":"https://registry.npmjs.org/@polymer/app-storage/-/app-storage-3.0.1.tgz","fileCount":20,"integrity":"sha512-L7dtpJsdpjAZrVoJv+gmX7CwlyWMg6WqqRjTQtGgaWP+BN7n7xnjZ1llWlnvQaqumzOiWb/o5D2b57M9SafXGw==","signatures":[{"sig":"MEQCIDP759AuRhsaIssoD89Z/n+OtLj/6q/R3GaD752LTSSYAiAgWjGF7Kow04n7Z/XCeQ3qIDAUhwGuyzQcSfThU6zBCQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":85422,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbmsI+CRA9TVsSAnZWagAAF/UP/0eRbIGlt/kNgssFQ2uY\nKub843Nw4VXC5iMqUpgPRE/GxOR87qDG4xWXOETtqgZhOymGY4Jq5uOkDRxM\nXX4KX+bdPbLgtCtPJ6umo19t3/n4MuqNDtma+y3zNXjA0r0ZcIkHgb15G6ru\nP4ffsMhDIaKUpclDZ9NtaWgPWp1LZJvUUyYh2dXKuQRJhiR/7C9d+3wEHeFC\nZlUS1yyEjPE44CrIII7vqoSmNZYLd5ksmqEUkMZuPPTg6LefuMtkoNYc0JFp\npcQg3hHnC5IAe3X81f8rYaOZfSmKw2RQgmisydoZy9kMZgQvfg4FplKbY5a+\nM8+Y2wx0GR9MEbAvS5m9owoV5kM3yHFypawIqqSCtymUdYTdNbSSr4iSU66o\nPhm/r7tavLqvyQq75tkwFjuTt/gcz96y6gePHo2kGJHfVjjKeW66nPUmRGfF\nJ1GsPL9fqUsScOBbQdJXazOQUOzY8nBKZHl+xvBKDfERrBcstronT+jP/a78\nEqRB8GiM2BhIK2m3KdXapvs179VJqbgFB+YM3TtxfBmycDZEyhCxGivA+bIs\nevTt45VnNVLebzvJwWZVpF4kTe61HB96RMGaa6g1s3Vxo3qf0rBT/9SHi8Jb\n/2G7hTtCY/KqUu65uUq7D3k9Y5GuVDF+T3AyMQOcBLzC2sXXrgwHHwR2GVXX\ncAyq\r\n=nTKh\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"e45ce55e29562e2e4bab5ef7d76b926f305b6af3","scripts":{"format":"webmat","prepare":"npm run generate-types","generate-types":"gen-typescript-declarations --deleteExisting --outDir . --verify"},"_npmUser":{"name":"bicknellr","email":"bicknellr@gmail.com"},"repository":{"url":"git://github.com/PolymerElements/app-storage.git","type":"git"},"_npmVersion":"6.4.1","description":"Web Components for managing user data in web apps","directories":{},"_nodeVersion":"10.9.0","dependencies":{"@polymer/polymer":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"webmat":"^0.2.0","@polymer/iron-icon":"^3.0.0-pre.26","@polymer/paper-fab":"^3.0.0-pre.26","wct-browser-legacy":"^1.0.1","@polymer/iron-icons":"^3.0.0-pre.26","@polymer/font-roboto":"^3.0.1","@polymer/paper-input":"^3.0.0-pre.26","@polymer/paper-button":"^3.0.0-pre.26","@polymer/paper-styles":"^3.0.0-pre.26","@polymer/iron-flex-layout":"^3.0.0-pre.26","@webcomponents/webcomponentsjs":"^2.0.0","@polymer/gen-typescript-declarations":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/app-storage_3.0.1_1536868925217_0.6596642449047663","host":"s3://npm-registry-packages"}},"3.0.2":{"name":"@polymer/app-storage","version":"3.0.2","author":{"name":"The Polymer Authors"},"license":"BSD-3-Clause","_id":"@polymer/app-storage@3.0.2","maintainers":[{"name":"aomarks","email":"aomarks@google.com"},{"name":"azakus","email":"dfreedm2@gmail.com"},{"name":"bicknellr","email":"bicknellr@gmail.com"},{"name":"emarquez","email":"emarquez@google.com"},{"name":"justinfagnani","email":"justin@fagnani.com"},{"name":"keanulee","email":"npm@keanulee.com"},{"name":"notwaldorf","email":"notwaldorf@gmail.com"},{"name":"polymer-devs","email":"admin@polymer-project.org"},{"name":"samli","email":"sam@sam.li"},{"name":"sorvell","email":"sorvell@google.com"},{"name":"usergenic","email":"brendan@usergenic.com"}],"homepage":"https://github.com/PolymerElements/app-storage#readme","bugs":{"url":"https://github.com/PolymerElements/app-storage/issues"},"dist":{"shasum":"9303d9cf246f4882b223cca7c36901ecc6fa003c","tarball":"https://registry.npmjs.org/@polymer/app-storage/-/app-storage-3.0.2.tgz","fileCount":21,"integrity":"sha512-UWfUlXVRLvx0fNThStagAaGDIxGLtFsLkRDd0y75m0NH3LSUDdIP6tYmDjXmcuIf2pdua+VFeR7FoHbDjNkq4Q==","signatures":[{"sig":"MEYCIQDBzV0QrrN4fWfog2JHOoDDhMx3sPRBY0h78eZYSygscgIhAJYleXrzq9hF6OY4T/usgJjhKGj/Zl8+Zk6hHNOun9tG","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":85503,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbmyA9CRA9TVsSAnZWagAAJ5wP/2rbFWBmOgiC4T7vhb5/\nDFq8/1wTBhEHyqRK6ruH67dk2UzYPR8PyZHstP4A+/QbihOp7hstmW/WMh1O\n/FVvTVUDXo+HKdpIyU89Z/47iYXI5cfC2F5mlg35vvEs7aAd+VWiiubQrb+l\n12wbdYfBdHweEQI2PEIl5yOxUcnmY/MjkEnllnbrLT42dqlswm3LDFRN04EH\nPC5Xx2dwcCGSm9odb+FLUQqtXI13+zayhVGTA/5MVfpuaCdytwdutLlt1QT8\nd6Vy2aOBieVBwAFXRbXt5j6510eMisSy1meoASwgwK2x+ANHVc07p/p3awHi\nZdVNG1IPuCOuQGeebiSL4sYwPPf8TWEXoJrKaFIVUlnmnjprpj6wpKEdHAGG\nPcCld7mIFMUIwXOxWAYkGt/aJ3XPEQCKmQabtOwp6ti3U1dyxfOKGaBW9RKE\nfZtdA3S4dgiFdE+rSagEIZHqtQAmrDhe+TZTT9Z4FO/xWDWpeeaCT3p43+9R\n8yISJQea4K66/soiAQhhF3L7fdXBkf88he/RQ9ufR9i/CJ8Vop7sKpzKP9Jo\nnz3rBBmp/a5581I/xY+1vxPqyPg4OkOM8f1asjTJGJy5NxPzoGNXi1WqpaCl\n6WV2b0USUmXtdjvRJmLMbeSa/QGWn+YTcUshXuZrxAOiaKuymPN7mP/ZFW1m\nZVfV\r\n=B0Lg\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"e2fa57c7ebccb93f9461d130d9325a3cc00392f4","scripts":{"format":"webmat","prepare":"npm run generate-types","generate-types":"gen-typescript-declarations --deleteExisting --outDir . --verify"},"_npmUser":{"name":"bicknellr","email":"bicknellr@gmail.com"},"repository":{"url":"git://github.com/PolymerElements/app-storage.git","type":"git"},"_npmVersion":"6.4.1","description":"Web Components for managing user data in web apps","directories":{},"_nodeVersion":"10.9.0","dependencies":{"@polymer/polymer":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"webmat":"^0.2.0","@polymer/iron-icon":"^3.0.0-pre.26","@polymer/paper-fab":"^3.0.0-pre.26","wct-browser-legacy":"^1.0.1","@polymer/iron-icons":"^3.0.0-pre.26","@polymer/font-roboto":"^3.0.1","@polymer/paper-input":"^3.0.0-pre.26","@polymer/paper-button":"^3.0.0-pre.26","@polymer/paper-styles":"^3.0.0-pre.26","@polymer/iron-flex-layout":"^3.0.0-pre.26","@webcomponents/webcomponentsjs":"^2.0.0","@polymer/gen-typescript-declarations":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/app-storage_3.0.2_1536892988547_0.8969882677449554","host":"s3://npm-registry-packages"}},"3.0.3":{"name":"@polymer/app-storage","version":"3.0.3","author":{"name":"The Polymer Authors"},"license":"BSD-3-Clause","_id":"@polymer/app-storage@3.0.3","maintainers":[{"name":"aomarks","email":"aomarks@google.com"},{"name":"azakus","email":"dfreedm2@gmail.com"},{"name":"bicknellr","email":"bicknellr@gmail.com"},{"name":"emarquez","email":"emarquez@google.com"},{"name":"justinfagnani","email":"justin@fagnani.com"},{"name":"polymer-devs","email":"admin@polymer-project.org"},{"name":"sorvell","email":"sorvell@google.com"},{"name":"straversi","email":"straversi@berkeley.edu"},{"name":"tvanderlippe","email":"tvanderlippe@google.com"},{"name":"usergenic","email":"brendan@usergenic.com"}],"homepage":"https://github.com/PolymerElements/app-storage#readme","bugs":{"url":"https://github.com/PolymerElements/app-storage/issues"},"dist":{"shasum":"72268d318bce31740246430ea8849e3fee817e07","tarball":"https://registry.npmjs.org/@polymer/app-storage/-/app-storage-3.0.3.tgz","fileCount":21,"integrity":"sha512-t9SpRbtU3SHKlavE/CvIPhFmhJ0D4dfdFnHwXCjLHfx2SL+PBCk/dmJNNFaCxmNm7bml8xonGpeqtfvbfzdiyQ==","signatures":[{"sig":"MEQCIFXs5NSjLV1KM4mMWFt1EBz0+LrwSpMOuuF88rudHdfLAiB31WIG8V6xWHD3WoA0msvgGbq+swDBzmUZtf+T4MOA+Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":86142,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh2WyWCRA9TVsSAnZWagAAjTAP/0+YIlLOcpLZQNSCDRSu\no3q+/ty/gPYQ1NzBa2FU99A5qvYEBFaaL0+3kYyBtG8BQAoDyUSIkyD6S6or\necrrqfaphc7PRW05LxA9coTsW84A3OxBDH7FxbPPbOVio2UTcMZeghSf5iwZ\ngVhgMMd98mha5TT0yn5bm4A9dpIGm+9BrjKG0l04eKWypub1HxqSFI07Zlv4\nZ0LBtkXbxh/MnupD6+P9zvJWstb1SXF2VCiTAwo+XESrxH+uw5Ed/DmOXmF8\nJvf0yBRyC2vNg5HTwx9lnvmRs1oxfb9ArTEZqgSwbHR6qf2QVb85Lx5qpL9p\nnX7GfjzOSiqj5qLnCflN9HRsH7RcQfTJQUou33hrBIU/aXHsGn9Z8CbYlgpW\nNg9kQfrevsgySWIrGmLpGKq5HEf7dP2fWSvYu2gBBJhvt2IJq45GEkGvHjil\n8QH94GeiWURX+gCWMI4Qel+0imSX8exqg3ZqCYiaM0ZiG9Pcolu0zqt/BPz5\nlYjZ8Zk7posNwA3Dnq85RpaXs9weRoOC/1IY+6LMkcBYnVY+rnMK7daaeb6E\n6PT2IY9UyE/PyBSMLmDYwmHssryr9c6yRFo3MqJaZqDNIzjNBCBFngin840B\nuc3wETMbVP4QD+zNZzQUU1fkh4p9CNjTJZNSeuoVjD+sFYobJOJ/w5xq7jhn\nE/WF\r\n=z1Xt\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"fdeefaa4764163be128b17601250e4f7e1fd294f","scripts":{"format":"webmat","prepare":"npm run generate-types","generate-types":"gen-typescript-declarations --deleteExisting --outDir . --verify"},"_npmUser":{"name":"emarquez","email":"emarquez@google.com"},"repository":{"url":"git://github.com/PolymerElements/app-storage.git","type":"git"},"_npmVersion":"6.9.0","description":"Web Components for managing user data in web apps","directories":{},"_nodeVersion":"11.12.0","dependencies":{"@polymer/polymer":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"webmat":"^0.2.0","@polymer/iron-icon":"^3.0.0-pre.26","@polymer/paper-fab":"^3.0.0-pre.26","wct-browser-legacy":"^1.0.1","@polymer/iron-icons":"^3.0.0-pre.26","@polymer/font-roboto":"^3.0.1","@polymer/paper-input":"^3.0.0-pre.26","@polymer/paper-button":"^3.0.0-pre.26","@polymer/paper-styles":"^3.0.0-pre.26","@polymer/iron-flex-layout":"^3.0.0-pre.26","@webcomponents/webcomponentsjs":"^2.0.0","@polymer/gen-typescript-declarations":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/app-storage_3.0.3_1580510981090_0.35487147687231024","host":"s3://npm-registry-packages"}}},"time":{"created":"2017-01-20T23:09:31.341Z","modified":"2024-10-07T21:25:48.357Z","0.9.8-pre.1":"2017-01-20T23:09:31.341Z","0.9.8-pre.2":"2017-01-20T23:23:32.496Z","0.9.8-pre.3":"2017-01-24T00:20:16.113Z","3.0.0-pre.1":"2017-08-22T07:17:36.200Z","3.0.0-pre.2":"2018-01-12T01:41:58.616Z","3.0.0-pre.4":"2018-01-16T23:53:55.790Z","3.0.0-pre.6":"2018-01-24T23:03:50.803Z","3.0.0-pre.7":"2018-01-30T18:48:30.020Z","3.0.0-pre.8":"2018-02-07T18:56:23.872Z","3.0.0-pre.10":"2018-02-22T23:15:12.045Z","3.0.0-pre.11":"2018-03-09T01:17:08.036Z","3.0.0-pre.12":"2018-03-22T16:56:29.902Z","3.0.0-pre.13":"2018-05-01T22:56:05.083Z","3.0.0-pre.14":"2018-05-02T00:36:52.516Z","3.0.0-pre.15":"2018-05-02T20:53:50.791Z","3.0.0-pre.16":"2018-05-04T20:17:27.433Z","3.0.0-pre.17":"2018-05-08T05:08:17.385Z","3.0.0-pre.18":"2018-05-09T10:00:02.604Z","3.0.0-pre.19":"2018-05-09T20:20:49.419Z","3.0.0-pre.20":"2018-06-23T00:17:39.557Z","3.0.0-pre.21":"2018-06-23T01:05:44.688Z","3.0.0-pre.22":"2018-08-25T03:22:15.884Z","3.0.0-pre.23":"2018-08-25T07:14:40.244Z","3.0.0-pre.24":"2018-08-29T02:48:10.349Z","3.0.0-pre.25":"2018-08-29T04:01:28.726Z","3.0.0-pre.26":"2018-09-12T01:13:39.977Z","3.0.0":"2018-09-13T04:00:14.735Z","3.0.1":"2018-09-13T20:02:05.307Z","3.0.2":"2018-09-14T02:43:08.775Z","3.0.3":"2020-01-31T22:49:41.199Z"},"bugs":{"url":"https://github.com/PolymerElements/app-storage/issues"},"author":{"name":"The Polymer Authors"},"license":"BSD-3-Clause","homepage":"https://github.com/PolymerElements/app-storage#readme","repository":{"url":"git://github.com/PolymerElements/app-storage.git","type":"git"},"description":"Web Components for managing user data in web apps","maintainers":[{"email":"rictic@gmail.com","name":"rictic"},{"email":"aomarks@gmail.com","name":"aomarks"},{"email":"emarquez@google.com","name":"emarquez"},{"email":"sorvell@google.com","name":"sorvell"},{"email":"bicknellr@gmail.com","name":"bicknellr"},{"email":"brendan@usergenic.com","name":"usergenic"},{"email":"admin@polymer-project.org","name":"polymer-devs"},{"email":"dfreedm2@gmail.com","name":"azakus"},{"email":"kevinpschaaf@gmail.com","name":"kevinpschaaf"},{"email":"justin@fagnani.com","name":"justinfagnani"}],"readme":"[![Published on NPM](https://img.shields.io/npm/v/@polymer/app-storage.svg)](https://www.npmjs.com/package/@polymer/app-storage)\n[![Build status](https://travis-ci.org/PolymerElements/app-storage.svg?branch=master)](https://travis-ci.org/PolymerElements/app-storage)\n[![Published on webcomponents.org](https://img.shields.io/badge/webcomponents.org-published-blue.svg)](https://webcomponents.org/element/@polymer/app-storage)\n\n## App-Storage\n\nThese are a set of behaviors and elements that make it easy to synchronize\nin-memory data to persistant storage systems.\n\nSee: [Documentation](https://www.webcomponents.org/element/@polymer/app-storage),\n\n### AppStorageBehavior\n\n`AppStorageBehavior` is an abstract behavior that makes it easy to\nsynchronize in-memory data and a persistant storage system, such as\nthe browser's IndexedDB, or a remote database like Firebase.\n\n### AppNetworkStatusBehavior\n\n`AppNetworkStatusBehavior` tracks the status of whether the browser\nis online or offline. True if the browser is online, and false if the browser is\noffline matching the HTML browser state spec.\n\n### &lt;app-indexeddb-mirror&gt;\n\n`app-indexeddb-mirror` is a purpose-built element to easily add read-only\noffline access of application data that is typically only available when the\nuser is connected to the network.\n\nWhen an app using this element is connected to the network, the element acts as\na pass-through for live application data. Data is bound into the `data`\nproperty, and consumers of the data can bind to the correlated `persistedData`\nproperty. As live data changes, `app-indexeddb-mirror` caches a copy of the live\ndata in a local IndexedDB database. When the app is no longer connected to the\nnetwork, `app-indexeddb-mirror` toggles its `persistedData` property to refer\nto a read-only copy of the corresponding data in IndexedDB.\n\nThis element is particularly useful in cases where an API or storage layer (such\nas Firebase, for example) does not support caching data for later use during\nuser sessions that begin while the user is disconnected from the network.\n\n### &lt;app-localstorage-document&gt;\n\napp-localstorage-document synchronizes storage between an in-memory\nvalue and a location in the browser's localStorage system.\n\nlocalStorage is a simple and widely supported storage API that provides both\npermanent and session-based storage options. Using app-localstorage-document\nyou can easily integrate localStorage into your app via normal Polymer\ndatabinding.\n\napp-localstorage-document is the reference implementation of an element\nthat uses `AppStorageBehavior`. Reading its code is a good way to get\nstarted writing your own storage element.\n\n## Usage\n\n### Installation\n```\nnpm install --save @polymer/app-storage\n```\n\n### In an html file\n\n#### &lt;app-indexeddb-mirror&gt;\n```html\n<html>\n  <head>\n    <script type=\"module\">\n      import '@polymer/polymer/lib/elements/dom-bind.js';\n      import '@polymer/iron-ajax/iron-ajax.js';\n      import '@polymer/app-storage/app-indexeddb-mirror/app-indexeddb-mirror.js';\n    </script>\n  </head>\n  <body>\n    <dom-bind>\n      <template>\n        <iron-ajax\n            url=\"/api/cats\"\n            handle-as=\"json\"\n            last-response=\"{{liveData}}\">\n        </iron-ajax>\n        <app-indexeddb-mirror\n            key=\"cats\"\n            data=\"{{liveData}}\"\n            persisted-data=\"{{persistedData}}\">\n        </app-indexeddb-mirror>\n\n        <dom-repeat>\n          <template items=\"{{persistedData}}\" as=\"cat\">\n            <div>[[cat.name]]</div>\n          </template>\n        </dom-repeat>\n      </template>\n    </dom-bind>\n  </body>\n</html>\n```\n\n#### &lt;app-localstorage-document&gt;\n```html\n<html>\n  <head>\n    <script type=\"module\">\n      import '@polymer/polymer/lib/elements/dom-bind.js';\n      import '@polymer/paper-input/paper-input.js';\n      import '@polymer/app-storage/app-localstorage-document/app-localstorage-document.js';\n    </script>\n  </head>\n  <body>\n    <dom-bind>\n      <template>\n        <paper-input value=\"{{search}}\"></paper-input>\n        <app-localstorage-document key=\"search\" data=\"{{search}}\">\n        </app-localstorage-document>\n      </template>\n    </dom-bind>\n  </body>\n</html>\n```\n\n### In a Polymer 3 element\n\n#### AppStorageBehavior\n```js\nimport {PolymerElement, html} from '@polymer/polymer';\nimport {mixinBehaviors} from '@polymer/polymer/lib/legacy/class.js';\nimport {AppStorageBehavior} from '@polymer/app-storage/app-storage-behavior.js';\n\nclass SampleElement extends mixinBehaviors([AppStorageBehavior], PolymerElement) {\n  get isNew() { return /* your override here */ }\n  get zeroValue() { return /* your override here */ }\n  get saveValue() { return /* your override here */ }\n  reset() {  /* your optional override here */ }\n  getStoredValue() {  /* your override here */ }\n  setStoredValue() {  /* your override here */ }\n}\ncustomElements.define('sample-element', SampleElement);\n```\n\n#### Polymer.AppNetworkStatusBehavior\n```js\nimport {PolymerElement, html} from '@polymer/polymer';\nimport {mixinBehaviors} from '@polymer/polymer/lib/legacy/class.js';\nimport {AppNetworkStatusBehavior} from '@polymer/app-storage/app-network-status-behavior.js';\n\nclass SampleElement extends mixinBehaviors([AppNetworkStatusBehavior], PolymerElement) {\n  alertNetworkStatus() { alert(`I am ${this.online ? 'online' : 'offline'}!`) }\n}\ncustomElements.define('sample-element', SampleElement);\n```\n\n#### &lt;app-indexeddb-mirror&gt;\n```js\nimport {PolymerElement, html} from '@polymer/polymer';\nimport '@polymer/iron-ajax/iron-ajax.js';\nimport '@polymer/app-storage/app-indexeddb-mirror/app-indexeddb-mirror.js';\n\nclass SampleElement extends PolymerElement {\n  static get template() {\n    return html`\n      <iron-ajax\n          url=\"/api/cats\"\n          handle-as=\"json\"\n          last-response=\"{{liveData}}\">\n      </iron-ajax>\n      <app-indexeddb-mirror\n          key=\"cats\"\n          data=\"{{liveData}}\"\n          persisted-data=\"{{persistedData}}\">\n      </app-indexeddb-mirror>\n\n      <template is=\"dom-repeat\" items=\"{{persistedData}}\" as=\"cat\">\n        <div>[[cat.name]]</div>\n      </template>\n    `;\n  }\n}\ncustomElements.define('sample-element', SampleElement);\n```\n\n##### &lt;app-localstorage-document&gt;\n```js\nimport {PolymerElement, html} from '@polymer/polymer';\nimport '@polymer/paper-input/paper-input.js';\nimport '@polymer/app-storage/app-localstorage-document/app-localstorage-document.js';\n\nclass SampleElement extends PolymerElement {\n  static get template() {\n    return html`\n      <paper-input value=\"{{search}}\"></paper-input>\n      <app-localstorage-document key=\"search\" data=\"{{search}}\">\n      </app-localstorage-document>\n    `;\n  }\n}\ncustomElements.define('sample-element', SampleElement);\n```\n\n## Contributing\nIf you want to send a PR to this element, here are\nthe instructions for running the tests and demo locally:\n\n### Installation\n```sh\ngit clone https://github.com/PolymerElements/app-storage\ncd app-storage\nnpm install\nnpm install -g polymer-cli\n```\n\n### Running the demo locally\n```sh\npolymer serve --npm\nopen http://127.0.0.1:<port>/demo/\n```\n\n### Running the tests\n```sh\npolymer test --npm\n```","readmeFilename":"README.md"}