diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
index 71dd781e6..439e4ee4d 100644
--- a/.github/ISSUE_TEMPLATE.md
+++ b/.github/ISSUE_TEMPLATE.md
@@ -10,15 +10,19 @@ assignees: ''
**Describe The Bug:**
+
**To Reproduce:**
+
**Expected behavior:**
+
**Logs:**
+
```
@@ -32,16 +36,16 @@ Show your homebridge config.json here
```
**Screenshots:**
+
**Environment:**
-* **Node.js Version**:
-* **NPM Version**:
-* **Homebridge Version**:
-* **Homebridge UI Version**:
-* **Operating System**: Raspbian / Ubuntu / Debian / Windows / macOS / Docker
-* **Process Supervisor**: Docker / Systemd / init.d / pm2 / launchctl / hb-service / other / none
-
+- **Node.js Version**:
+- **NPM Version**:
+- **Homebridge Version**:
+- **Homebridge UI Version**:
+- **Operating System**: Raspbian / Ubuntu / Debian / Windows / macOS / Docker
+- **Process Supervisor**: Docker / Systemd / init.d / pm2 / launchctl / hb-service / other / none
diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml
index ce1835183..496854164 100644
--- a/.github/ISSUE_TEMPLATE/bug-report.yml
+++ b/.github/ISSUE_TEMPLATE/bug-report.yml
@@ -1,14 +1,14 @@
name: Bug Report
description: Create a report to help us improve
-labels: ["bug"]
+labels: [bug]
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this bug report!
-
+
Before we start, be sure you are aware of the following points:
-
+
* If your issue is specific to a certain plugin, create the issue on that plugin's GitHub project page instead.
* Avoid duplicating any existing issues which already track or resolve your problem, search the existing issues first.
* Aim to find a descriptive and precise title for your bug report.
@@ -18,7 +18,7 @@ body:
label: Describe The Bug
description: |
Pleased provide a clear and concise description of what the bug is. Be sure to include:
-
+
* What is happening?
* What you expect to happen?
* Clear steps explaining how to reproduce the problem.
@@ -43,8 +43,8 @@ body:
label: Config
render: JSON
description: |
- If relevant to your bug report, please include your Homebridge config (`config.json`).
-
+ If relevant to your bug report, please include your Homebridge config (`config.json`).
+
* If you're unsure if the config is relevant, please include it.
* Be sure to **remove any sensitive information (passwords, tokens, etc.).**
validations:
diff --git a/.github/ISSUE_TEMPLATE/feature-request.yml b/.github/ISSUE_TEMPLATE/feature-request.yml
index 254c98e31..96bc69acb 100644
--- a/.github/ISSUE_TEMPLATE/feature-request.yml
+++ b/.github/ISSUE_TEMPLATE/feature-request.yml
@@ -1,6 +1,6 @@
name: Feature Request
description: Suggest an idea for this project
-labels: ["enhancement"]
+labels: [enhancement]
body:
- type: markdown
attributes:
@@ -12,7 +12,7 @@ body:
label: Feature Description
description: |
Please provide an overview of the what feature you'd like to see.
-
+
* What is happening?
* What you expect to happen?
* What problems would this new feature solve?
@@ -20,4 +20,3 @@ body:
Tip: You can attach images or files by clicking this area to highlight it and then dragging files in.
validations:
required: true
-
\ No newline at end of file
diff --git a/.github/ISSUE_TEMPLATE/support-request.yml b/.github/ISSUE_TEMPLATE/support-request.yml
index 2e9d298fc..cf9b9d148 100644
--- a/.github/ISSUE_TEMPLATE/support-request.yml
+++ b/.github/ISSUE_TEMPLATE/support-request.yml
@@ -1,12 +1,12 @@
name: Support Request
description: Need help?
-labels: ["question"]
+labels: [question]
body:
- type: markdown
attributes:
value: |
Please read the following before you start filling out this form:
-
+
* If your issue is specific to a certain plugin, create the issue on that plugin's GitHub project page instead.
* Support via GitHub issues is limited. You may find it more beneficial ask questions on the [Homebridge Discord](https://discord.gg/kqNCe2D) or [Reddit](https://www.reddit.com/r/homebridge/) communities instead.
* Search through existing issues (resolved or open) which might provide a solution to your problem already.
@@ -17,7 +17,7 @@ body:
label: Current Situation
description: |
Please provide an overview of the current situation and illustrate potential problems or shortcomings.
-
+
* What is happening?
* What you expect to happen?
* Clear steps explaining how to reproduce the problem.
@@ -42,8 +42,8 @@ body:
label: Config
render: JSON
description: |
- If relevant to your support, please include your Homebridge config (`config.json`).
-
+ If relevant to your support, please include your Homebridge config (`config.json`).
+
* If you're unsure if the config is relevant, please include it.
* Be sure to **remove any sensitive information (passwords, tokens, etc.).**
validations:
diff --git a/.github/ISSUE_TEMPLATE/wiki-change-request.yml b/.github/ISSUE_TEMPLATE/wiki-change-request.yml
index 622e701b8..36848a939 100644
--- a/.github/ISSUE_TEMPLATE/wiki-change-request.yml
+++ b/.github/ISSUE_TEMPLATE/wiki-change-request.yml
@@ -1,12 +1,12 @@
name: Wiki Change Request
description: want change?
-labels: ["wiki change request"]
+labels: [wiki change request]
body:
- type: markdown
attributes:
value: |
Please read the following before you start filling out this form:
-
+
* This form is for requesting changes to the Homebridge Organization wiki pages only.
- type: textarea
id: proposed-change
@@ -28,6 +28,6 @@ body:
description: |
Please provide a link to the wiki page you would like to see changed.
- If you are requesting a new page, please provide details of where you would like to see this page linked from.
+ If you are requesting a new page, please provide details of where you would like to see this page linked from.
validations:
required: true
diff --git a/.github/SECURITY.md b/.github/SECURITY.md
index e7c94a748..922ac559b 100644
--- a/.github/SECURITY.md
+++ b/.github/SECURITY.md
@@ -3,9 +3,9 @@
This document outlines security procedures and general policies for the
`homebridge-config-ui-x` project.
- * [Reporting a Bug](#reporting-a-bug)
- * [Disclosure Policy](#disclosure-policy)
- * [Comments on this Policy](#comments-on-this-policy)
+- [Reporting a Bug](#reporting-a-bug)
+- [Disclosure Policy](#disclosure-policy)
+- [Comments on this Policy](#comments-on-this-policy)
## Reporting a Bug
@@ -31,10 +31,10 @@ When the security team receives a security bug report, they will assign it to a
primary handler. This person will coordinate the fix and release process,
involving the following steps:
- * Confirm the problem and determine the affected versions.
- * Audit code to find any potential similar problems.
- * Prepare fixes for all releases still under maintenance. These fixes will be
- released as fast as possible to npm.
+- Confirm the problem and determine the affected versions.
+- Audit code to find any potential similar problems.
+- Prepare fixes for all releases still under maintenance. These fixes will be
+ released as fast as possible to npm.
## Comments on this Policy
diff --git a/.github/labeler.yml b/.github/labeler.yml
index 78331e16c..552382aa2 100644
--- a/.github/labeler.yml
+++ b/.github/labeler.yml
@@ -1,11 +1,11 @@
# Add 'beta' label to any PR where the base branch name starts with `beta` or has a `beta` section in the name
beta:
- - base-branch: ['^beta', 'beta', 'beta*']
+ - base-branch: [^beta, beta, 'beta*']
# Add 'beta' label to any PR where the base branch name starts with `beta` or has a `beta` section in the name
alpha:
- - base-branch: ['^alpha', 'alpha', 'alpha*']
+ - base-branch: [^alpha, alpha, 'alpha*']
# Add 'latest' label to any PR where the base branch name starts with `latest` or has a `latest` section in the name
latest:
- - base-branch: ['^latest', 'latest', 'latest*']
\ No newline at end of file
+ - base-branch: [^latest, latest, 'latest*']
diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml
index c6075653b..81e061cce 100644
--- a/.github/release-drafter.yml
+++ b/.github/release-drafter.yml
@@ -1,30 +1,30 @@
-name-template: 'v$RESOLVED_VERSION'
-tag-template: 'v$RESOLVED_VERSION'
+name-template: v$RESOLVED_VERSION
+tag-template: v$RESOLVED_VERSION
categories:
- - title: 'Breaking Changes'
+ - title: Breaking Changes
labels:
- - 'breaking change'
- - title: 'Featured Changes'
+ - breaking change
+ - title: Featured Changes
labels:
- - 'feature'
- - 'enhancement'
- - title: 'Bug Fixes'
+ - feature
+ - enhancement
+ - title: Bug Fixes
labels:
- - 'fix'
- - 'bugfix'
- - 'bug'
- - title: 'Other Changes'
+ - fix
+ - bugfix
+ - bug
+ - title: Other Changes
labels:
- - 'documentation'
+ - documentation
autolabeler:
- - label: 'fix'
+ - label: fix
branch:
- '/fix\/.+/'
title:
- - '/fix/i'
- - label: 'feature'
+ - /fix/i
+ - label: feature
branch:
- '/feature\/.+/'
diff --git a/.github/release.yml b/.github/release.yml
index 0dee4400c..53f7d6df7 100644
--- a/.github/release.yml
+++ b/.github/release.yml
@@ -4,18 +4,18 @@ changelog:
categories:
- title: Breaking Changes 🛠
labels:
- - 'breaking change'
+ - breaking change
- title: Featured Changes ✨
labels:
- - 'feature'
- - 'enhancement'
+ - feature
+ - enhancement
- title: Bug Fixes 🐛
labels:
- - 'fix'
- - 'bugfix'
- - 'bug'
+ - fix
+ - bugfix
+ - bug
- title: Other Changes
labels:
- - "chore"
- - "housekeeping"
- - "*"
+ - chore
+ - housekeeping
+ - '*'
diff --git a/.github/workflows/alpha-release.yml b/.github/workflows/alpha-release.yml
index 26ffc5ed0..a8247b67e 100644
--- a/.github/workflows/alpha-release.yml
+++ b/.github/workflows/alpha-release.yml
@@ -8,20 +8,20 @@ on:
jobs:
publish:
if: ${{ github.repository == 'homebridge/homebridge-config-ui-x' }}
- name: "Publish Pre Release Alpha to NPM"
+ name: Publish Pre Release Alpha to NPM
uses: homebridge/.github/.github/workflows/npm-publish.yml@latest
with:
- tag: 'alpha'
+ tag: alpha
dynamically_adjust_version: true
- npm_version_command: 'pre'
- pre_id: 'alpha'
+ npm_version_command: pre
+ pre_id: alpha
install_cmd: npm ci && cd ui && npm ci
secrets:
npm_auth_token: ${{ secrets.npm_token }}
pre-release-alpha:
needs: [publish]
- name: "Create New Github Alpha Pre Release"
+ name: Create New Github Alpha Pre Release
if: ${{ github.repository == 'homebridge/homebridge-config-ui-x' }}
runs-on: ubuntu-latest
steps:
@@ -40,7 +40,7 @@ jobs:
[How To Test Upcoming Changes](https://github.com/homebridge/homebridge-config-ui-x/wiki/How-To-Test-Upcoming-Changes)
keep_num: 5
keep_tags: false
-
+
attach-artifact:
name: Attach Artifact
needs: [publish, pre-release-alpha]
@@ -72,19 +72,18 @@ jobs:
echo "Bundle is under 10MB, stopping"
exit 1
fi
-
+
- name: Upload tar.gz Bundle to GitHub Artifacts v${{ needs.publish.outputs.NPM_VERSION }}
uses: actions/upload-artifact@v4
with:
name: 'homebridge-config-ui-x-${{ needs.publish.outputs.NPM_VERSION }}.tar.gz'
path: |
./homebridge-config-ui-x-${{ needs.publish.outputs.NPM_VERSION }}.tar.gz
-
-
+
- name: Upload SHASUMS256.txt to GitHub Artifacts v${{ needs.publish.outputs.NPM_VERSION }}
uses: actions/upload-artifact@v4
with:
- name: 'SHASUMS256.txt'
+ name: SHASUMS256.txt
path: |
./SHASUMS256.txt
@@ -97,12 +96,12 @@ jobs:
github-releases-to-discord:
name: Discord Webhooks
- needs: [publish,pre-release-alpha,attach-artifact]
+ needs: [publish, pre-release-alpha, attach-artifact]
uses: homebridge/.github/.github/workflows/discord-webhooks.yml@latest
with:
- title: "Homebridge UI Alpha Release"
+ title: Homebridge UI Alpha Release
description: |
Version `v${{ needs.publish.outputs.NPM_VERSION }}`
- url: "https://github.com/homebridge/homebridge-config-ui-x/releases/tag/v${{ needs.publish.outputs.NPM_VERSION }}"
+ url: 'https://github.com/homebridge/homebridge-config-ui-x/releases/tag/v${{ needs.publish.outputs.NPM_VERSION }}'
secrets:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK_URL_BETA }}
diff --git a/.github/workflows/beta-release.yml b/.github/workflows/beta-release.yml
index 6065cd5d0..5477d9f95 100644
--- a/.github/workflows/beta-release.yml
+++ b/.github/workflows/beta-release.yml
@@ -10,17 +10,17 @@ jobs:
if: ${{ github.repository == 'homebridge/homebridge-config-ui-x' }}
uses: homebridge/.github/.github/workflows/npm-publish.yml@latest
with:
- tag: 'beta'
+ tag: beta
dynamically_adjust_version: true
- npm_version_command: 'pre'
- pre_id: 'beta'
+ npm_version_command: pre
+ pre_id: beta
install_cmd: npm ci && cd ui && npm ci
secrets:
npm_auth_token: ${{ secrets.npm_token }}
pre-release-beta:
needs: [publish]
- name: "Create New Github Beta Pre Release"
+ name: Create New Github Beta Pre Release
if: ${{ github.repository == 'homebridge/homebridge-config-ui-x' }}
runs-on: ubuntu-latest
steps:
@@ -39,7 +39,7 @@ jobs:
[How To Test Upcoming Changes](https://github.com/homebridge/homebridge-config-ui-x/wiki/How-To-Test-Upcoming-Changes)
keep_num: 5
keep_tags: false
-
+
attach-artifact:
name: Attach Artifact
needs: [publish, pre-release-beta]
@@ -71,19 +71,18 @@ jobs:
echo "Bundle is under 10MB, stopping"
exit 1
fi
-
+
- name: Upload tar.gz Bundle to GitHub Artifacts v${{ needs.publish.outputs.NPM_VERSION }}
uses: actions/upload-artifact@v4
with:
name: 'homebridge-config-ui-x-${{ needs.publish.outputs.NPM_VERSION }}.tar.gz'
path: |
./homebridge-config-ui-x-${{ needs.publish.outputs.NPM_VERSION }}.tar.gz
-
-
+
- name: Upload SHASUMS256.txt to GitHub Artifacts v${{ needs.publish.outputs.NPM_VERSION }}
uses: actions/upload-artifact@v4
with:
- name: 'SHASUMS256.txt'
+ name: SHASUMS256.txt
path: |
./SHASUMS256.txt
@@ -96,13 +95,12 @@ jobs:
github-releases-to-discord:
name: Discord Webhooks
- needs: [publish,pre-release-beta,attach-artifact]
+ needs: [publish, pre-release-beta, attach-artifact]
uses: homebridge/.github/.github/workflows/discord-webhooks.yml@latest
with:
- title: "Homebridge UI Beta Release"
+ title: Homebridge UI Beta Release
description: |
Version `v${{ needs.publish.outputs.NPM_VERSION }}`
- url: "https://github.com/homebridge/homebridge-config-ui-x/releases/tag/v${{ needs.publish.outputs.NPM_VERSION }}"
+ url: 'https://github.com/homebridge/homebridge-config-ui-x/releases/tag/v${{ needs.publish.outputs.NPM_VERSION }}'
secrets:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK_URL_BETA }}
-
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 08d749717..c2c8ebc00 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -18,8 +18,8 @@ jobs:
uses: homebridge/.github/.github/workflows/nodejs-build-and-test.yml@latest
with:
enable_coverage: false
- ## Code Coverage can only be used in a single run, not in a parallel run - Error: Bad response: 422 {"message":"Can't add a job to a build that is already closed. Build 6224987022 is closed. See docs.coveralls.io/parallel-builds","error":true}
- ## Coveralls only expects to create a report once per build
+ # # Code Coverage can only be used in a single run, not in a parallel run - Error: Bad response: 422 {"message":"Can't add a job to a build that is already closed. Build 6224987022 is closed. See docs.coveralls.io/parallel-builds","error":true}
+ # # Coveralls only expects to create a report once per build
runs_on: ${{ matrix.os }}
install_cmd: npm ci && cd ui && npm ci
secrets:
@@ -58,29 +58,29 @@ jobs:
# test hb-service
- run: node dist/bin/hb-service.js -v
- if: runner.os == 'Linux'
- name: 'Run hb-service install (Linux)'
+ name: Run hb-service install (Linux)
run: |
sudo npm link
sudo npm install -g homebridge
sudo hb-service install --user homebridge --group `id -gn`
sleep 30
- if: runner.os == 'macOS'
- name: 'Run hb-service install (macOS)'
+ name: Run hb-service install (macOS)
run: |
sudo npm link
sudo npm install -g homebridge
sudo hb-service install
sleep 30
- if: runner.os == 'Windows'
- name: 'Run hb-service install (Windows)'
+ name: Run hb-service install (Windows)
run: |
npm link
npm install -g homebridge
hb-service install
Start-Sleep -s 30
- - name: 'Test hb-service install'
+ - name: Test hb-service install
run: node dist/bin/hb-service.js status --port 8581
- - name: 'View Errors'
+ - name: View Errors
if: ${{ failure() }}
run: |
node dist/bin/hb-service.js view
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index bcf39eb4b..bab656a64 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -1,10 +1,10 @@
-name: "CodeQL"
+name: CodeQL
on:
push:
- branches: [ latest, beta* ]
+ branches: [latest, beta*]
pull_request:
- branches: [ latest, beta* ]
+ branches: [latest, beta*]
types: [review_requested, ready_for_review]
schedule:
- cron: '17 9 * * 2'
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 516df3439..3284b46cb 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -3,7 +3,7 @@ run-name: Production Release
on:
release:
- types: [released]
+ types: [released]
jobs:
tag:
@@ -83,19 +83,18 @@ jobs:
echo "Bundle is under 10MB, stopping"
exit 1
fi
-
+
- name: Upload tar.gz Bundle to GitHub Artifacts
uses: actions/upload-artifact@v4
with:
name: 'homebridge-config-ui-x-${{ needs.tag.outputs.version }}.tar.gz'
path: |
./homebridge-config-ui-x-${{ needs.tag.outputs.version }}.tar.gz
-
-
+
- name: Upload SHASUMS256.txt to GitHub Artifacts
uses: actions/upload-artifact@v4
with:
- name: 'SHASUMS256.txt'
+ name: SHASUMS256.txt
path: |
./SHASUMS256.txt
@@ -108,12 +107,12 @@ jobs:
github-releases-to-discord:
name: Discord Webhooks
- needs: [tag,build_and_test,publish,attach-artifact]
+ needs: [tag, build_and_test, publish, attach-artifact]
uses: homebridge/.github/.github/workflows/discord-webhooks.yml@latest
with:
- title: "Homebridge UI Release"
+ title: Homebridge UI Release
description: |
Version `v${{ needs.publish.outputs.NPM_VERSION }}`
- url: "https://github.com/homebridge/homebridge-config-ui-x/releases/tag/v${{ needs.publish.outputs.NPM_VERSION }}"
+ url: 'https://github.com/homebridge/homebridge-config-ui-x/releases/tag/v${{ needs.publish.outputs.NPM_VERSION }}'
secrets:
- DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK_URL_LATEST }}
\ No newline at end of file
+ DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK_URL_LATEST }}
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 483eba039..a6722231c 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -40,29 +40,29 @@ jobs:
# test hb-service
- run: node dist/bin/hb-service.js -v
- if: runner.os == 'Linux'
- name: 'Run hb-service install (Linux)'
+ name: Run hb-service install (Linux)
run: |
sudo npm link
sudo npm install -g homebridge
sudo hb-service install --user homebridge --group `id -gn`
sleep 30
- if: runner.os == 'macOS'
- name: 'Run hb-service install (macOS)'
+ name: Run hb-service install (macOS)
run: |
sudo npm link
sudo npm install -g homebridge
sudo hb-service install
sleep 30
- if: runner.os == 'Windows'
- name: 'Run hb-service install (Windows)'
+ name: Run hb-service install (Windows)
run: |
npm link
npm install -g homebridge
hb-service install
Start-Sleep -s 30
- - name: 'Test hb-service install'
+ - name: Test hb-service install
run: node dist/bin/hb-service.js status --port 8581
- - name: 'View Errors'
+ - name: View Errors
if: ${{ failure() }}
run: |
node dist/bin/hb-service.js view
diff --git a/.github/workflows/wiki-change-notification.yml b/.github/workflows/wiki-change-notification.yml
index 1089f163b..aaf9b8d70 100644
--- a/.github/workflows/wiki-change-notification.yml
+++ b/.github/workflows/wiki-change-notification.yml
@@ -7,7 +7,7 @@ jobs:
notify:
runs-on: ubuntu-latest
steps:
- - uses: 'oznu/gh-wiki-edit-discord-notification@main'
+ - uses: oznu/gh-wiki-edit-discord-notification@main
with:
discord-webhook-url: ${{ secrets.DISCORD_WEBHOOK_WIKI_EDIT }}
ignore-collaborators: true
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 43c27d3d2..256a4e9ca 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -24,5 +24,5 @@
"typescriptreact",
"html"
],
- "angular.enable-strict-mode-prompt": false,
-}
\ No newline at end of file
+ "angular.enable-strict-mode-prompt": false
+}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b7d5c5baf..817132db9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,12 @@
All notable changes to `homebridge-config-ui-x` will be documented in this file. This project tries to adhere to [Semantic Versioning](http://semver.org/).
+## v4.57.0 (2024-08-26)
+
+### Other Changes
+
+- run improved linter on non-typescript files
+
## v4.56.4 (2024-06-25)
### Other Changes
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 5fc4d4168..17370adc9 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -6,7 +6,7 @@ This project is written in [TypeScript](https://www.typescriptlang.org/) and use
## Getting Setup
-*Note: The Raspberry Pi and similar boards do not meet the memory or CPU requirements required to setup the development environment.*
+_Note: The Raspberry Pi and similar boards do not meet the memory or CPU requirements required to setup the development environment._
First, remove any globally installed versions of `homebridge-config-ui-x` you may have installed on your development machine:
@@ -58,7 +58,7 @@ This will start the Angular development server on port `4200` and a standalone s
npm run watch
```
-You should now be able to navigate to `https://localhost:4200` in your browser which will connect to your `homebridge` instance running on port `8581`. The UI will automatically reload whenever you make changes to the code.
+You should now be able to navigate to `https://localhost:4200` in your browser which will connect to your `homebridge` instance running on port `8581`. The UI will automatically reload whenever you make changes to the code.
## Running Tests
@@ -70,6 +70,6 @@ npm run test
## Contributing To Translations
-Additional language translations, or improvements to existing translations are most welcome. Translations can be found here:
+Additional language translations, or improvements to existing translations are most welcome. Translations can be found here:
https://github.com/homebridge/homebridge-config-ui-x/tree/latest/ui/src/i18n
diff --git a/README.md b/README.md
index 6737d6864..0a1cbf81b 100755
--- a/README.md
+++ b/README.md
@@ -16,16 +16,16 @@
**Homebridge UI** is a web based management tool for [Homebridge](https://github.com/homebridge/homebridge) that allows you to manage all aspects of your Homebridge setup.
-* Install and configure Homebridge plugins
-* Edit the Homebridge `config.json` with advanced JSON syntax checking and structure validation
-* Visual configuration for over 450 plugins (no manual config.json editing required)
-* Monitor your Homebridge server via a fully customisable widget-based dashboard
-* View the Homebridge logs
-* View and control Homebridge accessories
-* Restart Homebridge
-* Backup and Restore your Homebridge instance
-* Set up and manage your Homebridge plugins as [child bridges](https://github.com/homebridge/homebridge/wiki/Child-Bridges)
-* and more...
+- Install and configure Homebridge plugins
+- Edit the Homebridge `config.json` with advanced JSON syntax checking and structure validation
+- Visual configuration for over 450 plugins (no manual config.json editing required)
+- Monitor your Homebridge server via a fully customisable widget-based dashboard
+- View the Homebridge logs
+- View and control Homebridge accessories
+- Restart Homebridge
+- Backup and Restore your Homebridge instance
+- Set up and manage your Homebridge plugins as [child bridges](https://github.com/homebridge/homebridge/wiki/Child-Bridges)
+- and more...
Homebridge UI also provides a tool called [`hb-service`](https://github.com/homebridge/homebridge-config-ui-x/wiki/Homebridge-Service-Command) which makes it easy to set up Homebridge as a service on Linux/Raspbian, macOS and Windows 10.
@@ -35,13 +35,13 @@ Homebridge UI also provides a tool called [`hb-service`](https://github.com/home
For detailed instructions on how to set up Node.js and Homebridge with Homebridge UI as a service, see the guides on the wiki:
-*
[Setup Homebridge using the official Homebridge Raspberry Pi Image](https://github.com/homebridge/homebridge-raspbian-image/wiki/Getting-Started)
-*
[Setup Homebridge on a Raspberry Pi (Raspbian)](https://github.com/homebridge/homebridge/wiki/Install-Homebridge-on-Raspbian)
-*
[Setup Homebridge on Debian or Ubuntu Linux](https://github.com/homebridge/homebridge/wiki/Install-Homebridge-on-Debian-or-Ubuntu-Linux)
-*
[Setup Homebridge on Windows 10](https://github.com/homebridge/homebridge/wiki/Install-Homebridge-on-Windows-10)
-*
[Setup Homebridge on macOS](https://github.com/homebridge/homebridge/wiki/Install-Homebridge-on-macOS)
-*
[Setup Homebridge using Docker](https://github.com/homebridge/homebridge/wiki/Install-Homebridge-on-Docker)
-*
[Setup Homebridge on a Synology NAS](https://github.com/homebridge/homebridge/wiki/Install-Homebridge-on-Synology-DSM)
+-
[Setup Homebridge using the official Homebridge Raspberry Pi Image](https://github.com/homebridge/homebridge-raspbian-image/wiki/Getting-Started)
+-
[Setup Homebridge on a Raspberry Pi (Raspbian)](https://github.com/homebridge/homebridge/wiki/Install-Homebridge-on-Raspbian)
+-
[Setup Homebridge on Debian or Ubuntu Linux](https://github.com/homebridge/homebridge/wiki/Install-Homebridge-on-Debian-or-Ubuntu-Linux)
+-
[Setup Homebridge on Windows 10](https://github.com/homebridge/homebridge/wiki/Install-Homebridge-on-Windows-10)
+-
[Setup Homebridge on macOS](https://github.com/homebridge/homebridge/wiki/Install-Homebridge-on-macOS)
+-
[Setup Homebridge using Docker](https://github.com/homebridge/homebridge/wiki/Install-Homebridge-on-Docker)
+-
[Setup Homebridge on a Synology NAS](https://github.com/homebridge/homebridge/wiki/Install-Homebridge-on-Synology-DSM)
If your platform is not listed above, or you want to use your own service manager, see the [Manual Configuration](https://github.com/homebridge/homebridge-config-ui-x/wiki/Manual-Configuration) wiki article for instructions on setting up the Homebridge UI to run as a Homebridge plugin instead of a service.
@@ -89,11 +89,11 @@ This shows you the Homebridge accessories for all the Homebridge instances on yo
The following browsers are supported by the Homebridge UI:
-* Chrome - latest
-* Edge - latest
-* Firefox - latest
-* Safari - 2 most recent major versions
-* iOS - 2 most recent major versions
+- Chrome - latest
+- Edge - latest
+- Firefox - latest
+- Safari - 2 most recent major versions
+- iOS - 2 most recent major versions
MS Internet Explorer (any version) is not supported!
@@ -115,7 +115,7 @@ npm -v
The https://developers.homebridge.io website contains the Homebridge API reference, available service and characteristic types, and plugin examples.
-The [Homebridge Plugin Template](https://github.com/homebridge/homebridge-plugin-template) project provides a base you can use to create your own *platform* plugin.
+The [Homebridge Plugin Template](https://github.com/homebridge/homebridge-plugin-template) project provides a base you can use to create your own _platform_ plugin.
There are many existing plugins you can study; you might start with the [Homebridge Example Plugins](https://github.com/homebridge/homebridge-examples) or a plugin that already implements the device type you need.
@@ -123,7 +123,7 @@ There are many existing plugins you can study; you might start with the [Homebri
### Errors during installation
-Make sure you installed the package with `sudo` and used the `--unsafe-perm` flag. Most installation errors can be fixed by removing the Homebridge UI and reinstalling:
+Make sure you installed the package with `sudo` and used the `--unsafe-perm` flag. Most installation errors can be fixed by removing the Homebridge UI and reinstalling:
```shell
# cleanup
@@ -160,8 +160,8 @@ HomeKit communities can also be found on both [Discord](https://discord.gg/RcV7f
## Limitations
-* One bridge can only expose 150 accessories due to a HomeKit limit. You can however run your plugins as a [Child Bridge](https://github.com/homebridge/homebridge/wiki/Child-Bridges) or run [Multiple Homebridge Instances](https://github.com/oznu/homebridge-config-ui-x/wiki/Homebridge-Service-Command#multiple-instances) to get around this limitation.
-* Once an accessory has been added to the Home app, changing its name via Homebridge won't be automatically reflected in iOS. You must change it via the Home app as well.
+- One bridge can only expose 150 accessories due to a HomeKit limit. You can however run your plugins as a [Child Bridge](https://github.com/homebridge/homebridge/wiki/Child-Bridges) or run [Multiple Homebridge Instances](https://github.com/oznu/homebridge-config-ui-x/wiki/Homebridge-Service-Command#multiple-instances) to get around this limitation.
+- Once an accessory has been added to the Home app, changing its name via Homebridge won't be automatically reflected in iOS. You must change it via the Home app as well.
## Credits
diff --git a/config.schema.json b/config.schema.json
index e98732ddd..cbcb0ffd5 100644
--- a/config.schema.json
+++ b/config.schema.json
@@ -818,4 +818,4 @@
]
}
]
-}
\ No newline at end of file
+}
diff --git a/extract-plugin-alias.js b/extract-plugin-alias.js
index 12c606764..bde0db0d1 100644
--- a/extract-plugin-alias.js
+++ b/extract-plugin-alias.js
@@ -4,31 +4,31 @@
* This script "mocks" homebridge and is used to extract the plugin alias and type.
*/
-const EventEmitter = require('events').EventEmitter;
-const path = require('path');
+const EventEmitter = require('node:events').EventEmitter
+const path = require('node:path')
-let pluginAlias;
-let pluginType;
+let pluginAlias
+let pluginType
const HomebridgeApiMock = {
registerPlatform(pluginIdentifier, platformName, constructor) {
- pluginType = 'platform';
+ pluginType = 'platform'
if (typeof platformName === 'function') {
- constructor = platformName;
- platformName = pluginIdentifier;
- pluginAlias = platformName;
+ constructor = platformName
+ platformName = pluginIdentifier
+ pluginAlias = platformName
} else {
- pluginAlias = platformName;
+ pluginAlias = platformName
}
},
registerAccessory(pluginIdentifier, accessoryName, constructor) {
- pluginType = 'accessory';
+ pluginType = 'accessory'
if (typeof accessoryName === 'function') {
- constructor = accessoryName;
- accessoryName = pluginIdentifier;
- pluginAlias = accessoryName;
+ constructor = accessoryName
+ accessoryName = pluginIdentifier
+ pluginAlias = accessoryName
} else {
- pluginAlias = accessoryName;
+ pluginAlias = accessoryName
}
},
version: 2.5,
@@ -38,28 +38,28 @@ const HomebridgeApiMock = {
hap: {
Characteristic: new class Characteristic extends EventEmitter {
constructor() {
- super();
+ super()
return new Proxy(this, {
get() {
return {
UUID: '0000003E-0000-1000-8000-0026BB765291',
- };
+ }
},
- });
+ })
}
- },
+ }(),
Service: new class Service extends EventEmitter {
constructor() {
- super();
+ super()
return new Proxy(this, {
get() {
return {
UUID: '0000003E-0000-1000-8000-0026BB765291',
- };
+ }
},
- });
+ })
}
- },
+ }(),
AccessoryLoader: {},
Accessory: {},
Bridge: {},
@@ -76,7 +76,7 @@ const HomebridgeApiMock = {
removeService() { /** mock */ },
context() { /** mock */ },
services() { /** mock */ },
- };
+ }
},
registerPlatformAccessories() { /** mock */ },
unregisterPlatformAccessories() { /** mock */ },
@@ -84,49 +84,48 @@ const HomebridgeApiMock = {
updatePlatformAccessories() { /** mock */ },
user: {
configPath() {
- return path.join(process.cwd(), 'config.json');
+ return path.join(process.cwd(), 'config.json')
},
storagePath() {
- return process.cwd();
+ return process.cwd()
},
cachedAccessoryPath() {
- return path.join(process.cwd(), 'accessories');
+ return path.join(process.cwd(), 'accessories')
},
persistPath() {
- return path.join(process.cwd(), 'persist');
+ return path.join(process.cwd(), 'persist')
},
},
-};
+}
function main() {
try {
- let pluginInitializer;
- const pluginPath = process.env.UIX_EXTRACT_PLUGIN_PATH;
- const pluginModules = require(pluginPath);
+ let pluginInitializer
+ const pluginPath = process.env.UIX_EXTRACT_PLUGIN_PATH
+ const pluginModules = require(pluginPath)
if (typeof pluginModules === 'function') {
- pluginInitializer = pluginModules;
+ pluginInitializer = pluginModules
} else if (pluginModules && typeof pluginModules.default === 'function') {
- pluginInitializer = pluginModules.default;
+ pluginInitializer = pluginModules.default
} else {
- throw new Error(`Plugin ${pluginPath} does not export a initializer function from main.`);
+ throw new Error(`Plugin ${pluginPath} does not export a initializer function from main.`)
}
- pluginInitializer(HomebridgeApiMock);
+ pluginInitializer(HomebridgeApiMock)
process.send({
- pluginAlias: pluginAlias,
- pluginType: pluginType,
- });
- process.exit();
-
+ pluginAlias,
+ pluginType,
+ })
+ process.exit()
} catch (e) {
- process.exit(1);
+ process.exit(1)
}
}
-main();
+main()
setTimeout(() => {
- process.exit(1);
-}, 2500);
+ process.exit(1)
+}, 2500)
diff --git a/nest-cli.json b/nest-cli.json
index 7f73d6e81..0dde5f8c4 100644
--- a/nest-cli.json
+++ b/nest-cli.json
@@ -2,4 +2,4 @@
"language": "ts",
"collection": "@nestjs/schematics",
"sourceRoot": "src"
-}
\ No newline at end of file
+}
diff --git a/nodemon-debug.json b/nodemon-debug.json
index dd635a177..05a7770fd 100644
--- a/nodemon-debug.json
+++ b/nodemon-debug.json
@@ -7,4 +7,4 @@
"src/**/*.spec.ts"
],
"exec": "node --inspect-brk -r ts-node/register -r tsconfig-paths/register src/main.ts"
-}
\ No newline at end of file
+}
diff --git a/scripts/lang-sync.ts b/scripts/lang-sync.ts
index c67f8033c..35e8052ff 100644
--- a/scripts/lang-sync.ts
+++ b/scripts/lang-sync.ts
@@ -4,7 +4,7 @@
* - remove old translation strings from the other language files
*/
-import { dirname, resolve } from 'path';
+import { dirname, resolve } from 'node:path';
import { readJsonSync, readdirSync, writeJSONSync } from 'fs-extra';
const basePath = dirname(__dirname);
diff --git a/test/mocks/.uix-hb-service-homebridge-startup.json b/test/mocks/.uix-hb-service-homebridge-startup.json
index 6fa7c36f5..a08c91f43 100644
--- a/test/mocks/.uix-hb-service-homebridge-startup.json
+++ b/test/mocks/.uix-hb-service-homebridge-startup.json
@@ -3,4 +3,4 @@
"keepOrphans": false,
"insecureMode": true,
"env": {}
-}
\ No newline at end of file
+}
diff --git a/test/mocks/auth.json b/test/mocks/auth.json
index 28a0deecf..33922c027 100644
--- a/test/mocks/auth.json
+++ b/test/mocks/auth.json
@@ -7,4 +7,4 @@
"salt": "77f01970830473410589fe6764d5c07f7a007c99d07e5992f98df21166026f2a",
"admin": true
}
-]
\ No newline at end of file
+]
diff --git a/test/mocks/config.json b/test/mocks/config.json
index a0efc63ed..90de91c6c 100644
--- a/test/mocks/config.json
+++ b/test/mocks/config.json
@@ -15,4 +15,4 @@
"platform": "config"
}
]
-}
\ No newline at end of file
+}
diff --git a/test/mocks/persist/AccessoryInfo.67E41F0EA05D.json b/test/mocks/persist/AccessoryInfo.67E41F0EA05D.json
index efea7ea10..e035eb8ae 100644
--- a/test/mocks/persist/AccessoryInfo.67E41F0EA05D.json
+++ b/test/mocks/persist/AccessoryInfo.67E41F0EA05D.json
@@ -9,4 +9,4 @@
"configVersion": 3,
"configHash": "931c04550644c661cbd40132194ac76b042d13a0",
"setupID": "1FAP"
-}
\ No newline at end of file
+}
diff --git a/test/mocks/persist/IdentifierCache.67E41F0EA05D.json b/test/mocks/persist/IdentifierCache.67E41F0EA05D.json
index 9e3c0737e..9c049d9a4 100644
--- a/test/mocks/persist/IdentifierCache.67E41F0EA05D.json
+++ b/test/mocks/persist/IdentifierCache.67E41F0EA05D.json
@@ -10,4 +10,4 @@
"f6f986a8-ae40-4f38-aa34-4b232ed91fca|000000A2-0000-1000-8000-0026BB765291": 8,
"f6f986a8-ae40-4f38-aa34-4b232ed91fca|000000A2-0000-1000-8000-0026BB765291|00000037-0000-1000-8000-0026BB765291": 9
}
-}
\ No newline at end of file
+}
diff --git a/test/mocks/plugins/homebridge-mock-plugin-two/package.json b/test/mocks/plugins/homebridge-mock-plugin-two/package.json
index 587fcc62a..093db938d 100644
--- a/test/mocks/plugins/homebridge-mock-plugin-two/package.json
+++ b/test/mocks/plugins/homebridge-mock-plugin-two/package.json
@@ -1,17 +1,17 @@
{
- "private": true,
- "version": "1.0.0",
- "displayName": "Homebridge Mock Plugin Two",
"name": "homebridge-mock-plugin-two",
+ "displayName": "Homebridge Mock Plugin Two",
+ "version": "1.0.0",
+ "private": true,
"description": "This is not a real plugin",
"license": "Apache-2.0",
+ "keywords": [
+ "homebridge-plugin"
+ ],
"main": "./index.js",
"engines": {
"homebridge": ">0.4.53"
},
- "keywords": [
- "homebridge-plugin"
- ],
"dependencies": {},
"devDependencies": {}
-}
\ No newline at end of file
+}
diff --git a/test/mocks/plugins/homebridge-mock-plugin/config.schema.json b/test/mocks/plugins/homebridge-mock-plugin/config.schema.json
index 21bd99ae3..e7d844bc0 100644
--- a/test/mocks/plugins/homebridge-mock-plugin/config.schema.json
+++ b/test/mocks/plugins/homebridge-mock-plugin/config.schema.json
@@ -13,4 +13,4 @@
}
}
}
-}
\ No newline at end of file
+}
diff --git a/test/mocks/plugins/homebridge-mock-plugin/package.json b/test/mocks/plugins/homebridge-mock-plugin/package.json
index 682493e49..337b532df 100644
--- a/test/mocks/plugins/homebridge-mock-plugin/package.json
+++ b/test/mocks/plugins/homebridge-mock-plugin/package.json
@@ -1,16 +1,16 @@
{
- "private": true,
- "version": "1.0.0",
- "displayName": "Homebridge Mock Plugin",
"name": "homebridge-mock-plugin",
+ "displayName": "Homebridge Mock Plugin",
+ "version": "1.0.0",
+ "private": true,
"description": "This is not a real plugin",
"license": "Apache-2.0",
- "engines": {
- "homebridge": ">0.4.53"
- },
"keywords": [
"homebridge-plugin"
],
+ "engines": {
+ "homebridge": ">0.4.53"
+ },
"dependencies": {},
"devDependencies": {}
-}
\ No newline at end of file
+}
diff --git a/tsconfig.build.json b/tsconfig.build.json
index 872624d3a..e9267af9b 100644
--- a/tsconfig.build.json
+++ b/tsconfig.build.json
@@ -8,4 +8,4 @@
"public",
"scripts"
]
-}
\ No newline at end of file
+}
diff --git a/tsconfig.json b/tsconfig.json
index 36e5f1857..ac44c56fc 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,14 +1,14 @@
{
"compilerOptions": {
- "module": "commonjs",
- "declaration": true,
- "removeComments": true,
+ "target": "es2020",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
- "target": "es2020",
- "sourceMap": true,
- "outDir": "./dist",
"baseUrl": "./",
+ "module": "commonjs",
+ "declaration": true,
+ "outDir": "./dist",
+ "removeComments": true,
+ "sourceMap": true
},
"exclude": [
"node_modules",
@@ -16,4 +16,4 @@
"ui",
"public"
]
-}
\ No newline at end of file
+}
diff --git a/ui/.eslintrc.json b/ui/.eslintrc.json
index ccbf96a8b..d5cbb83e6 100644
--- a/ui/.eslintrc.json
+++ b/ui/.eslintrc.json
@@ -22,7 +22,11 @@
"plugin:@angular-eslint/template/process-inline-templates"
],
"plugins": [
- "@typescript-eslint/eslint-plugin", "import", "import-newlines", "sort-exports"],
+ "@typescript-eslint/eslint-plugin",
+ "import",
+ "import-newlines",
+ "sort-exports"
+ ],
"rules": {
"@angular-eslint/component-selector": [
"error",
@@ -48,7 +52,10 @@
],
"@typescript-eslint/consistent-type-definitions": "error",
"@typescript-eslint/lines-between-class-members": [
- "warn", "always", { "exceptAfterOverload": true, "exceptAfterSingleLine": true }],
+ "warn",
+ "always",
+ { "exceptAfterOverload": true, "exceptAfterSingleLine": true }
+ ],
"@typescript-eslint/naming-convention": [
"error",
{
@@ -66,17 +73,25 @@
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/no-useless-constructor": "off",
"@typescript-eslint/no-unused-vars": [
- "warn", { "args": "none", "vars": "local", "varsIgnorePattern": "key" }],
+ "warn",
+ { "args": "none", "vars": "local", "varsIgnorePattern": "key" }
+ ],
"eol-last": ["error", "always"],
"import-newlines/enforce": ["error", 3],
"import/extensions": ["off"],
"import/order": ["warn", { "alphabetize": { "order": "asc" }, "newlines-between": "never" }],
"indent": [
- "error", 2, { "SwitchCase": 1 }],
+ "error",
+ 2,
+ { "SwitchCase": 1 }
+ ],
"no-multiple-empty-lines": [
- "error", { "max": 1, "maxEOF": 0 }],
+ "error",
+ { "max": 1, "maxEOF": 0 }
+ ],
"quotes": [
- "error", "single"
+ "error",
+ "single"
],
"sort-exports/sort-exports": ["warn", { "sortDir": "asc" }],
"sort-imports": ["warn", { "ignoreDeclarationSort": true }],
diff --git a/ui/tsconfig.app.json b/ui/tsconfig.app.json
index 4215d2f1e..b03c3c83a 100644
--- a/ui/tsconfig.app.json
+++ b/ui/tsconfig.app.json
@@ -2,9 +2,9 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
- "skipLibCheck": true,
- "outDir": "./out-tsc/app",
"types": [],
+ "outDir": "./out-tsc/app",
+ "skipLibCheck": true
},
"files": [
"src/main.ts",
@@ -13,4 +13,4 @@
"include": [
"src/**/*.d.ts"
]
-}
\ No newline at end of file
+}
diff --git a/ui/tsconfig.json b/ui/tsconfig.json
index 557e28986..f85710fd6 100644
--- a/ui/tsconfig.json
+++ b/ui/tsconfig.json
@@ -2,25 +2,25 @@
{
"compileOnSave": false,
"compilerOptions": {
- "baseUrl": "./",
- "outDir": "./dist/out-tsc",
- "sourceMap": true,
- "declaration": false,
- "downlevelIteration": true,
- "experimentalDecorators": true,
- "moduleResolution": "node",
- "importHelpers": true,
"target": "es2022",
- "module": "es2020",
"lib": [
"es2018",
"dom"
],
+ "experimentalDecorators": true,
+ "baseUrl": "./",
+ "module": "es2020",
+ "moduleResolution": "node",
"paths": {
"@/*": [
"src/*"
]
- }
+ },
+ "declaration": false,
+ "downlevelIteration": true,
+ "importHelpers": true,
+ "outDir": "./dist/out-tsc",
+ "sourceMap": true
},
"angularCompilerOptions": {
"enableI18nLegacyMessageIdFormat": false
diff --git a/webpack.config.js b/webpack.config.js
index 6b249a114..d1af81e58 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -1,12 +1,14 @@
/* eslint-disable @typescript-eslint/no-var-requires */
-const path = require('path');
-const webpack = require('webpack');
-const packageJson = require('./package.json');
+const path = require('node:path')
-const externals = {};
+const webpack = require('webpack')
+
+const packageJson = require('./package.json')
+
+const externals = {}
for (const dep of Object.keys(packageJson.dependencies)) {
- externals[dep] = dep;
+ externals[dep] = dep
}
module.exports = {
@@ -20,7 +22,7 @@ module.exports = {
},
target: 'node',
mode: 'production',
- externals: externals,
+ externals,
node: {
global: false,
__filename: false,
@@ -48,4 +50,4 @@ module.exports = {
new webpack.IgnorePlugin({ resourceRegExp: /^\.\/locale$/, contextRegExp: /cache-manager/ }),
new webpack.IgnorePlugin({ resourceRegExp: /^\.\/locale$/, contextRegExp: /osx-temperature-sensor/ }),
],
-};
+}