diff --git a/.gitignore b/.gitignore index d86e5cf7..ba9db6f9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,17 @@ -/node_modules -/bower_components -*.js -*.js.map -*.d.ts +/node_modules/ +/lib/ + +#Compiler Output +lit-element.js +lit-element.js.map +lit-element.d.ts + +/test/**/*.d.ts +/test/**/*.js +/test/**/*.js.map + +/demo/**/*.d.ts +/demo/**/*.js +/demo/**/*.js.map + !custom_typings/ \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 030c2fc9..ca74667f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,8 +11,8 @@ cache: before_script: - npm run lint script: -- xvfb-run npm run test -- if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then wct -s 'windows 10/microsoftedge@15' -s 'windows 10/microsoftedge@17' -s 'windows 8.1/internet explorer@11' -s 'os x 10.11/safari@9' -s 'os x 10.12/safari@10' -s 'os x 10.12/safari@11' -s 'Linux/chrome@41'; fi +- xvfb-run npm run test -- -l chrome +- if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then wct -s 'windows 10/microsoftedge@15' -s 'windows 10/microsoftedge@17' -s 'windows 8.1/internet explorer@11' -s 'os x 10.11/safari@9' -s 'os x 10.12/safari@10' -s 'macos 10.13/safari@11' -s 'Linux/chrome@41' -s 'Linux/firefox'; fi env: global: - secure: mRVq6Gjuq8QOakh9llctKR615PMnKB6HUkLEpZFNHMSXSJryLsZFUAYS5d9TRVtgiaExMciOWQAuAly/08TwLcob1aDPPzs6e2cZK18lRny4o0O3Ax4Kp6cdE27RP2xVIbqyodsYgHbvbAC/3bCWCBWC89LRBL2hEiZZ2fyMu7a2PECH/S1A33D/x1gzzXlvuroMvfbTrPenV3Ps/ZL7R27EHjB6I8ktMUvULXeyI3jmsRtAiqfd6N70caW0mFJsl6Y6A9hWNd2AjdIPxbiLESpbSBFnOdixLwAs5RLudLLQz+so1i/tOuZldXs+iDHVB+iHRl2nj6WY+nbXEObePFhk3S7wA9c4SKNY9tfOzT/FYn96QZdSdVyqQnhyj67YqejF7wSLD4YNfp2llyDBHQAdVd4Z7y/qlsLxgPzdponzlKzecSfjl9Q7wDdWEpPQtQfwjd1nZ/eeGmFwHTlKUfcAkkNOvNteJGabJBXpgoNljHRuevBLsZyZnTw+NPGVnhBdOw7mrWE4vMt5wH64PIFJmJWrWTiyzgOXuP1lh3LirQvWYK4tvmeQvLWosESqz5c+DE5x382fjIHUmIflxOnBYMwTjx8OCbkrhN3kb2NFNz3MyBD9Dz+yYRmzPaUU10HNKlFf1U3bT/c/IUTTkY+VxXKtwPfmOfSJTpMhbvk= diff --git a/README.md b/README.md index 334dbd9c..e011f773 100644 --- a/README.md +++ b/README.md @@ -10,11 +10,47 @@ LitElement uses [lit-html](https://github.com/Polymer/lit-html) to render into the element's [Shadow DOM](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_shadow_DOM) -and [Polymer's](https://github.com/Polymer/polymer) -[PropertiesMixin](https://github.com/Polymer/polymer/blob/master/lib/mixins/properties-mixin.js) -to help manage element properties and attributes. LitElement reacts to changes in properties +and adds API to help manage element properties and attributes. LitElement reacts to changes in properties and renders declaratively using `lit-html`. + * **Setup properties:** LitElement supports observable properties that cause the element to update. + These properties can be declared in a few ways: + + * As class fields with the `@property()` [decorator](https://github.com/tc39/proposal-decorators#decorators), + if you're using a compiler that supports them, like TypeScript or Babel. + * With a static `properties` getter. + * By manually writing getters and setters. This can be useful if tasks should + be performed when a property is set, for example validation. Call `invalidateProperty(name, oldValue)` + in the setter to trigger an update and use any configured property options. + + Properties can be given an options argument which is an object that describes how to + process the property. This can be done either in the `@property({...})` decorator or in the + object returned from the `properties` getter, e.g. `static get properties { return { foo: {...} }`. + + Property options include: + + * `attribute`: Describes how and whether the property becomes an observed attribute. + If the value is `false`, the property is not added to `observedAttributes`. + If true or absent, the lowercased property name is observed (e.g. `fooBar` becomes `foobar`). + If a string, the string value is observed (e.g `attribute: 'foo-bar'`). + * `type`: Describes how to serialize and deserialize the attribute to/from a property. + If this value is a function, it is used to deserialize the attribute value + a the property value. If it's an object, it can have keys for `fromAttribute` and + `toAttribute` where `fromAttribute` is the deserialize function and `toAttribute` + is a serialize function used to set the property to an attribute. If no `toAttribute` + function is provided and `reflect` is set to `true`, the property value is set + directly to the attribute. + * `reflect`: Describes if the property should reflect to an attribute. + If `true`, when the property is set, the attribute is set using the + attribute name determined according to the rules for the `attribute` + propety option and the value of the property serialized using the rules from + the `type` property option. + * `shouldInvalidate`: Describes if setting a property should trigger + invalidation and updating. This function takes the `newValue` and `oldValue` and + returns `true` if invalidation should occur. If not present, a strict identity + check is used. This is useful if a property should be considered dirty only + if some condition is met, like if a key of an object value changes. + * **React to changes:** LitElement reacts to changes in properties and attributes by asynchronously rendering, ensuring changes are batched. This reduces overhead and maintains consistent state. @@ -27,8 +63,9 @@ and renders declaratively using `lit-html`. * static elements: ``` html`
Hi
` ``` * expression: ``` html`
${disabled ? 'Off' : 'On'}
` ``` - * attribute: ``` html`
` ``` - * event handler: ``` html`` ``` + * property: ``` html`` ``` + * attribute: ``` html`
` ``` + * event handler: ``` html`` ``` ## Getting started @@ -68,24 +105,25 @@ and renders declaratively using `lit-html`. ## Minimal Example 1. Create a class that extends `LitElement`. - 1. Implement a static `properties` getter that returns the element's properties - (which automatically become observed attributes). - 1. Then implement a `_render(props)` method and use the element's -current properties (props) to return a `lit-html` template result to render + 1. Use a `@property` decorator to create a property (or implement a static `properties` + getter that returns the element's properties). (which automatically become observed attributes). + 1. Then implement a `render()` method and use the element's +current properties to return a `lit-html` template result to render into the element. This is the only method that must be implemented by subclasses. ```html + + Hi +
+ + - Hi diff --git a/package-lock.json b/package-lock.json index db95284b..58f361b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,36 +1,35 @@ { "name": "@polymer/lit-element", - "version": "0.5.2", + "version": "0.6.0-dev.4", "lockfileVersion": 1, "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.51.tgz", - "integrity": "sha1-vXHZsZKvl435FYKdOdQJRFZDmgw=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-rc.1.tgz", + "integrity": "sha512-qhQo3GqwqMUv03SxxjcEkWtlkEDvFYrBKbJUn4Dtd9amC2cLkJ3me4iYUVSBbVXWbfbVRalEeVBHzX4aQYKnBg==", "dev": true, "requires": { - "@babel/highlight": "7.0.0-beta.51" + "@babel/highlight": "7.0.0-rc.1" } }, "@babel/core": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.0.0-beta.51.tgz", - "integrity": "sha1-DlS9a2OHNrKuWTwxpH8JaeKyuW0=", - "dev": true, - "requires": { - "@babel/code-frame": "7.0.0-beta.51", - "@babel/generator": "7.0.0-beta.51", - "@babel/helpers": "7.0.0-beta.51", - "@babel/parser": "7.0.0-beta.51", - "@babel/template": "7.0.0-beta.51", - "@babel/traverse": "7.0.0-beta.51", - "@babel/types": "7.0.0-beta.51", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.0.0-rc.1.tgz", + "integrity": "sha512-CvuSsq+LFs9N4SJG8MnNPI0hnl913HK1OqG3NEfejOKo+JqtVuxpmAFyXIDogX2x668xqFKAW6EQiCIcUHklMg==", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-rc.1", + "@babel/generator": "7.0.0-rc.1", + "@babel/helpers": "7.0.0-rc.1", + "@babel/parser": "7.0.0-rc.1", + "@babel/template": "7.0.0-rc.1", + "@babel/traverse": "7.0.0-rc.1", + "@babel/types": "7.0.0-rc.1", "convert-source-map": "^1.1.0", "debug": "^3.1.0", "json5": "^0.5.0", - "lodash": "^4.17.5", - "micromatch": "^3.1.10", + "lodash": "^4.17.10", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" @@ -45,14 +44,14 @@ } }, "@babel/generator": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.51.tgz", - "integrity": "sha1-bHV1/952HQdIXgS67cA5LG2eMPY=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-rc.1.tgz", + "integrity": "sha512-Ak4n780/coo+L9GZUS7V/IGJilP11t4UoWl0J9cG3jso4KkDGQcqdx4Y6gJAiXng+sDfvzUmvWfM1hZwH82J0A==", "dev": true, "requires": { - "@babel/types": "7.0.0-beta.51", + "@babel/types": "7.0.0-rc.1", "jsesc": "^2.5.1", - "lodash": "^4.17.5", + "lodash": "^4.17.10", "source-map": "^0.5.0", "trim-right": "^1.0.1" }, @@ -66,33 +65,33 @@ } }, "@babel/helper-annotate-as-pure": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0-beta.51.tgz", - "integrity": "sha1-OM95IL9fM4oif3VOKGtvut7gS1g=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0-rc.1.tgz", + "integrity": "sha512-GOV2UExs9gAvSrZF4rcgocXXeLJplq2kL2AsCrn6DmGwMUEfo/KB7FhedN3X6cVh0gOqqKkVKXrz3Li1wQ84xQ==", "dev": true, "requires": { - "@babel/types": "7.0.0-beta.51" + "@babel/types": "7.0.0-rc.1" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.0.0-beta.51.tgz", - "integrity": "sha1-ITP//j4vcVkeQhR7lHKRyirTkjc=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.0.0-rc.1.tgz", + "integrity": "sha512-O6/szesBinGoExLl01Qg2vb5FaOfifSilgL5GnCZLz5z3Pg9jRolN6rGzQAOa/K9Y01TAmDf1dC06AKQUv3x8g==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "7.0.0-beta.51", - "@babel/types": "7.0.0-beta.51" + "@babel/helper-explode-assignable-expression": "7.0.0-rc.1", + "@babel/types": "7.0.0-rc.1" } }, "@babel/helper-call-delegate": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.0.0-beta.51.tgz", - "integrity": "sha1-BO1yfJfPBbyy/WRINzMasV1jyBk=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.0.0-rc.1.tgz", + "integrity": "sha512-3Z+shHGJTQnc61RCFVrQ3OJRmyL8uk4dWCsP8kT7G4inxv/bs6/zLOipK21VMePGpjUA4tnKxJCevMtp9ko4pw==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "7.0.0-beta.51", - "@babel/traverse": "7.0.0-beta.51", - "@babel/types": "7.0.0-beta.51" + "@babel/helper-hoist-variables": "7.0.0-rc.1", + "@babel/traverse": "7.0.0-rc.1", + "@babel/types": "7.0.0-rc.1" } }, "@babel/helper-define-map": { @@ -169,75 +168,75 @@ } }, "@babel/helper-explode-assignable-expression": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.0.0-beta.51.tgz", - "integrity": "sha1-mHUzKti11cmC+kgcuCtzFwPyzS0=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.0.0-rc.1.tgz", + "integrity": "sha512-hSa+oxKn9bfbc3Ob1U7QJsO++do2Xe8Ft640alRJpEQ3VWy7tL8ZB+2xqo0pgHKo7rITuSxERz72uZji8dTiWg==", "dev": true, "requires": { - "@babel/traverse": "7.0.0-beta.51", - "@babel/types": "7.0.0-beta.51" + "@babel/traverse": "7.0.0-rc.1", + "@babel/types": "7.0.0-rc.1" } }, "@babel/helper-function-name": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.51.tgz", - "integrity": "sha1-IbSHSiJ8+Z7K/MMKkDAtpaJkBWE=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-rc.1.tgz", + "integrity": "sha512-fDbWxdYYbFNzcI5jn3qsPxHI1UCXwvFk0kGytGce/FEBYEPXBqycKknC8Oqiub8DzGtmTcvnqcm/cl/qxzeuiQ==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "7.0.0-beta.51", - "@babel/template": "7.0.0-beta.51", - "@babel/types": "7.0.0-beta.51" + "@babel/helper-get-function-arity": "7.0.0-rc.1", + "@babel/template": "7.0.0-rc.1", + "@babel/types": "7.0.0-rc.1" } }, "@babel/helper-get-function-arity": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.51.tgz", - "integrity": "sha1-MoGy0EWvlcFyzpGyCCXYXqRnZBE=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-rc.1.tgz", + "integrity": "sha512-5+ydaIRxT42FSDqvoXIDksCGlW1903xC73HQnQCFF1YuV7VcIf+9M4+tRZulLlYlshw7ILA+4SiYsKoDlC0Irg==", "dev": true, "requires": { - "@babel/types": "7.0.0-beta.51" + "@babel/types": "7.0.0-rc.1" } }, "@babel/helper-hoist-variables": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0-beta.51.tgz", - "integrity": "sha1-XX68hZZWe2RPyYmRLDo++YvgWPw=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0-rc.1.tgz", + "integrity": "sha512-ttcilOh9SM9eqVlzwz2Lv7B5Dwyaa8TIhi1DDEPnC3CarpNPXFdeCOoxoV5qjHRD1klAT86gczeU4lJnSDKmgA==", "dev": true, "requires": { - "@babel/types": "7.0.0-beta.51" + "@babel/types": "7.0.0-rc.1" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0-beta.51.tgz", - "integrity": "sha1-KkJTZXQXZYiAbmAusXpS0yP4KHA=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0-rc.1.tgz", + "integrity": "sha512-o263plHxPo1TxDDUx7gHuQ96Y8QyLs2n4968KZvo2l/9rkwn2L9kcIsRVjlhpPPKTz4tWe/7ZV50zkeDorrK9g==", "dev": true, "requires": { - "@babel/types": "7.0.0-beta.51" + "@babel/types": "7.0.0-rc.1" } }, "@babel/helper-module-imports": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.51.tgz", - "integrity": "sha1-zgBCgEX7t9XrwOp7+DV4nxU2arI=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0-rc.1.tgz", + "integrity": "sha512-eA8RzanjsZw4X2Cqh3WgVG7zwf1wdSUfXvZOH8Azx1rpwE0hzJ276jDZ3gSOJShsxPVvopHa4h+c2WfEUjW4+Q==", "dev": true, "requires": { - "@babel/types": "7.0.0-beta.51", - "lodash": "^4.17.5" + "@babel/types": "7.0.0-rc.1", + "lodash": "^4.17.10" } }, "@babel/helper-module-transforms": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.0.0-beta.51.tgz", - "integrity": "sha1-E68MjuQfJ3dDyPxD1EQxXbIyb3M=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.0.0-rc.1.tgz", + "integrity": "sha512-nz7FTFXlQ9UYp/dBjad4ZOu3Q4/1n86ysw9z9pjunqeKFNm+JHq7j5BeocFKIQAwul7QbIkSXiYm5EiteCHjiQ==", "dev": true, "requires": { - "@babel/helper-module-imports": "7.0.0-beta.51", - "@babel/helper-simple-access": "7.0.0-beta.51", - "@babel/helper-split-export-declaration": "7.0.0-beta.51", - "@babel/template": "7.0.0-beta.51", - "@babel/types": "7.0.0-beta.51", - "lodash": "^4.17.5" + "@babel/helper-module-imports": "7.0.0-rc.1", + "@babel/helper-simple-access": "7.0.0-rc.1", + "@babel/helper-split-export-declaration": "7.0.0-rc.1", + "@babel/template": "7.0.0-rc.1", + "@babel/types": "7.0.0-rc.1", + "lodash": "^4.17.10" } }, "@babel/helper-optimise-call-expression": { @@ -263,31 +262,31 @@ } }, "@babel/helper-plugin-utils": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0-beta.51.tgz", - "integrity": "sha1-D2pfK20cZERBP4+rYJQNebY8IDE=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0-rc.1.tgz", + "integrity": "sha512-8ZNzqHXDhT/JjnBvrLKu8AL7NhONVIsnrfyQNm3PJNmufIER5kcIa3OxPMGWgNqox2R8WeQ6YYzYTLNXqq4kgQ==", "dev": true }, "@babel/helper-regex": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0-beta.51.tgz", - "integrity": "sha1-mXIqPAxwRZavsSMoSwqIihoAPYI=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0-rc.1.tgz", + "integrity": "sha512-QXnTXVefioGuXlRMn+MnKKUHwhmdXGKnMvFI1tdHioMnBQEbEHGnmp+aYcddLwJ3KAH/hveaSR95BuWwprW+TA==", "dev": true, "requires": { - "lodash": "^4.17.5" + "lodash": "^4.17.10" } }, "@babel/helper-remap-async-to-generator": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.0.0-beta.51.tgz", - "integrity": "sha1-DtxX4F3LXd4qC27m+NAmGYLe8l8=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.0.0-rc.1.tgz", + "integrity": "sha512-skROQSC2fPwmrzAEPT/M7CObnWjJGpdbNLoICZDYHwDiUDe3dk5cQsU9j3tNlBhX14FaC9SjSpCJnSRpXDOWOw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "7.0.0-beta.51", - "@babel/helper-wrap-function": "7.0.0-beta.51", - "@babel/template": "7.0.0-beta.51", - "@babel/traverse": "7.0.0-beta.51", - "@babel/types": "7.0.0-beta.51" + "@babel/helper-annotate-as-pure": "7.0.0-rc.1", + "@babel/helper-wrap-function": "7.0.0-rc.1", + "@babel/template": "7.0.0-rc.1", + "@babel/traverse": "7.0.0-rc.1", + "@babel/types": "7.0.0-rc.1" } }, "@babel/helper-replace-supers": { @@ -387,52 +386,52 @@ } }, "@babel/helper-simple-access": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.0.0-beta.51.tgz", - "integrity": "sha1-ydf+zYShgdUKOvzEIvyUqWi+MFA=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.0.0-rc.1.tgz", + "integrity": "sha512-mfrHVSG0Dw51ajyL3Ltz+gEYrWAy4+Kl8lb1V/QWR31H7ovha6vNZ4guev/lR4KFu+4hMHogpjh4HB4AShqeMQ==", "dev": true, "requires": { - "@babel/template": "7.0.0-beta.51", - "@babel/types": "7.0.0-beta.51", - "lodash": "^4.17.5" + "@babel/template": "7.0.0-rc.1", + "@babel/types": "7.0.0-rc.1", + "lodash": "^4.17.10" } }, "@babel/helper-split-export-declaration": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.51.tgz", - "integrity": "sha1-imw/ZsTSZTUvwHdIT59ugKUauXg=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-rc.1.tgz", + "integrity": "sha512-hz6QmlnaBFYt4ra8DfRLCMgrI7yfwQ13kJtufSO5dVCasxmAng2LeeQiT6H4iN5TpFONcayp5f/2mXqHH/zn/g==", "dev": true, "requires": { - "@babel/types": "7.0.0-beta.51" + "@babel/types": "7.0.0-rc.1" } }, "@babel/helper-wrap-function": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.0.0-beta.51.tgz", - "integrity": "sha1-bFFvsEQQmWTuAxwiUAqDAxOGL7E=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.0.0-rc.1.tgz", + "integrity": "sha512-LrqRD4+jEkQGVQsCRi7bPkSmYFAUd3pv9tYAC8nsr9Y0Qfus8oycqxDj60QW4dmigRKBRRbVVLr/0kMI2pk0MA==", "dev": true, "requires": { - "@babel/helper-function-name": "7.0.0-beta.51", - "@babel/template": "7.0.0-beta.51", - "@babel/traverse": "7.0.0-beta.51", - "@babel/types": "7.0.0-beta.51" + "@babel/helper-function-name": "7.0.0-rc.1", + "@babel/template": "7.0.0-rc.1", + "@babel/traverse": "7.0.0-rc.1", + "@babel/types": "7.0.0-rc.1" } }, "@babel/helpers": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.0.0-beta.51.tgz", - "integrity": "sha1-lScr4qtGNNaCBCX4klAxqSiRg5c=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.0.0-rc.1.tgz", + "integrity": "sha512-4+AkDbZ0Usr7mNH4wGX8fVx4WJzHdrcjRkJy52EIWyBAQEoKqb5HXca1VjejWtnVwaGwW7zk/h6oQ9FQPywQfA==", "dev": true, "requires": { - "@babel/template": "7.0.0-beta.51", - "@babel/traverse": "7.0.0-beta.51", - "@babel/types": "7.0.0-beta.51" + "@babel/template": "7.0.0-rc.1", + "@babel/traverse": "7.0.0-rc.1", + "@babel/types": "7.0.0-rc.1" } }, "@babel/highlight": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.51.tgz", - "integrity": "sha1-6IRK4loVlcz9QriWI7Q3bKBtIl0=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-rc.1.tgz", + "integrity": "sha512-5PgPDV6F5s69XNznTcP0za3qH7qgBkr9DVQTXfZtpF+3iEyuIZB1Mjxu52F5CFxgzQUQJoBYHVxtH4Itdb5MgA==", "dev": true, "requires": { "chalk": "^2.0.0", @@ -441,114 +440,114 @@ } }, "@babel/parser": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.0.0-beta.51.tgz", - "integrity": "sha1-J87C30Cd9gr1gnDtj2qlVAnqhvY=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.0.0-rc.1.tgz", + "integrity": "sha512-rC+bIz2eZnJlacERmJO25UAbXVZttcSxh0Px0gRGinOTzug5tL7+L9urfIdSWlv1ZzP03+f2xkOFLOxZqSsVmQ==", "dev": true }, "@babel/plugin-external-helpers": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/plugin-external-helpers/-/plugin-external-helpers-7.0.0-beta.51.tgz", - "integrity": "sha1-tHg7z5FS0VlCy+DwvKJhuEnTXJg=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-external-helpers/-/plugin-external-helpers-7.0.0-rc.1.tgz", + "integrity": "sha512-g0POypf/vBWEFmNkuwYrWoANrzOL4iSBhFtjSN+0D4BCm4jKtmY6kAOKaqjvWwj5IcqQVQEXqdRUXU0seoBF/g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.51" + "@babel/helper-plugin-utils": "7.0.0-rc.1" } }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.0.0-beta.51.tgz", - "integrity": "sha1-99aS+Uakp/ynjkM2QHoAvq+KTeo=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.0.0-rc.1.tgz", + "integrity": "sha512-ewJnWv10AFUh+Yi6axMVQKW8L1pZCm86a44m2biYtXNSyt6FyWgdRloBbR7iCviPkeurfTCVdPS61G/t5cXVkQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.51", - "@babel/helper-remap-async-to-generator": "7.0.0-beta.51", - "@babel/plugin-syntax-async-generators": "7.0.0-beta.51" + "@babel/helper-plugin-utils": "7.0.0-rc.1", + "@babel/helper-remap-async-to-generator": "7.0.0-rc.1", + "@babel/plugin-syntax-async-generators": "7.0.0-rc.1" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0-beta.51.tgz", - "integrity": "sha1-W8Rp5ebRuEpdYEa1npDKAWwghtY=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0-rc.1.tgz", + "integrity": "sha512-J9qLEkxuZrYh/mel9RA5wDrMGE7jQMOMa1XPZMysih4C0mveeQUExbAPyrVSrFQo5BXLcLIc6ccM24G9xPCCXA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.51", - "@babel/plugin-syntax-object-rest-spread": "7.0.0-beta.51" + "@babel/helper-plugin-utils": "7.0.0-rc.1", + "@babel/plugin-syntax-object-rest-spread": "7.0.0-rc.1" } }, "@babel/plugin-syntax-async-generators": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.0.0-beta.51.tgz", - "integrity": "sha1-aSGvHcPaD87d4KYQc+7Hl7jKpwc=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.0.0-rc.1.tgz", + "integrity": "sha512-2F5FYc89TCrqE/8+qFlr5jVMTHfkhEOg9JUx+GXI3inW2OfcY+J6bN8EDc8PLz84PHaR8W630YOuh2PveJu3WA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.51" + "@babel/helper-plugin-utils": "7.0.0-rc.1" } }, "@babel/plugin-syntax-dynamic-import": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.0.0-beta.51.tgz", - "integrity": "sha1-nAru9X0GeONybbFxqnPkdKJd5/I=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.0.0-rc.1.tgz", + "integrity": "sha512-9U93f+wnHLOqHYxk1pftQfvWIx4FAKce9C41ZaNPLUffr7+yE+D24rNG0KeG5/ROMbKE3so7d2Qv891ThVZtPw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.51" + "@babel/helper-plugin-utils": "7.0.0-rc.1" } }, "@babel/plugin-syntax-import-meta": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.0.0-beta.51.tgz", - "integrity": "sha1-EfleSTZJIxliJxuokXdvouxJmCM=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.0.0-rc.1.tgz", + "integrity": "sha512-pECmr/Eh3GVtzzJYKOOaTcRvNW2+IOD7M/xPONlQ65KgbpMJVygVXS3lMIrdZx2M3buQeTgLGUplq0r28zA0NA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.51" + "@babel/helper-plugin-utils": "7.0.0-rc.1" } }, "@babel/plugin-syntax-object-rest-spread": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0-beta.51.tgz", - "integrity": "sha1-bVehGcHwZMRY5FutRb7wqD7RDAA=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0-rc.1.tgz", + "integrity": "sha512-stOESgG+lc68DSFvXrqoH5dW91ZtedDoR40g9wJ1ruLahCdr9X5hVLv/ddf/g/1zzjevq59A1Q+xdUREhEnrvQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.51" + "@babel/helper-plugin-utils": "7.0.0-rc.1" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.0.0-beta.51.tgz", - "integrity": "sha1-KbnbbjhoigbsXCVjmZbYml6/2+M=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.0.0-rc.1.tgz", + "integrity": "sha512-9JnWkl+iKmjNgMFrLjfGJQm3f66SJxwaYjdsm49Vpvo9x7ADHMGMZYa5Yto9WNQBlIdtf+fhypwBcz6IPxdyvg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.51" + "@babel/helper-plugin-utils": "7.0.0-rc.1" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.0.0-beta.51.tgz", - "integrity": "sha1-lFOFBVoubTVmv1WvEnyNclzToXM=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.0.0-rc.1.tgz", + "integrity": "sha512-8oE9Frx07ILINop9hOejXgcDVhmt4FuB3ZjXnIMcSMkAuiT3xLrxFMDo1Qo0kf5mty2jLlnOO6tbbH0kiIWxWA==", "dev": true, "requires": { - "@babel/helper-module-imports": "7.0.0-beta.51", - "@babel/helper-plugin-utils": "7.0.0-beta.51", - "@babel/helper-remap-async-to-generator": "7.0.0-beta.51" + "@babel/helper-module-imports": "7.0.0-rc.1", + "@babel/helper-plugin-utils": "7.0.0-rc.1", + "@babel/helper-remap-async-to-generator": "7.0.0-rc.1" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0-beta.51.tgz", - "integrity": "sha1-IxKbr4FEcfOeqU7shKsf/nbJ/pY=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0-rc.1.tgz", + "integrity": "sha512-dFEgZqmyWXaVYrFU11IgLX8M1+gK7GSU+CVRv42D7P1FFMNndg1u36jXIa7URExEuTeTUykLM/IWgk5pHWxo6A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.51" + "@babel/helper-plugin-utils": "7.0.0-rc.1" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.0.0-beta.51.tgz", - "integrity": "sha1-vlVcefDaTrFop/4W14eppxc3AeA=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.0.0-rc.1.tgz", + "integrity": "sha512-9uGwvSqJcmcKPEkLHA7ffrG0lKXTXprupwGjEKDw27OoRWXHdWUmA4VwpuzMrUsYyV+q+P6mgj6TPzoGJA3fAw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.51", - "lodash": "^4.17.5" + "@babel/helper-plugin-utils": "7.0.0-rc.1", + "lodash": "^4.17.10" } }, "@babel/plugin-transform-classes": { @@ -636,251 +635,251 @@ } }, "@babel/plugin-transform-computed-properties": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0-beta.51.tgz", - "integrity": "sha1-jHKhqz4HZwNP+eZzLSWBwjwDLv4=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0-rc.1.tgz", + "integrity": "sha512-dfJNqbyF6S8nvFzGc6NthqCqopn1PoY3q2E1KcgrFSgxwYAMOLuhu5eA5iFeXwggp6tIo6OVVXC55/Twsolmow==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.51" + "@babel/helper-plugin-utils": "7.0.0-rc.1" } }, "@babel/plugin-transform-destructuring": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.0.0-beta.51.tgz", - "integrity": "sha1-1dRU5XTH7zPuSekYsEivspvpNfY=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.0.0-rc.1.tgz", + "integrity": "sha512-YpuGA3cj5+gRD053nWtogo+3wxc10mNAAyf5syXXCVS/cOWpRjc3qPidzHtPodz+v8TgAwwaXwIz/ghLOojRQw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.51" + "@babel/helper-plugin-utils": "7.0.0-rc.1" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.0.0-beta.51.tgz", - "integrity": "sha1-VB6vipfRSpgJs1nY9UgAHwhbm38=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.0.0-rc.1.tgz", + "integrity": "sha512-cWyoUi1izJk5JbWFG07GZrZyZgG+DW4axPKI0MA+lSAxjP8VZwFUhJyjT7R4bGN81KTVv1aprKclQnKxN2R0Lw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.51" + "@babel/helper-plugin-utils": "7.0.0-rc.1" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.0.0-beta.51.tgz", - "integrity": "sha1-BLTj5As3AREt1u2jliUTJ1eIH9Q=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.0.0-rc.1.tgz", + "integrity": "sha512-5lc0nlX8TPdkHSIX3/3jMtqvvJfzcARcev4qqsaVkXWQ6XNrNnD8ExyTEVgoGhr5Ppz1wA0ymAK8W33uGeKSOg==", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "7.0.0-beta.51", - "@babel/helper-plugin-utils": "7.0.0-beta.51" + "@babel/helper-builder-binary-assignment-operator-visitor": "7.0.0-rc.1", + "@babel/helper-plugin-utils": "7.0.0-rc.1" } }, "@babel/plugin-transform-for-of": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.0.0-beta.51.tgz", - "integrity": "sha1-RPR2sGxANVF6hAOiYk+xZMQ3FFU=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.0.0-rc.1.tgz", + "integrity": "sha512-v09o2ywKHu+b/vkLknjKPV9QXCxuU2cVFxkWhBqcKwl3ERe3clhiab7a/8T9Sc332o4Im6n/LLugKMtpfxqRsQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.51" + "@babel/helper-plugin-utils": "7.0.0-rc.1" } }, "@babel/plugin-transform-function-name": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.0.0-beta.51.tgz", - "integrity": "sha1-cGU8NgtTJUJG9GWexFCwwKVthqo=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.0.0-rc.1.tgz", + "integrity": "sha512-MiUORPQo3kvSCYBn/T6kKIfdDKqFAnEsaiRnTz36Y6M/p6NX7br5MgqPumVNgDboYKQ9kzaFNM8YJvWLcjL6SQ==", "dev": true, "requires": { - "@babel/helper-function-name": "7.0.0-beta.51", - "@babel/helper-plugin-utils": "7.0.0-beta.51" + "@babel/helper-function-name": "7.0.0-rc.1", + "@babel/helper-plugin-utils": "7.0.0-rc.1" } }, "@babel/plugin-transform-instanceof": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-instanceof/-/plugin-transform-instanceof-7.0.0-beta.51.tgz", - "integrity": "sha1-ft1hag3njWuvU0NgpHWGWQbt6Zk=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-instanceof/-/plugin-transform-instanceof-7.0.0-rc.1.tgz", + "integrity": "sha512-AZc7Ln5Rk3TAPQ3tkuuqL7/p1cUHoVEXBLX19xNXL+pauQ+vllpEcAQdkugkuojZ5KNmBYNRKoGf9oRSxixwDQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.51" + "@babel/helper-plugin-utils": "7.0.0-rc.1" } }, "@babel/plugin-transform-literals": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0-beta.51.tgz", - "integrity": "sha1-RbB6lCI8+iJnAaeUYLQrMt8d7AU=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0-rc.1.tgz", + "integrity": "sha512-iI468X7shsmB/oIPi8+UfMcOpcQPEsMAz5hDc0H8dKBGUWbPcAlyQpC8CaNDZ7y1/7lK65wtvXs5OGTQd3OsJg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.51" + "@babel/helper-plugin-utils": "7.0.0-rc.1" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.0.0-beta.51.tgz", - "integrity": "sha1-9oqL5/ZRd9JGUGo5FNrk1m5nWh8=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.0.0-rc.1.tgz", + "integrity": "sha512-xKIF2ZAFOZRgIhEeW6zuyieyqfjft59NaHvb2C7+N9omdFDVkrx5ZeHVLb8y163a3mUb2MqJg1PLfZXdwvz1EA==", "dev": true, "requires": { - "@babel/helper-module-transforms": "7.0.0-beta.51", - "@babel/helper-plugin-utils": "7.0.0-beta.51" + "@babel/helper-module-transforms": "7.0.0-rc.1", + "@babel/helper-plugin-utils": "7.0.0-rc.1" } }, "@babel/plugin-transform-object-super": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.0.0-beta.51.tgz", - "integrity": "sha1-rBjoi8HXm3GL2vSKdWgzzfW9zr8=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.0.0-rc.1.tgz", + "integrity": "sha512-mwoid0Rx+L55NupRE9xs1JAgFRz0JIYS/JR0aqBlLOQwBY1KrbrAtQfNwHQobwZrP9O24VBRfViMsiYLh/UV4A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.51", - "@babel/helper-replace-supers": "7.0.0-beta.51" + "@babel/helper-plugin-utils": "7.0.0-rc.1", + "@babel/helper-replace-supers": "7.0.0-rc.1" }, "dependencies": { "@babel/helper-optimise-call-expression": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0-beta.51.tgz", - "integrity": "sha1-IfIVjvCDoSPOHgRmW1u4TzcAgNc=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0-rc.1.tgz", + "integrity": "sha512-XOKPnL/AJz8ZyY553FsMAVt9g/mE1+RQfg5/m3X0K4+RqYviPGZlxwe5mGSd8s2kPSB6D6nZRUfvZFtmFIXEvA==", "dev": true, "requires": { - "@babel/types": "7.0.0-beta.51" + "@babel/types": "7.0.0-rc.1" } }, "@babel/helper-replace-supers": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.0.0-beta.51.tgz", - "integrity": "sha1-J5phr7hJR2xsxw1VGfg99KdP+m8=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.0.0-rc.1.tgz", + "integrity": "sha512-mcv+NKCazZfdEw7yBe/xROekR3qlFcy18d//mJTKnZb7xx2qFPjZAafkeIlpvzNHwd/WMTHShC4+3WjOL8FD5g==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "7.0.0-beta.51", - "@babel/helper-optimise-call-expression": "7.0.0-beta.51", - "@babel/traverse": "7.0.0-beta.51", - "@babel/types": "7.0.0-beta.51" + "@babel/helper-member-expression-to-functions": "7.0.0-rc.1", + "@babel/helper-optimise-call-expression": "7.0.0-rc.1", + "@babel/traverse": "7.0.0-rc.1", + "@babel/types": "7.0.0-rc.1" } } } }, "@babel/plugin-transform-parameters": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.0.0-beta.51.tgz", - "integrity": "sha1-mQGVsd/bG8yUkG8wNJUQie0e3U4=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.0.0-rc.1.tgz", + "integrity": "sha512-PKjm+xf23XvdP0WRj/fIiP3xa5DYOg6qd0150Mpu4JvCIci6vrWvkc+kU9RtwkXLycWRfzdSnnyuSZABxPAP8A==", "dev": true, "requires": { - "@babel/helper-call-delegate": "7.0.0-beta.51", - "@babel/helper-get-function-arity": "7.0.0-beta.51", - "@babel/helper-plugin-utils": "7.0.0-beta.51" + "@babel/helper-call-delegate": "7.0.0-rc.1", + "@babel/helper-get-function-arity": "7.0.0-rc.1", + "@babel/helper-plugin-utils": "7.0.0-rc.1" } }, "@babel/plugin-transform-regenerator": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0-beta.51.tgz", - "integrity": "sha1-U28NWZ0nU9ygor6KZeLCRKe1YSs=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0-rc.1.tgz", + "integrity": "sha512-a73XZOJGt0Ft8/YbRAUl0Vs1GuPpjB6QVQNYPxWUNXblSiywhkkZxLssHZnao2xTD26kLRfMoXfOtj9FMz5fcw==", "dev": true, "requires": { - "regenerator-transform": "^0.12.4" + "regenerator-transform": "^0.13.3" } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0-beta.51.tgz", - "integrity": "sha1-3bwLGuHds7z+aWnyyWgQPxHjK9k=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0-rc.1.tgz", + "integrity": "sha512-NkUsTSKL8txvPt9vtdkcbJEyiUtcSOAr6ZnAE+Vg4mB0hYI0sWEJCAzl26KDDFgdVSKJSAaenjX5UR3BAF3KaA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.51" + "@babel/helper-plugin-utils": "7.0.0-rc.1" } }, "@babel/plugin-transform-spread": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0-beta.51.tgz", - "integrity": "sha1-EAEpvI19z0vHmtzWEppCFCWdilA=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0-rc.1.tgz", + "integrity": "sha512-/3EkUVVi55i/JCbL2CxXTaoCXCopj3qQMTZ0lvgtpepx1yAMpoHYFBNWLIuQmjG7JhDauOwEdBg8TRsneYRmmw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.51" + "@babel/helper-plugin-utils": "7.0.0-rc.1" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0-beta.51.tgz", - "integrity": "sha1-SMvqzTG9Be6AC1+svLCcV4G9lhk=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0-rc.1.tgz", + "integrity": "sha512-sXPFGI3GTtSMxVTDwrRmgwmUcq+l0ovzUZFfAd4YK1zJQ7YQCaCjcmLskuiGM20SoteYserDADg0SrLw+8B8hA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.51", - "@babel/helper-regex": "7.0.0-beta.51" + "@babel/helper-plugin-utils": "7.0.0-rc.1", + "@babel/helper-regex": "7.0.0-rc.1" } }, "@babel/plugin-transform-template-literals": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0-beta.51.tgz", - "integrity": "sha1-LQWV9WRh1DRbo1w41zAz+H7Lu8g=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0-rc.1.tgz", + "integrity": "sha512-xq9eSNA65VXbMmVEjKUXB0czP8y/CRs88S8HcwZbJ7XGo4FARUJV3aGQfIPvGUmbkQegsxZx5rlTPlw3NPl+Aw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "7.0.0-beta.51", - "@babel/helper-plugin-utils": "7.0.0-beta.51" + "@babel/helper-annotate-as-pure": "7.0.0-rc.1", + "@babel/helper-plugin-utils": "7.0.0-rc.1" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.0.0-beta.51.tgz", - "integrity": "sha1-SVDAyOPJ4eFB5Fzrq15hSCYyBMM=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.0.0-rc.1.tgz", + "integrity": "sha512-wUKNscuv3WOOFy3tGOBeayeOLyZjixjOSvb0QNXrCDRuENhfPaFQjZt/T0UDAZN0mXvAQ7Ksx2pOtXBsyIBxUA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.51" + "@babel/helper-plugin-utils": "7.0.0-rc.1" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0-beta.51.tgz", - "integrity": "sha1-kBn5FQj0C1CmRDUEMijEFCws2GQ=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0-rc.1.tgz", + "integrity": "sha512-3yz7ehk0VFLqoKVV1GbTdH2sfMtYznhllkBDtnybveM6MeFA5WYCf6iWf+I/vF/8QIMDd1b4359GGWKCI+KuIQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.51", - "@babel/helper-regex": "7.0.0-beta.51", + "@babel/helper-plugin-utils": "7.0.0-rc.1", + "@babel/helper-regex": "7.0.0-rc.1", "regexpu-core": "^4.1.3" } }, "@babel/template": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.51.tgz", - "integrity": "sha1-lgKkCuvPNXrpZ34lMu9fyBD1+/8=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-rc.1.tgz", + "integrity": "sha512-gPLng2iedNlkaGD0UdwaUByQXK8k4bnaoq2RH5JgR2mqHvh2RyjkDdaMbZFlSss1Iu8+PrXwbIRworTl8iRqbA==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0-beta.51", - "@babel/parser": "7.0.0-beta.51", - "@babel/types": "7.0.0-beta.51", - "lodash": "^4.17.5" + "@babel/code-frame": "7.0.0-rc.1", + "@babel/parser": "7.0.0-rc.1", + "@babel/types": "7.0.0-rc.1", + "lodash": "^4.17.10" } }, "@babel/traverse": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.51.tgz", - "integrity": "sha1-mB2vLOw0emIx06odnhgDsDqqpKg=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-rc.1.tgz", + "integrity": "sha512-lNOpJ5xzakg+fCobQQHdeDRYeN54b+bAZpeTYMeeYPAvN+hTldg9/FSNKYEMRs5EWoQ0Yt74gwq98InSORdSDQ==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0-beta.51", - "@babel/generator": "7.0.0-beta.51", - "@babel/helper-function-name": "7.0.0-beta.51", - "@babel/helper-split-export-declaration": "7.0.0-beta.51", - "@babel/parser": "7.0.0-beta.51", - "@babel/types": "7.0.0-beta.51", + "@babel/code-frame": "7.0.0-rc.1", + "@babel/generator": "7.0.0-rc.1", + "@babel/helper-function-name": "7.0.0-rc.1", + "@babel/helper-split-export-declaration": "7.0.0-rc.1", + "@babel/parser": "7.0.0-rc.1", + "@babel/types": "7.0.0-rc.1", "debug": "^3.1.0", "globals": "^11.1.0", - "invariant": "^2.2.0", - "lodash": "^4.17.5" + "lodash": "^4.17.10" } }, "@babel/types": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.51.tgz", - "integrity": "sha1-2AK3tUO1g2x3iqaReXq/APPZfqk=", + "version": "7.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-rc.1.tgz", + "integrity": "sha512-MBwO1JQKin9BwKTGydrYe4VDJbStCUy35IhJzeZt3FByOdx/q3CYaqMRrH70qVD2RA7+Xk8e3RN0mzKZkYBYuQ==", "dev": true, "requires": { "esutils": "^2.0.2", - "lodash": "^4.17.5", + "lodash": "^4.17.10", "to-fast-properties": "^2.0.0" } }, "@polymer/esm-amd-loader": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@polymer/esm-amd-loader/-/esm-amd-loader-1.0.1.tgz", - "integrity": "sha512-yqa8Go1CJ07sTdjYXzl4cBa9W4MoTdwF1We94P/nENWCCVWMItWQmUKmKEpQBJOYWd6DZSgEOdVEXa4HS2QAkA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@polymer/esm-amd-loader/-/esm-amd-loader-1.0.2.tgz", + "integrity": "sha512-n45zYqDfZUKBiM+Nj0jU6An2xEP5avKKdsl8ecgh2PbA0I0lamEExs0BmHfD4Br+lJDNbbDEVsUMDlrqNqcceg==", "dev": true }, "@polymer/polymer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@polymer/polymer/-/polymer-3.0.2.tgz", - "integrity": "sha512-ow8AAjTe9ps8bantY9IvL0PT+xHf5VN3Cjahfr7gBJAc0lv3jTwGBv7pso65SHyrUJEEHeakhx6iPMl7qY4tfw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@polymer/polymer/-/polymer-3.0.5.tgz", + "integrity": "sha512-Zbmhtr5vZ3NoHWwFYLKI4ff7yfE6DZopI8vaS7HvmUIuNqsv/EpEDXfNEYjqePQmkMX5LU9OIKV1eX/+9aveow==", + "dev": true, "requires": { "@webcomponents/shadycss": "^1.2.0" } @@ -892,9 +891,9 @@ "dev": true }, "@polymer/test-fixture": { - "version": "3.0.0-pre.19", - "resolved": "https://registry.npmjs.org/@polymer/test-fixture/-/test-fixture-3.0.0-pre.19.tgz", - "integrity": "sha512-oyltfPEEPF8gzLxSv/CjieO9n0Uani567pcpmAk3IZeOMsFh9OFddZDYCwKx1e9I6lFe9557MaxQHM7EGhLaOQ==", + "version": "3.0.0-pre.21", + "resolved": "https://registry.npmjs.org/@polymer/test-fixture/-/test-fixture-3.0.0-pre.21.tgz", + "integrity": "sha512-IxzUe6YzaORzUksafHAXHprV29YncOJgr0+1zNAifl0/f+cb5iAd4IWUrnsnVFHG5UGTLjvis5RgV6vvIZPDrA==", "dev": true }, "@types/acorn": { @@ -940,9 +939,9 @@ } }, "@types/bluebird": { - "version": "3.5.20", - "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.20.tgz", - "integrity": "sha512-Wk41MVdF+cHBfVXj/ufUHJeO3BlIQr1McbHZANErMykaCWeDSZbH5erGjNBw2/3UlRdSxZbLfSuQTzFmPOYFsA==", + "version": "3.5.23", + "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.23.tgz", + "integrity": "sha512-xlehmc6RT+wMEhy9ZqeqmozVmuFzTfsaV2NlfFFWhigy7n6sjMbUUB+SZBWK78lZgWHA4DBAdQvQxUvcB8N1tw==", "dev": true }, "@types/body-parser": { @@ -1112,9 +1111,9 @@ } }, "@types/handlebars": { - "version": "4.0.38", - "resolved": "https://registry.npmjs.org/@types/handlebars/-/handlebars-4.0.38.tgz", - "integrity": "sha512-oMzU0D7jDp+H2go/i0XqBHfr+HEhYD/e1TvkhHi3yrhQm/7JFR8FJMdvoH76X8G1FBpgc6Pwi+QslCJBeJ1N9g==", + "version": "4.0.39", + "resolved": "https://registry.npmjs.org/@types/handlebars/-/handlebars-4.0.39.tgz", + "integrity": "sha512-vjaS7Q0dVqFp85QhyPSZqDKnTTCemcSHNHFvDdalO1s0Ifz5KuE64jQD5xoUkfdWwF4WpqdJEl7LsWH8rzhKJA==", "dev": true }, "@types/highlight.js": { @@ -1148,9 +1147,9 @@ "optional": true }, "@types/lodash": { - "version": "4.14.109", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.109.tgz", - "integrity": "sha512-hop8SdPUEzbcJm6aTsmuwjIYQo1tqLseKCM+s2bBqTU2gErwI4fE+aqUVOlscPSQbKHKgtMMPoC+h4AIGOJYvw==", + "version": "4.14.116", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.116.tgz", + "integrity": "sha512-lRnAtKnxMXcYYXqOiotTmJd74uawNWuPnsnPrrO7HiFuE3npE2iQhfABatbYDyxTNqZNuXzcKGhw37R7RjBFLg==", "dev": true }, "@types/marked": { @@ -1160,9 +1159,9 @@ "dev": true }, "@types/mime": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-0.0.29.tgz", - "integrity": "sha1-+8/TMFc7kS71nu7hRgK/rOYwdUs=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.0.tgz", + "integrity": "sha512-A2TAGbTFdBw9azHbpVd+/FkdW2T6msN1uct1O9bH3vTerEHKZhTXJUQXy+hNq1B0RagfU8U+KBdqiZpxjhOUQA==", "dev": true }, "@types/minimatch": { @@ -1172,9 +1171,9 @@ "dev": true }, "@types/mocha": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.2.tgz", - "integrity": "sha512-tfg9rh2qQhBW6SBqpvfqTgU6lHWGhQURoTrn7NeDF+CEkO9JGYbkzU23EXu6p3bnvDxLeeSX8ohAA23urvWeNw==", + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.5.tgz", + "integrity": "sha512-lAVp+Kj54ui/vLUFxsJTMtWvZraZxum3w3Nwkble2dNuV5VnPA+Mi2oGX9XYJAaIvZi3tn3cbjS/qcJXRb6Bww==", "dev": true }, "@types/mz": { @@ -1188,9 +1187,9 @@ } }, "@types/node": { - "version": "10.3.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.3.3.tgz", - "integrity": "sha512-/gwCgiI2e9RzzZTKbl+am3vgNqOt7a9fJ/uxv4SqYKxenoEDNVU3KZEadlpusWhQI0A0dOrZ0T68JYKVjzmgdQ==", + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.7.0.tgz", + "integrity": "sha512-dmYIvoQEZWnyQfgrwPCoxztv/93NYQGEiOoQhuI56rJahv9de6Q2apZl3bufV46YJ0OAXdaktIuw4RIRl4DTeA==", "dev": true }, "@types/opn": { @@ -1280,9 +1279,9 @@ "dev": true }, "@types/uglify-js": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.0.2.tgz", - "integrity": "sha512-o8hU2+4xsyGC27Vujoklvxl88Ew5zmJuTBYMX1Uro2rYUt4HEFJKL6fuq8aGykvS+ssIsIzerWWP2DRxonownQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.0.3.tgz", + "integrity": "sha512-MAT0BW2ruO0LhQKjvlipLGCF/Yx0y/cj+tT67tK3QIQDrM2+9R78HgJ54VlrE8AbfjYJJBCQCEPM5ZblPVTuww==", "dev": true, "requires": { "source-map": "^0.6.1" @@ -1315,11 +1314,12 @@ } }, "@types/vinyl-fs": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/@types/vinyl-fs/-/vinyl-fs-2.4.8.tgz", - "integrity": "sha512-yE2pN9OOrxJVeO7IZLHAHrh5R4Q0osbn5WQRuQU6GdXoK7dNFrMK3K7YhATkzf3z0yQBkol3+gafs7Rp0s7dDg==", + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/@types/vinyl-fs/-/vinyl-fs-2.4.9.tgz", + "integrity": "sha512-Q0EXd6c1fORjiOuK4ZaKdfFcMyFzJlTi56dqktwaWVLIDAzE49wUs3bKnYbZwzyMWoH+NcMWnRuR73S9A0jnRA==", "dev": true, "requires": { + "@types/events": "*", "@types/glob-stream": "*", "@types/node": "*", "@types/vinyl": "*" @@ -1342,23 +1342,24 @@ "optional": true }, "@types/winston": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.9.tgz", - "integrity": "sha512-zzruYOEtNgfS3SBjcij1F6HlH6My5n8WrBNhP3fzaRM22ba70QBC2ATs18jGr88Fy43c0z8vFJv5wJankfxv2A==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.4.4.tgz", + "integrity": "sha512-BVGCztsypW8EYwJ+Hq+QNYiT/MUyCif0ouBH+flrY66O5W+KIXAMML6E/0fJpm7VjIzgangahl5S03bJJQGrZw==", "dev": true, "requires": { - "@types/node": "*" + "winston": "*" } }, "@webcomponents/shadycss": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@webcomponents/shadycss/-/shadycss-1.3.0.tgz", - "integrity": "sha512-xw8WHLmICuB+BzdFLoKnyfL94+RqYMQSpzqmkEIL4B0CZ8vganMbzhYNC1BN/EoLby4TbuS4YVTt8vydwbtGPQ==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@webcomponents/shadycss/-/shadycss-1.4.0.tgz", + "integrity": "sha512-/OK+M06S9YbnTXAHm1QtHhONo0msBej/V84x3ZpSV+sJa1jp/FfOv0mW0IWdluU94QlVrPnJxK2t+Czggfivig==", + "dev": true }, "@webcomponents/webcomponentsjs": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@webcomponents/webcomponentsjs/-/webcomponentsjs-2.0.2.tgz", - "integrity": "sha512-+3515t7jnWsx+mNRECwXbjXBM0DLCNB4uH4DSIbu7akIJn0tO2GZuLvZeBhXbRFQLfohN+2ZTWT44A6EtPhVqA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@webcomponents/webcomponentsjs/-/webcomponentsjs-2.1.0.tgz", + "integrity": "sha512-uc48x6iWiZvfrSc2nhivTIMWpUop+PGbJrH+npVMY0CBeOkUx/I5CUGh1zOVBdLdn0597EM/IKribcCrbtQSQg==", "dev": true }, "accepts": { @@ -1378,9 +1379,9 @@ "dev": true }, "acorn": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.6.2.tgz", - "integrity": "sha512-zUzo1E5dI2Ey8+82egfnttyMlMZ2y0D8xOCO3PNPPlYXpl8NZvF6Qk9L9BEtJs+43FqEmfBViDqc5d1ckRDguw==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz", + "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==", "dev": true }, "acorn-import-meta": { @@ -1423,9 +1424,9 @@ "dev": true }, "agent-base": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.0.tgz", - "integrity": "sha512-c+R/U5X+2zz2+UCrCFv6odQzJdoqI+YecuhnAJLa1zYaMc13zPfwMwZrr91Pd1DYNo/yPRbiM4WVf9whgwFsIg==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", "dev": true, "optional": true, "requires": { @@ -1470,15 +1471,6 @@ "string-width": "^2.0.0" } }, - "ansi-escape-sequences": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-3.0.0.tgz", - "integrity": "sha1-HBg5S2r5t2/5pjUJ+kl2af0s5T4=", - "dev": true, - "requires": { - "array-back": "^1.0.3" - } - }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", @@ -1503,6 +1495,12 @@ "integrity": "sha1-bdxY+gg8e8VF08WZWygwzCNm1Eo=", "dev": true }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, "archiver": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/archiver/-/archiver-2.1.1.tgz", @@ -1594,6 +1592,42 @@ } } }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -1611,37 +1645,6 @@ "requires": { "array-back": "^2.0.0", "find-replace": "^2.0.1" - }, - "dependencies": { - "array-back": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", - "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", - "dev": true, - "requires": { - "typical": "^2.6.1" - } - }, - "find-replace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz", - "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==", - "dev": true, - "requires": { - "array-back": "^2.0.0", - "test-value": "^3.0.0" - } - }, - "test-value": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz", - "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==", - "dev": true, - "requires": { - "array-back": "^2.0.0", - "typical": "^2.6.1" - } - } } }, "arr-diff": { @@ -1663,12 +1666,12 @@ "dev": true }, "array-back": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", - "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", + "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", "dev": true, "requires": { - "typical": "^2.6.0" + "typical": "^2.6.1" } }, "array-find-index": { @@ -1695,17 +1698,14 @@ "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", "dev": true }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true - }, "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } }, "assert-plus": { "version": "1.0.0", @@ -1744,9 +1744,9 @@ "dev": true }, "atob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", - "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, "aws-sign2": { @@ -1756,9 +1756,9 @@ "dev": true }, "aws4": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", - "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", "dev": true }, "babel-code-frame": { @@ -2231,8 +2231,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.0.tgz", "integrity": "sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE=", - "dev": true, - "optional": true + "dev": true }, "base64id": { "version": "1.0.0", @@ -2241,9 +2240,9 @@ "dev": true }, "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, "optional": true, "requires": { @@ -2414,10 +2413,20 @@ } } }, + "brotli-size": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/brotli-size/-/brotli-size-0.0.2.tgz", + "integrity": "sha512-8Fblpr9EX6ySFNBLPhcv1j6Y7nQLStdWnzxzGOrjyFilrN/HA5Hmv9xYVwQ+dCqHgPSnWg26tYxg67IbBqTh5g==", + "dev": true, + "requires": { + "duplexer": "^0.1.1", + "iltorb": "^2.0.5" + } + }, "browser-capabilities": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/browser-capabilities/-/browser-capabilities-1.1.0.tgz", - "integrity": "sha512-D0AhTybfR0KbVxy1DShQut4eCeluMyJhbTgVTIxvItJKzEGG9pNvOBFZfpeCASo2z0XdfczuvSfNZe/vmNlqwQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/browser-capabilities/-/browser-capabilities-1.1.2.tgz", + "integrity": "sha512-T9BTu9Lmdrh9XZe0XnUY3jGiBlB0jAkl4M9qvt+1SszqlckgcUTzJuBwD6HNNKjdiDA+18KfiIUJEVxTY2W24g==", "dev": true, "requires": { "@types/ua-parser-js": "^0.7.31", @@ -2440,6 +2449,16 @@ "https-proxy-agent": "^2.2.1" } }, + "buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.0.tgz", + "integrity": "sha512-nUJyfChH7PMJy75eRDCCKtszSEFokUNXC1hNVSe+o+VdcgvDPLs20k3v8UXI8ruRYAJiYtyRea8mYyqPxoHWDw==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, "buffer-alloc": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", @@ -2469,9 +2488,9 @@ "dev": true }, "buffer-from": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", - "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, "builtin-modules": { @@ -2642,10 +2661,16 @@ "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", "dev": true }, + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", + "dev": true + }, "ci-info": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.3.tgz", - "integrity": "sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.4.0.tgz", + "integrity": "sha512-Oqmw2pVfCl8sCL+1QgMywPfdxPJPkC51y4usw0iiE2S9qnEOAqXy8bwl1CpMpnoU39g4iKJTz6QZj+28FvOnjQ==", "dev": true }, "class-utils": { @@ -2672,18 +2697,18 @@ } }, "clean-css": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz", - "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", + "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", "dev": true, "requires": { - "source-map": "0.5.x" + "source-map": "~0.6.0" }, "dependencies": { "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } @@ -2722,9 +2747,9 @@ } }, "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", "dev": true }, "clone-stats": { @@ -2739,6 +2764,12 @@ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", @@ -2780,28 +2811,28 @@ } }, "command-line-args": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-3.0.5.tgz", - "integrity": "sha1-W9StReeYPlwTRJGOQCgO4mk8WsA=", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz", + "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==", "dev": true, "requires": { - "array-back": "^1.0.4", - "feature-detect-es6": "^1.3.1", - "find-replace": "^1.0.2", - "typical": "^2.6.0" + "argv-tools": "^0.1.1", + "array-back": "^2.0.0", + "find-replace": "^2.0.1", + "lodash.camelcase": "^4.3.0", + "typical": "^2.6.1" } }, "command-line-usage": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-3.0.8.tgz", - "integrity": "sha1-tqIJeMGzg0d/XBGlKUKLiAv+D00=", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.5.tgz", + "integrity": "sha512-d8NrGylA5oCXSbGoKz05FkehDAzSmIm4K03S5VDh4d5lZAtTWfc3D1RuETtuQCn8129nYfJfDdF7P/lwcz1BlA==", "dev": true, "requires": { - "ansi-escape-sequences": "^3.0.0", - "array-back": "^1.0.3", - "feature-detect-es6": "^1.3.1", - "table-layout": "^0.3.0", - "typical": "^2.6.0" + "array-back": "^2.0.0", + "chalk": "^2.4.1", + "table-layout": "^0.4.3", + "typical": "^2.6.1" } }, "commander": { @@ -2873,28 +2904,20 @@ "dev": true, "requires": { "mime-db": ">= 1.34.0 < 2" - }, - "dependencies": { - "mime-db": { - "version": "1.34.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.34.0.tgz", - "integrity": "sha1-RS0Oz/XDA0am3B5kseruDTcZ/5o=", - "dev": true - } } }, "compression": { - "version": "1.7.2", - "resolved": "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz", - "integrity": "sha1-qv+81qr4VLROuygDU9WtFlH1mmk=", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", + "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", "dev": true, "requires": { - "accepts": "~1.3.4", + "accepts": "~1.3.5", "bytes": "3.0.0", - "compressible": "~2.0.13", + "compressible": "~2.0.14", "debug": "2.6.9", "on-headers": "~1.0.1", - "safe-buffer": "5.1.1", + "safe-buffer": "5.1.2", "vary": "~1.1.2" }, "dependencies": { @@ -2906,6 +2929,12 @@ "requires": { "ms": "2.0.0" } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true } } }, @@ -2967,6 +2996,12 @@ "xdg-basedir": "^3.0.0" } }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, "content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", @@ -3032,10 +3067,13 @@ }, "dependencies": { "crc": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.5.0.tgz", - "integrity": "sha1-mLi6fUiWZbo5efWbITgTdBAaGWQ=", - "dev": true + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "dev": true, + "requires": { + "buffer": "^5.1.0" + } }, "readable-stream": { "version": "2.3.6", @@ -3126,91 +3164,6 @@ "dom5": "^3.0.0", "parse5": "^4.0.0", "shady-css-parser": "^0.1.0" - }, - "dependencies": { - "array-back": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", - "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", - "dev": true, - "requires": { - "typical": "^2.6.1" - } - }, - "command-line-args": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz", - "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==", - "dev": true, - "requires": { - "argv-tools": "^0.1.1", - "array-back": "^2.0.0", - "find-replace": "^2.0.1", - "lodash.camelcase": "^4.3.0", - "typical": "^2.6.1" - } - }, - "command-line-usage": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.5.tgz", - "integrity": "sha512-d8NrGylA5oCXSbGoKz05FkehDAzSmIm4K03S5VDh4d5lZAtTWfc3D1RuETtuQCn8129nYfJfDdF7P/lwcz1BlA==", - "dev": true, - "requires": { - "array-back": "^2.0.0", - "chalk": "^2.4.1", - "table-layout": "^0.4.3", - "typical": "^2.6.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "find-replace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz", - "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==", - "dev": true, - "requires": { - "array-back": "^2.0.0", - "test-value": "^3.0.0" - } - }, - "table-layout": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.4.tgz", - "integrity": "sha512-uNaR3SRMJwfdp9OUr36eyEi6LLsbcTqTO/hfTsNviKsNeyMBPICJCC7QXRF3+07bAP6FRwA8rczJPBqXDc0CkQ==", - "dev": true, - "requires": { - "array-back": "^2.0.0", - "deep-extend": "~0.6.0", - "lodash.padend": "^4.6.1", - "typical": "^2.6.1", - "wordwrapjs": "^3.0.0" - } - }, - "test-value": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz", - "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==", - "dev": true, - "requires": { - "array-back": "^2.0.0", - "typical": "^2.6.1" - } - }, - "wordwrapjs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz", - "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==", - "dev": true, - "requires": { - "reduce-flatten": "^1.0.1", - "typical": "^2.6.1" - } - } } }, "cssbeautify": { @@ -3264,6 +3217,24 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "deep-assign": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-2.0.0.tgz", + "integrity": "sha1-6+BrHwfwja5ZdiDj3RYi83GhxXI=", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + }, "deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", @@ -3274,9 +3245,9 @@ } }, "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true }, "define-property": { @@ -3332,6 +3303,12 @@ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -3359,6 +3336,12 @@ "repeating": "^2.0.0" } }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true + }, "detect-node": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz", @@ -3400,12 +3383,12 @@ } }, "dom5": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz", - "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.1.tgz", + "integrity": "sha512-JPFiouQIr16VQ4dX6i0+Hpbg3H2bMKPmZ+WZgBOSSvOPx9QHwwY8sPzeM2baUtViESYto6wC2nuZOMC/6gulcA==", "dev": true, "requires": { - "@types/parse5": "^2.2.32", + "@types/parse5": "^2.2.34", "clone": "^2.1.0", "parse5": "^4.0.0" } @@ -3419,6 +3402,12 @@ "is-obj": "^1.0.0" } }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true + }, "duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", @@ -3499,13 +3488,14 @@ } }, "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, "optional": true, "requires": { - "jsbn": "~0.1.0" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, "ee-first": { @@ -3582,9 +3572,9 @@ } }, "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { "is-arrayish": "^0.2.1" @@ -3629,9 +3619,9 @@ } }, "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "esutils": { @@ -3753,6 +3743,12 @@ } } }, + "expand-template": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.1.tgz", + "integrity": "sha512-cebqLtV8KOZfw0UI8TEFWxtczxxC1jvyUvx6H4fyp1K1FN7A4Q+uggVUlOsI1K8AGU0rwOGqP8nCapdrw8CYQg==", + "dev": true + }, "expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", @@ -3907,9 +3903,9 @@ } }, "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, "extend-shallow": { @@ -4038,21 +4034,18 @@ "pend": "~1.2.0" } }, - "feature-detect-es6": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/feature-detect-es6/-/feature-detect-es6-1.4.1.tgz", - "integrity": "sha512-iMxKpKdIBgcWiBPtz2qnEsNjCE2dBQvDyUqgrXLJboiaHwJa+2vDIZ8XbgNZGh1Rx1PUfZmI7uhG6Z4iQYWVjg==", - "dev": true, - "requires": { - "array-back": "^1.0.4" - } - }, "filename-regex": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", "dev": true }, + "filesize": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", + "dev": true + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -4126,13 +4119,13 @@ } }, "find-replace": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-1.0.3.tgz", - "integrity": "sha1-uI5zZNLZyVlVnziMZmcNYTBEH6A=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz", + "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==", "dev": true, "requires": { - "array-back": "^1.0.4", - "test-value": "^2.1.0" + "array-back": "^2.0.0", + "test-value": "^3.0.0" } }, "find-up": { @@ -4164,9 +4157,9 @@ "dev": true }, "follow-redirects": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.0.tgz", - "integrity": "sha512-fdrt472/9qQ6Kgjvb935ig6vJCuofpBUD14f9Vb+SLlm7xIe4Qva5gey8EKtv8lp7ahE1wilg3xL1znpVGtZIA==", + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.6.tgz", + "integrity": "sha512-xay/eYZGgdpb3rpugZj1HunNaPcqc6fud/RW7LNEQntvKzuRO4DDLL+MnJIbTHh6t3Kda3v2RvhY2doxUddnig==", "dev": true, "requires": { "debug": "^3.1.0" @@ -4270,6 +4263,50 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, "get-func-name": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", @@ -4303,6 +4340,12 @@ "assert-plus": "^1.0.0" } }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=", + "dev": true + }, "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", @@ -4555,9 +4598,9 @@ } }, "globals": { - "version": "11.5.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.5.0.tgz", - "integrity": "sha512-hYyf+kI8dm3nORsiiXUQigOU62hDLfJ9G01uyGMxhc6BKsircrUhC4uJPQPUSuq2GrTmiiEt7ewxlMdBewfmKQ==", + "version": "11.7.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.7.0.tgz", + "integrity": "sha512-K8BNSPySfeShBQXsahYB/AbbWruVOTyVpgoIDnl8odPpeSfP2J5QO2oLFFdl2j7GfDCtZj2bMKar2T49itTPCg==", "dev": true }, "got": { @@ -4630,8 +4673,17 @@ "vinyl": "^1.0.0" } }, - "handle-thing": { - "version": "1.2.5", + "gzip-size": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz", + "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=", + "dev": true, + "requires": { + "duplexer": "^0.1.1" + } + }, + "handle-thing": { + "version": "1.2.5", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", "dev": true @@ -4731,6 +4783,12 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -4803,9 +4861,9 @@ } }, "hosted-git-info": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", - "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", "dev": true }, "hpack.js": { @@ -4847,35 +4905,25 @@ } }, "html-minifier": { - "version": "3.5.16", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.16.tgz", - "integrity": "sha512-zP5EfLSpiLRp0aAgud4CQXPQZm9kXwWjR/cF0PfdOj+jjWnOaCgeZcll4kYXSvIBPeUMmyaSc7mM4IDtA+kboA==", + "version": "3.5.20", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.20.tgz", + "integrity": "sha512-ZmgNLaTp54+HFKkONyLFEfs5dd/ZOtlquKaTnqIWFmx3Av5zG6ZPcV2d0o9XM2fXOTxxIf6eDcwzFFotke/5zA==", "dev": true, "requires": { "camel-case": "3.0.x", - "clean-css": "4.1.x", - "commander": "2.15.x", + "clean-css": "4.2.x", + "commander": "2.17.x", "he": "1.1.x", "param-case": "2.1.x", "relateurl": "0.2.x", - "uglify-js": "3.3.x" + "uglify-js": "3.4.x" }, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", "dev": true - }, - "uglify-js": { - "version": "3.3.28", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.28.tgz", - "integrity": "sha512-68Rc/aA6cswiaQ5SrE979UJcXX+ADA1z33/ZsPd+fbAiVdjZ16OXdbtGO+rJUUBgK6qdf3SOPhQf3K/ybF5Miw==", - "dev": true, - "requires": { - "commander": "~2.15.0", - "source-map": "~0.6.1" - } } } }, @@ -5035,6 +5083,24 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ieee754": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", + "dev": true + }, + "iltorb": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/iltorb/-/iltorb-2.4.0.tgz", + "integrity": "sha512-Px3k32eqlAwpS0OwiQDRUrlPNeY1JKyZvH636cRRxxhkqc5ukmfXZStNHNfRzpa3tb9EK3Nq0pIX9cXUdr+q3w==", + "dev": true, + "requires": { + "detect-libc": "^1.0.3", + "npmlog": "^4.1.2", + "prebuild-install": "^5.0.0", + "which-pm-runs": "^1.0.0" + } + }, "import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", @@ -5106,9 +5172,9 @@ } }, "ipaddr.js": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", - "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", + "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=", "dev": true }, "is-accessor-descriptor": { @@ -5142,12 +5208,12 @@ } }, "is-ci": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz", - "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.0.tgz", + "integrity": "sha512-plgvKjQtalH2P3Gytb7L61Lmz95g2DlpzFiQyRSFew8WoJKxtKRzrZMeyRN2supblm3Psc8OQGy7Xjb6XG11jw==", "dev": true, "requires": { - "ci-info": "^1.0.0" + "ci-info": "^1.3.0" } }, "is-data-descriptor": { @@ -5260,23 +5326,6 @@ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, - "is-odd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", - "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", - "dev": true, - "requires": { - "is-number": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } - } - }, "is-path-inside": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", @@ -5579,9 +5628,9 @@ } }, "lit-html": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-0.10.2.tgz", - "integrity": "sha512-ue0pIX3Fj5gUsNSozdRQIb1MAgNqFQsHgvHE/FU34xyu9NN/af3EISr7Bb+vP9YeLXIA4vLLOoYp2Z22dVYhww==" + "version": "0.11.0-dev.3", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-0.11.0-dev.3.tgz", + "integrity": "sha512-09R9oPFVSuVeQPCOkzeocquh9Ut/9zNGUzjiI8Vo4kw0pluShOZckJzO9z2PagB4/Vh2VBx/LYq1Osm8FHLovA==" }, "load-json-file": { "version": "1.1.0", @@ -5750,12 +5799,12 @@ "dev": true }, "loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "requires": { - "js-tokens": "^3.0.0" + "js-tokens": "^3.0.0 || ^4.0.0" } }, "loud-rejection": { @@ -5990,20 +6039,26 @@ "dev": true }, "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", + "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==", "dev": true }, "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "version": "2.1.19", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", + "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", "dev": true, "requires": { - "mime-db": "~1.33.0" + "mime-db": "~1.35.0" } }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -6096,14 +6151,14 @@ "dev": true }, "multer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/multer/-/multer-1.3.0.tgz", - "integrity": "sha1-CSsmcPaEb6SRSWXvyM+Uwg/sbNI=", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.3.1.tgz", + "integrity": "sha512-JHdEoxkA/5NgZRo91RNn4UT+HdcJV9XUo01DTkKC7vo1erNIngtuaw9Y0WI8RdTlyi+wMIbunflhghzVLuGJyw==", "dev": true, "requires": { "append-field": "^0.1.0", "busboy": "^0.2.11", - "concat-stream": "^1.5.0", + "concat-stream": "^1.5.2", "mkdirp": "^0.5.1", "object-assign": "^3.0.0", "on-finished": "^2.3.0", @@ -6149,9 +6204,9 @@ } }, "nanomatch": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", - "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "requires": { "arr-diff": "^4.0.0", @@ -6159,7 +6214,6 @@ "define-property": "^2.0.2", "extend-shallow": "^3.0.2", "fragment-cache": "^0.2.1", - "is-odd": "^2.0.0", "is-windows": "^1.0.2", "kind-of": "^6.0.2", "object.pick": "^1.3.0", @@ -6204,13 +6258,13 @@ "lower-case": "^1.1.1" } }, - "nodegit-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/nodegit-promise/-/nodegit-promise-4.0.0.tgz", - "integrity": "sha1-VyKxhPLfcycWEGSnkdLoQskWezQ=", + "node-abi": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.4.3.tgz", + "integrity": "sha512-b656V5C0628gOOA2kwcpNA/bxdlqYF9FvxJ+qqVX0ctdXNVZpS8J6xEUYir3WAKc7U0BH/NRlSpNbGsy+azjeg==", "dev": true, "requires": { - "asap": "~2.0.3" + "semver": "^5.4.1" } }, "nomnom": { @@ -6248,6 +6302,12 @@ } } }, + "noop-logger": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", + "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=", + "dev": true + }, "normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", @@ -6278,6 +6338,18 @@ "path-key": "^2.0.0" } }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -6608,9 +6680,9 @@ "dev": true }, "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, "path-to-regexp": { @@ -6714,9 +6786,9 @@ } }, "polymer-analyzer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.1.tgz", - "integrity": "sha512-s1fEMUeUHs7EWZQ5cxL/RL6qzDcYnkJcLeQbNvVD1qOPtxRejGeonq5xsxmb8o7mstzSYb1x0Iba2Bdbfr+PAQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.1.1.tgz", + "integrity": "sha512-h/szQRobLO/fld2BsvTsmCFwtXQRF/tQcwquBuBl7qzgodaHWdvDIOE+VmzmYzM6W9/DW637O7JaeFnbXK/IgA==", "dev": true, "requires": { "@babel/generator": "^7.0.0-beta.42", @@ -6733,7 +6805,6 @@ "@types/doctrine": "^0.0.1", "@types/is-windows": "^0.2.0", "@types/minimatch": "^3.0.1", - "@types/node": "^9.6.4", "@types/parse5": "^2.2.34", "@types/path-is-inside": "^1.0.0", "@types/resolve": "0.0.6", @@ -6765,12 +6836,6 @@ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", "dev": true }, - "@types/node": { - "version": "9.6.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.21.tgz", - "integrity": "sha512-zQS6mHzxEstR8Vvnpc3JDUCDGWnHFzMTcBu9UCZoVLuj1Uvkkk0qFKJQEhlvbsX34m3xt12ejV09eO/ljZcn7A==", - "dev": true - }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", @@ -6793,9 +6858,9 @@ } }, "polymer-build": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/polymer-build/-/polymer-build-3.0.1.tgz", - "integrity": "sha512-XnNP9M/fUbwYYOPijMK6t+o9DOjO8kpj2rm6irefA00TGfaQXHZhgPpT0zdd5xjAyAcZ4lpaLGcjIcCLY5mkgg==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/polymer-build/-/polymer-build-3.0.4.tgz", + "integrity": "sha512-YSppvctpcO2do3XHXNo2WnD4mxpzTpjgLlByPXE0Jfz9N+Ez6EGmge7Xwd6NsFH9ch6IMyV1P9H238I/C/KZRw==", "dev": true, "requires": { "@babel/core": "^7.0.0-beta.46", @@ -6846,7 +6911,7 @@ "babel-plugin-minify-guarded-expressions": "=0.4.1", "babel-preset-minify": "=0.4.0-alpha.caaefb4c", "babylon": "^7.0.0-beta.42", - "css-slam": "^2.1.1", + "css-slam": "^2.1.2", "dom5": "^3.0.0", "gulp-if": "^2.0.2", "html-minifier": "^3.5.10", @@ -6876,9 +6941,9 @@ } }, "@types/node": { - "version": "9.6.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.21.tgz", - "integrity": "sha512-zQS6mHzxEstR8Vvnpc3JDUCDGWnHFzMTcBu9UCZoVLuj1Uvkkk0qFKJQEhlvbsX34m3xt12ejV09eO/ljZcn7A==", + "version": "9.6.28", + "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.28.tgz", + "integrity": "sha512-LMSOxMKNJ8tGqUVs8lSIT8RGo1XGWYada/ZU2QZcbcD6AW9futXDE99tfQA0K6DK60GXcwplsGGK5KABRmI5GA==", "dev": true }, "@types/resolve": { @@ -6893,9 +6958,9 @@ } }, "polymer-bundler": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/polymer-bundler/-/polymer-bundler-4.0.1.tgz", - "integrity": "sha512-nG+mpWn5h6nflOqZwtcpIKlYxXMznKFODa5XMQsUgD2126BT5cdznbMXCkH9vCIpbV5iBm5lCunmTyoYF+3BqA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/polymer-bundler/-/polymer-bundler-4.0.2.tgz", + "integrity": "sha512-eH+MNSVb/bCqchxYE1gVtdLP9eq1pLsr9NdcHhiJGEgSoZOYq7lGm2M/L7DHGJqa1/OqC7ZC9Sz3eQKAB8FaJQ==", "dev": true, "requires": { "@types/acorn": "^4.0.3", @@ -6906,44 +6971,35 @@ "babel-traverse": "^6.26.0", "babel-types": "^6.26.0", "clone": "^2.1.0", - "command-line-args": "^3.0.1", - "command-line-usage": "^3.0.3", - "dom5": "^2.2.0", + "command-line-args": "^5.0.2", + "command-line-usage": "^5.0.5", + "dom5": "^3.0.0", "espree": "^3.5.2", "magic-string": "^0.22.4", "mkdirp": "^0.5.1", - "parse5": "^2.2.2", + "parse5": "^4.0.0", "polymer-analyzer": "^3.0.1", "rollup": "^0.58.2", "source-map": "^0.5.6", "vscode-uri": "^1.0.1" }, "dependencies": { - "@types/node": { - "version": "6.0.113", - "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.113.tgz", - "integrity": "sha512-f9XXUWFqryzjkZA1EqFvJHSFyqyasV17fq8zCDIzbRV4ctL7RrJGKvG+lcex86Rjbzd1GrER9h9VmF5sSjV0BQ==", + "@types/estree": { + "version": "0.0.38", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.38.tgz", + "integrity": "sha512-F/v7t1LwS4vnXuPooJQGBRKRGIoxWUTmA4VHfqjOccFsNDThD5bfUNpITive6s352O7o384wcpEaDV8rHCehDA==", "dev": true }, - "dom5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/dom5/-/dom5-2.3.0.tgz", - "integrity": "sha1-+CBJdb0NrLvltYqKk//B/tD/zSo=", + "rollup": { + "version": "0.58.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.58.2.tgz", + "integrity": "sha512-RZVvCWm9BHOYloaE6LLiE/ibpjv1CmI8F8k0B0Cp+q1eezo3cswszJH1DN0djgzSlo0hjuuCmyeI+1XOYLl4wg==", "dev": true, "requires": { - "@types/clone": "^0.1.29", - "@types/node": "^6.0.0", - "@types/parse5": "^2.2.32", - "clone": "^2.1.0", - "parse5": "^2.2.2" + "@types/estree": "0.0.38", + "@types/node": "*" } }, - "parse5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-2.2.3.tgz", - "integrity": "sha1-DE/EHBAAxea5PUiwP4CDg3g06fY=", - "dev": true - }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -6953,9 +7009,9 @@ } }, "polymer-project-config": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-4.0.1.tgz", - "integrity": "sha512-NJjP5gf6tOQ5YY8u0UM3hzrXPF2hpNIIyXCtd5VNCYoRGJdT//UFubyWFDd9Aje09yNWjS1SAfjZIhMgZ5DESg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-4.0.2.tgz", + "integrity": "sha512-nnxLkbpYYPIVBYooeercovQIWqq4coHzQ5PwK2+NxNpVWUJ5tW3OCDt46dqw3CtJNe4r/qIOkPgBJdVwXAAEmw==", "dev": true, "requires": { "@types/node": "^9.6.4", @@ -6966,24 +7022,24 @@ }, "dependencies": { "@types/node": { - "version": "9.6.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.21.tgz", - "integrity": "sha512-zQS6mHzxEstR8Vvnpc3JDUCDGWnHFzMTcBu9UCZoVLuj1Uvkkk0qFKJQEhlvbsX34m3xt12ejV09eO/ljZcn7A==", + "version": "9.6.28", + "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.28.tgz", + "integrity": "sha512-LMSOxMKNJ8tGqUVs8lSIT8RGo1XGWYada/ZU2QZcbcD6AW9futXDE99tfQA0K6DK60GXcwplsGGK5KABRmI5GA==", "dev": true } } }, "polyserve": { - "version": "0.27.11", - "resolved": "https://registry.npmjs.org/polyserve/-/polyserve-0.27.11.tgz", - "integrity": "sha512-C6laEBzDawtKzJEojv2wjUbuu66fNFEOfHsbHztrw0jn0CZsaV1okWEuFczgMNgW5ZL+Eg+QC4hzsHNA1dZZaw==", + "version": "0.27.12", + "resolved": "https://registry.npmjs.org/polyserve/-/polyserve-0.27.12.tgz", + "integrity": "sha512-P4lb0fNqkSSRHrKTp9/bUnTjZOmnNnLWJ5zMBiWjkkJe3vzNcRpdL0vMQO6RxZ8MUvBI2Iv9mqGPVPY+Dk+Z1w==", "dev": true, "requires": { "@types/compression": "^0.0.33", "@types/content-type": "^1.1.0", "@types/escape-html": "0.0.20", "@types/express": "^4.0.36", - "@types/mime": "0.0.29", + "@types/mime": "^2.0.0", "@types/mz": "0.0.29", "@types/node": "^9.6.4", "@types/opn": "^3.0.28", @@ -6994,8 +7050,8 @@ "@types/spdy": "^3.4.1", "bower-config": "^1.4.1", "browser-capabilities": "^1.0.0", - "command-line-args": "^3.0.1", - "command-line-usage": "^3.0.3", + "command-line-args": "^5.0.2", + "command-line-usage": "^5.0.5", "compression": "^1.6.2", "content-type": "^1.0.2", "escape-html": "^1.0.3", @@ -7003,109 +7059,72 @@ "find-port": "^1.0.1", "http-proxy-middleware": "^0.17.2", "lru-cache": "^4.0.2", - "mime": "^1.3.4", + "mime": "^2.3.1", "mz": "^2.4.0", "opn": "^3.0.2", "pem": "^1.8.3", - "polymer-build": "^3.0.0", + "polymer-build": "^3.0.3", "polymer-project-config": "^4.0.0", "requirejs": "^2.3.4", "resolve": "^1.5.0", - "send": "^0.14.1", + "send": "^0.16.2", "spdy": "^3.3.3" }, "dependencies": { "@types/node": { - "version": "9.6.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.21.tgz", - "integrity": "sha512-zQS6mHzxEstR8Vvnpc3JDUCDGWnHFzMTcBu9UCZoVLuj1Uvkkk0qFKJQEhlvbsX34m3xt12ejV09eO/ljZcn7A==", + "version": "9.6.28", + "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.28.tgz", + "integrity": "sha512-LMSOxMKNJ8tGqUVs8lSIT8RGo1XGWYada/ZU2QZcbcD6AW9futXDE99tfQA0K6DK60GXcwplsGGK5KABRmI5GA==", "dev": true }, "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true, - "requires": { - "ms": "0.7.1" - }, - "dependencies": { - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true - } - } - }, - "etag": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz", - "integrity": "sha1-A9MLX2fdbmMtKUXTDWZScxo01dg=", - "dev": true - }, - "fresh": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz", - "integrity": "sha1-ZR+DjiJCTnVm3hYdg1jKoZn4PU8=", - "dev": true - }, - "http-errors": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.5.1.tgz", - "integrity": "sha1-eIwNLB3iyBuebowBhDtrl+uSB1A=", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "inherits": "2.0.3", - "setprototypeof": "1.0.2", - "statuses": ">= 1.3.1 < 2" + "ms": "2.0.0" } }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "mime": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", + "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", "dev": true }, "send": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.14.2.tgz", - "integrity": "sha1-ObBDiz9RC+Xcb2Z6EfcWiTaM3u8=", + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", "dev": true, "requires": { - "debug": "~2.2.0", - "depd": "~1.1.0", + "debug": "2.6.9", + "depd": "~1.1.2", "destroy": "~1.0.4", - "encodeurl": "~1.0.1", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "etag": "~1.7.0", - "fresh": "0.3.0", - "http-errors": "~1.5.1", - "mime": "1.3.4", - "ms": "0.7.2", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", "on-finished": "~2.3.0", "range-parser": "~1.2.0", - "statuses": "~1.3.1" + "statuses": "~1.4.0" }, "dependencies": { "mime": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", - "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", "dev": true } } }, - "setprototypeof": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.2.tgz", - "integrity": "sha1-gaVSFB7BBLiOic44MQOtXGZWTQg=", - "dev": true - }, "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", "dev": true } } @@ -7116,6 +7135,37 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", "dev": true }, + "prebuild-install": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.0.0.tgz", + "integrity": "sha512-AvcPLFqNz/hDd6o7qLj8i9xB479P9jSjA/p6m4927CRfY3tsmPfyFmD7RKXtdp6I2d1BAIVBgJoj5mxRJDZL4w==", + "dev": true, + "requires": { + "detect-libc": "^1.0.3", + "expand-template": "^1.0.2", + "github-from-package": "0.0.0", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "node-abi": "^2.2.0", + "noop-logger": "^0.1.1", + "npmlog": "^4.0.1", + "os-homedir": "^1.0.1", + "pump": "^2.0.1", + "rc": "^1.2.7", + "simple-get": "^2.7.0", + "tar-fs": "^1.13.0", + "tunnel-agent": "^0.6.0", + "which-pm-runs": "^1.0.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, "prepend-http": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", @@ -7152,32 +7202,14 @@ "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", "dev": true }, - "promisify-node": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/promisify-node/-/promisify-node-0.4.0.tgz", - "integrity": "sha1-MoA4dOxBF4TkeGwzmQKoeheaRpw=", - "dev": true, - "requires": { - "nodegit-promise": "~4.0.0", - "object-assign": "^4.0.1" - }, - "dependencies": { - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - } - } - }, "proxy-addr": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", - "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", + "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", "dev": true, "requires": { "forwarded": "~0.1.2", - "ipaddr.js": "1.6.0" + "ipaddr.js": "1.8.0" } }, "pseudomap": { @@ -7186,6 +7218,16 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -7206,9 +7248,9 @@ "dev": true }, "randomatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", - "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.0.tgz", + "integrity": "sha512-KnGPVE0lo2WoXxIZ7cPR8YBpiol4gsSuOwDSg410oHh80ZMp5EiypNqL2K4Z77vJn6lB5rap7IkAmcUlalcnBQ==", "dev": true, "requires": { "is-number": "^4.0.0", @@ -7260,12 +7302,6 @@ "strip-json-comments": "~2.0.1" }, "dependencies": { - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", @@ -7373,9 +7409,9 @@ "dev": true }, "regenerator-transform": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.12.4.tgz", - "integrity": "sha512-p2I0fY+TbSLD2/VFTFb/ypEHxs3e3AjU0DzttdPqk2bSmDhfSh5E54b86Yc6XhUa5KykK1tgbvZ4Nr82oCJWkQ==", + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.3.tgz", + "integrity": "sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA==", "dev": true, "requires": { "private": "^0.1.6" @@ -7469,9 +7505,9 @@ "dev": true }, "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", "dev": true }, "repeat-string": { @@ -7537,9 +7573,9 @@ "dev": true }, "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", + "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", "dev": true, "requires": { "path-parse": "^1.0.5" @@ -7588,23 +7624,48 @@ } }, "rollup": { - "version": "0.58.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.58.2.tgz", - "integrity": "sha512-RZVvCWm9BHOYloaE6LLiE/ibpjv1CmI8F8k0B0Cp+q1eezo3cswszJH1DN0djgzSlo0hjuuCmyeI+1XOYLl4wg==", + "version": "0.64.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.64.1.tgz", + "integrity": "sha512-+ThdVXrvonJdOTzyybMBipP0uz605Z8AnzWVY3rf+cSGnLO7uNkJBlN+9jXqWOomkvumXfm/esmBpA5d53qm7g==", "dev": true, "requires": { - "@types/estree": "0.0.38", + "@types/estree": "0.0.39", "@types/node": "*" + } + }, + "rollup-plugin-filesize": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-filesize/-/rollup-plugin-filesize-4.0.1.tgz", + "integrity": "sha512-S7W6/G5+KCusq3gXwTOXQIqg88dKdv6jXhgQtZ8F1kJ9ecctzuUsWzE9yeVhcbGW92U0SgAerfOASOhBvEIN3g==", + "dev": true, + "requires": { + "boxen": "^1.1.0", + "brotli-size": "0.0.2", + "colors": "^1.1.2", + "deep-assign": "^2.0.0", + "filesize": "^3.5.6", + "gzip-size": "^3.0.0", + "terser": "^3.8.0" }, "dependencies": { - "@types/estree": { - "version": "0.0.38", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.38.tgz", - "integrity": "sha512-F/v7t1LwS4vnXuPooJQGBRKRGIoxWUTmA4VHfqjOccFsNDThD5bfUNpITive6s352O7o384wcpEaDV8rHCehDA==", + "colors": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.2.tgz", + "integrity": "sha512-rhP0JSBGYvpcNQj4s5AdShMeE5ahMop96cTeDl/v9qQQm2fYClE2QXZRi8wLzc+GmXSxdIqqbOIAhyObEXDbfQ==", "dev": true } } }, + "rollup-plugin-terser": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-1.0.1.tgz", + "integrity": "sha512-VC6chT7QnrV6JzdgkPE0hP/atRBxaa3CPbVXfZJ8nJLjcidSdWftOst098RasYRUTKxJWAgdaJN1+uiZM6iffA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0-beta.47", + "terser": "^3.7.5" + } + }, "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", @@ -7665,9 +7726,9 @@ "dev": true }, "selenium-standalone": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/selenium-standalone/-/selenium-standalone-6.15.0.tgz", - "integrity": "sha512-SUEbbxo/IK2RsuPQ1QFgdyKXvxDYJUen6nR40zWL9P0FrqeuAXHNCWdtqnwbgGeoCxCVbPVzUsXfSKtjp2+j0g==", + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/selenium-standalone/-/selenium-standalone-6.15.1.tgz", + "integrity": "sha512-2VXqkcpd+RNJZwCp8UMmqubeSkLvscraRZtg2qdkXwoNNmx5Hu6uaOBy45VJNG6PiUJNZtBZQpnOUfNN2aD1EA==", "dev": true, "optional": true, "requires": { @@ -7891,6 +7952,12 @@ "integrity": "sha1-3hnuc77yGrPAdAo3sz22JGS6ves=", "dev": true }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, "set-value": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", @@ -7958,6 +8025,23 @@ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, + "simple-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", + "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=", + "dev": true + }, + "simple-get": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", + "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", + "dev": true, + "requires": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, "sinon": { "version": "1.17.7", "resolved": "https://registry.npmjs.org/sinon/-/sinon-1.17.7.tgz", @@ -8185,6 +8269,24 @@ "urix": "^0.1.0" } }, + "source-map-support": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", + "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "source-map-url": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", @@ -8567,17 +8669,40 @@ } }, "table-layout": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.3.0.tgz", - "integrity": "sha1-buINxIPbNxs+XIf3BO0vfHmdLJo=", + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.4.tgz", + "integrity": "sha512-uNaR3SRMJwfdp9OUr36eyEi6LLsbcTqTO/hfTsNviKsNeyMBPICJCC7QXRF3+07bAP6FRwA8rczJPBqXDc0CkQ==", "dev": true, "requires": { - "array-back": "^1.0.3", - "core-js": "^2.4.1", - "deep-extend": "~0.4.1", - "feature-detect-es6": "^1.3.1", - "typical": "^2.6.0", - "wordwrapjs": "^2.0.0-0" + "array-back": "^2.0.0", + "deep-extend": "~0.6.0", + "lodash.padend": "^4.6.1", + "typical": "^2.6.1", + "wordwrapjs": "^3.0.0" + } + }, + "tar-fs": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", + "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==", + "dev": true, + "requires": { + "chownr": "^1.0.1", + "mkdirp": "^0.5.1", + "pump": "^1.0.0", + "tar-stream": "^1.1.2" + }, + "dependencies": { + "pump": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", + "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } } }, "tar-stream": { @@ -8662,14 +8787,39 @@ "through2": "^2.0.1" } }, + "terser": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.8.1.tgz", + "integrity": "sha512-FRin3gKQ0vm0xPPLuxw1FqpVgv1b2pBpYCaFb5qe6A7sD749Fnq1VbDiX3CEFM0BV0fqDzFtBfgmxhxCdzKQIg==", + "dev": true, + "requires": { + "commander": "~2.16.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.6" + }, + "dependencies": { + "commander": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz", + "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "test-value": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz", - "integrity": "sha1-Edpv9nDzRxpztiXKTz/c97t0gpE=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz", + "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==", "dev": true, "requires": { - "array-back": "^1.0.3", - "typical": "^2.6.0" + "array-back": "^2.0.0", + "typical": "^2.6.1" } }, "text-encoding": { @@ -8856,15 +9006,15 @@ "dev": true }, "tslib": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.2.tgz", - "integrity": "sha512-AVP5Xol3WivEr7hnssHDsaM+lVrVXWUvd1cfXTRkTj80b//6g2wIFEH6hZG0muGZRnHGrfttpdzRk3YlBkWjKw==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", "dev": true }, "tslint": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.10.0.tgz", - "integrity": "sha1-EeJrzLiK+gLdDZlWyuPUVAtfVMM=", + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.11.0.tgz", + "integrity": "sha1-mPMMAurjzecAYgHkwzywi0hYHu0=", "dev": true, "requires": { "babel-code-frame": "^6.22.0", @@ -8878,13 +9028,13 @@ "resolve": "^1.3.2", "semver": "^5.3.0", "tslib": "^1.8.0", - "tsutils": "^2.12.1" + "tsutils": "^2.27.2" } }, "tsutils": { - "version": "2.27.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.27.1.tgz", - "integrity": "sha512-AE/7uzp32MmaHvNNFES85hhUDHFdFZp6OAiZcd6y4ZKKIg6orJTm8keYWBhIhrJQH3a4LzNKat7ZPXZt5aTf6w==", + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", "dev": true, "requires": { "tslib": "^1.8.1" @@ -8968,9 +9118,9 @@ "dev": true }, "typescript": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", - "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.0.1.tgz", + "integrity": "sha512-zQIMOmC+372pC/CCVLqnQ0zSBiY7HHodU7mpQdjiZddek4GMj31I3dUJ7gAs9o65X7mnRma6OokOkc6f9jjfBg==", "dev": true }, "typical": { @@ -9009,6 +9159,30 @@ } } }, + "uglify-js": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.7.tgz", + "integrity": "sha512-J0M2i1mQA+ze3EdN9SBi751DNdAXmeFLfJrd/MDIkRc3G3Gbb9OPVSx7GIQvVwfWxQARcYV2DTxIkMyDAk3o9Q==", + "dev": true, + "requires": { + "commander": "~2.16.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz", + "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "uglify-to-browserify": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", @@ -9028,16 +9202,6 @@ "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", "dev": true }, - "underscore.string": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.4.tgz", - "integrity": "sha1-LCo/n4PmR2L9xF5s6sZRQoZCE9s=", - "dev": true, - "requires": { - "sprintf-js": "^1.0.3", - "util-deprecate": "^1.0.2" - } - }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -9121,9 +9285,9 @@ } }, "universalify": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", - "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true }, "unpipe": { @@ -9233,21 +9397,10 @@ } }, "use": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", - "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true }, "util": { "version": "0.11.0", @@ -9271,9 +9424,9 @@ "dev": true }, "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", "dev": true }, "vali-date": { @@ -9283,9 +9436,9 @@ "dev": true }, "validate-npm-package-license": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", - "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { "spdx-correct": "^3.0.0", @@ -9398,9 +9551,9 @@ "dev": true }, "vscode-uri": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.5.tgz", - "integrity": "sha1-O4majvccN/MFTXm9vdoxx7828g0=", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.6.tgz", + "integrity": "sha512-sLI2L0uGov3wKVb9EB+vIQBl9tVP90nqRvxSoJ35vI3NjxE8jfsE5DSOhWgSunHSZmKS4OCi2jrtfxK7uyp2ww==", "dev": true }, "wbuf": { @@ -9560,9 +9713,9 @@ } }, "wct-local": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wct-local/-/wct-local-2.1.0.tgz", - "integrity": "sha512-OiMSbxp6e5tyvTbUA4VAQbw4we53EXEmekx9BbIgS/HryoQISzap5DSAE/kvpRpJ2Axt0z12d8ChxqwNflApfA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/wct-local/-/wct-local-2.1.1.tgz", + "integrity": "sha512-U0qcIzsjl0vJ2KR5K766WVzJlmqfMRo8VqgRVQmrePGBsE40vj9hD+XiFw8yusamibZEWRU+DtVP3GKSwJz2EQ==", "dev": true, "optional": true, "requires": { @@ -9575,77 +9728,39 @@ "cleankill": "^2.0.0", "freeport": "^1.0.4", "launchpad": "^0.7.0", - "promisify-node": "^0.4.0", "selenium-standalone": "^6.7.0", "which": "^1.0.8" }, "dependencies": { "@types/node": { - "version": "9.6.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.21.tgz", - "integrity": "sha512-zQS6mHzxEstR8Vvnpc3JDUCDGWnHFzMTcBu9UCZoVLuj1Uvkkk0qFKJQEhlvbsX34m3xt12ejV09eO/ljZcn7A==", + "version": "9.6.28", + "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.28.tgz", + "integrity": "sha512-LMSOxMKNJ8tGqUVs8lSIT8RGo1XGWYada/ZU2QZcbcD6AW9futXDE99tfQA0K6DK60GXcwplsGGK5KABRmI5GA==", "dev": true, "optional": true } } }, "wct-sauce": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wct-sauce/-/wct-sauce-2.0.1.tgz", - "integrity": "sha512-nk6cPKdACVt3R+n9XyCTQTeRKOhhajyh0WaF5U1BsxPlVS8tNOUGleXQDUUjB+q1DPS7+j1F3UJqhnmrUMDVJA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wct-sauce/-/wct-sauce-2.1.0.tgz", + "integrity": "sha512-c3R4PJcbpS7Gxv2vZ4HDAqpXV6cT9peslAWMU7hHH9PMhKDPbn8RNa6E4DVL0tOmZznB+3cRmtZ6+vJ/aDwu1A==", "dev": true, "optional": true, "requires": { - "chalk": "^1.1.1", + "chalk": "^2.4.1", "cleankill": "^2.0.0", - "lodash": "^3.0.1", + "lodash": "^4.17.10", "request": "^2.85.0", "sauce-connect-launcher": "^1.0.0", "temp": "^0.8.1", - "uuid": "^2.0.1" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "optional": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true, - "optional": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true, - "optional": true - }, - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", - "dev": true, - "optional": true - } + "uuid": "^3.2.1" } }, "wd": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/wd/-/wd-1.9.0.tgz", - "integrity": "sha512-etqaVS5YFPuwaBRXNFnG0UIoCJHIPoWbVgdbK0v8MQRPQx2sNJc/wu0cRzLEuQjhGt/b0NGxcO1CvA5IAqoWrg==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/wd/-/wd-1.10.3.tgz", + "integrity": "sha512-ffqqZDtFFLeg5u/4pw2vYKECW+z+vW6vc+7rcqF15uu1/rmw3BydV84BONNc9DIcQ5Z7gQFS/hAuMvj53eVtSg==", "dev": true, "requires": { "archiver": "2.1.1", @@ -9654,7 +9769,6 @@ "mkdirp": "^0.5.1", "q": "1.4.1", "request": "2.85.0", - "underscore.string": "3.3.4", "vargs": "0.1.0" }, "dependencies": { @@ -9706,9 +9820,9 @@ } }, "web-component-tester": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/web-component-tester/-/web-component-tester-6.6.0.tgz", - "integrity": "sha512-f+LqR4rHUtVIg6T79uo6BYuyrIOzInPWzOJo69sGxX3tRTDeTwQzJSrfX4/MKA4qa3ldGPODJHizRYgZbjYjbQ==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/web-component-tester/-/web-component-tester-6.8.0.tgz", + "integrity": "sha512-zj1nZ7dq270svfkdPo4Mc4CuCTab/Wp0SMIKb8g6xD0Q76g15ttHyscYAxQkywVuabwgWeTXiotUOiQaiwX8uA==", "dev": true, "requires": { "@polymer/sinonjs": "^1.14.1", @@ -9718,18 +9832,15 @@ "async": "^2.4.1", "body-parser": "^1.17.2", "bower-config": "^1.4.0", - "chai": "^4.0.2", "chalk": "^1.1.3", "cleankill": "^2.0.0", "express": "^4.15.3", "findup-sync": "^2.0.0", "glob": "^7.1.2", "lodash": "^3.10.1", - "mocha": "^3.4.2", "multer": "^1.3.0", "nomnom": "^1.8.1", "polyserve": "^0.27.11", - "promisify-node": "^0.4.0", "resolve": "^1.5.0", "semver": "^5.3.0", "send": "^0.11.1", @@ -9739,8 +9850,8 @@ "socket.io": "^2.0.3", "stacky": "^1.3.1", "update-notifier": "^2.2.0", - "wct-local": "^2.1.0", - "wct-sauce": "^2.0.0", + "wct-local": "^2.1.1", + "wct-sauce": "^2.0.2", "wd": "^1.2.0" }, "dependencies": { @@ -9751,9 +9862,9 @@ "dev": true }, "@webcomponents/webcomponentsjs": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@webcomponents/webcomponentsjs/-/webcomponentsjs-1.2.2.tgz", - "integrity": "sha512-VQlEKZwJFBz4x7VwYdZYeCNYvF39hJHoaGKfcKnv6u01tkXK9c0UCl1Zx4yBrMF+H1+rFvX6PLzDLFgUvZagmQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@webcomponents/webcomponentsjs/-/webcomponentsjs-1.2.5.tgz", + "integrity": "sha512-rhjKZIf9y0kIV3nHyK8qXWN6mactYEzCqZlBjSptkAp9gsYmuUJq4JYwoPl5KHOSk+cTvPXfLDZ0Gru8TDgiVQ==", "dev": true }, "async": { @@ -9773,12 +9884,6 @@ } } }, - "browser-stdout": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", - "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", - "dev": true - }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", @@ -9792,30 +9897,6 @@ "supports-color": "^2.0.0" } }, - "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true, - "requires": { - "graceful-readlink": ">= 1.0.0" - } - }, - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "diff": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", - "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", - "dev": true - }, "formatio": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz", @@ -9825,18 +9906,6 @@ "samsam": "1.x" } }, - "growl": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", - "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", - "dev": true - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", @@ -9855,51 +9924,6 @@ "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=", "dev": true }, - "mocha": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz", - "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==", - "dev": true, - "requires": { - "browser-stdout": "1.3.0", - "commander": "2.9.0", - "debug": "2.6.8", - "diff": "3.2.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.1", - "growl": "1.9.2", - "he": "1.1.1", - "json3": "3.3.2", - "lodash.create": "3.1.1", - "mkdirp": "0.5.1", - "supports-color": "3.1.2" - }, - "dependencies": { - "glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.2", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "supports-color": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", - "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, "path-to-regexp": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", @@ -9965,6 +9989,21 @@ "isexe": "^2.0.0" } }, + "which-pm-runs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", + "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", + "dev": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, "widest-line": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz", @@ -10010,15 +10049,13 @@ "dev": true }, "wordwrapjs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-2.0.0.tgz", - "integrity": "sha1-q1X2leYRjak4WP3XDAU9HF4BrCA=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz", + "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==", "dev": true, "requires": { - "array-back": "^1.0.3", - "feature-detect-es6": "^1.3.1", "reduce-flatten": "^1.0.1", - "typical": "^2.6.0" + "typical": "^2.6.1" } }, "wrappy": { @@ -10101,9 +10138,9 @@ } }, "yauzl": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.9.2.tgz", - "integrity": "sha1-T7G8euH8L1cDe1SvasyP4QMcW3c=", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", "dev": true, "optional": true, "requires": { diff --git a/package.json b/package.json index 98fdf50e..053b0809 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@polymer/lit-element", - "version": "0.5.2", + "version": "0.6.0-dev.5", "description": "Polymer based lit-html custom element", "license": "BSD-3-Clause", "repository": "Polymer/lit-element", @@ -13,7 +13,7 @@ "build": "tsc", "gen-docs": "typedoc --readme none --mode modules --excludeNotExported --excludePrivate --exclude **/*_test.ts --out ./docs/api .", "test": "npm run build && wct", - "checksize": "uglifyjs lit-element.js -mc --toplevel | gzip -9 | wc -c", + "checksize": "rollup -c ; rm lit-element.bundled.js", "format": "find src test | grep '\\.js$\\|\\.ts$' | xargs clang-format --style=file -i", "lint": "tslint --project ./", "prepublishOnly": "npm run build", @@ -22,21 +22,23 @@ "author": "The Polymer Authors", "devDependencies": { "@types/chai": "^4.0.1", - "@types/mocha": "^5.0.0", - "@webcomponents/webcomponentsjs": "^2.0.2", + "@types/mocha": "^5.2.4", + "@webcomponents/webcomponentsjs": "^2.1.0", "chai": "^4.0.2", "mocha": "^5.0.5", + "rollup": "^0.64.1", + "rollup-plugin-filesize": "^4.0.1", + "rollup-plugin-terser": "^1.0.1", "tslint": "^5.7.0", "typedoc": "^0.8.0", - "typescript": "^2.7.2", + "typescript": "^3.0.1", "uglify-es": "^3.3.9", "wct-browser-legacy": "^1.0.1", - "web-component-tester": "^6.6.0" + "web-component-tester": "^6.8.0" }, "typings": "lit-element.d.ts", "dependencies": { - "@polymer/polymer": "^3.0.2", - "lit-html": "^0.10.2" + "lit-html": ">=0.11.0-dev.3 <2.0.0" }, "publishConfig": { "access": "public" diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 00000000..1703cecf --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,40 @@ +/** + * @license + * Copyright (c) 2018 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ + +import filesize from 'rollup-plugin-filesize'; +import {terser} from 'rollup-plugin-terser'; + +export default { + input: 'lit-element.js', + output: { + file: 'lit-element.bundled.js', + format: 'esm', + }, + onwarn(warning) { + if (warning.code !== 'CIRCULAR_DEPENDENCY') { + console.error(`(!) ${warning.message}`); + } + }, + plugins: [ + terser({ + warnings: true, + mangle: { + module: true, + }, + }), + filesize({ + showBrotliSize: true, + }) + ] +} \ No newline at end of file diff --git a/src/demo/ts-element.ts b/src/demo/ts-element.ts new file mode 100644 index 00000000..093808c1 --- /dev/null +++ b/src/demo/ts-element.ts @@ -0,0 +1,23 @@ +import { LitElement, html, property } from '../lit-element.js'; + +class TSElement extends LitElement { + + @property() + message = 'Hi'; + + @property({attribute: 'more-info', type: (value: string) => `[${value}]`}) + extra = ''; + + render() { + const {message, extra} = this; + return html` + TSElement says: ${message} ${extra} + `; + } + +} +customElements.define('ts-element', TSElement); \ No newline at end of file diff --git a/src/lib/render-helpers.ts b/src/lib/render-helpers.ts new file mode 100644 index 00000000..3f18737c --- /dev/null +++ b/src/lib/render-helpers.ts @@ -0,0 +1,52 @@ +/** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ + +/** + * Returns a string of CSS class names formed by taking the properties + * in the `classInfo` object and appending the property name to the string of + * class names if the property value is truthy. + * @param classInfo + */ +export function classString( + classInfo: {[name: string]: string|boolean|number}) { + const o = []; + for (const name in classInfo) { + // We explicitly want a loose truthy check here because + // it seems more convenient that '' and 0 are skipped. + if (classInfo[name]) { + o.push(name); + } + } + return o.join(' '); +} + +/** + * Returns a CSS style string formed from the `styleInfo` object. Property names + * are automatically converted from *camelCase* to *dash-case*, so that you can use + * unquoted names like `backgroundColor`. The property values are formatted + * as css. For example `{backgroundColor: 'red', borderTop: '5px'}` becomes + * `background-color: red; border-top: 5px;`. + * @param styleInfo + */ +export function styleString( + styleInfo: {[name: string]: string|boolean|number}) { + const o = []; + for (const name in styleInfo) { + const v = styleInfo[name]; + if (v || v === 0) { + o.push(`${name.replace(/([A-Z])/, '-$1').toLowerCase()}: ${v}`); + } + } + return o.join('; '); +} diff --git a/src/lib/updating-element.ts b/src/lib/updating-element.ts new file mode 100644 index 00000000..14886c64 --- /dev/null +++ b/src/lib/updating-element.ts @@ -0,0 +1,550 @@ +/** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ + +/** + * Converts property values to and from attribute values. + */ +interface AttributeSerializer { + + /** + * Deserializing function called to convert an attribute value to a property value. + */ + fromAttribute?(value: string): T; + + /** + * Serializing function called to convert a property value to an attribute value. + */ + toAttribute?(value: T): string|null; + +} + +type AttributeType = AttributeSerializer|((value: string) => T); + +/** + * Defines options for a property accessor. + */ +export interface PropertyDeclaration { + + /** + * Describes how and whether the property becomes an observed attribute. + * If the value is `false`, the property is not added to `observedAttributes`. + * If true or absent, the lowercased property name is observed (e.g. `fooBar` becomes `foobar`). + * If a string, the string value is observed (e.g `attribute: 'foo-bar'`). + */ + attribute?: boolean|string; + + /** + * Describes how to serialize and deserialize the attribute to/from a property. + * If this value is a function, it is used to deserialize the attribute value + * a the property value. If it's an object, it can have keys for `fromAttribute` and + * `toAttribute` where `fromAttribute` is the deserialize function and `toAttribute` + * is a serialize function used to set the property to an attribute. If no `toAttribute` + * function is provided and `reflect` is set to `true`, the property value is set + * directly to the attribute. + */ + type?: AttributeType; + + /** + * Describes if the property should reflect to an attribute. + * If `true`, when the property is set, the attribute is set using the + * attribute name determined according to the rules for the `attribute` + * propety option and the value of the property serialized using the rules from + * the `type` property option. + */ + reflect?: boolean; + + /** + * Describes if setting a property should trigger invalidation and updating. + * This function takes the `newValue` and `oldValue` and returns `true` if + * invalidation should occur. If not present, a strict identity check + * (eg. === operator) is used. This is useful if a property should be + * considered dirty only if some condition is met, like if a key of an + * object value changes. + */ + shouldInvalidate?(value: T, oldValue: T): boolean; + +} + +/** + * Map of properties to PropertyDeclaration options. For each property an + * accessor is made, and the property is processed according to the + * PropertyDeclaration options. + */ +export interface PropertyDeclarations { + [key: string]: PropertyDeclaration; +} + +type PropertyDeclarationMap = Map; + +type AttributeMap = Map; + +export type PropertyValues = Map; + +/** + * Decorator which creates a property. Optionally a `PropertyDeclaration` object + * can be supplied to describe how the property should be configured. + */ +export const property = (options?: PropertyDeclaration) => (proto: Object, name: string) => { + (proto.constructor as typeof UpdatingElement).createProperty(name, options); +}; + +// serializer/deserializers for boolean attribute +const fromBooleanAttribute = (value: string) => value !== null; +const toBooleanAttribute = (value: string) => value ? '' : null; + +export interface ShouldInvalidate { + (value: unknown, old: unknown): boolean; +} + +/** + * Change function that returns true if `value` is different from `oldValue`. + * This method is used as the default for a property's `shouldInvalidate` function. + */ +export const notEqual: ShouldInvalidate = (value: unknown, old: unknown): boolean => { + // This ensures (old==NaN, value==NaN) always returns false + return old !== value && (old === old || value === value); +}; + +const defaultPropertyDeclaration: PropertyDeclaration = { + attribute: true, + type: String, + reflect: false, + shouldInvalidate: notEqual +}; + +const microtaskPromise = new Promise((resolve) => resolve(true)); + +const STATE_HAS_UPDATED = 1; +const STATE_IS_INVALID = 1 << 2; +const STATE_IS_REFLECTING = 1 << 3; +type UpdateState = typeof STATE_HAS_UPDATED | typeof STATE_IS_INVALID | typeof STATE_IS_REFLECTING; + +/** + * Base element class which manages element properties and attributes. When + * properties change, the `update` method is asynchronously called. This method + * should be supplied by subclassers to render updates as desired. + */ +export abstract class UpdatingElement extends HTMLElement { + + /** + * Maps attribute names to properties; for example `foobar` attribute + * to `fooBar` property. + */ + private static _attributeToPropertyMap: AttributeMap = new Map(); + + /** + * Marks class as having finished creating properties. + */ + private static _finalized = true; + + /** + * Memoized list of all class properties, including any superclass properties. + */ + private static _classProperties: PropertyDeclarationMap = new Map(); + + static properties: PropertyDeclarations = {}; + + /** + * Returns a list of attributes corresponding to the registered properties. + */ + static get observedAttributes() { + // note: piggy backing on this to ensure we're _finalized. + this._finalize(); + const attributes = []; + for (const [p, v] of this._classProperties) { + const attr = this._attributeNameForProperty(p, v); + if (attr !== undefined) { + this._attributeToPropertyMap.set(attr, p); + attributes.push(attr); + } + } + return attributes; + } + + /** + * Creates a property accessor on the element prototype if one does not exist. + * The property setter calls the property's `shouldInvalidate` property option + * or uses a strict identity check to determine if the set should trigger + * invalidation and update. + */ + static createProperty(name: PropertyKey, options: PropertyDeclaration = defaultPropertyDeclaration) { + // ensure private storage for property declarations. + if (!this.hasOwnProperty('_classProperties')) { + this._classProperties = new Map(); + // NOTE: Workaround IE11 not supporting Map constructor argument. + const superProperties = Object.getPrototypeOf(this)._classProperties; + if (superProperties !== undefined) { + superProperties.forEach((v: any, k: PropertyKey) => + this._classProperties.set(k, v)); + } + } + this._classProperties.set(name, options); + // Allow user defined accessors by not replacing an existing own-property accessor. + if (this.prototype.hasOwnProperty(name)) { + return; + } + const key = typeof name === 'symbol' ? Symbol() : `__${name}`; + Object.defineProperty(this.prototype, name, { + get() { + return this[key]; + }, + set(value) { + const oldValue = this[name]; + this[key] = value; + this.invalidateProperty(name, oldValue, options); + }, + configurable: true, + enumerable: true + }); + } + + /** + * Creates property accessors for registered properties and ensures + * any superclasses are also finalized. + */ + private static _finalize() { + if (this.hasOwnProperty('_finalized') && this._finalized) { + return; + } + // finalize any superclasses + const superCtor = Object.getPrototypeOf(this); + if (typeof superCtor._finalize === 'function') { + superCtor._finalize(); + } + this._finalized = true; + // initialize map populated in observedAttributes + this._attributeToPropertyMap = new Map(); + // make any properties + const props = this.properties; + // support symbols in properties (IE11 does not support this) + const propKeys = [...Object.getOwnPropertyNames(props), + ...(typeof Object.getOwnPropertySymbols === 'function') ? Object.getOwnPropertySymbols(props) : []]; + for (const p of propKeys) { + // note, use of `any` is due to TypeSript lack of support for symbol in index types + this.createProperty(p, (props as any)[p]); + } + } + + /** + * Returns the property name for the given attribute `name`. + */ + private static _attributeNameForProperty(name: PropertyKey, options?: PropertyDeclaration) { + const attribute = options !== undefined && options.attribute; + return attribute === false ? undefined : (typeof attribute === 'string' ? + attribute : (typeof name === 'string' ? name.toLowerCase() : undefined)); + } + + /** + * Returns true if a property should cause invalidation and update. + * Called when a property value is set and uses the `shouldInvalidate` + * option for the property if present or a strict identity check. + */ + private static _valueShouldInvalidate(value: unknown, old: unknown, + shouldInvalidate: ShouldInvalidate = notEqual) { + return shouldInvalidate(value, old); + } + + /** + * Returns the property value for the given attribute value. + * Called via the `attributeChangedCallback` and uses the property's `type` + * or `type.fromAttribute` property option. + */ + private static _propertyValueFromAttribute(value: string, options?: PropertyDeclaration) { + const type = options && options.type; + if (type === undefined) { + return value; + } + // Note: special case `Boolean` so users can use it as a `type`. + const fromAttribute = type === Boolean ? fromBooleanAttribute : + (typeof type === 'function' ? type : type.fromAttribute); + return fromAttribute ? fromAttribute(value) : value; + } + + /** + * Returns the attribute value for the given property value. If this + * returns undefined, the property will *not* be reflected to an attribute. + * If this returns null, the attribute will be removed, otherwise the + * attribute will be set to the value. + * This uses the property's `reflect` and `type.toAttribute` property options. + */ + private static _propertyValueToAttribute(value: unknown, options?: PropertyDeclaration) { + if (options === undefined || options.reflect === undefined) { + return; + } + // Note: special case `Boolean` so users can use it as a `type`. + const toAttribute = options.type === Boolean ? toBooleanAttribute : + (options.type && (options.type as AttributeSerializer).toAttribute || String); + return toAttribute(value); + } + + private _updateState: UpdateState = 0; + private _instanceProperties: PropertyValues|undefined = undefined; + private _updatePromise: Promise = microtaskPromise; + + /** + * Map with keys for any properties that have changed since the last + * update cycle with previous values. + */ + private _changedProperties: PropertyValues = new Map(); + + /** + * Map with keys of properties that should be reflected when updated. + */ + private _reflectingProperties: Map|undefined = undefined; + + /** + * Node or ShadowRoot into which element DOM should be rendered. Defaults + * to an open shadowRoot. + */ + protected renderRoot?: Element|DocumentFragment; + + constructor() { + super(); + this.initialize(); + } + + /** + * Performs element initialization. By default this calls `createRenderRoot` to + * create the element `renderRoot` node and captures any pre-set values for + * registered properties. + */ + protected initialize() { + this.renderRoot = this.createRenderRoot(); + this._saveInstanceProperties(); + } + + /** + * Fixes any properties set on the instance before upgrade time. + * Otherwise these would shadow the accessor and break these properties. + * The properties are stored in a map which is played back after the constructor + * runs. + */ + private _saveInstanceProperties() { + for (const [p] of (this.constructor as typeof UpdatingElement)._classProperties) { + if (this.hasOwnProperty(p)) { + const value = this[p as keyof this]; + delete this[p as keyof this]; + if (!this._instanceProperties) { + this._instanceProperties = new Map(); + } + this._instanceProperties.set(p, value); + } + } + } + + /** + * Applies previously saved instance properties. + */ + private _applyInstanceProperties() { + for (const [p, v] of this._instanceProperties!) { + (this as any)[p] = v; + } + this._instanceProperties = undefined; + } + + /** + * Returns the node into which the element should render and by default + * creates and returns an open shadowRoot. Implement to customize where the + * element's DOM is rendered. For example, to render into the element's + * childNodes, return `this`. + * @returns {Element|DocumentFragment} Returns a node into which to render. + */ + protected createRenderRoot(): Element|ShadowRoot { + return this.attachShadow({mode : 'open'}); + } + + /** + * Uses ShadyCSS to keep element DOM updated. + */ + connectedCallback() { + if ((this._updateState & STATE_HAS_UPDATED) && window.ShadyCSS !== undefined) { + window.ShadyCSS.styleElement(this); + } + this.invalidate(); + } + + /** + * Synchronizes property values when attributes change. + */ + attributeChangedCallback(name: string, old: string, value: string) { + if (old !== value) { + this._attributeToProperty(name, value); + } + } + + private _propertyToAttribute(name: PropertyKey, value: unknown, + options: PropertyDeclaration = defaultPropertyDeclaration) { + const ctor = (this.constructor as typeof UpdatingElement); + const attrValue = ctor._propertyValueToAttribute(value, options); + if (attrValue !== undefined) { + const attr = ctor._attributeNameForProperty(name, options); + if (attr !== undefined) { + // Track if the property is being reflected to avoid + // setting the property again via `attributeChangedCallback`. Note: + // 1. this takes advantage of the fact that the callback is synchronous. + // 2. will behave incorrectly if multiple attributes are in the reaction + // stack at time of calling. However, since we process attributes + // in `update` this should not be possible (or an extreme corner case + // that we'd like to discover). + // mark state reflecting + this._updateState = this._updateState | STATE_IS_REFLECTING; + if (attrValue === null) { + this.removeAttribute(attr); + } else { + this.setAttribute(attr, attrValue); + } + // mark state not reflecting + this._updateState = this._updateState & ~STATE_IS_REFLECTING; + } + } + } + + private _attributeToProperty(name: string, value: string) { + // Use tracking info to avoid deserializing attribute value if it was + // just set from a property setter. + if (!(this._updateState & STATE_IS_REFLECTING)) { + const ctor = (this.constructor as typeof UpdatingElement); + const propName = ctor._attributeToPropertyMap.get(name); + if (propName !== undefined) { + const options = ctor._classProperties.get(propName); + this[propName as keyof this] = ctor._propertyValueFromAttribute(value, options); + } + } + } + + /** + * Triggers an invalidation and records an old value for the specified + * property to be presented in the `changedProperties` argument to `update`. + * When manually creating a property setter, this method should be called to + * trigger an invalidation that honors any of the property options specified + * for the given property. + * + * @param name {PropertyKey} + * @param oldValue {any} + */ + protected invalidateProperty(name: PropertyKey, oldValue: any, options?: PropertyDeclaration) { + // if not passed in, take options from class properties. + if (options === undefined) { + options = (this.constructor as typeof UpdatingElement)._classProperties.get(name) || + defaultPropertyDeclaration; + } + if ((this.constructor as typeof UpdatingElement)._valueShouldInvalidate(this[name as keyof this], + oldValue, options.shouldInvalidate)) { + // track old value when changing. + if (!this._changedProperties.has(name)) { + this._changedProperties.set(name, oldValue); + } + // add to reflecting properties set + if (options.reflect === true) { + if (this._reflectingProperties === undefined) { + this._reflectingProperties = new Map(); + } + this._reflectingProperties.set(name, options); + } + this.invalidate(); + } + } + + /** + * Invalidates the element causing it to asynchronously update regardless + * of whether or not any property changes are pending. This method is + * automatically called when any registered property changes. + */ + async invalidate() { + if (!this._isInvalid) { + // mark state invalid... + this._updateState = this._updateState | STATE_IS_INVALID; + let resolver: any; + const previousValidatePromise = this._updatePromise; + this._updatePromise = new Promise((r) => resolver = r); + await previousValidatePromise; + this._flush(); + resolver!(!this._isInvalid); + } + return this._updatePromise; + } + + private get _isInvalid() { + return (this._updateState & STATE_IS_INVALID); + } + + /** + * Validates the element by updating it via `update`. + */ + private _flush() { + // Mixin instance properties once, if they exist. + if (this._instanceProperties) { + this._applyInstanceProperties(); + } + if (this.shouldUpdate(this._changedProperties)) { + this.update(this._changedProperties); + } else { + this._markUpdated(); + } + } + + private _markUpdated() { + this._changedProperties = new Map(); + this._updateState = this._updateState & ~STATE_IS_INVALID | STATE_HAS_UPDATED; + } + + /** + * Returns a Promise that resolves when the element has completed updating + * that resolves to a boolean value that is `true` if the element completed + * the update without triggering another update. This can happen if a property + * is set in `update()` after the call to `super.update()` for example. + * This getter can be implemented to await additional state. For example, it + * is sometimes useful to await a rendered element before fulfilling this + * promise. To do this, first await `super.updateComplete` then any subsequent + * state. + * + * @returns {Promise} The promise returns a boolean that indicates if the + * update resolved without triggering another update. + */ + get updateComplete() { + return this._updatePromise; + } + + /** + * Controls whether or not `update` should be called when the element invalidates. + * By default, this method always returns true, but this can be customized to + * control when to update. + * * @param _changedProperties Map of changed properties with old values + */ + protected shouldUpdate(_changedProperties: PropertyValues): boolean { + return true; + } + + /** + * Updates the element. By default this method reflects property values to attributes. + * It should be overridden to render and keep updated DOM in the element's root. + * Within `update()` setting properties does not trigger `invalidate()`, allowing + * property values to be computed and validated before DOM is rendered and updated. + * This means in an override of `update()`, before calling `super.update()` + * setting properties will not trigger another update, but after calling `super.update()` + * setting properties will trigger another update. + * * @param _changedProperties Map of changed properties with old values + */ + protected update(_changedProperties: PropertyValues): void { + if (this._reflectingProperties !== undefined && this._reflectingProperties.size > 0) { + for (const [k, v] of this._reflectingProperties) { + this._propertyToAttribute(k, this[k as keyof this], v); + } + this._reflectingProperties = undefined; + } + // Before this (before calling super)... + this._markUpdated(); + } + +} \ No newline at end of file diff --git a/src/lit-element.ts b/src/lit-element.ts index fbf44fc2..8f5e40b5 100644 --- a/src/lit-element.ts +++ b/src/lit-element.ts @@ -11,286 +11,65 @@ * subject to an additional IP rights grant found at * http://polymer.github.io/PATENTS.txt */ -import { - PropertiesChangedConstructor -} from '@polymer/polymer/lib/mixins/properties-changed.js'; -import {PropertiesMixin} from '@polymer/polymer/lib/mixins/properties-mixin.js'; -import { - PropertiesMixinConstructor -} from '@polymer/polymer/lib/mixins/properties-mixin.js'; -import {camelToDashCase} from '@polymer/polymer/lib/utils/case-map.js'; -import {render} from 'lit-html/lib/shady-render.js'; -import {TemplateResult} from 'lit-html/lit-html.js'; +import {render} from 'lit-html/lib/shady-render'; +import {TemplateResult} from 'lit-html'; +import {UpdatingElement, PropertyValues} from './lib/updating-element.js'; -export { - PropertiesChangedConstructor -} from '@polymer/polymer/lib/mixins/properties-changed.js'; -export { - PropertiesMixinConstructor -} from '@polymer/polymer/lib/mixins/properties-mixin.js'; -export {html, svg} from 'lit-html/lib/lit-extended.js'; +export * from './lib/updating-element.js'; +export {html, svg} from 'lit-html/lit-html'; -// This is a hack to get tsc to not complain about unused interfaces and -// still generate the type declarations properly -export type __unused = PropertiesChangedConstructor&PropertiesMixinConstructor; -/** - * Renders attributes to the given element based on the `attrInfo` object where - * boolean values are added/removed as attributes. - * @param element Element on which to set attributes. - * @param attrInfo Object describing attributes. - */ -export function renderAttributes( - element: HTMLElement, attrInfo: {[name: string]: string|boolean|number}) { - for (const a in attrInfo) { - const v = attrInfo[a] === true ? '' : attrInfo[a]; - if (v || v === '' || v === 0) { - if (element.getAttribute(a) !== v) { - element.setAttribute(a, String(v)); - } - } else if (element.hasAttribute(a)) { - element.removeAttribute(a); - } - } -} - -/** - * Returns a string of css class names formed by taking the properties - * in the `classInfo` object and appending the property name to the string of - * class names if the property value is truthy. - * @param classInfo - */ -export function classString( - classInfo: {[name: string]: string|boolean|number}) { - const o = []; - for (const name in classInfo) { - const v = classInfo[name]; - if (v) { - o.push(name); - } - } - return o.join(' '); -} - -/** - * Returns a css style string formed by taking the properties in the `styleInfo` - * object and appending the property name (dash-cased) colon the - * property value. Properties are separated by a semi-colon. - * @param styleInfo - */ -export function styleString( - styleInfo: {[name: string]: string|boolean|number}) { - const o = []; - for (const name in styleInfo) { - const v = styleInfo[name]; - if (v || v === 0) { - o.push(`${camelToDashCase(name)}: ${v}`); - } - } - return o.join('; '); -} - -export class LitElement extends PropertiesMixin -(HTMLElement) { - - private __renderComplete: Promise|null = null; - private __resolveRenderComplete: Function|null = null; - private __isInvalid: Boolean = false; - private __isChanging: Boolean = false; - private _root?: Element|DocumentFragment; - - /** - * Override which sets up element rendering by calling* `_createRoot` - * and `_firstRendered`. - */ - ready() { - this._root = this._createRoot(); - super.ready(); - this._firstRendered(); - } - - connectedCallback() { - if (window.ShadyCSS && this._root) { - window.ShadyCSS.styleElement(this); - } - super.connectedCallback(); - } - - /** - * Called after the element DOM is rendered for the first time. - * Implement to perform tasks after first rendering like capturing a - * reference to a static node which must be directly manipulated. - * This should not be commonly needed. For tasks which should be performed - * before first render, use the element constructor. - */ - _firstRendered() {} - - /** - * Implement to customize where the element's template is rendered by - * returning an element into which to render. By default this creates - * a shadowRoot for the element. To render into the element's childNodes, - * return `this`. - * @returns {Element|DocumentFragment} Returns a node into which to render. - */ - protected _createRoot(): Element|DocumentFragment { - return this.attachShadow({mode : 'open'}); - } +export abstract class LitElement extends UpdatingElement { + private _firstRendered = false; /** - * Override which returns the value of `_shouldRender` which users - * should implement to control rendering. If this method returns false, - * _propertiesChanged will not be called and no rendering will occur even - * if property values change or `requestRender` is called. - * @param _props Current element properties - * @param _changedProps Changing element properties - * @param _prevProps Previous element properties - * @returns {boolean} Default implementation always returns true. + * Render method used to render the lit-html TemplateResult to the element's DOM. + * @param {TemplateResult} Template to render. + * @param {Element|DocumentFragment} Node into which to render. + * @param {String} Element name. */ - _shouldPropertiesChange(_props: object, _changedProps: object, - _prevProps: object): boolean { - const shouldRender = this._shouldRender(_props, _changedProps, _prevProps); - if (!shouldRender && this.__resolveRenderComplete) { - this.__resolveRenderComplete(false); - } - return shouldRender; - } + static render = render; /** - * Implement to control if rendering should occur when property values - * change or `requestRender` is called. By default, this method always - * returns true, but this can be customized as an optimization to avoid - * rendering work when changes occur which should not be rendered. - * @param _props Current element properties - * @param _changedProps Changing element properties - * @param _prevProps Previous element properties - * @returns {boolean} Default implementation always returns true. + * Updates the element. This method reflects property values to attributes + * and calls `render` to render DOM via lit-html. It should be overridden to + * perform tasks on rendered DOM. Within `update()` setting properties does + * not trigger `invalidate()`, allowing property values to be computed and + * validated before DOM is rendered and updated. This means in an override + * of `update()`, before calling `super.update()` setting properties will not + * trigger another update, but after calling `super.update()` setting + * properties will trigger another update. + * * @param changedProperties Map of changed properties with old values */ - protected _shouldRender(_props: object, _changedProps: object, - _prevProps: object): boolean { - return true; - } - - /** - * Override which performs element rendering by calling - * `_render`, `_applyRender`, and finally `_didRender`. - * @param props Current element properties - * @param changedProps Changing element properties - * @param prevProps Previous element properties - */ - _propertiesChanged(props: object, changedProps: object, prevProps: object) { - super._propertiesChanged(props, changedProps, prevProps); - const result = this._render(props); - if (result && this._root !== undefined) { - this._applyRender(result, this._root!); + protected update(changedProperties: PropertyValues) { + super.update(changedProperties); + if (typeof this.render === 'function') { + (this.constructor as typeof LitElement).render(this.render(), this.renderRoot!, this.localName!); + } else { + throw new Error('render() not implemented'); } - this._didRender(props, changedProps, prevProps); - if (this.__resolveRenderComplete) { - this.__resolveRenderComplete(true); - } - } - - _flushProperties() { - this.__isChanging = true; - this.__isInvalid = false; - super._flushProperties(); - this.__isChanging = false; - } - - /** - * Override which warns when a user attempts to change a property during - * the rendering lifecycle. This is an anti-pattern and should be avoided. - * @param property {string} - * @param value {any} - * @param old {any} - */ - // tslint:disable-next-line no-any - _shouldPropertyChange(property: string, value: any, old: any) { - const change = super._shouldPropertyChange(property, value, old); - if (change && this.__isChanging) { - console.warn( - `Setting properties in response to other properties changing ` + - `considered harmful. Setting '${property}' from ` + - `'${this._getProperty(property)}' to '${value}'.`); + if (!this._firstRendered) { + this._firstRendered = true; + if (typeof this.firstRendered === 'function') { + this.firstRendered(); + } } - return change; } /** - * Implement to describe the DOM which should be rendered in the element. - * Ideally, the implementation is a pure function using only props to describe - * the element template. The implementation must return a `lit-html` - * TemplateResult. By default this template is rendered into the element's - * shadowRoot. This can be customized by implementing `_createRoot`. This - * method must be implemented. - * @param {*} _props Current element properties + Invoked on each update to perform rendering tasks. This method must return a + lit-html TemplateResult. Setting properties in `render()` will not trigger + the element to update. * @returns {TemplateResult} Must return a lit-html TemplateResult. */ - protected _render(_props: object): TemplateResult { - throw new Error('_render() not implemented'); - } + protected abstract render(): TemplateResult; /** - * Renders the given lit-html template `result` into the given `node`. - * Implement to customize the way rendering is applied. This is should not - * typically be needed and is provided for advanced use cases. - * @param result {TemplateResult} `lit-html` template result to render - * @param node {Element|DocumentFragment} node into which to render - */ - protected _applyRender(result: TemplateResult, - node: Element|DocumentFragment) { - render(result, node, this.localName!); - } - - /** - * Called after element DOM has been rendered. Implement to - * directly control rendered DOM. Typically this is not needed as `lit-html` - * can be used in the `_render` method to set properties, attributes, and - * event listeners. However, it is sometimes useful for calling methods on - * rendered elements, like calling `focus()` on an element to focus it. - * @param _props Current element properties - * @param _changedProps Changing element properties - * @param _prevProps Previous element properties - */ - protected _didRender(_props: object, _changedProps: object, - _prevProps: object) {} - - /** - * Call to request the element to asynchronously re-render regardless - * of whether or not any property changes are pending. - */ - requestRender() { this._invalidateProperties(); } - - /** - * Override which provides tracking of invalidated state. + Invoked when the element's DOM is first rendered. Override to perform + post rendering tasks via DOM APIs. For example, focusing a rendered element. + Setting properties in `firstRendered()` will trigger the element to update. + * @returns {TemplateResult} Must return a lit-html TemplateResult. */ - _invalidateProperties() { - this.__isInvalid = true; - super._invalidateProperties(); - } + protected firstRendered?(): void; - /** - * Returns a promise which resolves after the element next renders. - * The promise resolves to `true` if the element rendered and `false` if the - * element did not render. - * This is useful when users (e.g. tests) need to react to the rendered state - * of the element after a change is made. - * This can also be useful in event handlers if it is desireable to wait - * to send an event until after rendering. If possible implement the - * `_didRender` method to directly respond to rendering within the - * rendering lifecycle. - */ - get renderComplete() { - if (!this.__renderComplete) { - this.__renderComplete = new Promise((resolve) => { - this.__resolveRenderComplete = (value: boolean) => { - this.__resolveRenderComplete = this.__renderComplete = null; - resolve(value); - }; - }); - if (!this.__isInvalid && this.__resolveRenderComplete) { - Promise.resolve().then(() => this.__resolveRenderComplete!(false)); - } - } - return this.__renderComplete; - } } diff --git a/src/test/lit-element_styling_test.ts b/src/test/lit-element_styling_test.ts index bcc0bb46..a6058fdb 100644 --- a/src/test/lit-element_styling_test.ts +++ b/src/test/lit-element_styling_test.ts @@ -18,6 +18,8 @@ import { LitElement, } from '../lit-element.js'; +import {generateElementName, nextFrame, getComputedStyleValue} from './test-helpers.js'; + declare global { interface Window { ShadyDOM: any; // tslint:disable-line @@ -40,9 +42,10 @@ suite('Styling', () => { } }); - test('content shadowRoot is styled', () => { - customElements.define('s-1', class extends LitElement { - _render() { return html` + test('content shadowRoot is styled', async () => { + const name = generateElementName(); + customElements.define(name, class extends LitElement { + render() { return html` `; - customElements.define('s-2', class extends LitElement { - _render() { return html` + const name = generateElementName(); + customElements.define(name, class extends LitElement { + render() { return html` - `; + `; } - }); - const el = document.createElement('s-4'); + + firstRendered() { + this.inner = this.shadowRoot!.querySelector('x-inner')! as LitElement; + } + } + customElements.define(name, E); + const el = document.createElement(name) as E; container.appendChild(el); - const div = el.shadowRoot!.querySelector('s-4-inner')!.shadowRoot!.querySelector('div'); - assert.equal(getComputedStyle(div!).getPropertyValue('border-top-width').trim(), '8px'); + + // Workaround for Safari 9 Promise timing bugs. + await el.updateComplete && await el.inner!.updateComplete; + + await nextFrame(); + const div = el.inner!.shadowRoot!.querySelector('div'); + assert.equal(getComputedStyleValue(div!, 'border-top-width').trim(), '8px'); }); - test('elements with custom properties can move between elements', (done) => { - customElements.define('s-5-inner', class extends LitElement { - _render() { return html` + test('elements with custom properties can move between elements', async () => { + customElements.define('x-inner1', class extends LitElement { + render() { return html` - `; + `; + } + + firstRendered() { + this.inner = this.shadowRoot!.querySelector('x-inner1'); } }); - customElements.define('s-6', class extends LitElement { - _render() { return html` + const name2 = generateElementName(); + customElements.define(name2, class extends LitElement { + + render() { return html` `; } + }); - const el = document.createElement('s-5'); - const el2 = document.createElement('s-6'); + const el = document.createElement(name1) as LitElement; + const el2 = document.createElement(name2); container.appendChild(el); container.appendChild(el2); - const inner = el.shadowRoot!.querySelector('s-5-inner'); - const div = inner!.shadowRoot!.querySelector('div'); - assert.equal(getComputedStyle(div!).getPropertyValue('border-top-width').trim(), '2px'); + let div: Element|null; + + // Workaround for Safari 9 Promise timing bugs. + await el.updateComplete; + + await nextFrame(); + const inner = el.shadowRoot!.querySelector('x-inner1'); + div = inner!.shadowRoot!.querySelector('div'); + assert.equal(getComputedStyleValue(div!, 'border-top-width').trim(), '2px'); el2!.shadowRoot!.appendChild(inner!); - requestAnimationFrame(() => { - assert.equal(getComputedStyle(div!).getPropertyValue('border-top-width').trim(), '8px'); - done(); - }); + + // Workaround for Safari 9 Promise timing bugs. + await el.updateComplete; + + await nextFrame(); + assert.equal(getComputedStyleValue(div!, 'border-top-width').trim(), '8px'); }); - test('@apply renders in nested elements', () => { - customElements.define('s-7-inner', class extends LitElement { - _render() { return html` + test('@apply renders in nested elements', async () => { + customElements.define('x-inner2', class extends LitElement { + render() { return html` - `; + `; } - }); - const el = document.createElement('s-7'); + + firstRendered() { + this.inner = this.shadowRoot!.querySelector('x-inner2') as LitElement; + } + } + customElements.define(name, E); + const el = document.createElement(name) as E; container.appendChild(el); - const div = el.shadowRoot!.querySelector('s-7-inner')!.shadowRoot!.querySelector('div'); - assert.equal(getComputedStyle(div!).getPropertyValue('border-top-width').trim(), '10px'); + + // Workaround for Safari 9 Promise timing bugs. + await el.updateComplete && await el.inner!.updateComplete; + + await nextFrame(); + const div = el.shadowRoot!.querySelector('x-inner2')!.shadowRoot!.querySelector('div'); + assert.equal(getComputedStyleValue(div!, 'border-top-width').trim(), '10px'); }); }); @@ -223,8 +275,9 @@ suite('ShadyDOM', () => { test('properties in styles render with initial value and cannot be changed', async () => { let border = `6px solid blue`; - customElements.define('shady-1', class extends LitElement { - _render() { return html` + const name = generateElementName(); + customElements.define(name, class extends LitElement { + render() { return html`