@digital-alchemy/hass 0.3.8 → 0.3.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/dynamic.d.ts +15 -0
- package/dist/dynamic.js.map +1 -1
- package/dist/extensions/area.extension.d.ts +10 -0
- package/dist/extensions/area.extension.js +47 -0
- package/dist/extensions/area.extension.js.map +1 -0
- package/dist/extensions/backup.extension.d.ts +7 -0
- package/dist/extensions/{utilities.extension.js → backup.extension.js} +8 -11
- package/dist/extensions/backup.extension.js.map +1 -0
- package/dist/extensions/conversation.extension.d.ts +7 -0
- package/dist/extensions/conversation.extension.js +40 -0
- package/dist/extensions/conversation.extension.js.map +1 -0
- package/dist/extensions/device.extension.d.ts +6 -0
- package/dist/extensions/device.extension.js +37 -0
- package/dist/extensions/device.extension.js.map +1 -0
- package/dist/extensions/{entity-manager.extension.d.ts → entity.extension.d.ts} +21 -5
- package/dist/extensions/{entity-manager.extension.js → entity.extension.js} +105 -15
- package/dist/extensions/entity.extension.js.map +1 -0
- package/dist/extensions/floor.extension.d.ts +15 -0
- package/dist/extensions/floor.extension.js +49 -0
- package/dist/extensions/floor.extension.js.map +1 -0
- package/dist/extensions/index.d.ts +8 -2
- package/dist/extensions/index.js +8 -2
- package/dist/extensions/index.js.map +1 -1
- package/dist/extensions/label.extension.d.ts +15 -0
- package/dist/extensions/label.extension.js +49 -0
- package/dist/extensions/label.extension.js.map +1 -0
- package/dist/extensions/registry.extension.d.ts +8 -0
- package/dist/extensions/registry.extension.js +34 -0
- package/dist/extensions/registry.extension.js.map +1 -0
- package/dist/extensions/websocket-api.extension.d.ts +4 -3
- package/dist/extensions/websocket-api.extension.js +17 -5
- package/dist/extensions/websocket-api.extension.js.map +1 -1
- package/dist/extensions/zone.extension.d.ts +14 -0
- package/dist/extensions/zone.extension.js +47 -0
- package/dist/extensions/zone.extension.js.map +1 -0
- package/dist/hass.module.d.ts +16 -5
- package/dist/hass.module.js +16 -5
- package/dist/hass.module.js.map +1 -1
- package/dist/helpers/device.helper.d.ts +23 -0
- package/dist/helpers/device.helper.js +8 -0
- package/dist/helpers/device.helper.js.map +1 -0
- package/dist/helpers/entity-state.helper.d.ts +39 -0
- package/dist/helpers/entity-state.helper.js.map +1 -1
- package/dist/helpers/fetch/configuration.d.ts +32 -0
- package/dist/helpers/fetch/configuration.js +7 -0
- package/dist/helpers/fetch/configuration.js.map +1 -1
- package/dist/helpers/index.d.ts +2 -0
- package/dist/helpers/index.js +2 -0
- package/dist/helpers/index.js.map +1 -1
- package/dist/helpers/manifest.helper.d.ts +1 -0
- package/dist/helpers/manifest.helper.js +3 -0
- package/dist/helpers/manifest.helper.js.map +1 -0
- package/dist/helpers/registry.d.ts +152 -0
- package/dist/helpers/registry.js +27 -0
- package/dist/helpers/registry.js.map +1 -0
- package/dist/helpers/websocket.helper.d.ts +10 -41
- package/package.json +15 -15
- package/dist/extensions/entity-manager.extension.js.map +0 -1
- package/dist/extensions/utilities.extension.d.ts +0 -9
- package/dist/extensions/utilities.extension.js.map +0 -1
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
This repository contains generic extensions for interacting with Home Assistant, including websocket & REST API adapters, entity & event management, backup workflows, and more.
|
|
4
4
|
|
|
5
5
|
- Extended docs: https://docs.digital-alchemy.app/Hass
|
|
6
|
-
- [Discord](https://discord.
|
|
6
|
+
- [Discord](https://discord.gg/JkZ35Gv97Y)
|
|
7
7
|
|
|
8
8
|
## ⭐ Features
|
|
9
9
|
### 📝 First-class Editor Experiences
|
package/dist/dynamic.d.ts
CHANGED
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
import { PICK_ENTITY } from "./helpers";
|
|
2
|
+
export type TFloorId = string & {
|
|
3
|
+
floor: boolean;
|
|
4
|
+
};
|
|
5
|
+
export type TAreaId = string & {
|
|
6
|
+
area: true;
|
|
7
|
+
};
|
|
8
|
+
export type TLabelId = string & {
|
|
9
|
+
label: string;
|
|
10
|
+
};
|
|
11
|
+
export type TDeviceId = string & {
|
|
12
|
+
device: true;
|
|
13
|
+
};
|
|
14
|
+
export type TZoneId = string & {
|
|
15
|
+
zone: true;
|
|
16
|
+
};
|
|
2
17
|
/**
|
|
3
18
|
* ## THIS FILE IS INTENDED TO BE REPLACED
|
|
4
19
|
*
|
package/dist/dynamic.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamic.js","sourceRoot":"","sources":["../src/dynamic.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"dynamic.js","sourceRoot":"","sources":["../src/dynamic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { TServiceParams } from "@digital-alchemy/core";
|
|
2
|
+
import { TAreaId } from "../dynamic";
|
|
3
|
+
import { AreaCreate, AreaDetails } from "../helpers";
|
|
4
|
+
export declare function Area({ hass, context, config, logger }: TServiceParams): {
|
|
5
|
+
create(details: AreaCreate): Promise<void>;
|
|
6
|
+
current: AreaDetails[];
|
|
7
|
+
delete(area_id: TAreaId): Promise<void>;
|
|
8
|
+
list(): Promise<AreaDetails[]>;
|
|
9
|
+
update(details: AreaDetails): Promise<void>;
|
|
10
|
+
};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Area = void 0;
|
|
4
|
+
function Area({ hass, context, config, logger }) {
|
|
5
|
+
hass.socket.onConnect(async () => {
|
|
6
|
+
if (!config.hass.AUTO_CONNECT_SOCKET || !config.hass.MANAGE_REGISTRY) {
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
hass.area.current = await hass.area.list();
|
|
10
|
+
hass.socket.subscribe({
|
|
11
|
+
context,
|
|
12
|
+
event_type: "area_registry_updated",
|
|
13
|
+
async exec() {
|
|
14
|
+
hass.area.current = await hass.area.list();
|
|
15
|
+
logger.debug(`area registry updated`);
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
return {
|
|
20
|
+
async create(details) {
|
|
21
|
+
await hass.socket.sendMessage({
|
|
22
|
+
type: "config/area_registry/create",
|
|
23
|
+
...details,
|
|
24
|
+
});
|
|
25
|
+
},
|
|
26
|
+
current: [],
|
|
27
|
+
async delete(area_id) {
|
|
28
|
+
await hass.socket.sendMessage({
|
|
29
|
+
area_id,
|
|
30
|
+
type: "config/area_registry/delete",
|
|
31
|
+
});
|
|
32
|
+
},
|
|
33
|
+
async list() {
|
|
34
|
+
return await hass.socket.sendMessage({
|
|
35
|
+
type: "config/area_registry/list",
|
|
36
|
+
});
|
|
37
|
+
},
|
|
38
|
+
async update(details) {
|
|
39
|
+
await hass.socket.sendMessage({
|
|
40
|
+
type: "config/area_registry/update",
|
|
41
|
+
...details,
|
|
42
|
+
});
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
exports.Area = Area;
|
|
47
|
+
//# sourceMappingURL=area.extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"area.extension.js","sourceRoot":"","sources":["../../src/extensions/area.extension.ts"],"names":[],"mappings":";;;AAKA,SAAgB,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAkB;IACpE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;QAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YACrE,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;YACpB,OAAO;YACP,UAAU,EAAE,uBAAuB;YACnC,KAAK,CAAC,IAAI;gBACR,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC3C,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;YACxC,CAAC;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,OAAmB;YAC9B,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;gBAC5B,IAAI,EAAE,6BAA6B;gBACnC,GAAG,OAAO;aACX,CAAC,CAAC;QACL,CAAC;QACD,OAAO,EAAE,EAAmB;QAC5B,KAAK,CAAC,MAAM,CAAC,OAAgB;YAC3B,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;gBAC5B,OAAO;gBACP,IAAI,EAAE,6BAA6B;aACpC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,IAAI;YACR,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAgB;gBAClD,IAAI,EAAE,2BAA2B;aAClC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,OAAoB;YAC/B,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;gBAC5B,IAAI,EAAE,6BAA6B;gBACnC,GAAG,OAAO;aACX,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AA1CD,oBA0CC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { TServiceParams } from "@digital-alchemy/core";
|
|
2
|
+
import { BackupResponse, HomeAssistantBackup } from "../helpers";
|
|
3
|
+
export declare function Backup({ logger, hass }: TServiceParams): {
|
|
4
|
+
generate: () => Promise<HomeAssistantBackup>;
|
|
5
|
+
list: () => Promise<BackupResponse>;
|
|
6
|
+
remove: (slug: string) => Promise<void>;
|
|
7
|
+
};
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.Backup = void 0;
|
|
4
4
|
const core_1 = require("@digital-alchemy/core");
|
|
5
|
-
|
|
6
|
-
function Utilities({ logger, hass }) {
|
|
5
|
+
function Backup({ logger, hass }) {
|
|
7
6
|
async function generate() {
|
|
8
7
|
let current = await list();
|
|
9
8
|
// const originalLength = current.backups.length;
|
|
@@ -12,9 +11,7 @@ function Utilities({ logger, hass }) {
|
|
|
12
11
|
}
|
|
13
12
|
else {
|
|
14
13
|
logger.info({ name: generate }, "initiating new backup");
|
|
15
|
-
hass.socket.sendMessage({
|
|
16
|
-
type: __1.HASSIO_WS_COMMAND.generate_backup,
|
|
17
|
-
});
|
|
14
|
+
hass.socket.sendMessage({ type: "backup/generate" });
|
|
18
15
|
while (current.backing_up === false) {
|
|
19
16
|
logger.debug({ name: generate }, "... waiting");
|
|
20
17
|
await (0, core_1.sleep)(core_1.HALF * core_1.SECOND);
|
|
@@ -32,14 +29,14 @@ function Utilities({ logger, hass }) {
|
|
|
32
29
|
async function list() {
|
|
33
30
|
logger.trace({ name: list }, "send");
|
|
34
31
|
return await hass.socket.sendMessage({
|
|
35
|
-
type:
|
|
32
|
+
type: "backup/info",
|
|
36
33
|
});
|
|
37
34
|
}
|
|
38
35
|
async function remove(slug) {
|
|
39
36
|
logger.trace({ name: remove }, "send");
|
|
40
|
-
await hass.socket.sendMessage({ slug, type:
|
|
37
|
+
await hass.socket.sendMessage({ slug, type: "backup/remove" }, false);
|
|
41
38
|
}
|
|
42
|
-
return {
|
|
39
|
+
return { generate, list, remove };
|
|
43
40
|
}
|
|
44
|
-
exports.
|
|
45
|
-
//# sourceMappingURL=
|
|
41
|
+
exports.Backup = Backup;
|
|
42
|
+
//# sourceMappingURL=backup.extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup.extension.js","sourceRoot":"","sources":["../../src/extensions/backup.extension.ts"],"names":[],"mappings":";;;AAAA,gDAA4E;AAI5E,SAAgB,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAkB;IACrD,KAAK,UAAU,QAAQ;QACrB,IAAI,OAAO,GAAG,MAAM,IAAI,EAAE,CAAC;QAC3B,iDAAiD;QACjD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CACT,EAAE,IAAI,EAAE,QAAQ,EAAE,EAClB,0EAA0E,CAC3E,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,uBAAuB,CAAC,CAAC;YACzD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;YACrD,OAAO,OAAO,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;gBACpC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,aAAa,CAAC,CAAC;gBAChD,MAAM,IAAA,YAAK,EAAC,WAAI,GAAG,aAAM,CAAC,CAAC;gBAC3B,OAAO,GAAG,MAAM,IAAI,EAAE,CAAC;YACzB,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YACnC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,aAAa,CAAC,CAAC;YAChD,MAAM,IAAA,YAAK,EAAC,WAAI,GAAG,aAAM,CAAC,CAAC;YAC3B,OAAO,GAAG,MAAM,IAAI,EAAE,CAAC;QACzB,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,iBAAiB,CAAC,CAAC;QACnD,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK,UAAU,IAAI;QACjB,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;QACrC,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAiB;YACnD,IAAI,EAAE,aAAa;SACpB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,UAAU,MAAM,CAAC,IAAY;QAChC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC;QACvC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,KAAK,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACpC,CAAC;AAxCD,wBAwCC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { TServiceParams } from "@digital-alchemy/core";
|
|
2
|
+
import { EditAliasOptions, ToggleExpose } from "../helpers";
|
|
3
|
+
export declare function Conversation({ hass, logger }: TServiceParams): {
|
|
4
|
+
addAlias: ({ entity, alias }: EditAliasOptions) => Promise<void>;
|
|
5
|
+
removeAlias: ({ entity, alias }: EditAliasOptions) => Promise<void>;
|
|
6
|
+
setConversational: ({ entity_ids, assistants, should_expose, }: ToggleExpose) => Promise<void>;
|
|
7
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Conversation = void 0;
|
|
4
|
+
const helpers_1 = require("../helpers");
|
|
5
|
+
function Conversation({ hass, logger }) {
|
|
6
|
+
async function addAlias({ entity, alias }) {
|
|
7
|
+
const current = await hass.entity.registry.get(entity);
|
|
8
|
+
if (current?.aliases?.includes(alias)) {
|
|
9
|
+
logger.debug({ name: entity }, `already has alias {%s}`, alias);
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
await hass.socket.sendMessage({
|
|
13
|
+
entity_id: entity,
|
|
14
|
+
type: helpers_1.UPDATE_REGISTRY,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
async function removeAlias({ entity, alias }) {
|
|
18
|
+
const current = await hass.entity.registry.get(entity);
|
|
19
|
+
if (!current?.aliases?.includes(alias)) {
|
|
20
|
+
logger.debug({ name: entity }, `does not have alias {%s}`, alias);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
await hass.socket.sendMessage({ entity_id: entity, type: helpers_1.UPDATE_REGISTRY });
|
|
24
|
+
}
|
|
25
|
+
async function setConversational({ entity_ids, assistants, should_expose, }) {
|
|
26
|
+
await hass.socket.sendMessage({
|
|
27
|
+
assistants: [assistants].flat(),
|
|
28
|
+
entity_ids: [entity_ids].flat(),
|
|
29
|
+
should_expose,
|
|
30
|
+
type: helpers_1.UPDATE_REGISTRY,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
addAlias,
|
|
35
|
+
removeAlias,
|
|
36
|
+
setConversational,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
exports.Conversation = Conversation;
|
|
40
|
+
//# sourceMappingURL=conversation.extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation.extension.js","sourceRoot":"","sources":["../../src/extensions/conversation.extension.ts"],"names":[],"mappings":";;;AAEA,wCAA6E;AAE7E,SAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAkB;IAC3D,KAAK,UAAU,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,EAAoB;QACzD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACtC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,wBAAwB,EAAE,KAAK,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QACD,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;YAC5B,SAAS,EAAE,MAAM;YACjB,IAAI,EAAE,yBAAe;SACtB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,UAAU,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,EAAoB;QAC5D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACvC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,0BAA0B,EAAE,KAAK,CAAC,CAAC;YAClE,OAAO;QACT,CAAC;QACD,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAe,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,KAAK,UAAU,iBAAiB,CAAC,EAC/B,UAAU,EACV,UAAU,EACV,aAAa,GACA;QACb,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;YAC5B,UAAU,EAAE,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE;YAC/B,UAAU,EAAE,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE;YAC/B,aAAa;YACb,IAAI,EAAE,yBAAe;SACtB,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,QAAQ;QACR,WAAW;QACX,iBAAiB;KAClB,CAAC;AACJ,CAAC;AAxCD,oCAwCC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Device = void 0;
|
|
4
|
+
function Device({ hass, config, context, logger }) {
|
|
5
|
+
hass.socket.onConnect(async () => {
|
|
6
|
+
if (!config.hass.AUTO_CONNECT_SOCKET || !config.hass.MANAGE_REGISTRY) {
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
hass.device.current = await hass.device.list();
|
|
10
|
+
hass.socket.subscribe({
|
|
11
|
+
context,
|
|
12
|
+
event_type: "device_registry_updated",
|
|
13
|
+
async exec() {
|
|
14
|
+
hass.device.current = await hass.device.list();
|
|
15
|
+
logger.debug(`device registry updated`);
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
await SubscribeUpdates();
|
|
19
|
+
});
|
|
20
|
+
async function SubscribeUpdates() {
|
|
21
|
+
await hass.socket.sendMessage({
|
|
22
|
+
event_type: "device_registry_updated",
|
|
23
|
+
type: "subscribe_events",
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
async function list() {
|
|
27
|
+
return await hass.socket.sendMessage({
|
|
28
|
+
type: "config/device_registry/list",
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
current: [],
|
|
33
|
+
list,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
exports.Device = Device;
|
|
37
|
+
//# sourceMappingURL=device.extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device.extension.js","sourceRoot":"","sources":["../../src/extensions/device.extension.ts"],"names":[],"mappings":";;;AAIA,SAAgB,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAkB;IACtE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;QAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YACrE,OAAO;QACT,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;YACpB,OAAO;YACP,UAAU,EAAE,yBAAyB;YACrC,KAAK,CAAC,IAAI;gBACR,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC/C,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC1C,CAAC;SACF,CAAC,CAAC;QACH,MAAM,gBAAgB,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,KAAK,UAAU,gBAAgB;QAC7B,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;YAC5B,UAAU,EAAE,yBAAyB;YACrC,IAAI,EAAE,kBAAkB;SACzB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,UAAU,IAAI;QACjB,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAkB;YACpD,IAAI,EAAE,6BAA6B;SACpC,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,OAAO,EAAE,EAAqB;QAC9B,IAAI;KACL,CAAC;AACJ,CAAC;AAlCD,wBAkCC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TBlackHole, TServiceParams } from "@digital-alchemy/core";
|
|
2
|
-
import { ENTITY_STATE, EntityHistoryDTO, EntityHistoryResult, PICK_ENTITY } from "..";
|
|
2
|
+
import { EditLabelOptions, ENTITY_STATE, EntityDetails, EntityHistoryDTO, EntityHistoryResult, EntityRegistryItem, PICK_ENTITY, TAreaId, TDeviceId, TFloorId, TLabelId } from "..";
|
|
3
3
|
export declare const ENTITY_UPDATE_RECEIVER: unique symbol;
|
|
4
4
|
export type ByIdProxy<ENTITY_ID extends PICK_ENTITY> = ENTITY_STATE<ENTITY_ID> & {
|
|
5
5
|
entity_id: ENTITY_ID;
|
|
@@ -20,16 +20,19 @@ export type ByIdProxy<ENTITY_ID extends PICK_ENTITY> = ENTITY_STATE<ENTITY_ID> &
|
|
|
20
20
|
*/
|
|
21
21
|
previous: ENTITY_STATE<ENTITY_ID>;
|
|
22
22
|
};
|
|
23
|
-
export declare function EntityManager({ logger, hass, lifecycle, internal, }: TServiceParams): {
|
|
23
|
+
export declare function EntityManager({ logger, hass, config, lifecycle, context, internal, }: TServiceParams): {
|
|
24
24
|
/**
|
|
25
25
|
* Internal library use only
|
|
26
26
|
*/
|
|
27
27
|
[ENTITY_UPDATE_RECEIVER]: <ENTITY extends PICK_ENTITY = PICK_ENTITY>(entity_id: PICK_ENTITY, new_state: ENTITY_STATE<ENTITY>, old_state: ENTITY_STATE<ENTITY>) => void;
|
|
28
|
+
byArea: (area: TAreaId) => PICK_ENTITY[];
|
|
29
|
+
byDevice: (device: TDeviceId) => PICK_ENTITY[];
|
|
30
|
+
byFloor: (floor: TFloorId) => PICK_ENTITY[];
|
|
28
31
|
/**
|
|
29
32
|
* Retrieves a proxy object for a specified entity. This proxy object
|
|
30
33
|
* provides current values and event hooks for the entity.
|
|
31
|
-
*/
|
|
32
|
-
|
|
34
|
+
*/ byId: <ENTITY_ID extends PICK_ENTITY>(entity_id: ENTITY_ID) => ByIdProxy<ENTITY_ID>;
|
|
35
|
+
byLabel: (label: TLabelId) => PICK_ENTITY[];
|
|
33
36
|
/**
|
|
34
37
|
* Lists all entities within a specified domain. This is useful for
|
|
35
38
|
* domain-specific operations or queries.
|
|
@@ -57,9 +60,22 @@ export declare function EntityManager({ logger, hass, lifecycle, internal, }: TS
|
|
|
57
60
|
* synchronization with the latest state data from Home Assistant.
|
|
58
61
|
*/
|
|
59
62
|
refresh: (recursion?: number) => Promise<void>;
|
|
63
|
+
/**
|
|
64
|
+
* Interact with the entity registry
|
|
65
|
+
*/
|
|
66
|
+
registry: {
|
|
67
|
+
addLabel: ({ entity, label }: EditLabelOptions) => Promise<void>;
|
|
68
|
+
current: EntityDetails[];
|
|
69
|
+
get: <ENTITY_1 extends PICK_ENTITY>(entity_id: ENTITY_1) => Promise<EntityRegistryItem<ENTITY_1>>;
|
|
70
|
+
list: () => Promise<EntityDetails[]>;
|
|
71
|
+
removeLabel: ({ entity, label }: EditLabelOptions) => Promise<void>;
|
|
72
|
+
source: () => Promise<Record<PICK_ENTITY, {
|
|
73
|
+
domain: string;
|
|
74
|
+
}>>;
|
|
75
|
+
};
|
|
60
76
|
};
|
|
61
77
|
declare module "@digital-alchemy/core" {
|
|
62
78
|
interface IsIt {
|
|
63
|
-
entity(entity:
|
|
79
|
+
entity(entity: string): entity is PICK_ENTITY;
|
|
64
80
|
}
|
|
65
81
|
}
|
|
@@ -12,8 +12,8 @@ const MAX_ATTEMPTS = 50;
|
|
|
12
12
|
const FAILED_LOAD_DELAY = 5;
|
|
13
13
|
const UNLIMITED = 0;
|
|
14
14
|
const RECENT = 5;
|
|
15
|
-
function EntityManager({ logger, hass, lifecycle, internal, }) {
|
|
16
|
-
// # Local vars
|
|
15
|
+
function EntityManager({ logger, hass, config, lifecycle, context, internal, }) {
|
|
16
|
+
// #MARK: Local vars
|
|
17
17
|
/**
|
|
18
18
|
* MASTER_STATE.switch.desk_light = {entity_id,state,attributes,...}
|
|
19
19
|
*/
|
|
@@ -26,13 +26,12 @@ function EntityManager({ logger, hass, lifecycle, internal, }) {
|
|
|
26
26
|
const event = new events_1.default();
|
|
27
27
|
event.setMaxListeners(UNLIMITED);
|
|
28
28
|
let init = false;
|
|
29
|
-
// #
|
|
30
|
-
// ## Retrieve raw state object for entity
|
|
29
|
+
// #MARK: getCurrentState
|
|
31
30
|
function getCurrentState(entity_id) {
|
|
32
31
|
const out = internal.utils.object.get(MASTER_STATE, entity_id) ?? {};
|
|
33
32
|
return out;
|
|
34
33
|
}
|
|
35
|
-
//
|
|
34
|
+
// #MARK:proxyGetLogic
|
|
36
35
|
function proxyGetLogic(entity, property) {
|
|
37
36
|
if (!init) {
|
|
38
37
|
return undefined;
|
|
@@ -49,7 +48,7 @@ function EntityManager({ logger, hass, lifecycle, internal, }) {
|
|
|
49
48
|
}
|
|
50
49
|
return internal.utils.object.get(current, property) || defaultValue;
|
|
51
50
|
}
|
|
52
|
-
//
|
|
51
|
+
// #MARK: byId
|
|
53
52
|
function byId(entity_id) {
|
|
54
53
|
if (!ENTITY_PROXIES.has(entity_id)) {
|
|
55
54
|
ENTITY_PROXIES.set(entity_id, new Proxy(getCurrentState(entity_id), {
|
|
@@ -102,7 +101,7 @@ function EntityManager({ logger, hass, lifecycle, internal, }) {
|
|
|
102
101
|
}
|
|
103
102
|
return ENTITY_PROXIES.get(entity_id);
|
|
104
103
|
}
|
|
105
|
-
//
|
|
104
|
+
// #MARK: history
|
|
106
105
|
async function history(payload) {
|
|
107
106
|
logger.trace({ payload }, `looking up entity history`);
|
|
108
107
|
const result = (await hass.socket.sendMessage({
|
|
@@ -125,15 +124,15 @@ function EntityManager({ logger, hass, lifecycle, internal, }) {
|
|
|
125
124
|
return [key, value];
|
|
126
125
|
}));
|
|
127
126
|
}
|
|
128
|
-
//
|
|
127
|
+
// #MARK: listEntities
|
|
129
128
|
function listEntities() {
|
|
130
129
|
return Object.keys(MASTER_STATE).flatMap(domain => Object.keys(MASTER_STATE[domain]).map(id => `${domain}.${id}`));
|
|
131
130
|
}
|
|
132
|
-
//
|
|
131
|
+
// #MARK: findByDomain
|
|
133
132
|
function findByDomain(domain) {
|
|
134
133
|
return Object.keys(MASTER_STATE[domain] ?? {}).map(i => byId(`${domain}.${i}`));
|
|
135
134
|
}
|
|
136
|
-
//
|
|
135
|
+
// #MARK: refresh
|
|
137
136
|
async function refresh(recursion = core_1.START) {
|
|
138
137
|
const now = (0, dayjs_1.default)();
|
|
139
138
|
if (lastRefresh) {
|
|
@@ -186,10 +185,10 @@ function EntityManager({ logger, hass, lifecycle, internal, }) {
|
|
|
186
185
|
});
|
|
187
186
|
init = true;
|
|
188
187
|
}
|
|
189
|
-
//
|
|
188
|
+
// #MARK: is.entity
|
|
190
189
|
// Actually tie the type casting to real state
|
|
191
190
|
core_1.is.entity = (entityId) => core_1.is.undefined(internal.utils.object.get(MASTER_STATE, entityId));
|
|
192
|
-
//
|
|
191
|
+
// #MARK: EntityUpdateReceiver
|
|
193
192
|
function EntityUpdateReceiver(entity_id, new_state, old_state) {
|
|
194
193
|
PREVIOUS_STATE.set(entity_id, old_state);
|
|
195
194
|
if (new_state === null) {
|
|
@@ -206,16 +205,96 @@ function EntityManager({ logger, hass, lifecycle, internal, }) {
|
|
|
206
205
|
logger.debug({ name: "onPostConfig" }, `pre populate {MASTER_STATE}`);
|
|
207
206
|
await refresh();
|
|
208
207
|
});
|
|
208
|
+
// #region Registry
|
|
209
|
+
async function AddLabel({ entity, label }) {
|
|
210
|
+
const current = await EntityGet(entity);
|
|
211
|
+
if (current?.labels?.includes(label)) {
|
|
212
|
+
logger.debug({ name: entity }, `already has label {%s}`, label);
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
await hass.socket.sendMessage({
|
|
216
|
+
entity_id: entity,
|
|
217
|
+
labels: [...current.labels, label],
|
|
218
|
+
type: __1.UPDATE_REGISTRY,
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
async function EntitySource() {
|
|
222
|
+
return await hass.socket.sendMessage({ type: "entity/source" });
|
|
223
|
+
}
|
|
224
|
+
async function EntityList() {
|
|
225
|
+
return await hass.socket.sendMessage({
|
|
226
|
+
type: "config/entity_registry/list_for_display",
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
async function RemoveLabel({ entity, label }) {
|
|
230
|
+
const current = await EntityGet(entity);
|
|
231
|
+
if (!current?.labels?.includes(label)) {
|
|
232
|
+
logger.debug({ name: entity }, `does not have label {%s}`, label);
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
logger.debug({ name: entity }, `removing label [%s]`, label);
|
|
236
|
+
await hass.socket.sendMessage({
|
|
237
|
+
entity_id: entity,
|
|
238
|
+
labels: current.labels.filter(i => i !== label),
|
|
239
|
+
type: __1.UPDATE_REGISTRY,
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
async function EntityGet(entity_id) {
|
|
243
|
+
return await hass.socket.sendMessage({
|
|
244
|
+
entity_id: entity_id,
|
|
245
|
+
type: "config/entity_registry/get",
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
hass.socket.onConnect(async () => {
|
|
249
|
+
if (!config.hass.AUTO_CONNECT_SOCKET || !config.hass.MANAGE_REGISTRY) {
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
hass.entity.registry.current = await hass.entity.registry.list();
|
|
253
|
+
hass.socket.subscribe({
|
|
254
|
+
context,
|
|
255
|
+
event_type: "entity_registry_updated",
|
|
256
|
+
async exec() {
|
|
257
|
+
logger.debug("entity registry updated");
|
|
258
|
+
hass.entity.registry.current = await hass.entity.registry.list();
|
|
259
|
+
},
|
|
260
|
+
});
|
|
261
|
+
});
|
|
262
|
+
// #endregion
|
|
263
|
+
function byLabel(label) {
|
|
264
|
+
return hass.entity.registry.current
|
|
265
|
+
.filter(i => i.labels.includes(label))
|
|
266
|
+
.map(i => i.entity_id);
|
|
267
|
+
}
|
|
268
|
+
function byArea(area) {
|
|
269
|
+
return hass.entity.registry.current
|
|
270
|
+
.filter(i => i.area_id === area)
|
|
271
|
+
.map(i => i.entity_id);
|
|
272
|
+
}
|
|
273
|
+
function byDevice(device) {
|
|
274
|
+
return hass.entity.registry.current
|
|
275
|
+
.filter(i => i.device_id === device)
|
|
276
|
+
.map(i => i.entity_id);
|
|
277
|
+
}
|
|
278
|
+
function byFloor(floor) {
|
|
279
|
+
const areas = new Set(hass.area.current.filter(i => i.floor_id === floor).map(i => i.area_id));
|
|
280
|
+
return hass.entity.registry.current
|
|
281
|
+
.filter(i => areas.has(i.area_id))
|
|
282
|
+
.map(i => i.entity_id);
|
|
283
|
+
}
|
|
284
|
+
// #MARK: return object
|
|
209
285
|
return {
|
|
210
286
|
/**
|
|
211
287
|
* Internal library use only
|
|
212
288
|
*/
|
|
213
289
|
[exports.ENTITY_UPDATE_RECEIVER]: EntityUpdateReceiver,
|
|
290
|
+
byArea,
|
|
291
|
+
byDevice,
|
|
292
|
+
byFloor,
|
|
214
293
|
/**
|
|
215
294
|
* Retrieves a proxy object for a specified entity. This proxy object
|
|
216
295
|
* provides current values and event hooks for the entity.
|
|
217
|
-
*/
|
|
218
|
-
|
|
296
|
+
*/ byId,
|
|
297
|
+
byLabel,
|
|
219
298
|
/**
|
|
220
299
|
* Lists all entities within a specified domain. This is useful for
|
|
221
300
|
* domain-specific operations or queries.
|
|
@@ -241,7 +320,18 @@ function EntityManager({ logger, hass, lifecycle, internal, }) {
|
|
|
241
320
|
* synchronization with the latest state data from Home Assistant.
|
|
242
321
|
*/
|
|
243
322
|
refresh,
|
|
323
|
+
/**
|
|
324
|
+
* Interact with the entity registry
|
|
325
|
+
*/
|
|
326
|
+
registry: {
|
|
327
|
+
addLabel: AddLabel,
|
|
328
|
+
current: [],
|
|
329
|
+
get: EntityGet,
|
|
330
|
+
list: EntityList,
|
|
331
|
+
removeLabel: RemoveLabel,
|
|
332
|
+
source: EntitySource,
|
|
333
|
+
},
|
|
244
334
|
};
|
|
245
335
|
}
|
|
246
336
|
exports.EntityManager = EntityManager;
|
|
247
|
-
//# sourceMappingURL=entity
|
|
337
|
+
//# sourceMappingURL=entity.extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity.extension.js","sourceRoot":"","sources":["../../src/extensions/entity.extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { TServiceParams } from "@digital-alchemy/core";
|
|
2
|
+
import { TFloorId } from "../dynamic";
|
|
3
|
+
import { FloorCreate, FloorDetails } from "../helpers";
|
|
4
|
+
export declare function Floor({ hass, config, context, logger }: TServiceParams): {
|
|
5
|
+
create(details: FloorCreate): Promise<void>;
|
|
6
|
+
current: FloorDetails[];
|
|
7
|
+
delete(floor_id: TFloorId): Promise<void>;
|
|
8
|
+
list(): Promise<FloorDetails[]>;
|
|
9
|
+
update(details: FloorDetails): Promise<void>;
|
|
10
|
+
};
|
|
11
|
+
declare module "@digital-alchemy/core" {
|
|
12
|
+
interface IsIt {
|
|
13
|
+
floor(floor: string): floor is TFloorId;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Floor = void 0;
|
|
4
|
+
const core_1 = require("@digital-alchemy/core");
|
|
5
|
+
function Floor({ hass, config, context, logger }) {
|
|
6
|
+
hass.socket.onConnect(async () => {
|
|
7
|
+
if (!config.hass.AUTO_CONNECT_SOCKET || !config.hass.MANAGE_REGISTRY) {
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
hass.floor.current = await hass.floor.list();
|
|
11
|
+
hass.socket.subscribe({
|
|
12
|
+
context,
|
|
13
|
+
event_type: "floor_registry_updated",
|
|
14
|
+
async exec() {
|
|
15
|
+
hass.floor.current = await hass.floor.list();
|
|
16
|
+
logger.debug(`floor registry updated`);
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
core_1.is.floor = (floor) => hass.floor.current.some(i => i.floor_id === floor);
|
|
21
|
+
return {
|
|
22
|
+
async create(details) {
|
|
23
|
+
await hass.socket.sendMessage({
|
|
24
|
+
type: "config/floor_registry/create",
|
|
25
|
+
...details,
|
|
26
|
+
});
|
|
27
|
+
},
|
|
28
|
+
current: [],
|
|
29
|
+
async delete(floor_id) {
|
|
30
|
+
await hass.socket.sendMessage({
|
|
31
|
+
floor_id,
|
|
32
|
+
type: "config/floor_registry/delete",
|
|
33
|
+
});
|
|
34
|
+
},
|
|
35
|
+
async list() {
|
|
36
|
+
return await hass.socket.sendMessage({
|
|
37
|
+
type: "config/floor_registry/list",
|
|
38
|
+
});
|
|
39
|
+
},
|
|
40
|
+
async update(details) {
|
|
41
|
+
await hass.socket.sendMessage({
|
|
42
|
+
type: "config/floor_registry/update",
|
|
43
|
+
...details,
|
|
44
|
+
});
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
exports.Floor = Floor;
|
|
49
|
+
//# sourceMappingURL=floor.extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"floor.extension.js","sourceRoot":"","sources":["../../src/extensions/floor.extension.ts"],"names":[],"mappings":";;;AAAA,gDAA2D;AAK3D,SAAgB,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAkB;IACrE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;QAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YACrE,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;YACpB,OAAO;YACP,UAAU,EAAE,wBAAwB;YACpC,KAAK,CAAC,IAAI;gBACR,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC7C,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;YACzC,CAAC;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,SAAE,CAAC,KAAK,GAAG,CAAC,KAAa,EAAqB,EAAE,CAC9C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC;IAErD,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,OAAoB;YAC/B,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;gBAC5B,IAAI,EAAE,8BAA8B;gBACpC,GAAG,OAAO;aACX,CAAC,CAAC;QACL,CAAC;QACD,OAAO,EAAE,EAAoB;QAC7B,KAAK,CAAC,MAAM,CAAC,QAAkB;YAC7B,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;gBAC5B,QAAQ;gBACR,IAAI,EAAE,8BAA8B;aACrC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,IAAI;YACR,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAiB;gBACnD,IAAI,EAAE,4BAA4B;aACnC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,OAAqB;YAChC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;gBAC5B,IAAI,EAAE,8BAA8B;gBACpC,GAAG,OAAO;aACX,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AA7CD,sBA6CC"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
|
+
export * from "./area.extension";
|
|
2
|
+
export * from "./backup.extension";
|
|
1
3
|
export * from "./call-proxy.extension";
|
|
2
4
|
export * from "./config.extension";
|
|
3
|
-
export * from "./
|
|
5
|
+
export * from "./device.extension";
|
|
6
|
+
export * from "./entity.extension";
|
|
4
7
|
export * from "./fetch-api.extension";
|
|
5
|
-
export * from "./
|
|
8
|
+
export * from "./floor.extension";
|
|
9
|
+
export * from "./label.extension";
|
|
10
|
+
export * from "./registry.extension";
|
|
6
11
|
export * from "./websocket-api.extension";
|
|
12
|
+
export * from "./zone.extension";
|