Changeset - ef3cde3e81e8
[Not reviewed]
default
0 9 3
drewp@bigasterisk.com - 9 months ago 2024-05-16 22:03:50
drewp@bigasterisk.com
switch collector output from json to avro (still over WS)
12 files changed with 997 insertions and 50 deletions:
0 comments (0 inline, 0 general)
avro/CollectorUpdate.avsc
Show inline comments
 
new file 100644
 
{
 
    "namespace": "light9",
 
    "type": "record",
 
    "name": "CollectorUpdate",
 
    "fields": [
 
        {
 
            "name": "OutputAttrsSet",
 
            "type": {
 
                "type": "record",
 
                "name": "_OutputAttrsSetValue",
 
                "fields": [
 
                    { "name": "dev", "type": "string" },
 
                    {
 
                        "name": "attrs",
 
                        "type": {
 
                            "type": "array",
 
                            "items": {
 
                                "type": "record",
 
                                "name": "Attribute",
 
                                "fields": [
 
                                    { "name": "attr", "type": "string" },
 
                                    { "name": "val", "type": "int" },
 
                                    { "name": "chan", "type": "string" }
 
                                ]
 
                            }
 
                        }
 
                    }
 
                ]
 
            }
 
        }
 
    ]
 
}
 
\ No newline at end of file
package.json
Show inline comments
 
@@ -23,6 +23,7 @@
 
    "@types/reconnectingwebsocket": "^1.0.10",
 
    "@types/underscore": "^1.11.15",
 
    "async": "^3.2.5",
 
    "avro-js": "^1.11.3",
 
    "d3": "^7.9.0",
 
    "debug": "^4.3.4",
 
    "flexlayout-react": "^0.7.15",
 
@@ -46,6 +47,7 @@
 
  },
 
  "devDependencies": {
 
    "@types/react": "^18.3.2",
 
    "@types/react-dom": "^18.3.0"
 
    "@types/react-dom": "^18.3.0",
 
    "vite-plugin-node-polyfills": "^0.21.0"
 
  }
 
}
pdm.lock
Show inline comments
 
@@ -5,7 +5,7 @@
 
groups = ["default", "dev"]
 
strategy = ["cross_platform", "inherit_metadata"]
 
lock_version = "4.4.1"
 
content_hash = "sha256:d3ae9f6966068cc41ec2f3189399535df27dceba40835b5e2614a57c8cb48f7e"
 
content_hash = "sha256:5393d5c679935ba9f042f2b4f4d6efd58dbf03519b2e9f25e08f1e9d421e52f1"
 

	
 
[[package]]
 
name = "aiohttp"
 
@@ -165,6 +165,16 @@ files = [
 
]
 

	
 
[[package]]
 
name = "avro"
 
version = "1.11.3"
 
requires_python = ">=3.6"
 
summary = "Avro is a serialization and RPC framework."
 
groups = ["default"]
 
files = [
 
    {file = "avro-1.11.3.tar.gz", hash = "sha256:3393bb5139f9cf0791d205756ce1e39a5b58586af5b153d6a3b5a199610e9d17"},
 
]
 

	
 
[[package]]
 
name = "braillegraph"
 
version = "0.6"
 
summary = "A library for creating graphs using Unicode braille characters"
 
@@ -429,6 +439,28 @@ files = [
 
]
 

	
 
[[package]]
 
name = "fastavro"
 
version = "1.9.4"
 
requires_python = ">=3.8"
 
summary = "Fast read/write of AVRO files"
 
groups = ["default"]
 
files = [
 
    {file = "fastavro-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:af8c6d8c43a02b5569c093fc5467469541ac408c79c36a5b0900d3dd0b3ba838"},
 
    {file = "fastavro-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4a138710bd61580324d23bc5e3df01f0b82aee0a76404d5dddae73d9e4c723f"},
 
    {file = "fastavro-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:903d97418120ca6b6a7f38a731166c1ccc2c4344ee5e0470d09eb1dc3687540a"},
 
    {file = "fastavro-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c443eeb99899d062dbf78c525e4614dd77e041a7688fa2710c224f4033f193ae"},
 
    {file = "fastavro-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ac26ab0774d1b2b7af6d8f4300ad20bbc4b5469e658a02931ad13ce23635152f"},
 
    {file = "fastavro-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:cf7247874c22be856ba7d1f46a0f6e0379a6025f1a48a7da640444cbac6f570b"},
 
    {file = "fastavro-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:68912f2020e1b3d70557260b27dd85fb49a4fc6bfab18d384926127452c1da4c"},
 
    {file = "fastavro-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6925ce137cdd78e109abdb0bc33aad55de6c9f2d2d3036b65453128f2f5f5b92"},
 
    {file = "fastavro-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b928cd294e36e35516d0deb9e104b45be922ba06940794260a4e5dbed6c192a"},
 
    {file = "fastavro-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:90c9838bc4c991ffff5dd9d88a0cc0030f938b3fdf038cdf6babde144b920246"},
 
    {file = "fastavro-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:eca6e54da571b06a3c5a72dbb7212073f56c92a6fbfbf847b91c347510f8a426"},
 
    {file = "fastavro-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a4b02839ac261100cefca2e2ad04cdfedc556cb66b5ec735e0db428e74b399de"},
 
    {file = "fastavro-1.9.4.tar.gz", hash = "sha256:56b8363e360a1256c94562393dc7f8611f3baf2b3159f64fb2b9c6b87b14e876"},
 
]
 

	
 
[[package]]
 
name = "flake8"
 
version = "7.0.0"
 
requires_python = ">=3.8.1"
 
@@ -2203,6 +2235,30 @@ files = [
 
]
 

	
 
[[package]]
 
name = "yappi"
 
version = "1.6.0"
 
requires_python = ">=3.6"
 
summary = "Yet Another Python Profiler"
 
groups = ["default"]
 
files = [
 
    {file = "yappi-1.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e9bc33b8ec9bce8b2575a4c3878b3cd223d08eb728669924699e5ac937e7b515"},
 
    {file = "yappi-1.6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a1cb70d46827a137350fb84b8fddecd7acec0a11834c763209875788b738f873"},
 
    {file = "yappi-1.6.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2cefe387bc747afcf0b26c9548e242113e17fac3de2674d900e97eb58a328f6"},
 
    {file = "yappi-1.6.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:acfbf4c80b6ee0513ad35a6e4a1f633aa2f93357517f9701aed6ad8cd56544d4"},
 
    {file = "yappi-1.6.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e4959c1dcfb6da8441d05915bfbb9c697e9f11655568f65b87c341e543bd65d5"},
 
    {file = "yappi-1.6.0-cp311-cp311-win32.whl", hash = "sha256:88dee431bba79866692f444110695133181efb2a6969ab63752f4424787f79c8"},
 
    {file = "yappi-1.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:8ddbe1475964f145b028f8bf120a58903d8f6c7bdd1be0a16c1471ba2d8646ca"},
 
    {file = "yappi-1.6.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1ba7d12c18bc0d092463ad126a95a1b2b8c261c47b0e3bd4cb2fd7479469141c"},
 
    {file = "yappi-1.6.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb5bbb4c6b996736554cb8f41e7fb6d5ee6096b7c4f54112cce8cf953a92c0a4"},
 
    {file = "yappi-1.6.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c12da5f310d81779056566259fef644a9c14ac1ec9a2b1b8a3fc62beb4ca6980"},
 
    {file = "yappi-1.6.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:677d992c41b239441eee399ac39ea7601010ddb5acb92bf997de7589f9ee2cc1"},
 
    {file = "yappi-1.6.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:d58e60aac43041d109f0931917204ef02ac01004b9579fe173f2847fbc69655b"},
 
    {file = "yappi-1.6.0-cp312-cp312-win32.whl", hash = "sha256:a6797f189b7b89154d6c7c53ac769a22f0adb7bd88ea5b8f6c65106a286afad6"},
 
    {file = "yappi-1.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:cdaa263ba667aac9bf7bdc0d96fd10e2761a287f01fe87dc136f064ab7696af3"},
 
    {file = "yappi-1.6.0.tar.gz", hash = "sha256:a9aaf72009d8c03067294151ee0470ac7a6dfa7b33baab40b198d6c1ef00430a"},
 
]
 

	
 
[[package]]
 
name = "yarl"
 
version = "1.9.4"
 
requires_python = ">=3.7"
pnpm-lock.yaml
Show inline comments
 
@@ -47,6 +47,12 @@ dependencies:
 
  async:
 
    specifier: ^3.2.5
 
    version: 3.2.5
 
  avro-js:
 
    specifier: ^1.11.3
 
    version: 1.11.3
 
  avsc:
 
    specifier: ^5.7.7
 
    version: 5.7.7
 
  d3:
 
    specifier: ^7.9.0
 
    version: 7.9.0
 
@@ -115,6 +121,9 @@ devDependencies:
 
  '@types/react-dom':
 
    specifier: ^18.3.0
 
    version: 18.3.0
 
  vite-plugin-node-polyfills:
 
    specifier: ^0.21.0
 
    version: 0.21.0(vite@4.5.3)
 

	
 
packages:
 

	
 
@@ -124,7 +133,6 @@ packages:
 
    cpu: [arm64]
 
    os: [android]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/android-arm@0.18.20:
 
@@ -133,7 +141,6 @@ packages:
 
    cpu: [arm]
 
    os: [android]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/android-x64@0.18.20:
 
@@ -142,7 +149,6 @@ packages:
 
    cpu: [x64]
 
    os: [android]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/darwin-arm64@0.18.20:
 
@@ -151,7 +157,6 @@ packages:
 
    cpu: [arm64]
 
    os: [darwin]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/darwin-x64@0.18.20:
 
@@ -160,7 +165,6 @@ packages:
 
    cpu: [x64]
 
    os: [darwin]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/freebsd-arm64@0.18.20:
 
@@ -169,7 +173,6 @@ packages:
 
    cpu: [arm64]
 
    os: [freebsd]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/freebsd-x64@0.18.20:
 
@@ -178,7 +181,6 @@ packages:
 
    cpu: [x64]
 
    os: [freebsd]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/linux-arm64@0.18.20:
 
@@ -187,7 +189,6 @@ packages:
 
    cpu: [arm64]
 
    os: [linux]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/linux-arm@0.18.20:
 
@@ -196,7 +197,6 @@ packages:
 
    cpu: [arm]
 
    os: [linux]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/linux-ia32@0.18.20:
 
@@ -205,7 +205,6 @@ packages:
 
    cpu: [ia32]
 
    os: [linux]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/linux-loong64@0.18.20:
 
@@ -214,7 +213,6 @@ packages:
 
    cpu: [loong64]
 
    os: [linux]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/linux-mips64el@0.18.20:
 
@@ -223,7 +221,6 @@ packages:
 
    cpu: [mips64el]
 
    os: [linux]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/linux-ppc64@0.18.20:
 
@@ -232,7 +229,6 @@ packages:
 
    cpu: [ppc64]
 
    os: [linux]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/linux-riscv64@0.18.20:
 
@@ -241,7 +237,6 @@ packages:
 
    cpu: [riscv64]
 
    os: [linux]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/linux-s390x@0.18.20:
 
@@ -250,7 +245,6 @@ packages:
 
    cpu: [s390x]
 
    os: [linux]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/linux-x64@0.18.20:
 
@@ -259,7 +253,6 @@ packages:
 
    cpu: [x64]
 
    os: [linux]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/netbsd-x64@0.18.20:
 
@@ -268,7 +261,6 @@ packages:
 
    cpu: [x64]
 
    os: [netbsd]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/openbsd-x64@0.18.20:
 
@@ -277,7 +269,6 @@ packages:
 
    cpu: [x64]
 
    os: [openbsd]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/sunos-x64@0.18.20:
 
@@ -286,7 +277,6 @@ packages:
 
    cpu: [x64]
 
    os: [sunos]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/win32-arm64@0.18.20:
 
@@ -295,7 +285,6 @@ packages:
 
    cpu: [arm64]
 
    os: [win32]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/win32-ia32@0.18.20:
 
@@ -304,7 +293,6 @@ packages:
 
    cpu: [ia32]
 
    os: [win32]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/win32-x64@0.18.20:
 
@@ -313,12 +301,10 @@ packages:
 
    cpu: [x64]
 
    os: [win32]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@jridgewell/sourcemap-codec@1.4.15:
 
    resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
 
    dev: false
 

	
 
  /@lit-labs/ssr-dom-shim@1.2.0:
 
    resolution: {integrity: sha512-yWJKmpGE6lUURKAaIltoPIE/wrbY3TEkqQt+X0m+7fQNnAv0keydnYvbiJFP1PnMhizmIWRWOG5KLhYyc/xl+g==}
 
@@ -710,6 +696,34 @@ packages:
 
      '@types/node': 20.12.11
 
    dev: false
 

	
 
  /@rollup/plugin-inject@5.0.5:
 
    resolution: {integrity: sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==}
 
    engines: {node: '>=14.0.0'}
 
    peerDependencies:
 
      rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
 
    peerDependenciesMeta:
 
      rollup:
 
        optional: true
 
    dependencies:
 
      '@rollup/pluginutils': 5.1.0
 
      estree-walker: 2.0.2
 
      magic-string: 0.30.10
 
    dev: true
 

	
 
  /@rollup/pluginutils@5.1.0:
 
    resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==}
 
    engines: {node: '>=14.0.0'}
 
    peerDependencies:
 
      rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
 
    peerDependenciesMeta:
 
      rollup:
 
        optional: true
 
    dependencies:
 
      '@types/estree': 1.0.5
 
      estree-walker: 2.0.2
 
      picomatch: 2.3.1
 
    dev: true
 

	
 
  /@types/async@3.2.24:
 
    resolution: {integrity: sha512-8iHVLHsCCOBKjCF2KwFe0p9Z3rfM9mL+sSP8btyR5vTjJRAqpBYD28/ZLgXPf0pjG1VxOvtCV/BgXkQbpSe8Hw==}
 
    dev: false
 
@@ -909,6 +923,10 @@ packages:
 
      '@types/ms': 0.7.34
 
    dev: false
 

	
 
  /@types/estree@1.0.5:
 
    resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
 
    dev: true
 

	
 
  /@types/fpsmeter@0.3.34:
 
    resolution: {integrity: sha512-ja3G1z7zkL0SUIH8fkhrSuOrayqiaocbLd4uZ8rTTbLLZy8wCdLx4E1ygOtJy/K5133VyXaU4r0Tr1js7edshA==}
 
    dev: false
 
@@ -932,7 +950,6 @@ packages:
 
    resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==}
 
    dependencies:
 
      undici-types: 5.26.5
 
    dev: false
 

	
 
  /@types/prop-types@15.7.12:
 
    resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==}
 
@@ -1030,6 +1047,24 @@ packages:
 
    engines: {node: '>=10'}
 
    dev: false
 

	
 
  /asn1.js@4.10.1:
 
    resolution: {integrity: sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==}
 
    dependencies:
 
      bn.js: 4.12.0
 
      inherits: 2.0.4
 
      minimalistic-assert: 1.0.1
 
    dev: true
 

	
 
  /assert@2.1.0:
 
    resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==}
 
    dependencies:
 
      call-bind: 1.0.7
 
      is-nan: 1.3.2
 
      object-is: 1.1.6
 
      object.assign: 4.1.5
 
      util: 0.12.5
 
    dev: true
 

	
 
  /assertion-error@1.1.0:
 
    resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
 
    dev: false
 
@@ -1038,9 +1073,26 @@ packages:
 
    resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==}
 
    dev: false
 

	
 
  /available-typed-arrays@1.0.7:
 
    resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      possible-typed-array-names: 1.0.0
 
    dev: true
 

	
 
  /avro-js@1.11.3:
 
    resolution: {integrity: sha512-B1b0wI5iwSkVwj3RQWRzW99/LGoYl6df9j1kWime8r8b0dXCdKU7t7mEOFkOpQFaT/I9JXaL7KAIxM+/3TUk1A==}
 
    dependencies:
 
      underscore: 1.13.6
 
    dev: false
 

	
 
  /avsc@5.7.7:
 
    resolution: {integrity: sha512-9cYNccliXZDByFsFliVwk5GvTq058Fj513CiR4E60ndDwmuXzTJEp/Bp8FyuRmGyYupLjHLs+JA9/CBoVS4/NQ==}
 
    engines: {node: '>=0.11'}
 
    dev: false
 

	
 
  /base64-js@1.5.1:
 
    resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
 
    dev: false
 

	
 
  /blocking-elements@0.1.1:
 
    resolution: {integrity: sha512-/SLWbEzMoVIMZACCyhD/4Ya2M1PWP1qMKuiymowPcI+PdWDARqeARBjhj73kbUBCxEmTZCUu5TAqxtwUO9C1Ig==}
 
@@ -1050,6 +1102,92 @@ packages:
 
    resolution: {integrity: sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==}
 
    dev: false
 

	
 
  /bn.js@4.12.0:
 
    resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==}
 
    dev: true
 

	
 
  /bn.js@5.2.1:
 
    resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
 
    dev: true
 

	
 
  /brorand@1.1.0:
 
    resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==}
 
    dev: true
 

	
 
  /browser-resolve@2.0.0:
 
    resolution: {integrity: sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==}
 
    dependencies:
 
      resolve: 1.22.8
 
    dev: true
 

	
 
  /browserify-aes@1.2.0:
 
    resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==}
 
    dependencies:
 
      buffer-xor: 1.0.3
 
      cipher-base: 1.0.4
 
      create-hash: 1.2.0
 
      evp_bytestokey: 1.0.3
 
      inherits: 2.0.4
 
      safe-buffer: 5.2.1
 
    dev: true
 

	
 
  /browserify-cipher@1.0.1:
 
    resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==}
 
    dependencies:
 
      browserify-aes: 1.2.0
 
      browserify-des: 1.0.2
 
      evp_bytestokey: 1.0.3
 
    dev: true
 

	
 
  /browserify-des@1.0.2:
 
    resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==}
 
    dependencies:
 
      cipher-base: 1.0.4
 
      des.js: 1.1.0
 
      inherits: 2.0.4
 
      safe-buffer: 5.2.1
 
    dev: true
 

	
 
  /browserify-rsa@4.1.0:
 
    resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==}
 
    dependencies:
 
      bn.js: 5.2.1
 
      randombytes: 2.1.0
 
    dev: true
 

	
 
  /browserify-sign@4.2.3:
 
    resolution: {integrity: sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==}
 
    engines: {node: '>= 0.12'}
 
    dependencies:
 
      bn.js: 5.2.1
 
      browserify-rsa: 4.1.0
 
      create-hash: 1.2.0
 
      create-hmac: 1.1.7
 
      elliptic: 6.5.5
 
      hash-base: 3.0.4
 
      inherits: 2.0.4
 
      parse-asn1: 5.1.7
 
      readable-stream: 2.3.8
 
      safe-buffer: 5.2.1
 
    dev: true
 

	
 
  /browserify-zlib@0.2.0:
 
    resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==}
 
    dependencies:
 
      pako: 1.0.11
 
    dev: true
 

	
 
  /buffer-xor@1.0.3:
 
    resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==}
 
    dev: true
 

	
 
  /buffer@5.7.1:
 
    resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
 
    dependencies:
 
      base64-js: 1.5.1
 
      ieee754: 1.2.1
 
    dev: true
 

	
 
  /buffer@6.0.3:
 
    resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
 
    dependencies:
 
@@ -1057,11 +1195,26 @@ packages:
 
      ieee754: 1.2.1
 
    dev: false
 

	
 
  /builtin-status-codes@3.0.0:
 
    resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==}
 
    dev: true
 

	
 
  /cac@6.7.14:
 
    resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
 
    engines: {node: '>=8'}
 
    dev: false
 

	
 
  /call-bind@1.0.7:
 
    resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      es-define-property: 1.0.0
 
      es-errors: 1.3.0
 
      function-bind: 1.1.2
 
      get-intrinsic: 1.2.4
 
      set-function-length: 1.2.2
 
    dev: true
 

	
 
  /chai@4.4.1:
 
    resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
 
    engines: {node: '>=4'}
 
@@ -1081,6 +1234,13 @@ packages:
 
      get-func-name: 2.0.2
 
    dev: false
 

	
 
  /cipher-base@1.0.4:
 
    resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==}
 
    dependencies:
 
      inherits: 2.0.4
 
      safe-buffer: 5.2.1
 
    dev: true
 

	
 
  /commander@7.2.0:
 
    resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
 
    engines: {node: '>= 10'}
 
@@ -1109,6 +1269,66 @@ packages:
 
    engines: {node: '>=0.8'}
 
    dev: false
 

	
 
  /console-browserify@1.2.0:
 
    resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==}
 
    dev: true
 

	
 
  /constants-browserify@1.0.0:
 
    resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==}
 
    dev: true
 

	
 
  /core-util-is@1.0.3:
 
    resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
 
    dev: true
 

	
 
  /create-ecdh@4.0.4:
 
    resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==}
 
    dependencies:
 
      bn.js: 4.12.0
 
      elliptic: 6.5.5
 
    dev: true
 

	
 
  /create-hash@1.2.0:
 
    resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==}
 
    dependencies:
 
      cipher-base: 1.0.4
 
      inherits: 2.0.4
 
      md5.js: 1.3.5
 
      ripemd160: 2.0.2
 
      sha.js: 2.4.11
 
    dev: true
 

	
 
  /create-hmac@1.1.7:
 
    resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==}
 
    dependencies:
 
      cipher-base: 1.0.4
 
      create-hash: 1.2.0
 
      inherits: 2.0.4
 
      ripemd160: 2.0.2
 
      safe-buffer: 5.2.1
 
      sha.js: 2.4.11
 
    dev: true
 

	
 
  /create-require@1.1.1:
 
    resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
 
    dev: true
 

	
 
  /crypto-browserify@3.12.0:
 
    resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==}
 
    dependencies:
 
      browserify-cipher: 1.0.1
 
      browserify-sign: 4.2.3
 
      create-ecdh: 4.0.4
 
      create-hash: 1.2.0
 
      create-hmac: 1.1.7
 
      diffie-hellman: 5.0.3
 
      inherits: 2.0.4
 
      pbkdf2: 3.1.2
 
      public-encrypt: 4.0.3
 
      randombytes: 2.1.0
 
      randomfill: 1.0.4
 
    dev: true
 

	
 
  /csstype@3.1.3:
 
    resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
 
    dev: true
 
@@ -1387,12 +1607,74 @@ packages:
 
      type-detect: 4.0.8
 
    dev: false
 

	
 
  /define-data-property@1.1.4:
 
    resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      es-define-property: 1.0.0
 
      es-errors: 1.3.0
 
      gopd: 1.0.1
 
    dev: true
 

	
 
  /define-properties@1.2.1:
 
    resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      define-data-property: 1.1.4
 
      has-property-descriptors: 1.0.2
 
      object-keys: 1.1.1
 
    dev: true
 

	
 
  /delaunator@5.0.1:
 
    resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==}
 
    dependencies:
 
      robust-predicates: 3.0.2
 
    dev: false
 

	
 
  /des.js@1.1.0:
 
    resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==}
 
    dependencies:
 
      inherits: 2.0.4
 
      minimalistic-assert: 1.0.1
 
    dev: true
 

	
 
  /diffie-hellman@5.0.3:
 
    resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==}
 
    dependencies:
 
      bn.js: 4.12.0
 
      miller-rabin: 4.0.1
 
      randombytes: 2.1.0
 
    dev: true
 

	
 
  /domain-browser@4.23.0:
 
    resolution: {integrity: sha512-ArzcM/II1wCCujdCNyQjXrAFwS4mrLh4C7DZWlaI8mdh7h3BfKdNd3bKXITfl2PT9FtfQqaGvhi1vPRQPimjGA==}
 
    engines: {node: '>=10'}
 
    dev: true
 

	
 
  /elliptic@6.5.5:
 
    resolution: {integrity: sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==}
 
    dependencies:
 
      bn.js: 4.12.0
 
      brorand: 1.1.0
 
      hash.js: 1.1.7
 
      hmac-drbg: 1.0.1
 
      inherits: 2.0.4
 
      minimalistic-assert: 1.0.1
 
      minimalistic-crypto-utils: 1.0.1
 
    dev: true
 

	
 
  /es-define-property@1.0.0:
 
    resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      get-intrinsic: 1.2.4
 
    dev: true
 

	
 
  /es-errors@1.3.0:
 
    resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
 
    engines: {node: '>= 0.4'}
 
    dev: true
 

	
 
  /esbuild@0.18.20:
 
    resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
 
    engines: {node: '>=12'}
 
@@ -1421,7 +1703,10 @@ packages:
 
      '@esbuild/win32-arm64': 0.18.20
 
      '@esbuild/win32-ia32': 0.18.20
 
      '@esbuild/win32-x64': 0.18.20
 
    dev: false
 

	
 
  /estree-walker@2.0.2:
 
    resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
 
    dev: true
 

	
 
  /esutils@2.0.3:
 
    resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
 
@@ -1436,7 +1721,13 @@ packages:
 
  /events@3.3.0:
 
    resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
 
    engines: {node: '>=0.8.x'}
 
    dev: false
 

	
 
  /evp_bytestokey@1.0.3:
 
    resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==}
 
    dependencies:
 
      md5.js: 1.3.5
 
      safe-buffer: 5.2.1
 
    dev: true
 

	
 
  /exenv-es6@1.1.1:
 
    resolution: {integrity: sha512-vlVu3N8d6yEMpMsEm+7sUBAI81aqYYuEvfK0jNqmdb/OPXzzH7QWDDnVjMvDSY47JdHEqx/dfC/q8WkfoTmpGQ==}
 
@@ -1446,6 +1737,14 @@ packages:
 
    resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==}
 
    dev: false
 

	
 
  /find-up@5.0.0:
 
    resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
 
    engines: {node: '>=10'}
 
    dependencies:
 
      locate-path: 6.0.0
 
      path-exists: 4.0.0
 
    dev: true
 

	
 
  /flexlayout-react@0.7.15(react-dom@18.3.1)(react@18.3.1):
 
    resolution: {integrity: sha512-ydTMdEoQO5BniylxVkSxa59rEY0+96lqqRII+QK+yq6028eHywPuxZawt4g45y5pMb9ptP4N9HPAQXAFsxwowQ==}
 
    peerDependencies:
 
@@ -1456,6 +1755,12 @@ packages:
 
      react-dom: 18.3.1(react@18.3.1)
 
    dev: false
 

	
 
  /for-each@0.3.3:
 
    resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
 
    dependencies:
 
      is-callable: 1.2.7
 
    dev: true
 

	
 
  /fpsmeter@0.3.1:
 
    resolution: {integrity: sha512-i3zzNJwGkA+9WWIXpAtP0TCN64eO5VkKQgirYE7ZCVqyC3NfUPszU35R044fmSCjiMqefiBs5NiGKvD7lFJ87Q==}
 
    dev: false
 
@@ -1465,13 +1770,99 @@ packages:
 
    engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
 
    os: [darwin]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /function-bind@1.1.2:
 
    resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
 
    dev: true
 

	
 
  /get-func-name@2.0.2:
 
    resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
 
    dev: false
 

	
 
  /get-intrinsic@1.2.4:
 
    resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      es-errors: 1.3.0
 
      function-bind: 1.1.2
 
      has-proto: 1.0.3
 
      has-symbols: 1.0.3
 
      hasown: 2.0.2
 
    dev: true
 

	
 
  /gopd@1.0.1:
 
    resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
 
    dependencies:
 
      get-intrinsic: 1.2.4
 
    dev: true
 

	
 
  /has-property-descriptors@1.0.2:
 
    resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
 
    dependencies:
 
      es-define-property: 1.0.0
 
    dev: true
 

	
 
  /has-proto@1.0.3:
 
    resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==}
 
    engines: {node: '>= 0.4'}
 
    dev: true
 

	
 
  /has-symbols@1.0.3:
 
    resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
 
    engines: {node: '>= 0.4'}
 
    dev: true
 

	
 
  /has-tostringtag@1.0.2:
 
    resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      has-symbols: 1.0.3
 
    dev: true
 

	
 
  /hash-base@3.0.4:
 
    resolution: {integrity: sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==}
 
    engines: {node: '>=4'}
 
    dependencies:
 
      inherits: 2.0.4
 
      safe-buffer: 5.2.1
 
    dev: true
 

	
 
  /hash-base@3.1.0:
 
    resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==}
 
    engines: {node: '>=4'}
 
    dependencies:
 
      inherits: 2.0.4
 
      readable-stream: 3.6.2
 
      safe-buffer: 5.2.1
 
    dev: true
 

	
 
  /hash.js@1.1.7:
 
    resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==}
 
    dependencies:
 
      inherits: 2.0.4
 
      minimalistic-assert: 1.0.1
 
    dev: true
 

	
 
  /hasown@2.0.2:
 
    resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      function-bind: 1.1.2
 
    dev: true
 

	
 
  /hmac-drbg@1.0.1:
 
    resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==}
 
    dependencies:
 
      hash.js: 1.1.7
 
      minimalistic-assert: 1.0.1
 
      minimalistic-crypto-utils: 1.0.1
 
    dev: true
 

	
 
  /https-browserify@1.0.0:
 
    resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==}
 
    dev: true
 

	
 
  /iconv-lite@0.6.3:
 
    resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
 
    engines: {node: '>=0.10.0'}
 
@@ -1481,17 +1872,70 @@ packages:
 

	
 
  /ieee754@1.2.1:
 
    resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
 
    dev: false
 

	
 
  /immutable@4.3.5:
 
    resolution: {integrity: sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==}
 
    dev: false
 

	
 
  /inherits@2.0.4:
 
    resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
 
    dev: true
 

	
 
  /internmap@2.0.3:
 
    resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==}
 
    engines: {node: '>=12'}
 
    dev: false
 

	
 
  /is-arguments@1.1.1:
 
    resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      call-bind: 1.0.7
 
      has-tostringtag: 1.0.2
 
    dev: true
 

	
 
  /is-callable@1.2.7:
 
    resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
 
    engines: {node: '>= 0.4'}
 
    dev: true
 

	
 
  /is-core-module@2.13.1:
 
    resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
 
    dependencies:
 
      hasown: 2.0.2
 
    dev: true
 

	
 
  /is-generator-function@1.0.10:
 
    resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      has-tostringtag: 1.0.2
 
    dev: true
 

	
 
  /is-nan@1.3.2:
 
    resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      call-bind: 1.0.7
 
      define-properties: 1.2.1
 
    dev: true
 

	
 
  /is-typed-array@1.1.13:
 
    resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      which-typed-array: 1.1.15
 
    dev: true
 

	
 
  /isarray@1.0.0:
 
    resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
 
    dev: true
 

	
 
  /isomorphic-timers-promises@1.0.1:
 
    resolution: {integrity: sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ==}
 
    engines: {node: '>=10'}
 
    dev: true
 

	
 
  /js-string-escape@1.0.1:
 
    resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==}
 
    engines: {node: '>= 0.8'}
 
@@ -1532,6 +1976,13 @@ packages:
 
    engines: {node: '>=14'}
 
    dev: false
 

	
 
  /locate-path@6.0.0:
 
    resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
 
    engines: {node: '>=10'}
 
    dependencies:
 
      p-locate: 5.0.0
 
    dev: true
 

	
 
  /lodash@4.17.21:
 
    resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
 
    dev: false
 
@@ -1553,7 +2004,6 @@ packages:
 
    resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==}
 
    dependencies:
 
      '@jridgewell/sourcemap-codec': 1.4.15
 
    dev: false
 

	
 
  /md5-hex@3.0.1:
 
    resolution: {integrity: sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==}
 
@@ -1562,6 +2012,30 @@ packages:
 
      blueimp-md5: 2.19.0
 
    dev: false
 

	
 
  /md5.js@1.3.5:
 
    resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==}
 
    dependencies:
 
      hash-base: 3.1.0
 
      inherits: 2.0.4
 
      safe-buffer: 5.2.1
 
    dev: true
 

	
 
  /miller-rabin@4.0.1:
 
    resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==}
 
    hasBin: true
 
    dependencies:
 
      bn.js: 4.12.0
 
      brorand: 1.1.0
 
    dev: true
 

	
 
  /minimalistic-assert@1.0.1:
 
    resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==}
 
    dev: true
 

	
 
  /minimalistic-crypto-utils@1.0.1:
 
    resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==}
 
    dev: true
 

	
 
  /mlly@1.7.0:
 
    resolution: {integrity: sha512-U9SDaXGEREBYQgfejV97coK0UL1r+qnF2SyO9A3qcI8MzKnsIFKHNVEkrDyNncQTKQQumsasmeq84eNMdBfsNQ==}
 
    dependencies:
 
@@ -1587,13 +2061,83 @@ packages:
 
    resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
 
    engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
 
    hasBin: true
 
    dev: false
 

	
 
  /node-stdlib-browser@1.2.0:
 
    resolution: {integrity: sha512-VSjFxUhRhkyed8AtLwSCkMrJRfQ3e2lGtG3sP6FEgaLKBBbxM/dLfjRe1+iLhjvyLFW3tBQ8+c0pcOtXGbAZJg==}
 
    engines: {node: '>=10'}
 
    dependencies:
 
      assert: 2.1.0
 
      browser-resolve: 2.0.0
 
      browserify-zlib: 0.2.0
 
      buffer: 5.7.1
 
      console-browserify: 1.2.0
 
      constants-browserify: 1.0.0
 
      create-require: 1.1.1
 
      crypto-browserify: 3.12.0
 
      domain-browser: 4.23.0
 
      events: 3.3.0
 
      https-browserify: 1.0.0
 
      isomorphic-timers-promises: 1.0.1
 
      os-browserify: 0.3.0
 
      path-browserify: 1.0.1
 
      pkg-dir: 5.0.0
 
      process: 0.11.10
 
      punycode: 1.4.1
 
      querystring-es3: 0.2.1
 
      readable-stream: 3.6.2
 
      stream-browserify: 3.0.0
 
      stream-http: 3.2.0
 
      string_decoder: 1.3.0
 
      timers-browserify: 2.0.12
 
      tty-browserify: 0.0.1
 
      url: 0.11.3
 
      util: 0.12.5
 
      vm-browserify: 1.1.2
 
    dev: true
 

	
 
  /object-inspect@1.13.1:
 
    resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==}
 
    dev: true
 

	
 
  /object-is@1.1.6:
 
    resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      call-bind: 1.0.7
 
      define-properties: 1.2.1
 
    dev: true
 

	
 
  /object-keys@1.1.1:
 
    resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
 
    engines: {node: '>= 0.4'}
 
    dev: true
 

	
 
  /object.assign@4.1.5:
 
    resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      call-bind: 1.0.7
 
      define-properties: 1.2.1
 
      has-symbols: 1.0.3
 
      object-keys: 1.1.1
 
    dev: true
 

	
 
  /onecolor@4.1.0:
 
    resolution: {integrity: sha512-kDUtnWdWlt5iWx85wrGZxMh8tB4058Bk1YyVpb+Zjl+2wLH/OvqIacbchJma0gjGXocwUTueLwMDVYKrbI+0zA==}
 
    engines: {node: '>=0.4.8'}
 
    dev: false
 

	
 
  /os-browserify@0.3.0:
 
    resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==}
 
    dev: true
 

	
 
  /p-limit@3.1.0:
 
    resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
 
    engines: {node: '>=10'}
 
    dependencies:
 
      yocto-queue: 0.1.0
 
    dev: true
 

	
 
  /p-limit@4.0.0:
 
    resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
 
    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
 
@@ -1601,12 +2145,48 @@ packages:
 
      yocto-queue: 1.0.0
 
    dev: false
 

	
 
  /p-locate@5.0.0:
 
    resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
 
    engines: {node: '>=10'}
 
    dependencies:
 
      p-limit: 3.1.0
 
    dev: true
 

	
 
  /pako@1.0.11:
 
    resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
 
    dev: true
 

	
 
  /parse-asn1@5.1.7:
 
    resolution: {integrity: sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==}
 
    engines: {node: '>= 0.10'}
 
    dependencies:
 
      asn1.js: 4.10.1
 
      browserify-aes: 1.2.0
 
      evp_bytestokey: 1.0.3
 
      hash-base: 3.0.4
 
      pbkdf2: 3.1.2
 
      safe-buffer: 5.2.1
 
    dev: true
 

	
 
  /parse-prometheus-text-format@1.1.1:
 
    resolution: {integrity: sha512-dBlhYVACjRdSqLMFe4/Q1l/Gd3UmXm8ruvsTi7J6ul3ih45AkzkVpI5XHV4aZ37juGZW5+3dGU5lwk+QLM9XJA==}
 
    dependencies:
 
      shallow-equal: 1.2.1
 
    dev: false
 

	
 
  /path-browserify@1.0.1:
 
    resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
 
    dev: true
 

	
 
  /path-exists@4.0.0:
 
    resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
 
    engines: {node: '>=8'}
 
    dev: true
 

	
 
  /path-parse@1.0.7:
 
    resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
 
    dev: true
 

	
 
  /pathe@1.1.2:
 
    resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
 
    dev: false
 
@@ -1615,9 +2195,31 @@ packages:
 
    resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
 
    dev: false
 

	
 
  /pbkdf2@3.1.2:
 
    resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==}
 
    engines: {node: '>=0.12'}
 
    dependencies:
 
      create-hash: 1.2.0
 
      create-hmac: 1.1.7
 
      ripemd160: 2.0.2
 
      safe-buffer: 5.2.1
 
      sha.js: 2.4.11
 
    dev: true
 

	
 
  /picocolors@1.0.0:
 
    resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
 
    dev: false
 

	
 
  /picomatch@2.3.1:
 
    resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
 
    engines: {node: '>=8.6'}
 
    dev: true
 

	
 
  /pkg-dir@5.0.0:
 
    resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==}
 
    engines: {node: '>=10'}
 
    dependencies:
 
      find-up: 5.0.0
 
    dev: true
 

	
 
  /pkg-types@1.1.1:
 
    resolution: {integrity: sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ==}
 
@@ -1627,6 +2229,11 @@ packages:
 
      pathe: 1.1.2
 
    dev: false
 

	
 
  /possible-typed-array-names@1.0.0:
 
    resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==}
 
    engines: {node: '>= 0.4'}
 
    dev: true
 

	
 
  /postcss@8.4.38:
 
    resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==}
 
    engines: {node: ^10 || ^12 || >=14}
 
@@ -1634,7 +2241,6 @@ packages:
 
      nanoid: 3.3.7
 
      picocolors: 1.0.0
 
      source-map-js: 1.2.0
 
    dev: false
 

	
 
  /pretty-format@27.5.1:
 
    resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==}
 
@@ -1645,15 +2251,58 @@ packages:
 
      react-is: 17.0.2
 
    dev: false
 

	
 
  /process-nextick-args@2.0.1:
 
    resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
 
    dev: true
 

	
 
  /process@0.11.10:
 
    resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
 
    engines: {node: '>= 0.6.0'}
 
    dev: false
 

	
 
  /public-encrypt@4.0.3:
 
    resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==}
 
    dependencies:
 
      bn.js: 4.12.0
 
      browserify-rsa: 4.1.0
 
      create-hash: 1.2.0
 
      parse-asn1: 5.1.7
 
      randombytes: 2.1.0
 
      safe-buffer: 5.2.1
 
    dev: true
 

	
 
  /punycode@1.4.1:
 
    resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==}
 
    dev: true
 

	
 
  /qs@6.12.1:
 
    resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==}
 
    engines: {node: '>=0.6'}
 
    dependencies:
 
      side-channel: 1.0.6
 
    dev: true
 

	
 
  /querystring-es3@0.2.1:
 
    resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==}
 
    engines: {node: '>=0.4.x'}
 
    dev: true
 

	
 
  /queue-microtask@1.2.3:
 
    resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
 
    dev: false
 

	
 
  /randombytes@2.1.0:
 
    resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
 
    dependencies:
 
      safe-buffer: 5.2.1
 
    dev: true
 

	
 
  /randomfill@1.0.4:
 
    resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==}
 
    dependencies:
 
      randombytes: 2.1.0
 
      safe-buffer: 5.2.1
 
    dev: true
 

	
 
  /react-dom@18.3.1(react@18.3.1):
 
    resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
 
    peerDependencies:
 
@@ -1675,6 +2324,27 @@ packages:
 
      loose-envify: 1.4.0
 
    dev: false
 

	
 
  /readable-stream@2.3.8:
 
    resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
 
    dependencies:
 
      core-util-is: 1.0.3
 
      inherits: 2.0.4
 
      isarray: 1.0.0
 
      process-nextick-args: 2.0.1
 
      safe-buffer: 5.1.2
 
      string_decoder: 1.1.1
 
      util-deprecate: 1.0.2
 
    dev: true
 

	
 
  /readable-stream@3.6.2:
 
    resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
 
    engines: {node: '>= 6'}
 
    dependencies:
 
      inherits: 2.0.4
 
      string_decoder: 1.3.0
 
      util-deprecate: 1.0.2
 
    dev: true
 

	
 
  /readable-stream@4.5.2:
 
    resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==}
 
    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
 
@@ -1690,6 +2360,22 @@ packages:
 
    resolution: {integrity: sha512-r7H/dwkkfBu9x5eMGIt8td5WLqNbqy675x8Xg0+SoXaUS3xzniVlmfO7t7HSYmN/ZGzYjOKa9G2W4xCgCo7Zlg==}
 
    dev: false
 

	
 
  /resolve@1.22.8:
 
    resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
 
    hasBin: true
 
    dependencies:
 
      is-core-module: 2.13.1
 
      path-parse: 1.0.7
 
      supports-preserve-symlinks-flag: 1.0.0
 
    dev: true
 

	
 
  /ripemd160@2.0.2:
 
    resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==}
 
    dependencies:
 
      hash-base: 3.1.0
 
      inherits: 2.0.4
 
    dev: true
 

	
 
  /robust-predicates@3.0.2:
 
    resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==}
 
    dev: false
 
@@ -1700,15 +2386,17 @@ packages:
 
    hasBin: true
 
    optionalDependencies:
 
      fsevents: 2.3.3
 
    dev: false
 

	
 
  /rw@1.3.3:
 
    resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==}
 
    dev: false
 

	
 
  /safe-buffer@5.1.2:
 
    resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
 
    dev: true
 

	
 
  /safe-buffer@5.2.1:
 
    resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
 
    dev: false
 

	
 
  /safer-buffer@2.1.2:
 
    resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
 
@@ -1726,10 +2414,44 @@ packages:
 
    hasBin: true
 
    dev: false
 

	
 
  /set-function-length@1.2.2:
 
    resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      define-data-property: 1.1.4
 
      es-errors: 1.3.0
 
      function-bind: 1.1.2
 
      get-intrinsic: 1.2.4
 
      gopd: 1.0.1
 
      has-property-descriptors: 1.0.2
 
    dev: true
 

	
 
  /setimmediate@1.0.5:
 
    resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==}
 
    dev: true
 

	
 
  /sha.js@2.4.11:
 
    resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==}
 
    hasBin: true
 
    dependencies:
 
      inherits: 2.0.4
 
      safe-buffer: 5.2.1
 
    dev: true
 

	
 
  /shallow-equal@1.2.1:
 
    resolution: {integrity: sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==}
 
    dev: false
 

	
 
  /side-channel@1.0.6:
 
    resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      call-bind: 1.0.7
 
      es-errors: 1.3.0
 
      get-intrinsic: 1.2.4
 
      object-inspect: 1.13.1
 
    dev: true
 

	
 
  /siginfo@2.0.0:
 
    resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
 
    dev: false
 
@@ -1737,7 +2459,6 @@ packages:
 
  /source-map-js@1.2.0:
 
    resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
 
    engines: {node: '>=0.10.0'}
 
    dev: false
 

	
 
  /stackback@0.0.2:
 
    resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
 
@@ -1747,11 +2468,32 @@ packages:
 
    resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==}
 
    dev: false
 

	
 
  /stream-browserify@3.0.0:
 
    resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==}
 
    dependencies:
 
      inherits: 2.0.4
 
      readable-stream: 3.6.2
 
    dev: true
 

	
 
  /stream-http@3.2.0:
 
    resolution: {integrity: sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==}
 
    dependencies:
 
      builtin-status-codes: 3.0.0
 
      inherits: 2.0.4
 
      readable-stream: 3.6.2
 
      xtend: 4.0.2
 
    dev: true
 

	
 
  /string_decoder@1.1.1:
 
    resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
 
    dependencies:
 
      safe-buffer: 5.1.2
 
    dev: true
 

	
 
  /string_decoder@1.3.0:
 
    resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
 
    dependencies:
 
      safe-buffer: 5.2.1
 
    dev: false
 

	
 
  /strip-literal@1.3.0:
 
    resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==}
 
@@ -1764,6 +2506,11 @@ packages:
 
    engines: {node: '>=10.0.0'}
 
    dev: false
 

	
 
  /supports-preserve-symlinks-flag@1.0.0:
 
    resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
 
    engines: {node: '>= 0.4'}
 
    dev: true
 

	
 
  /sylvester@0.0.21:
 
    resolution: {integrity: sha512-yUT0ukFkFEt4nb+NY+n2ag51aS/u9UHXoZw+A4jgD77/jzZsBoSDHuqysrVCBC4CYR4TYvUJq54ONpXgDBH8tA==}
 
    engines: {node: '>=0.2.6'}
 
@@ -1778,6 +2525,13 @@ packages:
 
    engines: {node: '>=4'}
 
    dev: false
 

	
 
  /timers-browserify@2.0.12:
 
    resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==}
 
    engines: {node: '>=0.6.0'}
 
    dependencies:
 
      setimmediate: 1.0.5
 
    dev: true
 

	
 
  /tinybench@2.8.0:
 
    resolution: {integrity: sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==}
 
    dev: false
 
@@ -1800,6 +2554,10 @@ packages:
 
    resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
 
    dev: false
 

	
 
  /tty-browserify@0.0.1:
 
    resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==}
 
    dev: true
 

	
 
  /type-detect@4.0.8:
 
    resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
 
    engines: {node: '>=4'}
 
@@ -1821,7 +2579,27 @@ packages:
 

	
 
  /undici-types@5.26.5:
 
    resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
 
    dev: false
 

	
 
  /url@0.11.3:
 
    resolution: {integrity: sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==}
 
    dependencies:
 
      punycode: 1.4.1
 
      qs: 6.12.1
 
    dev: true
 

	
 
  /util-deprecate@1.0.2:
 
    resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
 
    dev: true
 

	
 
  /util@0.12.5:
 
    resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==}
 
    dependencies:
 
      inherits: 2.0.4
 
      is-arguments: 1.1.1
 
      is-generator-function: 1.0.10
 
      is-typed-array: 1.1.13
 
      which-typed-array: 1.1.15
 
    dev: true
 

	
 
  /vite-node@0.31.4(@types/node@20.12.11):
 
    resolution: {integrity: sha512-uzL377GjJtTbuc5KQxVbDu2xfU/x0wVjUtXQR2ihS21q/NK6ROr4oG0rsSkBBddZUVCwzfx22in76/0ZZHXgkQ==}
 
@@ -1845,6 +2623,18 @@ packages:
 
      - terser
 
    dev: false
 

	
 
  /vite-plugin-node-polyfills@0.21.0(vite@4.5.3):
 
    resolution: {integrity: sha512-Sk4DiKnmxN8E0vhgEhzLudfJQfaT8k4/gJ25xvUPG54KjLJ6HAmDKbr4rzDD/QWEY+Lwg80KE85fGYBQihEPQA==}
 
    peerDependencies:
 
      vite: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0
 
    dependencies:
 
      '@rollup/plugin-inject': 5.0.5
 
      node-stdlib-browser: 1.2.0
 
      vite: 4.5.3(@types/node@20.12.11)
 
    transitivePeerDependencies:
 
      - rollup
 
    dev: true
 

	
 
  /vite-plugin-rewrite-all@1.0.2(vite@4.5.3):
 
    resolution: {integrity: sha512-NpiFyHi9w8iHm3kZ28ma/IU16LFCkNJNqTvGy6cjoit2EMBi7dgFWFZFYcwZjUrc+pOMup//rsQTRVILvF2efQ==}
 
    engines: {node: '>=12.0.0'}
 
@@ -1890,7 +2680,6 @@ packages:
 
      rollup: 3.29.4
 
    optionalDependencies:
 
      fsevents: 2.3.3
 
    dev: false
 

	
 
  /vitest@0.31.4:
 
    resolution: {integrity: sha512-GoV0VQPmWrUFOZSg3RpQAPN+LPmHg2/gxlMNJlyxJihkz6qReHDV6b0pPDcqFLNEPya4tWJ1pgwUNP9MLmUfvQ==}
 
@@ -1958,11 +2747,26 @@ packages:
 
      - terser
 
    dev: false
 

	
 
  /vm-browserify@1.1.2:
 
    resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==}
 
    dev: true
 

	
 
  /well-known-symbols@2.0.0:
 
    resolution: {integrity: sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==}
 
    engines: {node: '>=6'}
 
    dev: false
 

	
 
  /which-typed-array@1.1.15:
 
    resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      available-typed-arrays: 1.0.7
 
      call-bind: 1.0.7
 
      for-each: 0.3.3
 
      gopd: 1.0.1
 
      has-tostringtag: 1.0.2
 
    dev: true
 

	
 
  /why-is-node-running@2.2.2:
 
    resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==}
 
    engines: {node: '>=8'}
 
@@ -1976,6 +2780,16 @@ packages:
 
    resolution: {integrity: sha512-Ba9tGNYxXwaqKEi9sJJvPMKuo063umUPsHN0JJsjrs2j8KDSzkWLMZGZ+MH1Jf1Fq4OWZ5HsESJID6nRza2ang==}
 
    dev: false
 

	
 
  /xtend@4.0.2:
 
    resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
 
    engines: {node: '>=0.4'}
 
    dev: true
 

	
 
  /yocto-queue@0.1.0:
 
    resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
 
    engines: {node: '>=10'}
 
    dev: true
 

	
 
  /yocto-queue@1.0.0:
 
    resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==}
 
    engines: {node: '>=12.20'}
pyproject.toml
Show inline comments
 
@@ -45,6 +45,9 @@ dependencies = [
 
    "light9 @ file:///${PROJECT_ROOT}/",
 
    "python-debouncer>=0.1.4",
 
    "pytest>=8.2.0",
 
    "avro>=1.11.3",
 
    "fastavro>=1.9.4",
 
    "yappi>=1.6.0",
 
]
 
requires-python = ">=3.11"
 

	
src/light9/collector/service.py
Show inline comments
 
@@ -50,8 +50,8 @@ class Updates(WebSocketEndpoint, UiListe
 
        self.websocket = websocket
 
        self.listeners.addClient(self)
 

	
 
    async def sendMessage(self, msgText):
 
        await self.websocket.send_text(msgText)
 
    async def sendMessage(self, msgText: bytes):
 
        await self.websocket.send_bytes(msgText)
 

	
 
    # async def on_receive(self, websocket, data):
 
    #     json.loads(data)
src/light9/collector/weblisteners.py
Show inline comments
 
import asyncio
 
import io
 
import json
 
import logging
 
import time
 
from typing import Any, Awaitable, Dict, List, Protocol, Tuple
 

	
 
import fastavro
 
from fastavro.schema import load_schema
 
from light9.collector.output import Output as OutputInstance
 
from light9.newtypes import (DeviceUri, DmxIndex, DmxMessageIndex, OutputAttr, OutputUri, OutputValue)
 

	
 
@@ -23,6 +26,7 @@ class UiListener(Protocol):
 
class WebListeners:
 

	
 
    def __init__(self) -> None:
 
        self.CollectorUpdateSchema = load_schema('avro/CollectorUpdate.avsc')
 
        self.clients: List[Tuple[UiListener, Dict[DeviceUri, Dict[OutputAttr, OutputValue]]]] = []
 
        self.pendingMessageForDev: Dict[DeviceUri, Tuple[Dict[OutputAttr, OutputValue], Dict[Tuple[DeviceUri, OutputAttr], Tuple[OutputUri,
 
                                                                                                                                 DmxMessageIndex]]]] = {}
 
@@ -86,5 +90,8 @@ class WebListeners:
 
        for row in attrRows:
 
            row['chan'] = '%s %s' % (row['chan'][0], row['chan'][1])
 

	
 
        msg = json.dumps({'outputAttrsSet': {'dev': dev, 'attrs': attrRows}}, sort_keys=True)
 
        out = io.BytesIO()
 
        fastavro.schemaless_writer(out, self.CollectorUpdateSchema, {'OutputAttrsSet': {'dev': dev, 'attrs': attrRows}})
 
        msg = out.getvalue()
 
        log.info(f'made update message {len(msg)=}')
 
        return msg
src/light9/homepage/write_config.py
Show inline comments
 
@@ -80,6 +80,9 @@ http {{
 
  location /show/ {{
 
    root {root};
 
  }}
 
  location /avro/ {{
 
    root {root};
 
  }}
 

	
 
  location / {{
 
    proxy_pass http://localhost:8300;
web/collector/Light9CollectorUi.ts
Show inline comments
 
@@ -10,7 +10,7 @@ import { SyncedGraph } from "../SyncedGr
 
import { Light9CollectorDevice } from "./Light9CollectorDevice";
 
export { RdfdbSyncedGraph } from "../RdfdbSyncedGraph";
 
export { Light9CollectorDevice };
 

	
 
import { avro } from "../lib/avro";
 
debug.enable("*");
 
const log = debug("collector");
 

	
 
@@ -34,15 +34,21 @@ export class Light9CollectorUi extends L
 
      this.graph.runHandler(this.findDevices.bind(this), "findDevices");
 
    });
 

	
 
    const ws = new ReconnectingWebSocket("ws://localhost:8200/service/collector/updates");
 
    ws.addEventListener("message", (ev: any) => {
 
      const outputAttrsSet = JSON.parse(ev.data).outputAttrsSet;
 
    this.setupListener();
 
  }
 

	
 
  async setupListener() {
 
    const CollectorUpdateType = await avro.loadType("CollectorUpdate");
 
    const ws = new ReconnectingWebSocket(`ws://${location.host}/service/collector/updates`);
 
    ws.addEventListener("message", async (ev: ReconnectingWebSocket.MessageEvent) => {
 
      const jsMsg = await avro.parseBlob(CollectorUpdateType, ev.data);
 

	
 
      const outputAttrsSet = jsMsg.OutputAttrsSet;
 
      if (outputAttrsSet) {
 
        this.updateDev(outputAttrsSet.dev, outputAttrsSet.attrs);
 
      }
 
    });
 
  }
 

	
 
  findDevices(patch?: Patch) {
 
    const U = this.graph.U();
 

	
web/lib/avro-js.d.ts
Show inline comments
 
new file 100644
 
declare module "avro-js" {
 
    export namespace types {
 
        interface Type {
 
            fromBuffer(buffer: Buffer): Record;
 
        }
 
        type Record = any;
 
    }
 

	
 
    export function parse(schema: any): types.Type;
 
}
 
\ No newline at end of file
web/lib/avro.ts
Show inline comments
 
new file 100644
 
import * as avrojs from "avro-js";
 
export namespace avro {
 
  export async function loadType(typeName: string): Promise<avrojs.types.Type> {
 
    const schemaSource = await (await fetch(`/avro/${typeName}.avsc`)).json();
 
    return await avrojs.parse(schemaSource);
 
  }
 
  
 
  export async function parseBlob(type: avrojs.types.Type, b: Blob): Promise<avrojs.types.Record> {
 
    const jsMsg = type.fromBuffer(Buffer.from(await b.arrayBuffer()));
 
    return jsMsg;
 
  }
 
}
web/vite.config.ts
Show inline comments
 
import { defineConfig } from "vite";
 
import { nodePolyfills } from "vite-plugin-node-polyfills";
 

	
 
export default defineConfig({
 
  base: "/",
 
@@ -16,4 +17,5 @@ export default defineConfig({
 
  define: {
 
    global: {},
 
  },
 
  plugins: [nodePolyfills()],
 
});
0 comments (0 inline, 0 general)