mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-23 17:26:42 +00:00
Bump superstruct (#9119)
Co-authored-by: Philip Allgaier <mail@spacegaier.de>
This commit is contained in:
parent
cd3ffceeff
commit
c48a60cce6
@ -129,7 +129,7 @@
|
|||||||
"resize-observer-polyfill": "^1.5.1",
|
"resize-observer-polyfill": "^1.5.1",
|
||||||
"roboto-fontface": "^0.10.0",
|
"roboto-fontface": "^0.10.0",
|
||||||
"sortablejs": "^1.10.2",
|
"sortablejs": "^1.10.2",
|
||||||
"superstruct": "^0.10.13",
|
"superstruct": "^0.15.2",
|
||||||
"tinykeys": "^1.1.1",
|
"tinykeys": "^1.1.1",
|
||||||
"tsparticles": "^1.19.2",
|
"tsparticles": "^1.19.2",
|
||||||
"unfetch": "^4.1.0",
|
"unfetch": "^4.1.0",
|
||||||
|
@ -27,6 +27,20 @@ export const handleStructError = (
|
|||||||
failure.path.join(".")
|
failure.path.join(".")
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
} else if (failure.type === "union") {
|
||||||
|
continue;
|
||||||
|
} else if (failure.type === "enums") {
|
||||||
|
warnings.push(
|
||||||
|
hass.localize(
|
||||||
|
"ui.errors.config.key_wrong_type",
|
||||||
|
"key",
|
||||||
|
failure.path.join("."),
|
||||||
|
"type_correct",
|
||||||
|
failure.message.replace("Expected ", "").split(", ")[0],
|
||||||
|
"type_wrong",
|
||||||
|
JSON.stringify(failure.value)
|
||||||
|
)
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
warnings.push(
|
warnings.push(
|
||||||
hass.localize(
|
hass.localize(
|
||||||
@ -34,7 +48,7 @@ export const handleStructError = (
|
|||||||
"key",
|
"key",
|
||||||
failure.path.join("."),
|
failure.path.join("."),
|
||||||
"type_correct",
|
"type_correct",
|
||||||
failure.type,
|
failure.refinement || failure.type,
|
||||||
"type_wrong",
|
"type_wrong",
|
||||||
JSON.stringify(failure.value)
|
JSON.stringify(failure.value)
|
||||||
)
|
)
|
||||||
|
@ -1,30 +1,22 @@
|
|||||||
import { struct, StructContext, StructResult } from "superstruct";
|
import { refine, string } from "superstruct";
|
||||||
|
|
||||||
const isEntityId = (value: unknown, context: StructContext): StructResult => {
|
const isEntityId = (value: string): boolean => {
|
||||||
if (typeof value !== "string") {
|
|
||||||
return [context.fail({ type: "string" })];
|
|
||||||
}
|
|
||||||
if (!value.includes(".")) {
|
if (!value.includes(".")) {
|
||||||
return [
|
return false;
|
||||||
context.fail({
|
|
||||||
type: "Entity ID should be in the format 'domain.entity'",
|
|
||||||
}),
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const EntityId = struct("entity-id", isEntityId);
|
export const entityId = () =>
|
||||||
|
refine(string(), "entity ID (domain.entity)", isEntityId);
|
||||||
|
|
||||||
const isEntityIdOrAll = (
|
const isEntityIdOrAll = (value: string): boolean => {
|
||||||
value: unknown,
|
if (value === "all") {
|
||||||
context: StructContext
|
|
||||||
): StructResult => {
|
|
||||||
if (typeof value === "string" && value === "all") {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return isEntityId(value, context);
|
return isEntityId(value);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const EntityIdOrAll = struct("entity-id-all", isEntityIdOrAll);
|
export const entityIdOrAll = () =>
|
||||||
|
refine(string(), "entity ID (domain.entity or all)", isEntityIdOrAll);
|
||||||
|
@ -1,17 +1,10 @@
|
|||||||
import { struct, StructContext, StructResult } from "superstruct";
|
import { refine, string } from "superstruct";
|
||||||
|
|
||||||
const isIcon = (value: unknown, context: StructContext): StructResult => {
|
const isIcon = (value: string) => {
|
||||||
if (typeof value !== "string") {
|
|
||||||
return [context.fail({ type: "string" })];
|
|
||||||
}
|
|
||||||
if (!value.includes(":")) {
|
if (!value.includes(":")) {
|
||||||
return [
|
return false;
|
||||||
context.fail({
|
|
||||||
type: "icon should be in the format 'mdi:icon'",
|
|
||||||
}),
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const Icon = struct("icon", isIcon);
|
export const icon = () => refine(string(), "icon (mdi:icon-name)", isIcon);
|
||||||
|
@ -13,14 +13,14 @@ import { any, assert, object, optional, string } from "superstruct";
|
|||||||
import { fireEvent } from "../../../../../common/dom/fire_event";
|
import { fireEvent } from "../../../../../common/dom/fire_event";
|
||||||
import { ServiceAction } from "../../../../../data/script";
|
import { ServiceAction } from "../../../../../data/script";
|
||||||
import type { HomeAssistant } from "../../../../../types";
|
import type { HomeAssistant } from "../../../../../types";
|
||||||
import { EntityIdOrAll } from "../../../../../common/structs/is-entity-id";
|
import { entityIdOrAll } from "../../../../../common/structs/is-entity-id";
|
||||||
import { ActionElement } from "../ha-automation-action-row";
|
import { ActionElement } from "../ha-automation-action-row";
|
||||||
import "../../../../../components/ha-service-control";
|
import "../../../../../components/ha-service-control";
|
||||||
import { hasTemplate } from "../../../../../common/string/has-template";
|
import { hasTemplate } from "../../../../../common/string/has-template";
|
||||||
|
|
||||||
const actionStruct = object({
|
const actionStruct = object({
|
||||||
service: optional(string()),
|
service: optional(string()),
|
||||||
entity_id: optional(EntityIdOrAll),
|
entity_id: optional(entityIdOrAll()),
|
||||||
target: optional(any()),
|
target: optional(any()),
|
||||||
data: optional(any()),
|
data: optional(any()),
|
||||||
});
|
});
|
||||||
|
@ -22,6 +22,7 @@ import {
|
|||||||
union,
|
union,
|
||||||
} from "superstruct";
|
} from "superstruct";
|
||||||
import { fireEvent, HASSDomEvent } from "../../../../common/dom/fire_event";
|
import { fireEvent, HASSDomEvent } from "../../../../common/dom/fire_event";
|
||||||
|
import { entityId } from "../../../../common/structs/is-entity-id";
|
||||||
import { computeRTLDirection } from "../../../../common/util/compute_rtl";
|
import { computeRTLDirection } from "../../../../common/util/compute_rtl";
|
||||||
import "../../../../components/entity/state-badge";
|
import "../../../../components/entity/state-badge";
|
||||||
import "../../../../components/ha-card";
|
import "../../../../components/ha-card";
|
||||||
@ -49,6 +50,7 @@ import { configElementStyle } from "./config-elements-style";
|
|||||||
const cardConfigStruct = object({
|
const cardConfigStruct = object({
|
||||||
type: string(),
|
type: string(),
|
||||||
title: optional(union([string(), boolean()])),
|
title: optional(union([string(), boolean()])),
|
||||||
|
entity: optional(entityId()),
|
||||||
theme: optional(string()),
|
theme: optional(string()),
|
||||||
show_header_toggle: optional(boolean()),
|
show_header_toggle: optional(boolean()),
|
||||||
state_color: optional(boolean()),
|
state_color: optional(boolean()),
|
||||||
|
@ -20,7 +20,7 @@ import {
|
|||||||
import { fireEvent } from "../../../../common/dom/fire_event";
|
import { fireEvent } from "../../../../common/dom/fire_event";
|
||||||
import { HomeAssistant } from "../../../../types";
|
import { HomeAssistant } from "../../../../types";
|
||||||
import { HistoryGraphCardConfig } from "../../cards/types";
|
import { HistoryGraphCardConfig } from "../../cards/types";
|
||||||
import { EntityId } from "../../../../common/structs/is-entity-id";
|
import { entityId } from "../../../../common/structs/is-entity-id";
|
||||||
import "../../components/hui-entity-editor";
|
import "../../components/hui-entity-editor";
|
||||||
import { EntityConfig } from "../../entity-rows/types";
|
import { EntityConfig } from "../../entity-rows/types";
|
||||||
import { LovelaceCardEditor } from "../../types";
|
import { LovelaceCardEditor } from "../../types";
|
||||||
@ -30,10 +30,10 @@ import { configElementStyle } from "./config-elements-style";
|
|||||||
|
|
||||||
const entitiesConfigStruct = union([
|
const entitiesConfigStruct = union([
|
||||||
object({
|
object({
|
||||||
entity: EntityId,
|
entity: entityId(),
|
||||||
name: optional(string()),
|
name: optional(string()),
|
||||||
}),
|
}),
|
||||||
EntityId,
|
entityId(),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const cardConfigStruct = object({
|
const cardConfigStruct = object({
|
||||||
|
@ -12220,10 +12220,10 @@ subarg@^1.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
minimist "^1.1.0"
|
minimist "^1.1.0"
|
||||||
|
|
||||||
superstruct@^0.10.13:
|
superstruct@^0.15.2:
|
||||||
version "0.10.13"
|
version "0.15.2"
|
||||||
resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.10.13.tgz#705535a5598ff231bd976601a7b6b534a71a821b"
|
resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.15.2.tgz#ab7fb84c455a9d7da84c11cfd82c85a4fee9dfff"
|
||||||
integrity sha512-W4SitSZ9MOyMPbHreoZVEneSZyPEeNGbdfJo/7FkJyRs/M3wQRFzq+t3S/NBwlrFSWdx1ONLjLb9pB+UKe4IqQ==
|
integrity sha512-OsJI8lv6/PsInwCf4ultejmsJYseYshKhkcbDendqNwj3MeGXENajl3ujMGMU4FDDSSeJTOwFn9T6pnfsS9DYA==
|
||||||
|
|
||||||
supports-color@6.0.0:
|
supports-color@6.0.0:
|
||||||
version "6.0.0"
|
version "6.0.0"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user