Fix yaml name collision in card editor (#4079)

* Fix `yaml` name collision

* Add types for js-yaml change to named imports
This commit is contained in:
Bram Kragten 2019-10-21 17:36:09 +02:00 committed by GitHub
parent 6d10a5dd4c
commit 5e3cb812ec
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 30 additions and 24 deletions

View File

@ -1,6 +1,6 @@
import { html } from "@polymer/polymer/lib/utils/html-tag"; import { html } from "@polymer/polymer/lib/utils/html-tag";
import { PolymerElement } from "@polymer/polymer/polymer-element"; import { PolymerElement } from "@polymer/polymer/polymer-element";
import JsYaml from "js-yaml"; import { safeLoad } from "js-yaml";
import { createCardElement } from "../../../src/panels/lovelace/common/create-card-element"; import { createCardElement } from "../../../src/panels/lovelace/common/create-card-element";
@ -62,7 +62,7 @@ class DemoCard extends PolymerElement {
card.removeChild(card.lastChild); card.removeChild(card.lastChild);
} }
const el = createCardElement(JsYaml.safeLoad(config.config)[0]); const el = createCardElement(safeLoad(config.config)[0]);
el.hass = this.hass; el.hass = this.hass;
card.appendChild(el); card.appendChild(el);
} }

View File

@ -119,6 +119,7 @@
"@types/chromecast-caf-sender": "^1.0.1", "@types/chromecast-caf-sender": "^1.0.1",
"@types/codemirror": "^0.0.78", "@types/codemirror": "^0.0.78",
"@types/hls.js": "^0.12.3", "@types/hls.js": "^0.12.3",
"@types/js-yaml": "^3.12.1",
"@types/leaflet": "^1.4.3", "@types/leaflet": "^1.4.3",
"@types/memoize-one": "4.1.0", "@types/memoize-one": "4.1.0",
"@types/mocha": "^5.2.6", "@types/mocha": "^5.2.6",

View File

@ -1,5 +1,5 @@
import { h, Component } from "preact"; import { h, Component } from "preact";
import yaml from "js-yaml"; import { safeDump, safeLoad } from "js-yaml";
import "../../../components/ha-code-editor"; import "../../../components/ha-code-editor";
const isEmpty = (obj: object) => { const isEmpty = (obj: object) => {
@ -19,7 +19,7 @@ export default class YAMLTextArea extends Component<any, any> {
try { try {
value = value =
props.value && !isEmpty(props.value) props.value && !isEmpty(props.value)
? yaml.safeDump(props.value) ? safeDump(props.value)
: undefined; : undefined;
} catch (err) { } catch (err) {
alert(`There was an error converting to YAML: ${err}`); alert(`There was an error converting to YAML: ${err}`);
@ -40,7 +40,7 @@ export default class YAMLTextArea extends Component<any, any> {
if (value) { if (value) {
try { try {
parsed = yaml.safeLoad(value); parsed = safeLoad(value);
isValid = true; isValid = true;
} catch (err) { } catch (err) {
// Invalid YAML // Invalid YAML

View File

@ -4,7 +4,7 @@ import "@polymer/paper-input/paper-input";
import { html } from "@polymer/polymer/lib/utils/html-tag"; import { html } from "@polymer/polymer/lib/utils/html-tag";
import { PolymerElement } from "@polymer/polymer/polymer-element"; import { PolymerElement } from "@polymer/polymer/polymer-element";
import yaml from "js-yaml"; import { safeLoad } from "js-yaml";
import "../../../components/ha-code-editor"; import "../../../components/ha-code-editor";
import "../../../resources/ha-style"; import "../../../resources/ha-style";
@ -138,7 +138,7 @@ class HaPanelDevEvent extends EventsMixin(LocalizeMixin(PolymerElement)) {
_computeParsedEventData(eventData) { _computeParsedEventData(eventData) {
try { try {
return eventData.trim() ? yaml.safeLoad(eventData) : {}; return eventData.trim() ? safeLoad(eventData) : {};
} catch (err) { } catch (err) {
return ERROR_SENTINEL; return ERROR_SENTINEL;
} }

View File

@ -2,7 +2,7 @@ import "@material/mwc-button";
import { html } from "@polymer/polymer/lib/utils/html-tag"; import { html } from "@polymer/polymer/lib/utils/html-tag";
import { PolymerElement } from "@polymer/polymer/polymer-element"; import { PolymerElement } from "@polymer/polymer/polymer-element";
import yaml from "js-yaml"; import { safeDump, safeLoad } from "js-yaml";
import { ENTITY_COMPONENT_DOMAINS } from "../../../data/entity"; import { ENTITY_COMPONENT_DOMAINS } from "../../../data/entity";
import "../../../components/entity/ha-entity-picker"; import "../../../components/entity/ha-entity-picker";
@ -266,7 +266,7 @@ class HaPanelDevService extends LocalizeMixin(PolymerElement) {
_computeParsedServiceData(serviceData) { _computeParsedServiceData(serviceData) {
try { try {
return serviceData.trim() ? yaml.safeLoad(serviceData) : {}; return serviceData.trim() ? safeLoad(serviceData) : {};
} catch (err) { } catch (err) {
return ERROR_SENTINEL; return ERROR_SENTINEL;
} }
@ -310,18 +310,18 @@ class HaPanelDevService extends LocalizeMixin(PolymerElement) {
if (attribute.example) { if (attribute.example) {
let value = ""; let value = "";
try { try {
value = yaml.safeLoad(attribute.example); value = safeLoad(attribute.example);
} catch (err) { } catch (err) {
value = attribute.example; value = attribute.example;
} }
example[attribute.key] = value; example[attribute.key] = value;
} }
}); });
this.serviceData = yaml.safeDump(example); this.serviceData = safeDump(example);
} }
_entityPicked(ev) { _entityPicked(ev) {
this.serviceData = yaml.safeDump({ this.serviceData = safeDump({
...this.parsedJSON, ...this.parsedJSON,
entity_id: ev.target.value, entity_id: ev.target.value,
}); });

View File

@ -4,7 +4,7 @@ import "@polymer/paper-input/paper-input";
import { html } from "@polymer/polymer/lib/utils/html-tag"; import { html } from "@polymer/polymer/lib/utils/html-tag";
import { PolymerElement } from "@polymer/polymer/polymer-element"; import { PolymerElement } from "@polymer/polymer/polymer-element";
import yaml from "js-yaml"; import { safeDump, safeLoad } from "js-yaml";
import "../../../components/entity/ha-entity-picker"; import "../../../components/entity/ha-entity-picker";
import "../../../components/ha-code-editor"; import "../../../components/ha-code-editor";
@ -235,14 +235,14 @@ class HaPanelDevState extends EventsMixin(LocalizeMixin(PolymerElement)) {
var state = ev.model.entity; var state = ev.model.entity;
this._entityId = state.entity_id; this._entityId = state.entity_id;
this._state = state.state; this._state = state.state;
this._stateAttributes = yaml.safeDump(state.attributes); this._stateAttributes = safeDump(state.attributes);
ev.preventDefault(); ev.preventDefault();
} }
entityIdChanged() { entityIdChanged() {
var state = this.hass.states[this._entityId]; var state = this.hass.states[this._entityId];
this._state = state.state; this._state = state.state;
this._stateAttributes = yaml.safeDump(state.attributes); this._stateAttributes = safeDump(state.attributes);
} }
entityMoreInfo(ev) { entityMoreInfo(ev) {
@ -363,7 +363,7 @@ class HaPanelDevState extends EventsMixin(LocalizeMixin(PolymerElement)) {
_computeParsedStateAttributes(stateAttributes) { _computeParsedStateAttributes(stateAttributes) {
try { try {
return stateAttributes.trim() ? yaml.safeLoad(stateAttributes) : {}; return stateAttributes.trim() ? safeLoad(stateAttributes) : {};
} catch (err) { } catch (err) {
return ERROR_SENTINEL; return ERROR_SENTINEL;
} }

View File

@ -7,7 +7,7 @@ import {
css, css,
CSSResult, CSSResult,
} from "lit-element"; } from "lit-element";
import yaml from "js-yaml"; import { safeDump } from "js-yaml";
import { LovelaceCard } from "../types"; import { LovelaceCard } from "../types";
import { HomeAssistant } from "../../../types"; import { HomeAssistant } from "../../../types";
@ -46,7 +46,7 @@ export class HuiErrorCard extends LitElement implements LovelaceCard {
return html` return html`
${this._config.error} ${this._config.error}
<pre>${yaml.safeDump(this._config.origConfig)}</pre> <pre>${safeDump(this._config.origConfig)}</pre>
`; `;
} }

View File

@ -8,7 +8,7 @@ import {
property, property,
} from "lit-element"; } from "lit-element";
import yaml from "js-yaml"; import { safeDump, safeLoad } from "js-yaml";
import "@material/mwc-button"; import "@material/mwc-button";
import { HomeAssistant } from "../../../../types"; import { HomeAssistant } from "../../../../types";
@ -63,7 +63,7 @@ export class HuiCardEditor extends LitElement {
public set yaml(_yaml: string) { public set yaml(_yaml: string) {
this._yaml = _yaml; this._yaml = _yaml;
try { try {
this._config = yaml.safeLoad(this.yaml); this._config = safeLoad(this.yaml);
this._updateConfigElement(); this._updateConfigElement();
this._error = undefined; this._error = undefined;
} catch (err) { } catch (err) {
@ -80,7 +80,7 @@ export class HuiCardEditor extends LitElement {
} }
public set value(config: LovelaceCardConfig | undefined) { public set value(config: LovelaceCardConfig | undefined) {
if (JSON.stringify(config) !== JSON.stringify(this._config || {})) { if (JSON.stringify(config) !== JSON.stringify(this._config || {})) {
this.yaml = yaml.safeDump(config); this.yaml = safeDump(config);
} }
} }

View File

@ -1,6 +1,6 @@
import { LitElement, html, TemplateResult, CSSResult, css } from "lit-element"; import { LitElement, html, TemplateResult, CSSResult, css } from "lit-element";
import { classMap } from "lit-html/directives/class-map"; import { classMap } from "lit-html/directives/class-map";
import yaml from "js-yaml"; import { safeDump, safeLoad } from "js-yaml";
import "@polymer/app-layout/app-header-layout/app-header-layout"; import "@polymer/app-layout/app-header-layout/app-header-layout";
import "@polymer/app-layout/app-header/app-header"; import "@polymer/app-layout/app-header/app-header";
@ -96,7 +96,7 @@ class LovelaceFullConfigEditor extends LitElement {
} }
protected firstUpdated() { protected firstUpdated() {
this.yamlEditor.value = yaml.safeDump(this.lovelace!.config); this.yamlEditor.value = safeDump(this.lovelace!.config);
} }
static get styles(): CSSResult[] { static get styles(): CSSResult[] {
@ -183,7 +183,7 @@ class LovelaceFullConfigEditor extends LitElement {
let value; let value;
try { try {
value = yaml.safeLoad(this.yamlEditor.value); value = safeLoad(this.yamlEditor.value);
} catch (err) { } catch (err) {
alert(`Unable to parse YAML: ${err}`); alert(`Unable to parse YAML: ${err}`);
this._saving = false; this._saving = false;

View File

@ -1863,6 +1863,11 @@
resolved "https://registry.yarnpkg.com/@types/is-windows/-/is-windows-0.2.0.tgz#6f24ee48731d31168ea510610d6dd15e5fc9c6ff" resolved "https://registry.yarnpkg.com/@types/is-windows/-/is-windows-0.2.0.tgz#6f24ee48731d31168ea510610d6dd15e5fc9c6ff"
integrity sha1-byTuSHMdMRaOpRBhDW3RXl/Jxv8= integrity sha1-byTuSHMdMRaOpRBhDW3RXl/Jxv8=
"@types/js-yaml@^3.12.1":
version "3.12.1"
resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.12.1.tgz#5c6f4a1eabca84792fbd916f0cb40847f123c656"
integrity sha512-SGGAhXLHDx+PK4YLNcNGa6goPf9XRWQNAUUbffkwVGGXIxmDKWyGGL4inzq2sPmExu431Ekb9aEMn9BkPqEYFA==
"@types/json5@^0.0.29": "@types/json5@^0.0.29":
version "0.0.29" version "0.0.29"
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"