diff --git a/.github/workflows/docker-buildx-dev.yml b/.github/workflows/docker-buildx-dev.yml index a306b784..5a203a8e 100644 --- a/.github/workflows/docker-buildx-dev.yml +++ b/.github/workflows/docker-buildx-dev.yml @@ -1,4 +1,4 @@ -name: Build dev and Push Docker image dev, dev_alpine and dev_shelly_alpine to Docker Hub with buildx +name: Build Docker image dev and dev_shelly_alpine with buildx on: push: @@ -42,7 +42,7 @@ jobs: - name: Echo main version ${{ env.VERSION }} run: | echo "Extracted version is: $VERSION ${{ env.VERSION }}" - + - name: Run Docker Buildx on dev_shelly_alpine run: | docker buildx build \ @@ -53,14 +53,24 @@ jobs: docker manifest inspect luligu/matterbridge:dev_shelly_alpine timeout-minutes: 60 - - name: Run Docker Buildx on dev_alpine + - name: Run Docker Buildx on dev_shelly_bullseye run: | docker buildx build \ - --platform linux/amd64,linux/arm64,linux/arm/v7 \ - -f docker/Dockerfile.alpine \ - -t luligu/matterbridge:dev_alpine \ + --platform linux/arm64 \ + -f docker/Dockerfile.shelly.bullseye \ + -t luligu/matterbridge:dev_shelly_bullseye \ + --push . + docker manifest inspect luligu/matterbridge:dev_shelly_bullseye + timeout-minutes: 60 + + - name: Run Docker Buildx on dev_shelly_bookworm + run: | + docker buildx build \ + --platform linux/arm64 \ + -f docker/Dockerfile.shelly.bookworm \ + -t luligu/matterbridge:dev_shelly_bookworm \ --push . - docker manifest inspect luligu/matterbridge:dev_alpine + docker manifest inspect luligu/matterbridge:dev_shelly_bookworm timeout-minutes: 60 - name: Run Docker Buildx on dev diff --git a/CHANGELOG.md b/CHANGELOG.md index cca06f33..2418ce58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,23 @@ If you like this project and find it useful, please consider giving it a star on The Home Assistant Community Add-ons and plugins are not verified to work with Matterbridge. I strongly advise against using them. If you do use them and encounter an issue (which is likely because some do not meet the Matterbridge guidelines), please do not open an issue in the Matterbridge repository. +## [1.5.6] - 2024-09-13 + +### Added + +- [matterbridge]: Updated to support ingress (will be released soon in the [Official Matterbridge Home Assistant Add-on](https://github.com/Luligu/matterbridge-home-assistant-addon)). +- [frontend]: Updated to support ingress. + +### Changed + +- [package]: Updated typescript to 5.6.2. +- [package]: Updated express to 4.21.0. +- [package]: Updated dependencies. + + + + + ## [1.5.5] - 2024-09-09 ### Changed diff --git a/docker/Dockerfile.alpine b/docker/Dockerfile.alpine deleted file mode 100644 index c47aa928..00000000 --- a/docker/Dockerfile.alpine +++ /dev/null @@ -1,30 +0,0 @@ -FROM alpine:3.18.4 AS base -# FROM alpine:latest as base not working for linux/arm/v7 -# FROM node:20-alpine as base not working for linux/arm/v7 - -WORKDIR /app -RUN apk add --no-cache nodejs npm icu-data-full - -COPY ./package.json ./package-lock.json ./tsconfig.json ./ -COPY ./src ./src -COPY ./frontend/build ./frontend/build -RUN npm install --no-audit --no-update-notifier --no-fund && \ - npm run build && \ - npm link - -# Install Matterbridge plugins -RUN npm -g install matterbridge-example-accessory-platform -RUN npm -g install matterbridge-example-dynamic-platform -RUN npm -g install matterbridge-zigbee2mqtt -RUN npm -g install matterbridge-somfy-tahoma -RUN npm -g install matterbridge-shelly -RUN npm -g install matterbridge-eve-door -RUN npm -g install matterbridge-eve-motion -RUN npm -g install matterbridge-eve-energy -RUN npm -g install matterbridge-eve-room -RUN npm -g install matterbridge-eve-weather - -# WORKDIR /app -# Node modules: /usr/local/lib/node_modules/matterbridge/dist/cli.js -# Bin: /usr/local/bin/matterbridge -CMD ["/usr/local/bin/matterbridge", "-docker"] diff --git a/docker/Dockerfile.dev b/docker/Dockerfile.dev index 43f4aa31..deacad76 100644 --- a/docker/Dockerfile.dev +++ b/docker/Dockerfile.dev @@ -1,88 +1,90 @@ -FROM node:20-bullseye-slim AS base +FROM node:22-bullseye-slim AS base WORKDIR /app RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends git && \ - apt-get clean + apt-get clean && \ + npm install -g npm@latest && \ + node -v && \ + npm -v + -# && npm install -g npm@10.7.0 FROM base AS builder WORKDIR /app COPY ./package.json ./package-lock.json ./tsconfig.json ./ COPY ./src ./src COPY ./frontend/build ./frontend/build -RUN npm install && npm run build && npm pack && npm link - -WORKDIR /matterbridge-example-accessory-platform -RUN GIT_SSL_NO_VERIFY=true git clone https://github.com/Luligu/matterbridge-example-accessory-platform.git . -COPY docker/link-matterbridge-docker-script.js ./link-matterbridge-script.js -RUN npm install && npm run build && npm pack - -WORKDIR /matterbridge-example-dynamic-platform -RUN GIT_SSL_NO_VERIFY=true git clone https://github.com/Luligu/matterbridge-example-dynamic-platform.git . -COPY docker/link-matterbridge-docker-script.js ./link-matterbridge-script.js -RUN npm install && npm run build && npm pack +RUN npm ci && npm run build && npm shrinkwrap --omit=dev && npm pack && npm link WORKDIR /matterbridge-zigbee2mqtt RUN GIT_SSL_NO_VERIFY=true git clone -b dev https://github.com/Luligu/matterbridge-zigbee2mqtt.git . COPY docker/link-matterbridge-docker-script.js ./link-matterbridge-script.js -RUN npm install && npm run build && npm pack +RUN npm ci && npm run build && npm shrinkwrap --omit=dev && npm pack WORKDIR /matterbridge-somfy-tahoma RUN GIT_SSL_NO_VERIFY=true git clone -b dev https://github.com/Luligu/matterbridge-somfy-tahoma.git . COPY docker/link-matterbridge-docker-script.js ./link-matterbridge-script.js -RUN npm install && npm run build && npm pack +RUN npm ci && npm run build && npm shrinkwrap --omit=dev && npm pack WORKDIR /matterbridge-shelly RUN GIT_SSL_NO_VERIFY=true git clone -b dev https://github.com/Luligu/matterbridge-shelly.git . COPY docker/link-matterbridge-docker-script.js ./link-matterbridge-script.js -RUN npm install && npm run build && npm pack +RUN npm ci && npm run build && npm shrinkwrap --omit=dev && npm pack + +WORKDIR /matterbridge-example-accessory-platform +RUN GIT_SSL_NO_VERIFY=true git clone https://github.com/Luligu/matterbridge-example-accessory-platform.git . +COPY docker/link-matterbridge-docker-script.js ./link-matterbridge-script.js +RUN npm ci && npm run build && npm shrinkwrap --omit=dev && npm pack + +WORKDIR /matterbridge-example-dynamic-platform +RUN GIT_SSL_NO_VERIFY=true git clone https://github.com/Luligu/matterbridge-example-dynamic-platform.git . +COPY docker/link-matterbridge-docker-script.js ./link-matterbridge-script.js +RUN npm ci && npm run build && npm shrinkwrap --omit=dev && npm pack WORKDIR /matterbridge-eve-door RUN GIT_SSL_NO_VERIFY=true git clone https://github.com/Luligu/matterbridge-eve-door.git . COPY docker/link-matterbridge-docker-script.js ./link-matterbridge-script.js -RUN npm install && npm run build && npm pack +RUN npm ci && npm run build && npm shrinkwrap --omit=dev && npm pack WORKDIR /matterbridge-eve-motion RUN GIT_SSL_NO_VERIFY=true git clone https://github.com/Luligu/matterbridge-eve-motion.git . COPY docker/link-matterbridge-docker-script.js ./link-matterbridge-script.js -RUN npm install && npm run build && npm pack +RUN npm ci && npm run build && npm shrinkwrap --omit=dev && npm pack WORKDIR /matterbridge-eve-energy RUN GIT_SSL_NO_VERIFY=true git clone https://github.com/Luligu/matterbridge-eve-energy.git . COPY docker/link-matterbridge-docker-script.js ./link-matterbridge-script.js -RUN npm install && npm run build && npm pack +RUN npm ci && npm run build && npm shrinkwrap --omit=dev && npm pack WORKDIR /matterbridge-eve-room RUN GIT_SSL_NO_VERIFY=true git clone https://github.com/Luligu/matterbridge-eve-room.git . COPY docker/link-matterbridge-docker-script.js ./link-matterbridge-script.js -RUN npm install && npm run build && npm pack +RUN npm ci && npm run build && npm shrinkwrap --omit=dev && npm pack WORKDIR /matterbridge-eve-weather RUN GIT_SSL_NO_VERIFY=true git clone https://github.com/Luligu/matterbridge-eve-weather.git . COPY docker/link-matterbridge-docker-script.js ./link-matterbridge-script.js -RUN npm install && npm run build && npm pack +RUN npm ci && npm run build && npm shrinkwrap --omit=dev && npm pack -FROM node:20-bullseye-slim AS release + +FROM node:22-bullseye-slim AS release WORKDIR /app COPY --from=builder /app/*.tgz . -RUN npm -g install *.tgz -RUN rm *.tgz +RUN npm install -g npm@latest && npm -g install *.tgz && rm *.tgz -COPY --from=builder /matterbridge-example-accessory-platform/*.tgz . -COPY --from=builder /matterbridge-example-dynamic-platform/*.tgz . COPY --from=builder /matterbridge-zigbee2mqtt/*.tgz . COPY --from=builder /matterbridge-somfy-tahoma/*.tgz . COPY --from=builder /matterbridge-shelly/*.tgz . +COPY --from=builder /matterbridge-example-accessory-platform/*.tgz . +COPY --from=builder /matterbridge-example-dynamic-platform/*.tgz . COPY --from=builder /matterbridge-eve-door/*.tgz . COPY --from=builder /matterbridge-eve-motion/*.tgz . COPY --from=builder /matterbridge-eve-energy/*.tgz . COPY --from=builder /matterbridge-eve-room/*.tgz . COPY --from=builder /matterbridge-eve-weather/*.tgz . -RUN npm -g install *.tgz -RUN rm *.tgz +RUN npm install -g *.tgz && rm *.tgz && node -v && npm -v && npm list -g CMD ["matterbridge", "-docker"] diff --git a/docker/Dockerfile.shelly.alpine b/docker/Dockerfile.shelly.alpine index a6410774..163ae380 100644 --- a/docker/Dockerfile.shelly.alpine +++ b/docker/Dockerfile.shelly.alpine @@ -1,23 +1,46 @@ -FROM node:20-alpine AS base -# FROM alpine:latest as base not working for linux/arm/v7 -# FROM node:20-alpine as base not working for linux/arm/v7 +FROM node:22-alpine AS base -WORKDIR /app -# RUN apk add --no-cache nodejs npm icu-data-full +# Install git and update npm +RUN apk update && \ + apk add --no-cache git && \ + npm install -g npm@latest && \ + node -v && \ + npm -v +# Build Matterbridge +WORKDIR /matterbridge COPY ./package.json ./package-lock.json ./tsconfig.json ./ COPY ./src ./src COPY ./frontend/build ./frontend/build -RUN npm install --no-audit --no-update-notifier --no-fund && \ +RUN npm ci && \ npm run build && \ - npm link + npm shrinkwrap --omit=dev && \ + npm pack -# Install Matterbridge plugins -RUN npm -g install matterbridge-shelly +# Build shelly plugin +WORKDIR /matterbridge-shelly +RUN GIT_SSL_NO_VERIFY=true git clone -b dev https://github.com/Luligu/matterbridge-shelly.git . +COPY ./docker/link-matterbridge-docker-script.js ./link-matterbridge-script.js +RUN npm ci && \ + npm run build && \ + npm shrinkwrap --omit=dev && \ + npm pack + + +FROM node:22-alpine AS release +WORKDIR /app + +COPY --from=base /matterbridge/*.tgz . +RUN npm install -g npm@latest && npm -g install *.tgz && rm *.tgz + +COPY --from=base /matterbridge-shelly/*.tgz . +RUN npm -g install *.tgz && rm *.tgz # Copy and execute the entrypoint script COPY ./docker/shellyEntrypoint.sh ./ -RUN chmod +x ./shellyEntrypoint.sh +RUN chmod +x ./shellyEntrypoint.sh && \ + node -v && \ + npm -v && \ + npm list -g ENTRYPOINT ["./shellyEntrypoint.sh"] - CMD ["matterbridge", "-docker"] diff --git a/docker/Dockerfile.shelly.bookworm b/docker/Dockerfile.shelly.bookworm new file mode 100644 index 00000000..6a199a1f --- /dev/null +++ b/docker/Dockerfile.shelly.bookworm @@ -0,0 +1,47 @@ +FROM node:22-bookworm-slim AS base + +# Install git and update npm +RUN apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends git && \ + apt-get clean && \ + npm install -g npm@latest && \ + node -v && \ + npm -v + +# Build Matterbridge +WORKDIR /matterbridge +COPY ./package.json ./package-lock.json ./tsconfig.json ./ +COPY ./src ./src +COPY ./frontend/build ./frontend/build +RUN npm ci && \ + npm run build && \ + npm shrinkwrap --omit=dev && \ + npm pack + +# Build shelly plugin +WORKDIR /matterbridge-shelly +RUN GIT_SSL_NO_VERIFY=true git clone -b dev https://github.com/Luligu/matterbridge-shelly.git . +COPY ./docker/link-matterbridge-docker-script.js ./link-matterbridge-script.js +RUN npm ci && \ + npm run build && \ + npm shrinkwrap --omit=dev && \ + npm pack + + +FROM node:22-bookworm-slim AS release +WORKDIR /app + +COPY --from=base /matterbridge/*.tgz . +RUN npm install -g npm@latest && npm -g install *.tgz && rm *.tgz + +COPY --from=base /matterbridge-shelly/*.tgz . +RUN npm -g install *.tgz && rm *.tgz + +# Copy and execute the entrypoint script +COPY ./docker/shellyEntrypoint.sh ./ +RUN chmod +x ./shellyEntrypoint.sh && \ + node -v && \ + npm -v && \ + npm list -g +ENTRYPOINT ["./shellyEntrypoint.sh"] +CMD ["matterbridge", "-docker"] diff --git a/docker/Dockerfile.shelly.bullseye b/docker/Dockerfile.shelly.bullseye new file mode 100644 index 00000000..3b947a5c --- /dev/null +++ b/docker/Dockerfile.shelly.bullseye @@ -0,0 +1,47 @@ +FROM node:22-bullseye-slim AS base + +# Install git and update npm +RUN apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends git && \ + apt-get clean && \ + npm install -g npm@latest && \ + node -v && \ + npm -v + +# Build Matterbridge +WORKDIR /matterbridge +COPY ./package.json ./package-lock.json ./tsconfig.json ./ +COPY ./src ./src +COPY ./frontend/build ./frontend/build +RUN npm ci && \ + npm run build && \ + npm shrinkwrap --omit=dev && \ + npm pack + +# Build shelly plugin +WORKDIR /matterbridge-shelly +RUN GIT_SSL_NO_VERIFY=true git clone -b dev https://github.com/Luligu/matterbridge-shelly.git . +COPY ./docker/link-matterbridge-docker-script.js ./link-matterbridge-script.js +RUN npm ci && \ + npm run build && \ + npm shrinkwrap --omit=dev && \ + npm pack + + +FROM node:22-bullseye-slim AS release +WORKDIR /app + +COPY --from=base /matterbridge/*.tgz . +RUN npm install -g npm@latest && npm -g install *.tgz && rm *.tgz + +COPY --from=base /matterbridge-shelly/*.tgz . +RUN npm -g install *.tgz && rm *.tgz + +# Copy and execute the entrypoint script +COPY ./docker/shellyEntrypoint.sh ./ +RUN chmod +x ./shellyEntrypoint.sh && \ + node -v && \ + npm -v && \ + npm list -g +ENTRYPOINT ["./shellyEntrypoint.sh"] +CMD ["matterbridge", "-docker"] diff --git a/docker/shellyEntrypoint.sh b/docker/shellyEntrypoint.sh index b3224d75..17228c7f 100644 --- a/docker/shellyEntrypoint.sh +++ b/docker/shellyEntrypoint.sh @@ -9,7 +9,7 @@ if [ ! -f "$FLAG_FILE" ]; then echo "Npm version:" npm -v echo "Adding matterbridge-shelly plugin..." - # Add your initialization commands here + matterbridge -add matterbridge-shelly # Create the flag file to indicate initialization has been done diff --git a/frontend/build/asset-manifest.json b/frontend/build/asset-manifest.json index 4938ae7a..50816133 100644 --- a/frontend/build/asset-manifest.json +++ b/frontend/build/asset-manifest.json @@ -1,15 +1,15 @@ { "files": { - "main.css": "/static/css/main.1cf003ae.css", - "main.js": "/static/js/main.f86befcf.js", - "static/js/453.abd36b29.chunk.js": "/static/js/453.abd36b29.chunk.js", - "index.html": "/index.html", - "main.1cf003ae.css.map": "/static/css/main.1cf003ae.css.map", - "main.f86befcf.js.map": "/static/js/main.f86befcf.js.map", - "453.abd36b29.chunk.js.map": "/static/js/453.abd36b29.chunk.js.map" + "main.css": "./static/css/main.1cf003ae.css", + "main.js": "./static/js/main.af741b33.js", + "static/js/453.abd36b29.chunk.js": "./static/js/453.abd36b29.chunk.js", + "index.html": "./index.html", + "main.1cf003ae.css.map": "./static/css/main.1cf003ae.css.map", + "main.af741b33.js.map": "./static/js/main.af741b33.js.map", + "453.abd36b29.chunk.js.map": "./static/js/453.abd36b29.chunk.js.map" }, "entrypoints": [ "static/css/main.1cf003ae.css", - "static/js/main.f86befcf.js" + "static/js/main.af741b33.js" ] } \ No newline at end of file diff --git a/frontend/build/index.html b/frontend/build/index.html index 5dff6c59..086d3fde 100644 --- a/frontend/build/index.html +++ b/frontend/build/index.html @@ -1 +1 @@ -
-1;)f!==e&&l.call(f,h,1),l.call(e,h,1);return e}},66487:e=>{e.exports=function(e,t,r,n,o){return o(e,(function(e,o,a){r=n?(n=!1,e):t(r,e,o,a)})),r}},55647:(e,t,r)=>{var n=r(33279),o=r(55636),a=r(46350);e.exports=function(e,t){return a(o(e,t,n),e+"")}},9261:(e,t,r)=>{var n=r(78420),o=r(35324),a=r(69194),i=r(46686),s=r(70914);e.exports=function(e,t,r,l){if(!i(e))return e;for(var c=-1,u=(t=o(t,e)).length,d=u-1,p=e;null!=p&&++c{var n=r(22541),o=r(5654),a=r(33279),i=o?function(e,t){return o(e,"toString",{configurable:!0,enumerable:!1,value:n(t),writable:!0})}:a;e.exports=i},53871:e=>{e.exports=function(e,t,r){var n=-1,o=e.length;t<0&&(t=-t>o?0:o+t),(r=r>o?o:r)<0&&(r+=o),o=t>r?0:r-t>>>0,t>>>=0;for(var a=Array(o);++n=l?c:c*("desc"==r[o]?-1:1)}return e.index-t.index}},91980:e=>{e.exports=function(e,t){var r=-1,n=e.length;for(t||(t=Array(n));++r{var n=r(52969),o=r(53871);e.exports=function(e,t){return t.length<2?e:n(e,o(t,0,-1))}},56552:(e,t,r)=>{var n=r(37105),o="object"==typeof self&&self&&self.Object===Object&&self,a=n||o||Function("return this")();e.exports=a},53737:e=>{e.exports=function(e,t){if(("constructor"!==t||"function"!==typeof e[t])&&"__proto__"!=t)return e[t]}},86179:e=>{e.exports=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this}},46704:e=>{e.exports=function(e){return this.__data__.has(e)}},52074:e=>{e.exports=function(e){var t=-1,r=Array(e.size);return e.forEach((function(e){r[++t]=e})),r}},46350:(e,t,r)=>{var n=r(28325),o=r(86578)(n);e.exports=o},86578:e=>{var t=Date.now;e.exports=function(e){var r=0,n=0;return function(){var o=t(),a=16-(o-n);if(n=o,a>0){if(++r>=800)return arguments[0]}else r=0;return e.apply(void 0,arguments)}}},84545:(e,t,r)=>{var n=r(97160);e.exports=function(){this.__data__=new n,this.size=0}},10793:e=>{e.exports=function(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}},27760:e=>{e.exports=function(e){return this.__data__.get(e)}},3892:e=>{e.exports=function(e){return this.__data__.has(e)}},76788:(e,t,r)=>{var n=r(97160),o=r(85204),a=r(64816);e.exports=function(e,t){var r=this.__data__;if(r instanceof n){var i=r.__data__;if(!o||i.length<199)return i.push([e,t]),this.size=++r.size,this;r=this.__data__=new a(i)}return r.set(e,t),this.size=r.size,this}},94020:e=>{e.exports=function(e,t,r){for(var n=r-1,o=e.length;++n%1
.",e.UnsupportedFieldWithReason="Unsupported field schema: %1.",e.UnsupportedFieldWithIdAndReason="Unsupported field schema for field %1
: %2.",e.FilesInfo="**%1** (%2, %3 bytes)"}(uf||(uf={}));r(55491);var vf=r(22616),yf=r.n(vf);let bf=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:21;return crypto.getRandomValues(new Uint8Array(e)).reduce(((e,t)=>e+=(t&=63)<36?t.toString(36):t<62?(t-26).toString(36).toUpperCase():t>62?"-":"_"),"")};function xf(){return bf()}function wf(e){return Array.isArray(e)?e.map((e=>({key:xf(),item:e}))):[]}function Sf(e){return Array.isArray(e)?e.map((e=>e.item)):[]}class Af extends t.Component{constructor(e){super(e),this._getNewFormDataRow=()=>{const{schema:e,registry:t}=this.props,{schemaUtils:r}=t;let n=e.items;return cp(e)&&function(e){return!0===e.additionalItems&&console.warn("additionalItems=true is currently not supported"),_u(e.additionalItems)}(e)&&(n=e.additionalItems),r.getDefaultFormState(n)},this.onAddClick=e=>{this._handleAddClick(e)},this.onAddIndexClick=e=>t=>{this._handleAddClick(t,e)},this.onCopyIndexClick=e=>t=>{t&&t.preventDefault();const{onChange:r,errorSchema:n}=this.props,{keyedFormData:o}=this.state;let a;if(n){a={};for(const t in n){const r=parseInt(t);r<=e?Id()(a,[r],n[t]):r>e&&Id()(a,[r+1],n[t])}}const i={key:xf(),item:Dp()(o[e].item)},s=[...o];void 0!==e?s.splice(e+1,0,i):s.push(i),this.setState({keyedFormData:s,updatedKeyedFormData:!0},(()=>r(Sf(s),a)))},this.onDropIndexClick=e=>t=>{t&&t.preventDefault();const{onChange:r,errorSchema:n}=this.props,{keyedFormData:o}=this.state;let a;if(n){a={};for(const t in n){const r=parseInt(t);r{"use strict";e.exports=function e(t,r){if(t===r)return!0;if(t&&r&&"object"==typeof t&&"object"==typeof r){if(t.constructor!==r.constructor)return!1;var n,o,a;if(Array.isArray(t)){if((n=t.length)!=r.length)return!1;for(o=n;0!==o--;)if(!e(t[o],r[o]))return!1;return!0}if(t.constructor===RegExp)return t.source===r.source&&t.flags===r.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===r.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===r.toString();if((n=(a=Object.keys(t)).length)!==Object.keys(r).length)return!1;for(o=n;0!==o--;)if(!Object.prototype.hasOwnProperty.call(r,a[o]))return!1;for(o=n;0!==o--;){var i=a[o];if(!e(t[i],r[i]))return!1}return!0}return t!==t&&r!==r}},80219:(e,t,r)=>{"use strict";var n=r(53763),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return n.isMemo(e)?i:s[e.$$typeof]||o}s[n.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[n.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,h=Object.prototype;e.exports=function e(t,r,n){if("string"!==typeof r){if(h){var o=f(r);o&&o!==h&&e(t,o,n)}var i=u(r);d&&(i=i.concat(d(r)));for(var s=l(t),m=l(r),g=0;g