Compare commits
No commits in common. "6d873c836620ff0df254f297b24e6f7b55cfa648" and "ad01868a9ff3f17b27ca61533ada1bcafb4278a9" have entirely different histories.
6d873c8366
...
ad01868a9f
32 changed files with 196 additions and 761 deletions
|
|
@ -5,7 +5,6 @@
|
||||||
.git
|
.git
|
||||||
.gitignore
|
.gitignore
|
||||||
.jj
|
.jj
|
||||||
.tls
|
|
||||||
.woodpecker
|
.woodpecker
|
||||||
.zed
|
.zed
|
||||||
Dockerfile*
|
Dockerfile*
|
||||||
|
|
|
||||||
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -1,5 +1,4 @@
|
||||||
.cache/
|
.cache/
|
||||||
.tls/
|
|
||||||
dist
|
dist
|
||||||
node_modules
|
node_modules
|
||||||
.env.development
|
.env.development
|
||||||
|
|
|
||||||
132
bun.lock
132
bun.lock
|
|
@ -9,7 +9,6 @@
|
||||||
"@thi.ng/color-palettes": "latest",
|
"@thi.ng/color-palettes": "latest",
|
||||||
"@thi.ng/pixel": "latest",
|
"@thi.ng/pixel": "latest",
|
||||||
"@thi.ng/pixel-dither": "latest",
|
"@thi.ng/pixel-dither": "latest",
|
||||||
"@xstate/vue": "latest",
|
|
||||||
"a11y-dialog": "latest",
|
"a11y-dialog": "latest",
|
||||||
"drizzle-orm": "latest",
|
"drizzle-orm": "latest",
|
||||||
"effect": "latest",
|
"effect": "latest",
|
||||||
|
|
@ -17,7 +16,6 @@
|
||||||
"sqlocal": "latest",
|
"sqlocal": "latest",
|
||||||
"vue": "latest",
|
"vue": "latest",
|
||||||
"vue-router": "latest",
|
"vue-router": "latest",
|
||||||
"xstate": "latest",
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@cspell/dict-fr-fr": "latest",
|
"@cspell/dict-fr-fr": "latest",
|
||||||
|
|
@ -215,11 +213,11 @@
|
||||||
|
|
||||||
"@effect/experimental": ["@effect/experimental@0.41.4", "", { "dependencies": { "msgpackr": "^1.10.2", "uuid": "^11.0.3" }, "peerDependencies": { "@effect/platform": "^0.77.4", "@effect/platform-node": "^0.73.4", "effect": "^3.13.4", "ioredis": "^5", "lmdb": "^3", "ws": "^8" }, "optionalPeers": ["@effect/platform-node", "ioredis", "lmdb", "ws"] }, "sha512-celrEhl/K2Eis906d3/oOv/3/w+M1jcONvrChG5qQgWYo6CJjSJm4xXopcTbiBhxAhvkd06zABkB3tr/lptUCA=="],
|
"@effect/experimental": ["@effect/experimental@0.41.4", "", { "dependencies": { "msgpackr": "^1.10.2", "uuid": "^11.0.3" }, "peerDependencies": { "@effect/platform": "^0.77.4", "@effect/platform-node": "^0.73.4", "effect": "^3.13.4", "ioredis": "^5", "lmdb": "^3", "ws": "^8" }, "optionalPeers": ["@effect/platform-node", "ioredis", "lmdb", "ws"] }, "sha512-celrEhl/K2Eis906d3/oOv/3/w+M1jcONvrChG5qQgWYo6CJjSJm4xXopcTbiBhxAhvkd06zABkB3tr/lptUCA=="],
|
||||||
|
|
||||||
"@effect/platform": ["@effect/platform@0.79.0", "", { "dependencies": { "find-my-way-ts": "^0.1.5", "multipasta": "^0.2.5" }, "peerDependencies": { "effect": "^3.13.9" } }, "sha512-xqnHRsCIvCsGuEIL9Ob4FZsMUU1ziIjZs+2owOGHt3Y3pseBho2A7pIMfUhOPwRrZRRV4/Jp4xpY7Mz5xbQOsw=="],
|
"@effect/platform": ["@effect/platform@0.77.6", "", { "dependencies": { "find-my-way-ts": "^0.1.5", "multipasta": "^0.2.5" }, "peerDependencies": { "effect": "^3.13.6" } }, "sha512-ghhLNyj/UoQvmp2I29nqngMlAzQB72BhjUKcOA58cUPaUUwNy3K2jmUAzdU6SB3RHIObsX44CM/jXZiYfTv59A=="],
|
||||||
|
|
||||||
"@effect/sql": ["@effect/sql@0.30.4", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.25.1", "uuid": "^11.0.3" }, "peerDependencies": { "@effect/experimental": "^0.41.4", "@effect/platform": "^0.77.4", "effect": "^3.13.4" } }, "sha512-hyGOZsNRlw09yqBcXCTr1o2+vVIVxEnBMNZzi0ZX5JbS8JBT05O7xAu3OYEzSU6bC5i+uVpJJUgdx2zDlOLkeA=="],
|
"@effect/sql": ["@effect/sql@0.30.4", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.25.1", "uuid": "^11.0.3" }, "peerDependencies": { "@effect/experimental": "^0.41.4", "@effect/platform": "^0.77.4", "effect": "^3.13.4" } }, "sha512-hyGOZsNRlw09yqBcXCTr1o2+vVIVxEnBMNZzi0ZX5JbS8JBT05O7xAu3OYEzSU6bC5i+uVpJJUgdx2zDlOLkeA=="],
|
||||||
|
|
||||||
"@effect/sql-drizzle": ["@effect/sql-drizzle@0.31.0", "", { "peerDependencies": { "@effect/sql": "^0.32.0", "drizzle-orm": "^0.31", "effect": "^3.13.9" } }, "sha512-PN7BJIX6d/qeBFkXLBJfNjMar2s46AFbzihAtJ7biFDocamq++9SYvpVfUr01go+2MVZ/7CD7kHfOMm1o+YHrg=="],
|
"@effect/sql-drizzle": ["@effect/sql-drizzle@0.29.6", "", { "peerDependencies": { "@effect/sql": "^0.30.6", "drizzle-orm": "^0.31", "effect": "^3.13.6" } }, "sha512-ST3HEXQZfp9tUXKOKxpfh9bbTukJsomyXXzZLvPo/KvF8nPpRltovYNT55Dsk+0vN8JyOHri+mX8hKBG5JzXcA=="],
|
||||||
|
|
||||||
"@esbuild-kit/core-utils": ["@esbuild-kit/core-utils@3.3.2", "", { "dependencies": { "esbuild": "~0.18.20", "source-map-support": "^0.5.21" } }, "sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ=="],
|
"@esbuild-kit/core-utils": ["@esbuild-kit/core-utils@3.3.2", "", { "dependencies": { "esbuild": "~0.18.20", "source-map-support": "^0.5.21" } }, "sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ=="],
|
||||||
|
|
||||||
|
|
@ -281,15 +279,13 @@
|
||||||
|
|
||||||
"@eslint/config-array": ["@eslint/config-array@0.19.2", "", { "dependencies": { "@eslint/object-schema": "^2.1.6", "debug": "^4.3.1", "minimatch": "^3.1.2" } }, "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w=="],
|
"@eslint/config-array": ["@eslint/config-array@0.19.2", "", { "dependencies": { "@eslint/object-schema": "^2.1.6", "debug": "^4.3.1", "minimatch": "^3.1.2" } }, "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w=="],
|
||||||
|
|
||||||
"@eslint/config-helpers": ["@eslint/config-helpers@0.1.0", "", {}, "sha512-kLrdPDJE1ckPo94kmPPf9Hfd0DU0Jw6oKYrhe+pwSC0iTUInmTa+w6fw8sGgcfkFJGNdWOUeOaDM4quW4a7OkA=="],
|
|
||||||
|
|
||||||
"@eslint/core": ["@eslint/core@0.10.0", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw=="],
|
"@eslint/core": ["@eslint/core@0.10.0", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw=="],
|
||||||
|
|
||||||
"@eslint/css": ["@eslint/css@0.4.0", "", { "dependencies": { "@eslint/core": "^0.10.0", "@eslint/plugin-kit": "^0.2.5", "@types/css-tree": "file:./typings/css-tree", "css-tree": "^3.1.0" } }, "sha512-aEvoIhIxa6nHvqTQxg56YgV8/9FO78ka1XnqkVnM07ZqJgeeILCNOHzwPs1z0N1vlj0Um2s4yMG8Ilau+D05Hg=="],
|
"@eslint/css": ["@eslint/css@0.4.0", "", { "dependencies": { "@eslint/core": "^0.10.0", "@eslint/plugin-kit": "^0.2.5", "@types/css-tree": "file:./typings/css-tree", "css-tree": "^3.1.0" } }, "sha512-aEvoIhIxa6nHvqTQxg56YgV8/9FO78ka1XnqkVnM07ZqJgeeILCNOHzwPs1z0N1vlj0Um2s4yMG8Ilau+D05Hg=="],
|
||||||
|
|
||||||
"@eslint/eslintrc": ["@eslint/eslintrc@3.3.0", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ=="],
|
"@eslint/eslintrc": ["@eslint/eslintrc@3.3.0", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ=="],
|
||||||
|
|
||||||
"@eslint/js": ["@eslint/js@9.22.0", "", {}, "sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ=="],
|
"@eslint/js": ["@eslint/js@9.21.0", "", {}, "sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw=="],
|
||||||
|
|
||||||
"@eslint/object-schema": ["@eslint/object-schema@2.1.6", "", {}, "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA=="],
|
"@eslint/object-schema": ["@eslint/object-schema@2.1.6", "", {}, "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA=="],
|
||||||
|
|
||||||
|
|
@ -373,57 +369,57 @@
|
||||||
|
|
||||||
"@standard-schema/spec": ["@standard-schema/spec@1.0.0", "", {}, "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA=="],
|
"@standard-schema/spec": ["@standard-schema/spec@1.0.0", "", {}, "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA=="],
|
||||||
|
|
||||||
"@thi.ng/api": ["@thi.ng/api@8.11.22", "", {}, "sha512-SbgnYcuyIKvJF+bdpFNZJxggYa6wBt7xh4OjWZwvmbZvibrjvk4xwLaJ8vm/bJoBYK/Oe631CApssa6kumZeNg=="],
|
"@thi.ng/api": ["@thi.ng/api@8.11.21", "", {}, "sha512-J6BUdUtFtwZirL3M9tkCiqBXj228z7zkxWOaDWTymwBeqY9s02vJP3mQV8l5p+YPDIRmYx/q7XVuLW1UTJRN/A=="],
|
||||||
|
|
||||||
"@thi.ng/arrays": ["@thi.ng/arrays@2.10.19", "", { "dependencies": { "@thi.ng/api": "^8.11.22", "@thi.ng/checks": "^3.7.2", "@thi.ng/compare": "^2.4.14", "@thi.ng/equiv": "^2.1.78", "@thi.ng/errors": "^2.5.28", "@thi.ng/random": "^4.1.13" } }, "sha512-wC1Jkvej8zDfSXZmIGp6qMg452mjt4BExMWSaVqaLbMKYszGLgMHJAa8PTUfHrK5A2wQXn35uZwpVbWd+jeubA=="],
|
"@thi.ng/arrays": ["@thi.ng/arrays@2.10.18", "", { "dependencies": { "@thi.ng/api": "^8.11.21", "@thi.ng/checks": "^3.7.1", "@thi.ng/compare": "^2.4.13", "@thi.ng/equiv": "^2.1.77", "@thi.ng/errors": "^2.5.27", "@thi.ng/random": "^4.1.12" } }, "sha512-4cJCVm67MqtrnwOWNdgeyM/WYAfEYeFtCh1x/3VptV6Ct8DSYyVbSK6RLYgsM04KQqAxEQniCl5/S+ZS3GFd+Q=="],
|
||||||
|
|
||||||
"@thi.ng/base-n": ["@thi.ng/base-n@2.7.34", "", {}, "sha512-LX7X9uaFIedAtDwzt6PzzaiHRPYGRjdVuAmhDV5bl8oB1SBfGaaj4PVumNbXkvKoelijl77oO6RspppVgE8/+Q=="],
|
"@thi.ng/base-n": ["@thi.ng/base-n@2.7.33", "", {}, "sha512-WAVoTt1ZIYpDUs/+FauMh0p25MsG2BK0twNmJKWqAcPdP0zxb8TSQJCNrej/vTeq5c5XVsNpfGXIEa2WiXy5XQ=="],
|
||||||
|
|
||||||
"@thi.ng/binary": ["@thi.ng/binary@3.4.45", "", { "dependencies": { "@thi.ng/api": "^8.11.22" } }, "sha512-VsLh3/zVWk+lquCDw90kIhZdS+VqBeSQyK29KVW66rQ7JAGn1glDhJuaqrucK/NEGnXmqxJfZqJdcEEJsn7M/Q=="],
|
"@thi.ng/binary": ["@thi.ng/binary@3.4.44", "", { "dependencies": { "@thi.ng/api": "^8.11.21" } }, "sha512-kd6ZZ0xWR5JivkSIjqb6MvFpK2us7dU3ruwmiBAw4oZKsTnfibTbgvtJLL8Q5BJnxYmI3aILQ1sCamxRMwbzBw=="],
|
||||||
|
|
||||||
"@thi.ng/canvas": ["@thi.ng/canvas@1.0.9", "", {}, "sha512-BptFGkpJBi92IbHKyOmuoRr6M1yRoNReiM8a6lJOXtPwGQAowIAZX3HI/LBYp8jwwnyA/G3adXVoT6wfUqmwgw=="],
|
"@thi.ng/canvas": ["@thi.ng/canvas@1.0.8", "", {}, "sha512-r4bRWAsiaaNx+ihTtQDi1RQFMfOLwGgoSbZhdxLzEo6t1Ga5a/cqv/WKqUWLjD1LHjxhtflS8uPcihD2ETyAOg=="],
|
||||||
|
|
||||||
"@thi.ng/checks": ["@thi.ng/checks@3.7.2", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-FGFHQrLOUKxLoNQfaoVKW8xBhFNaxtV0QqREbxYgnpCg8WgX5O8dU/T212bVTOMe0GSzqCkjEs3/BmPb4lxW5Q=="],
|
"@thi.ng/checks": ["@thi.ng/checks@3.7.1", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-RfVBQgJN0kr00SKptAAzdDOaaRtWlctqegYogynTLkUhf8Ck516Efk/macgWTzSLEPgcumN7E9F1F3lgfRCWew=="],
|
||||||
|
|
||||||
"@thi.ng/color": ["@thi.ng/color@5.7.28", "", { "dependencies": { "@thi.ng/api": "^8.11.22", "@thi.ng/arrays": "^2.10.19", "@thi.ng/binary": "^3.4.45", "@thi.ng/checks": "^3.7.2", "@thi.ng/compare": "^2.4.14", "@thi.ng/compose": "^3.0.25", "@thi.ng/defmulti": "^3.0.62", "@thi.ng/errors": "^2.5.28", "@thi.ng/math": "^5.11.22", "@thi.ng/random": "^4.1.13", "@thi.ng/strings": "^3.9.7", "@thi.ng/transducers": "^9.2.22", "@thi.ng/vectors": "^7.12.24" } }, "sha512-NreMb8WrUXcFMg33m3AmtW8638H9VOVB2kzuy1FqrHL/xQJnNFMsgingEt2ts8uZxKb0dlBBZJfx+u10SmNPlA=="],
|
"@thi.ng/color": ["@thi.ng/color@5.7.27", "", { "dependencies": { "@thi.ng/api": "^8.11.21", "@thi.ng/arrays": "^2.10.18", "@thi.ng/binary": "^3.4.44", "@thi.ng/checks": "^3.7.1", "@thi.ng/compare": "^2.4.13", "@thi.ng/compose": "^3.0.24", "@thi.ng/defmulti": "^3.0.61", "@thi.ng/errors": "^2.5.27", "@thi.ng/math": "^5.11.21", "@thi.ng/random": "^4.1.12", "@thi.ng/strings": "^3.9.6", "@thi.ng/transducers": "^9.2.21", "@thi.ng/vectors": "^7.12.23" } }, "sha512-zXI2X9lzGrp2I3o+qAg0ZFj+vWN9JMAFLfXvzLC/aAstn5N78eryhfQU55JXnlpuN4RkPbL+wlO/CZ/Sc37F1g=="],
|
||||||
|
|
||||||
"@thi.ng/color-palettes": ["@thi.ng/color-palettes@1.4.37", "", { "dependencies": { "@thi.ng/api": "^8.11.22", "@thi.ng/base-n": "^2.7.34", "@thi.ng/checks": "^3.7.2", "@thi.ng/color": "^5.7.28", "@thi.ng/errors": "^2.5.28", "@thi.ng/hex": "^2.3.66" } }, "sha512-NKoAnWJ3QEJYDUGzxCiBuIkiJplqtb6s+hRkLW8KD6Xw5klv9ajeBVxj93NY/4qB92Q0npfNWXCIrff++JM04A=="],
|
"@thi.ng/color-palettes": ["@thi.ng/color-palettes@1.4.36", "", { "dependencies": { "@thi.ng/api": "^8.11.21", "@thi.ng/base-n": "^2.7.33", "@thi.ng/checks": "^3.7.1", "@thi.ng/color": "^5.7.27", "@thi.ng/errors": "^2.5.27", "@thi.ng/hex": "^2.3.65" } }, "sha512-D1dSSp1/RtTnqrBPAvvGzyZZcGFu+fempdUcSlLAd4SvE9zOZfWRS5kXn8IjwfzGCRtXL5vGcJ98Fv8N+BfYew=="],
|
||||||
|
|
||||||
"@thi.ng/compare": ["@thi.ng/compare@2.4.14", "", { "dependencies": { "@thi.ng/api": "^8.11.22" } }, "sha512-w/Bu2kNWVM94/BYYTB7QdNrd8UEKz/Wfv6w6ZZjdTGJ/69MrT+8m6jqnCeloD+WjkQ3vsfexLhRUmOft+fTrzQ=="],
|
"@thi.ng/compare": ["@thi.ng/compare@2.4.13", "", { "dependencies": { "@thi.ng/api": "^8.11.21" } }, "sha512-OOhxV5N7zrqKNS07ME8WZNBL81sFnE0BIjyVU0Z6zlwu2oH9mF7pZ6voF/wZH5mFfse8kcSxOA8oiQCCzCnPIQ=="],
|
||||||
|
|
||||||
"@thi.ng/compose": ["@thi.ng/compose@3.0.25", "", { "dependencies": { "@thi.ng/api": "^8.11.22", "@thi.ng/errors": "^2.5.28" } }, "sha512-PAni1jk2b444GwGM+GLs++xeuOZ3OzJ6bVW+xr2D6iutLuqHsySFN2v44yTaWSVf1jxP0yqHla8en84b5ko92A=="],
|
"@thi.ng/compose": ["@thi.ng/compose@3.0.24", "", { "dependencies": { "@thi.ng/api": "^8.11.21", "@thi.ng/errors": "^2.5.27" } }, "sha512-WN6EeKt6EqDMICqrfGWqNpneMWw9OGaMA3T4ZFGD/AFEFmREZ0xsOMDR91oYotlvVDJeVKPYVa5CCLGx6ppQLQ=="],
|
||||||
|
|
||||||
"@thi.ng/defmulti": ["@thi.ng/defmulti@3.0.62", "", { "dependencies": { "@thi.ng/api": "^8.11.22", "@thi.ng/errors": "^2.5.28", "@thi.ng/logger": "^3.1.3" } }, "sha512-38sYjdjl7JFZPEPCRIay1mEHhbXK61iNExkOmJ6Qw2m9fzO0uT9NJ9CkH/iMnyNLfx1nTvZQwo48Q9qVkGMufQ=="],
|
"@thi.ng/defmulti": ["@thi.ng/defmulti@3.0.61", "", { "dependencies": { "@thi.ng/api": "^8.11.21", "@thi.ng/errors": "^2.5.27", "@thi.ng/logger": "^3.1.2" } }, "sha512-BfS0RtXgvphbvpQ9n5mDUbjsXlOafxEC8t8qL41bnPK0UJhA7IrJ/yfraDB2WmeTPGid70L9NdX0bg4ih7GGyg=="],
|
||||||
|
|
||||||
"@thi.ng/equiv": ["@thi.ng/equiv@2.1.78", "", {}, "sha512-dEyGSzf/62Fv9X9swfqFfsB2/zWOQK+ItlwIarUXWxijYUIw0smCca4oix+eWs4/2QnESV1p0I1Jp66d8Psydg=="],
|
"@thi.ng/equiv": ["@thi.ng/equiv@2.1.77", "", {}, "sha512-qcpq7yMKNanK6NvoJaJOQeY2lHXuVWWERAHcM+wi3EpQwlVDO0smG3DOdZuAEcynnMli8JX3cyzAGFyZE86tZw=="],
|
||||||
|
|
||||||
"@thi.ng/errors": ["@thi.ng/errors@2.5.28", "", {}, "sha512-ZYFe7Hq9Oh2e2mOxlTc22/btCkozb0tm0xNAKK5kOoU8BxByh2fnN/qK1rHOfx11TW6EYtMpfEMQDdjmclOwjw=="],
|
"@thi.ng/errors": ["@thi.ng/errors@2.5.27", "", {}, "sha512-t1sgGuZqHv81lzNPSRySGHnDBvtt6h3MIMn3LdZnqMR0swwOIApw6YlheMYB63u94NdtuneQYcjdvbhOsHbwPQ=="],
|
||||||
|
|
||||||
"@thi.ng/hex": ["@thi.ng/hex@2.3.66", "", {}, "sha512-X4YVOByqPZYjIlqdDoZOpzNGW8FF5T2yWuAP3j80RPkVsgX2BM+gQYPyY7kkDe3gzWaRJIYE2TIwFHM+0RogJw=="],
|
"@thi.ng/hex": ["@thi.ng/hex@2.3.65", "", {}, "sha512-rX3U8DCayQVLkm6J6uMf6w1TSRQ3pE4okwkahS/A6/sDmABUlMo7t+s1psQhV07Jigr8q103+JHQpDdrcURiWw=="],
|
||||||
|
|
||||||
"@thi.ng/logger": ["@thi.ng/logger@3.1.3", "", {}, "sha512-UOxnYsAeVyvPQuT1bcnZJGm5lRhHRYq1oJ08nISOy1lMoluN0Cht5jqGZVCG03hqwXj1sSsfhk6u08H4W5ACCQ=="],
|
"@thi.ng/logger": ["@thi.ng/logger@3.1.2", "", {}, "sha512-WU/WCAOkxaLvGI2purG0iabueIG3Pq4CeoUogSHp/ctIh9vSVXplJYXlMy5PizttrHIJShJeHHu15x7IRyrAEQ=="],
|
||||||
|
|
||||||
"@thi.ng/math": ["@thi.ng/math@5.11.22", "", { "dependencies": { "@thi.ng/api": "^8.11.22" } }, "sha512-HpYCjOAZWfpiaGd4dVYrqYI8MbnOCpJWBDCUmGIienNCNnjov4iwmsHhi52kVCEIz3bDJtaEkPqB6L663wvCSw=="],
|
"@thi.ng/math": ["@thi.ng/math@5.11.21", "", { "dependencies": { "@thi.ng/api": "^8.11.21" } }, "sha512-JLjHdQbCpIP6F76Vq8yBtRtDOaUJ5HKsyEhU++8bjPX7VeDf8um4Ba/PUQZS+SpX0ghTZrqirqoI7H6wWz/TaQ=="],
|
||||||
|
|
||||||
"@thi.ng/memoize": ["@thi.ng/memoize@4.0.12", "", { "dependencies": { "@thi.ng/api": "^8.11.22" } }, "sha512-fVNaCojN+thuWstM+/Dz6iPOlH1MJD4yHx+pLErfkJjStAH1UGRCZt2C05qJrSDy8KJxNRfxcQivPKiJClzMCg=="],
|
"@thi.ng/memoize": ["@thi.ng/memoize@4.0.11", "", { "dependencies": { "@thi.ng/api": "^8.11.21" } }, "sha512-acxutHHnYAF8WfxCgDN+V/euhmC/FnjcPg1oLxgCQNET42X5jzhYyxhOEwOnkv+DRezkcgpkM9TFNF/raawlpQ=="],
|
||||||
|
|
||||||
"@thi.ng/pixel": ["@thi.ng/pixel@7.3.20", "", { "dependencies": { "@thi.ng/api": "^8.11.22", "@thi.ng/canvas": "^1.0.9", "@thi.ng/checks": "^3.7.2", "@thi.ng/errors": "^2.5.28", "@thi.ng/math": "^5.11.22", "@thi.ng/porter-duff": "^2.1.100" } }, "sha512-n6CEMda8XYSrItk/llWlbV5GhFVBwWD9peTgXu/uL6BiZrTtrNmuO19hNiOALo/yWIFmWgb36eeSh0AFr6+d6w=="],
|
"@thi.ng/pixel": ["@thi.ng/pixel@7.3.19", "", { "dependencies": { "@thi.ng/api": "^8.11.21", "@thi.ng/canvas": "^1.0.8", "@thi.ng/checks": "^3.7.1", "@thi.ng/errors": "^2.5.27", "@thi.ng/math": "^5.11.21", "@thi.ng/porter-duff": "^2.1.99" } }, "sha512-k1oUFPktxOcJEh0RuzgwoZGBkNqB1zMNvk2QILph54Cj1JJH3CcAuqJTu+N6QkXoxsgoM4DtMiDcmIdyrRokJQ=="],
|
||||||
|
|
||||||
"@thi.ng/pixel-dither": ["@thi.ng/pixel-dither@1.1.160", "", { "dependencies": { "@thi.ng/checks": "^3.7.2", "@thi.ng/math": "^5.11.22", "@thi.ng/pixel": "^7.3.20" } }, "sha512-3VDO050krFIxiQ8LpwPqFlhyXzVe7upzApPWhIwGyJI2bAs9exqxLU1lrDLG9kqx0R17ktHr22NFOgOWra5iyQ=="],
|
"@thi.ng/pixel-dither": ["@thi.ng/pixel-dither@1.1.159", "", { "dependencies": { "@thi.ng/checks": "^3.7.1", "@thi.ng/math": "^5.11.21", "@thi.ng/pixel": "^7.3.19" } }, "sha512-1tQfZUPgTEe/sn0URTHbkDEtWpJyqC4WqR9BMdOcE+g+pHhp1AjGB+eru1Mhx0WKJ/jcYl669U73Qooh8L2V6A=="],
|
||||||
|
|
||||||
"@thi.ng/porter-duff": ["@thi.ng/porter-duff@2.1.100", "", { "dependencies": { "@thi.ng/api": "^8.11.22" } }, "sha512-qkaYL2KySvBBmjPzNvR/mMXO71NEg7grc/TKfTQijArtZdvg5odsjAI+FJXrb2ArrleXqXZKsO3dMdeD3t51ZQ=="],
|
"@thi.ng/porter-duff": ["@thi.ng/porter-duff@2.1.99", "", { "dependencies": { "@thi.ng/api": "^8.11.21" } }, "sha512-HC4rqfHGfAMijUoNlZslRZypb7MJ8BO6XpRF2Ol/O6JqHzhHtWlwbB/WGfoSiAUfdEHprSZ3KsPCDEl7MnRdpg=="],
|
||||||
|
|
||||||
"@thi.ng/random": ["@thi.ng/random@4.1.13", "", { "dependencies": { "@thi.ng/api": "^8.11.22", "@thi.ng/errors": "^2.5.28" } }, "sha512-FQXVYRLt98hItEpzLrGaG7EUuP6+bJYvXeQ65NjtC0pGf+x/DxubI8Jmqphr5EyH8odyxuDzxdnRbak+p3Dnyg=="],
|
"@thi.ng/random": ["@thi.ng/random@4.1.12", "", { "dependencies": { "@thi.ng/api": "^8.11.21", "@thi.ng/errors": "^2.5.27" } }, "sha512-IpcAgCGDdaHAahY1LJbJ9oULsmhCrQpGeAjPfB0gpGM1D7JXeOaY83ctt3tdqovT2YIaCMIUd8ahJt7VBMD+Ig=="],
|
||||||
|
|
||||||
"@thi.ng/strings": ["@thi.ng/strings@3.9.7", "", { "dependencies": { "@thi.ng/api": "^8.11.22", "@thi.ng/errors": "^2.5.28", "@thi.ng/hex": "^2.3.66", "@thi.ng/memoize": "^4.0.12" } }, "sha512-J1cNbtSaYCiuTYJJE4rFHsnJIMVKKyjGLcBoGMPUTK40uiR+rwM7Rg3nIbalW7QcBfcNejAelHFzHO5aTD3u3w=="],
|
"@thi.ng/strings": ["@thi.ng/strings@3.9.6", "", { "dependencies": { "@thi.ng/api": "^8.11.21", "@thi.ng/errors": "^2.5.27", "@thi.ng/hex": "^2.3.65", "@thi.ng/memoize": "^4.0.11" } }, "sha512-kdh66IfvlHz+iywyojTZCmUXg5d4NISrA3MwNm6fLUsuBA+yNVTOdf484Azbe1SQEUU5e9RLc6bfVeqkdthNxw=="],
|
||||||
|
|
||||||
"@thi.ng/timestamp": ["@thi.ng/timestamp@1.1.7", "", {}, "sha512-puu4cA5HqBoNeRpgPgKdwDHo6YI1PoS9S/X6HiMDfWVhv6Ln4SzydduvJF7fpCEs/01xtMu/8wSpGHH1icBdaA=="],
|
"@thi.ng/timestamp": ["@thi.ng/timestamp@1.1.6", "", {}, "sha512-LGVbm9AiGwBcNHh2jieEtccy2edYCdHG3aK0no6ChH1AyAzonDdr05D+nBv0pl1h9C2AFPe9UQj43RdFgQJuUQ=="],
|
||||||
|
|
||||||
"@thi.ng/transducers": ["@thi.ng/transducers@9.2.22", "", { "dependencies": { "@thi.ng/api": "^8.11.22", "@thi.ng/arrays": "^2.10.19", "@thi.ng/checks": "^3.7.2", "@thi.ng/compare": "^2.4.14", "@thi.ng/compose": "^3.0.25", "@thi.ng/errors": "^2.5.28", "@thi.ng/math": "^5.11.22", "@thi.ng/random": "^4.1.13", "@thi.ng/timestamp": "^1.1.7" } }, "sha512-CFYXYRlGsRKUZdroQkEn09HagzXhIhs73jVcJ8ld05O8L+H2Y3RPgsOEcSd/ysB1oH/2LfVuFbYkNXg/1jvlDQ=="],
|
"@thi.ng/transducers": ["@thi.ng/transducers@9.2.21", "", { "dependencies": { "@thi.ng/api": "^8.11.21", "@thi.ng/arrays": "^2.10.18", "@thi.ng/checks": "^3.7.1", "@thi.ng/compare": "^2.4.13", "@thi.ng/compose": "^3.0.24", "@thi.ng/errors": "^2.5.27", "@thi.ng/math": "^5.11.21", "@thi.ng/random": "^4.1.12", "@thi.ng/timestamp": "^1.1.6" } }, "sha512-5uOiddZICcOGW5L8Y301bwjshfLZOvBlJpLneQzzsYbpqfQdOR4NlkbrJVw+IKEuqZU5B64eRqzJzOwjDAsd0g=="],
|
||||||
|
|
||||||
"@thi.ng/vectors": ["@thi.ng/vectors@7.12.24", "", { "dependencies": { "@thi.ng/api": "^8.11.22", "@thi.ng/binary": "^3.4.45", "@thi.ng/checks": "^3.7.2", "@thi.ng/equiv": "^2.1.78", "@thi.ng/errors": "^2.5.28", "@thi.ng/math": "^5.11.22", "@thi.ng/memoize": "^4.0.12", "@thi.ng/random": "^4.1.13", "@thi.ng/strings": "^3.9.7", "@thi.ng/transducers": "^9.2.22" } }, "sha512-ZxwlnDb/TZBR57BN0bcqFmZfQDu7NCNUBXO/LRhKAPVoqTXyShxELUYhFWKV8oNF8Tr7+dcJUg46tg9pP6VMtA=="],
|
"@thi.ng/vectors": ["@thi.ng/vectors@7.12.23", "", { "dependencies": { "@thi.ng/api": "^8.11.21", "@thi.ng/binary": "^3.4.44", "@thi.ng/checks": "^3.7.1", "@thi.ng/equiv": "^2.1.77", "@thi.ng/errors": "^2.5.27", "@thi.ng/math": "^5.11.21", "@thi.ng/memoize": "^4.0.11", "@thi.ng/random": "^4.1.12", "@thi.ng/strings": "^3.9.6", "@thi.ng/transducers": "^9.2.21" } }, "sha512-+PbtaA2cYApQrzGpOKC3Yg4jxWiJw6qEchTH+YRyjVA6YdAlSdptwrvEYdUCiKhPLqa0WUrKzCUw4mqIE75yDA=="],
|
||||||
|
|
||||||
"@types/bun": ["@types/bun@1.2.5", "", { "dependencies": { "bun-types": "1.2.5" } }, "sha512-w2OZTzrZTVtbnJew1pdFmgV99H0/L+Pvw+z1P67HaR18MHOzYnTYOi6qzErhK8HyT+DB782ADVPPE92Xu2/Opg=="],
|
"@types/bun": ["@types/bun@1.2.4", "", { "dependencies": { "bun-types": "1.2.4" } }, "sha512-QtuV5OMR8/rdKJs213iwXDpfVvnskPXY/S0ZiFbsTjQZycuqPbMW8Gf/XhLfwE5njW8sxI2WjISURXPlHypMFA=="],
|
||||||
|
|
||||||
"@types/estree": ["@types/estree@1.0.6", "", {}, "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw=="],
|
"@types/estree": ["@types/estree@1.0.6", "", {}, "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw=="],
|
||||||
|
|
||||||
|
|
@ -433,21 +429,21 @@
|
||||||
|
|
||||||
"@types/ws": ["@types/ws@8.5.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw=="],
|
"@types/ws": ["@types/ws@8.5.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw=="],
|
||||||
|
|
||||||
"@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.26.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.26.0", "@typescript-eslint/type-utils": "8.26.0", "@typescript-eslint/utils": "8.26.0", "@typescript-eslint/visitor-keys": "8.26.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", "ts-api-utils": "^2.0.1" }, "peerDependencies": { "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-cLr1J6pe56zjKYajK6SSSre6nl1Gj6xDp1TY0trpgPzjVbgDwd09v2Ws37LABxzkicmUjhEeg/fAUjPJJB1v5Q=="],
|
"@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.25.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.25.0", "@typescript-eslint/type-utils": "8.25.0", "@typescript-eslint/utils": "8.25.0", "@typescript-eslint/visitor-keys": "8.25.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", "ts-api-utils": "^2.0.1" }, "peerDependencies": { "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.8.0" } }, "sha512-VM7bpzAe7JO/BFf40pIT1lJqS/z1F8OaSsUB3rpFJucQA4cOSuH2RVVVkFULN+En0Djgr29/jb4EQnedUo95KA=="],
|
||||||
|
|
||||||
"@typescript-eslint/parser": ["@typescript-eslint/parser@8.26.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.26.0", "@typescript-eslint/types": "8.26.0", "@typescript-eslint/typescript-estree": "8.26.0", "@typescript-eslint/visitor-keys": "8.26.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-mNtXP9LTVBy14ZF3o7JG69gRPBK/2QWtQd0j0oH26HcY/foyJJau6pNUez7QrM5UHnSvwlQcJXKsk0I99B9pOA=="],
|
"@typescript-eslint/parser": ["@typescript-eslint/parser@8.25.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.25.0", "@typescript-eslint/types": "8.25.0", "@typescript-eslint/typescript-estree": "8.25.0", "@typescript-eslint/visitor-keys": "8.25.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.8.0" } }, "sha512-4gbs64bnbSzu4FpgMiQ1A+D+urxkoJk/kqlDJ2W//5SygaEiAP2B4GoS7TEdxgwol2el03gckFV9lJ4QOMiiHg=="],
|
||||||
|
|
||||||
"@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.26.0", "", { "dependencies": { "@typescript-eslint/types": "8.26.0", "@typescript-eslint/visitor-keys": "8.26.0" } }, "sha512-E0ntLvsfPqnPwng8b8y4OGuzh/iIOm2z8U3S9zic2TeMLW61u5IH2Q1wu0oSTkfrSzwbDJIB/Lm8O3//8BWMPA=="],
|
"@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.25.0", "", { "dependencies": { "@typescript-eslint/types": "8.25.0", "@typescript-eslint/visitor-keys": "8.25.0" } }, "sha512-6PPeiKIGbgStEyt4NNXa2ru5pMzQ8OYKO1hX1z53HMomrmiSB+R5FmChgQAP1ro8jMtNawz+TRQo/cSXrauTpg=="],
|
||||||
|
|
||||||
"@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.26.0", "", { "dependencies": { "@typescript-eslint/typescript-estree": "8.26.0", "@typescript-eslint/utils": "8.26.0", "debug": "^4.3.4", "ts-api-utils": "^2.0.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-ruk0RNChLKz3zKGn2LwXuVoeBcUMh+jaqzN461uMMdxy5H9epZqIBtYj7UiPXRuOpaALXGbmRuZQhmwHhaS04Q=="],
|
"@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.25.0", "", { "dependencies": { "@typescript-eslint/typescript-estree": "8.25.0", "@typescript-eslint/utils": "8.25.0", "debug": "^4.3.4", "ts-api-utils": "^2.0.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.8.0" } }, "sha512-d77dHgHWnxmXOPJuDWO4FDWADmGQkN5+tt6SFRZz/RtCWl4pHgFl3+WdYCn16+3teG09DY6XtEpf3gGD0a186g=="],
|
||||||
|
|
||||||
"@typescript-eslint/types": ["@typescript-eslint/types@8.26.0", "", {}, "sha512-89B1eP3tnpr9A8L6PZlSjBvnJhWXtYfZhECqlBl1D9Lme9mHO6iWlsprBtVenQvY1HMhax1mWOjhtL3fh/u+pA=="],
|
"@typescript-eslint/types": ["@typescript-eslint/types@8.25.0", "", {}, "sha512-+vUe0Zb4tkNgznQwicsvLUJgZIRs6ITeWSCclX1q85pR1iOiaj+4uZJIUp//Z27QWu5Cseiw3O3AR8hVpax7Aw=="],
|
||||||
|
|
||||||
"@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.26.0", "", { "dependencies": { "@typescript-eslint/types": "8.26.0", "@typescript-eslint/visitor-keys": "8.26.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^2.0.1" }, "peerDependencies": { "typescript": ">=4.8.4 <5.9.0" } }, "sha512-tiJ1Hvy/V/oMVRTbEOIeemA2XoylimlDQ03CgPPNaHYZbpsc78Hmngnt+WXZfJX1pjQ711V7g0H7cSJThGYfPQ=="],
|
"@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.25.0", "", { "dependencies": { "@typescript-eslint/types": "8.25.0", "@typescript-eslint/visitor-keys": "8.25.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^2.0.1" }, "peerDependencies": { "typescript": ">=4.8.4 <5.8.0" } }, "sha512-ZPaiAKEZ6Blt/TPAx5Ot0EIB/yGtLI2EsGoY6F7XKklfMxYQyvtL+gT/UCqkMzO0BVFHLDlzvFqQzurYahxv9Q=="],
|
||||||
|
|
||||||
"@typescript-eslint/utils": ["@typescript-eslint/utils@8.26.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@typescript-eslint/scope-manager": "8.26.0", "@typescript-eslint/types": "8.26.0", "@typescript-eslint/typescript-estree": "8.26.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-2L2tU3FVwhvU14LndnQCA2frYC8JnPDVKyQtWFPf8IYFMt/ykEN1bPolNhNbCVgOmdzTlWdusCTKA/9nKrf8Ig=="],
|
"@typescript-eslint/utils": ["@typescript-eslint/utils@8.25.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@typescript-eslint/scope-manager": "8.25.0", "@typescript-eslint/types": "8.25.0", "@typescript-eslint/typescript-estree": "8.25.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.8.0" } }, "sha512-syqRbrEv0J1wywiLsK60XzHnQe/kRViI3zwFALrNEgnntn1l24Ra2KvOAWwWbWZ1lBZxZljPDGOq967dsl6fkA=="],
|
||||||
|
|
||||||
"@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.26.0", "", { "dependencies": { "@typescript-eslint/types": "8.26.0", "eslint-visitor-keys": "^4.2.0" } }, "sha512-2z8JQJWAzPdDd51dRQ/oqIJxe99/hoLIqmf8RMCAJQtYDc535W/Jt2+RTP4bP0aKeBG1F65yjIZuczOXCmbWwg=="],
|
"@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.25.0", "", { "dependencies": { "@typescript-eslint/types": "8.25.0", "eslint-visitor-keys": "^4.2.0" } }, "sha512-kCYXKAum9CecGVHGij7muybDfTS2sD3t0L4bJsEZLkyrXUImiCTq1M3LG2SRtOhiHFwMR9wAFplpT6XHYjTkwQ=="],
|
||||||
|
|
||||||
"@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="],
|
"@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="],
|
||||||
|
|
||||||
|
|
@ -477,7 +473,7 @@
|
||||||
|
|
||||||
"@vue/devtools-shared": ["@vue/devtools-shared@7.7.2", "", { "dependencies": { "rfdc": "^1.4.1" } }, "sha512-uBFxnp8gwW2vD6FrJB8JZLUzVb6PNRG0B0jBnHsOH8uKyva2qINY8PTF5Te4QlTbMDqU5K6qtJDr6cNsKWhbOA=="],
|
"@vue/devtools-shared": ["@vue/devtools-shared@7.7.2", "", { "dependencies": { "rfdc": "^1.4.1" } }, "sha512-uBFxnp8gwW2vD6FrJB8JZLUzVb6PNRG0B0jBnHsOH8uKyva2qINY8PTF5Te4QlTbMDqU5K6qtJDr6cNsKWhbOA=="],
|
||||||
|
|
||||||
"@vue/eslint-config-typescript": ["@vue/eslint-config-typescript@14.5.0", "", { "dependencies": { "@typescript-eslint/utils": "^8.26.0", "fast-glob": "^3.3.3", "typescript-eslint": "^8.26.0", "vue-eslint-parser": "^10.1.1" }, "peerDependencies": { "eslint": "^9.10.0", "eslint-plugin-vue": "^9.28.0 || ^10.0.0", "typescript": ">=4.8.4" }, "optionalPeers": ["typescript"] }, "sha512-5oPOyuwkw++AP5gHDh5YFmST50dPfWOcm3/W7Nbh42IK5O3H74ytWAw0TrCRTaBoD/02khnWXuZf1Bz1xflavQ=="],
|
"@vue/eslint-config-typescript": ["@vue/eslint-config-typescript@14.4.0", "", { "dependencies": { "@typescript-eslint/utils": "^8.23.0", "fast-glob": "^3.3.3", "typescript-eslint": "^8.23.0", "vue-eslint-parser": "^9.4.3" }, "peerDependencies": { "eslint": "^9.10.0", "eslint-plugin-vue": "^9.28.0", "typescript": ">=4.8.4" }, "optionalPeers": ["typescript"] }, "sha512-daU+eAekEeVz3CReE4PRW25fe+OJDKwE28jHN6LimDEnuFMbJ6H4WGogEpNof276wVP6UvzOeJQfLFjB5mW29A=="],
|
||||||
|
|
||||||
"@vue/language-core": ["@vue/language-core@2.2.8", "", { "dependencies": { "@volar/language-core": "~2.4.11", "@vue/compiler-dom": "^3.5.0", "@vue/compiler-vue2": "^2.7.16", "@vue/shared": "^3.5.0", "alien-signals": "^1.0.3", "minimatch": "^9.0.3", "muggle-string": "^0.4.1", "path-browserify": "^1.0.1" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-rrzB0wPGBvcwaSNRriVWdNAbHQWSf0NlGqgKHK5mEkXpefjUlVRP62u03KvwZpvKVjRnBIQ/Lwre+Mx9N6juUQ=="],
|
"@vue/language-core": ["@vue/language-core@2.2.8", "", { "dependencies": { "@volar/language-core": "~2.4.11", "@vue/compiler-dom": "^3.5.0", "@vue/compiler-vue2": "^2.7.16", "@vue/shared": "^3.5.0", "alien-signals": "^1.0.3", "minimatch": "^9.0.3", "muggle-string": "^0.4.1", "path-browserify": "^1.0.1" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-rrzB0wPGBvcwaSNRriVWdNAbHQWSf0NlGqgKHK5mEkXpefjUlVRP62u03KvwZpvKVjRnBIQ/Lwre+Mx9N6juUQ=="],
|
||||||
|
|
||||||
|
|
@ -493,8 +489,6 @@
|
||||||
|
|
||||||
"@vue/typescript-plugin": ["@vue/typescript-plugin@2.2.8", "", { "dependencies": { "@volar/typescript": "~2.4.11", "@vue/language-core": "2.2.8", "@vue/shared": "^3.5.0" } }, "sha512-9fzhFYrzIsPm5Qylv6yBmV1tISqkUhE1PD5uBwkeLCxIwNUjIbnGBdN8HszDa1ZWFWuBsbQpx7FxmV7vQincDw=="],
|
"@vue/typescript-plugin": ["@vue/typescript-plugin@2.2.8", "", { "dependencies": { "@volar/typescript": "~2.4.11", "@vue/language-core": "2.2.8", "@vue/shared": "^3.5.0" } }, "sha512-9fzhFYrzIsPm5Qylv6yBmV1tISqkUhE1PD5uBwkeLCxIwNUjIbnGBdN8HszDa1ZWFWuBsbQpx7FxmV7vQincDw=="],
|
||||||
|
|
||||||
"@xstate/vue": ["@xstate/vue@4.0.2", "", { "peerDependencies": { "vue": "^3.0.0", "xstate": "^5.19.2" }, "optionalPeers": ["xstate"] }, "sha512-2d5/1nEfd3AGMkYoJJPI2uQ9qFKKnpTl5NCLo3utNAKzPsK/9k0cp/FijqtZOxmnHC407qmwErZs1n6u5yBkcQ=="],
|
|
||||||
|
|
||||||
"a11y-dialog": ["a11y-dialog@8.1.1", "", { "dependencies": { "focusable-selectors": "^0.8.0" } }, "sha512-7SBLXFwhQBnEHOaIiKUUQZ5VKJa/b1jBDvPJvlejlqX2w9cpi+iHBrdjcmd4Xd6vIdsuMHGo9Is2SWu0Hzu0zg=="],
|
"a11y-dialog": ["a11y-dialog@8.1.1", "", { "dependencies": { "focusable-selectors": "^0.8.0" } }, "sha512-7SBLXFwhQBnEHOaIiKUUQZ5VKJa/b1jBDvPJvlejlqX2w9cpi+iHBrdjcmd4Xd6vIdsuMHGo9Is2SWu0Hzu0zg=="],
|
||||||
|
|
||||||
"acorn": ["acorn@8.14.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA=="],
|
"acorn": ["acorn@8.14.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA=="],
|
||||||
|
|
@ -537,7 +531,7 @@
|
||||||
|
|
||||||
"buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="],
|
"buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="],
|
||||||
|
|
||||||
"bun-types": ["bun-types@1.2.5", "", { "dependencies": { "@types/node": "*", "@types/ws": "~8.5.10" } }, "sha512-3oO6LVGGRRKI4kHINx5PIdIgnLRb7l/SprhzqXapmoYkFl5m4j6EvALvbDVuuBFaamB46Ap6HCUxIXNLCGy+tg=="],
|
"bun-types": ["bun-types@1.2.4", "", { "dependencies": { "@types/node": "*", "@types/ws": "~8.5.10" } }, "sha512-nDPymR207ZZEoWD4AavvEaa/KZe/qlrbMSchqpQwovPZCKc7pwMoENjEtHgMKaAjJhy+x6vfqSBA1QU3bJgs0Q=="],
|
||||||
|
|
||||||
"cacheable": ["cacheable@1.8.8", "", { "dependencies": { "hookified": "^1.7.0", "keyv": "^5.2.3" } }, "sha512-OE1/jlarWxROUIpd0qGBSKFLkNsotY8pt4GeiVErUYh/NUeTNrT+SBksUgllQv4m6a0W/VZsLuiHb88maavqEw=="],
|
"cacheable": ["cacheable@1.8.8", "", { "dependencies": { "hookified": "^1.7.0", "keyv": "^5.2.3" } }, "sha512-OE1/jlarWxROUIpd0qGBSKFLkNsotY8pt4GeiVErUYh/NUeTNrT+SBksUgllQv4m6a0W/VZsLuiHb88maavqEw=="],
|
||||||
|
|
||||||
|
|
@ -611,7 +605,7 @@
|
||||||
|
|
||||||
"defaults": ["defaults@1.0.4", "", { "dependencies": { "clone": "^1.0.2" } }, "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A=="],
|
"defaults": ["defaults@1.0.4", "", { "dependencies": { "clone": "^1.0.2" } }, "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A=="],
|
||||||
|
|
||||||
"detect-libc": ["detect-libc@2.0.3", "", {}, "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw=="],
|
"detect-libc": ["detect-libc@1.0.3", "", { "bin": { "detect-libc": "./bin/detect-libc.js" } }, "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg=="],
|
||||||
|
|
||||||
"dir-glob": ["dir-glob@3.0.1", "", { "dependencies": { "path-type": "^4.0.0" } }, "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA=="],
|
"dir-glob": ["dir-glob@3.0.1", "", { "dependencies": { "path-type": "^4.0.0" } }, "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA=="],
|
||||||
|
|
||||||
|
|
@ -629,7 +623,7 @@
|
||||||
|
|
||||||
"easy-table": ["easy-table@1.2.0", "", { "dependencies": { "ansi-regex": "^5.0.1" }, "optionalDependencies": { "wcwidth": "^1.0.1" } }, "sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww=="],
|
"easy-table": ["easy-table@1.2.0", "", { "dependencies": { "ansi-regex": "^5.0.1" }, "optionalDependencies": { "wcwidth": "^1.0.1" } }, "sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww=="],
|
||||||
|
|
||||||
"effect": ["effect@3.13.9", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "fast-check": "^3.23.1" } }, "sha512-fcynHENQW6pejcN5thnRyCFCZDleYSkxUTCbQL36AUXGBakbLXERrLHBlwJke3687S3Z4o9MHad7v+pUiDBC4Q=="],
|
"effect": ["effect@3.13.6", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "fast-check": "^3.23.1" } }, "sha512-NKmzyIuOb2UuHFPRz9EYScbhMBxXkzjPRuu+4axE+hMk1f0U7TZxzi2CP3TVVxA2kzvh00aBQEbyH7Opq4PnWg=="],
|
||||||
|
|
||||||
"electron-to-chromium": ["electron-to-chromium@1.5.109", "", {}, "sha512-AidaH9JETVRr9DIPGfp1kAarm/W6hRJTPuCnkF+2MqhF4KaAgRIcBc8nvjk+YMXZhwfISof/7WG29eS4iGxQLQ=="],
|
"electron-to-chromium": ["electron-to-chromium@1.5.109", "", {}, "sha512-AidaH9JETVRr9DIPGfp1kAarm/W6hRJTPuCnkF+2MqhF4KaAgRIcBc8nvjk+YMXZhwfISof/7WG29eS4iGxQLQ=="],
|
||||||
|
|
||||||
|
|
@ -651,13 +645,13 @@
|
||||||
|
|
||||||
"escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="],
|
"escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="],
|
||||||
|
|
||||||
"eslint": ["eslint@9.22.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.19.2", "@eslint/config-helpers": "^0.1.0", "@eslint/core": "^0.12.0", "@eslint/eslintrc": "^3.3.0", "@eslint/js": "9.22.0", "@eslint/plugin-kit": "^0.2.7", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.3.0", "eslint-visitor-keys": "^4.2.0", "espree": "^10.3.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ=="],
|
"eslint": ["eslint@9.21.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.19.2", "@eslint/core": "^0.12.0", "@eslint/eslintrc": "^3.3.0", "@eslint/js": "9.21.0", "@eslint/plugin-kit": "^0.2.7", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.2.0", "eslint-visitor-keys": "^4.2.0", "espree": "^10.3.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-KjeihdFqTPhOMXTt7StsDxriV4n66ueuF/jfPNC3j/lduHwr/ijDwJMsF+wyMJethgiKi5wniIE243vi07d3pg=="],
|
||||||
|
|
||||||
"eslint-plugin-perfectionist": ["eslint-plugin-perfectionist@4.10.1", "", { "dependencies": { "@typescript-eslint/types": "^8.26.0", "@typescript-eslint/utils": "^8.26.0", "natural-orderby": "^5.0.0" }, "peerDependencies": { "eslint": ">=8.45.0" } }, "sha512-GXwFfL47RfBLZRGQdrvGZw9Ali2T2GPW8p4Gyj2fyWQ9396R/HgJMf0m9kn7D6WXRwrINfTDGLS+QYIeok9qEg=="],
|
"eslint-plugin-perfectionist": ["eslint-plugin-perfectionist@4.9.0", "", { "dependencies": { "@typescript-eslint/types": "^8.24.0", "@typescript-eslint/utils": "^8.24.0", "natural-orderby": "^5.0.0" }, "peerDependencies": { "eslint": ">=8.0.0" } }, "sha512-76lDfJnonOcXGW3bEXuqhEGId0LrOlvIE1yLHvK/eKMMPOc0b43KchAIR2Bdbqlg+LPXU5/Q+UzuzkO+cWHT6w=="],
|
||||||
|
|
||||||
"eslint-plugin-vue": ["eslint-plugin-vue@10.0.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "natural-compare": "^1.4.0", "nth-check": "^2.1.1", "postcss-selector-parser": "^6.0.15", "semver": "^7.6.3", "xml-name-validator": "^4.0.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "vue-eslint-parser": "^10.0.0" } }, "sha512-XKckedtajqwmaX6u1VnECmZ6xJt+YvlmMzBPZd+/sI3ub2lpYZyFnsyWo7c3nMOQKJQudeyk1lw/JxdgeKT64w=="],
|
"eslint-plugin-vue": ["eslint-plugin-vue@10.0.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "natural-compare": "^1.4.0", "nth-check": "^2.1.1", "postcss-selector-parser": "^6.0.15", "semver": "^7.6.3", "xml-name-validator": "^4.0.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "vue-eslint-parser": "^10.0.0" } }, "sha512-XKckedtajqwmaX6u1VnECmZ6xJt+YvlmMzBPZd+/sI3ub2lpYZyFnsyWo7c3nMOQKJQudeyk1lw/JxdgeKT64w=="],
|
||||||
|
|
||||||
"eslint-scope": ["eslint-scope@8.3.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ=="],
|
"eslint-scope": ["eslint-scope@8.2.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A=="],
|
||||||
|
|
||||||
"eslint-visitor-keys": ["eslint-visitor-keys@4.2.0", "", {}, "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw=="],
|
"eslint-visitor-keys": ["eslint-visitor-keys@4.2.0", "", {}, "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw=="],
|
||||||
|
|
||||||
|
|
@ -809,27 +803,27 @@
|
||||||
|
|
||||||
"levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="],
|
"levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="],
|
||||||
|
|
||||||
"lightningcss": ["lightningcss@1.29.2", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-darwin-arm64": "1.29.2", "lightningcss-darwin-x64": "1.29.2", "lightningcss-freebsd-x64": "1.29.2", "lightningcss-linux-arm-gnueabihf": "1.29.2", "lightningcss-linux-arm64-gnu": "1.29.2", "lightningcss-linux-arm64-musl": "1.29.2", "lightningcss-linux-x64-gnu": "1.29.2", "lightningcss-linux-x64-musl": "1.29.2", "lightningcss-win32-arm64-msvc": "1.29.2", "lightningcss-win32-x64-msvc": "1.29.2" } }, "sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA=="],
|
"lightningcss": ["lightningcss@1.29.1", "", { "dependencies": { "detect-libc": "^1.0.3" }, "optionalDependencies": { "lightningcss-darwin-arm64": "1.29.1", "lightningcss-darwin-x64": "1.29.1", "lightningcss-freebsd-x64": "1.29.1", "lightningcss-linux-arm-gnueabihf": "1.29.1", "lightningcss-linux-arm64-gnu": "1.29.1", "lightningcss-linux-arm64-musl": "1.29.1", "lightningcss-linux-x64-gnu": "1.29.1", "lightningcss-linux-x64-musl": "1.29.1", "lightningcss-win32-arm64-msvc": "1.29.1", "lightningcss-win32-x64-msvc": "1.29.1" } }, "sha512-FmGoeD4S05ewj+AkhTY+D+myDvXI6eL27FjHIjoyUkO/uw7WZD1fBVs0QxeYWa7E17CUHJaYX/RUGISCtcrG4Q=="],
|
||||||
|
|
||||||
"lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.29.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA=="],
|
"lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.29.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-HtR5XJ5A0lvCqYAoSv2QdZZyoHNttBpa5EP9aNuzBQeKGfbyH5+UipLWvVzpP4Uml5ej4BYs5I9Lco9u1fECqw=="],
|
||||||
|
|
||||||
"lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.29.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w=="],
|
"lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.29.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-k33G9IzKUpHy/J/3+9MCO4e+PzaFblsgBjSGlpAaFikeBFm8B/CkO3cKU9oI4g+fjS2KlkLM/Bza9K/aw8wsNA=="],
|
||||||
|
|
||||||
"lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.29.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg=="],
|
"lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.29.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-0SUW22fv/8kln2LnIdOCmSuXnxgxVC276W5KLTwoehiO0hxkacBxjHOL5EtHD8BAXg2BvuhsJPmVMasvby3LiQ=="],
|
||||||
|
|
||||||
"lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.29.2", "", { "os": "linux", "cpu": "arm" }, "sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg=="],
|
"lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.29.1", "", { "os": "linux", "cpu": "arm" }, "sha512-sD32pFvlR0kDlqsOZmYqH/68SqUMPNj+0pucGxToXZi4XZgZmqeX/NkxNKCPsswAXU3UeYgDSpGhu05eAufjDg=="],
|
||||||
|
|
||||||
"lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.29.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ=="],
|
"lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.29.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-0+vClRIZ6mmJl/dxGuRsE197o1HDEeeRk6nzycSy2GofC2JsY4ifCRnvUWf/CUBQmlrvMzt6SMQNMSEu22csWQ=="],
|
||||||
|
|
||||||
"lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.29.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ=="],
|
"lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.29.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-UKMFrG4rL/uHNgelBsDwJcBqVpzNJbzsKkbI3Ja5fg00sgQnHw/VrzUTEc4jhZ+AN2BvQYz/tkHu4vt1kLuJyw=="],
|
||||||
|
|
||||||
"lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.29.2", "", { "os": "linux", "cpu": "x64" }, "sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg=="],
|
"lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.29.1", "", { "os": "linux", "cpu": "x64" }, "sha512-u1S+xdODy/eEtjADqirA774y3jLcm8RPtYztwReEXoZKdzgsHYPl0s5V52Tst+GKzqjebkULT86XMSxejzfISw=="],
|
||||||
|
|
||||||
"lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.29.2", "", { "os": "linux", "cpu": "x64" }, "sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w=="],
|
"lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.29.1", "", { "os": "linux", "cpu": "x64" }, "sha512-L0Tx0DtaNUTzXv0lbGCLB/c/qEADanHbu4QdcNOXLIe1i8i22rZRpbT3gpWYsCh9aSL9zFujY/WmEXIatWvXbw=="],
|
||||||
|
|
||||||
"lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.29.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw=="],
|
"lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.29.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-QoOVnkIEFfbW4xPi+dpdft/zAKmgLgsRHfJalEPYuJDOWf7cLQzYg0DEh8/sn737FaeMJxHZRc1oBreiwZCjog=="],
|
||||||
|
|
||||||
"lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.29.2", "", { "os": "win32", "cpu": "x64" }, "sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA=="],
|
"lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.29.1", "", { "os": "win32", "cpu": "x64" }, "sha512-NygcbThNBe4JElP+olyTI/doBNGJvLs3bFCRPdvuCcxZCcCZ71B858IHpdm7L1btZex0FvCmM17FK98Y9MRy1Q=="],
|
||||||
|
|
||||||
"lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="],
|
"lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="],
|
||||||
|
|
||||||
|
|
@ -1045,7 +1039,7 @@
|
||||||
|
|
||||||
"typescript": ["typescript@5.8.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ=="],
|
"typescript": ["typescript@5.8.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ=="],
|
||||||
|
|
||||||
"typescript-eslint": ["typescript-eslint@8.26.0", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.26.0", "@typescript-eslint/parser": "8.26.0", "@typescript-eslint/utils": "8.26.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-PtVz9nAnuNJuAVeUFvwztjuUgSnJInODAUx47VDwWPXzd5vismPOtPtt83tzNXyOjVQbPRp786D6WFW/M2koIA=="],
|
"typescript-eslint": ["typescript-eslint@8.25.0", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.25.0", "@typescript-eslint/parser": "8.25.0", "@typescript-eslint/utils": "8.25.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.8.0" } }, "sha512-TxRdQQLH4g7JkoFlYG3caW5v1S6kEkz8rqt80iQJZUYPq1zD1Ra7HfQBJJ88ABRaMvHAXnwRvRB4V+6sQ9xN5Q=="],
|
||||||
|
|
||||||
"undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="],
|
"undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="],
|
||||||
|
|
||||||
|
|
@ -1057,7 +1051,7 @@
|
||||||
|
|
||||||
"uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="],
|
"uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="],
|
||||||
|
|
||||||
"vite": ["vite@6.2.1", "", { "dependencies": { "esbuild": "^0.25.0", "postcss": "^8.5.3", "rollup": "^4.30.1" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-n2GnqDb6XPhlt9B8olZPrgMD/es/Nd1RdChF6CBD/fHW6pUyUTt2sQW2fPRX5GiD9XEa6+8A6A4f2vT6pSsE7Q=="],
|
"vite": ["vite@6.2.0", "", { "dependencies": { "esbuild": "^0.25.0", "postcss": "^8.5.3", "rollup": "^4.30.1" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-7dPxoo+WsT/64rDcwoOjk76XHj+TqNTIvHKcuMQ1k4/SeHDaQt5GFAeLYzrimZrMpn/O6DtdI03WUjdxuPM0oQ=="],
|
||||||
|
|
||||||
"vscode-languageserver-textdocument": ["vscode-languageserver-textdocument@1.0.12", "", {}, "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA=="],
|
"vscode-languageserver-textdocument": ["vscode-languageserver-textdocument@1.0.12", "", {}, "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA=="],
|
||||||
|
|
||||||
|
|
@ -1065,7 +1059,7 @@
|
||||||
|
|
||||||
"vue": ["vue@3.5.13", "", { "dependencies": { "@vue/compiler-dom": "3.5.13", "@vue/compiler-sfc": "3.5.13", "@vue/runtime-dom": "3.5.13", "@vue/server-renderer": "3.5.13", "@vue/shared": "3.5.13" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ=="],
|
"vue": ["vue@3.5.13", "", { "dependencies": { "@vue/compiler-dom": "3.5.13", "@vue/compiler-sfc": "3.5.13", "@vue/runtime-dom": "3.5.13", "@vue/server-renderer": "3.5.13", "@vue/shared": "3.5.13" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ=="],
|
||||||
|
|
||||||
"vue-eslint-parser": ["vue-eslint-parser@10.1.1", "", { "dependencies": { "debug": "^4.4.0", "eslint-scope": "^8.2.0", "eslint-visitor-keys": "^4.2.0", "espree": "^10.3.0", "esquery": "^1.6.0", "lodash": "^4.17.21", "semver": "^7.6.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0" } }, "sha512-bh2Z/Au5slro9QJ3neFYLanZtb1jH+W2bKqGHXAoYD4vZgNG3KeotL7JpPv5xzY4UXUXJl7TrIsnzECH63kd3Q=="],
|
"vue-eslint-parser": ["vue-eslint-parser@9.4.3", "", { "dependencies": { "debug": "^4.3.4", "eslint-scope": "^7.1.1", "eslint-visitor-keys": "^3.3.0", "espree": "^9.3.1", "esquery": "^1.4.0", "lodash": "^4.17.21", "semver": "^7.3.6" }, "peerDependencies": { "eslint": ">=6.0.0" } }, "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg=="],
|
||||||
|
|
||||||
"vue-router": ["vue-router@4.5.0", "", { "dependencies": { "@vue/devtools-api": "^6.6.4" }, "peerDependencies": { "vue": "^3.2.0" } }, "sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w=="],
|
"vue-router": ["vue-router@4.5.0", "", { "dependencies": { "@vue/devtools-api": "^6.6.4" }, "peerDependencies": { "vue": "^3.2.0" } }, "sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w=="],
|
||||||
|
|
||||||
|
|
@ -1085,8 +1079,6 @@
|
||||||
|
|
||||||
"xml-name-validator": ["xml-name-validator@4.0.0", "", {}, "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw=="],
|
"xml-name-validator": ["xml-name-validator@4.0.0", "", {}, "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw=="],
|
||||||
|
|
||||||
"xstate": ["xstate@5.19.2", "", {}, "sha512-B8fL2aP0ogn5aviAXFzI5oZseAMqN00fg/TeDa3ZtatyDcViYLIfuQl4y8qmHCiKZgGEzmnTyNtNQL9oeJE2gw=="],
|
|
||||||
|
|
||||||
"yaml": ["yaml@2.7.0", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA=="],
|
"yaml": ["yaml@2.7.0", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA=="],
|
||||||
|
|
||||||
"yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="],
|
"yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="],
|
||||||
|
|
@ -1149,6 +1141,8 @@
|
||||||
|
|
||||||
"micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
|
"micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
|
||||||
|
|
||||||
|
"node-gyp-build-optional-packages/detect-libc": ["detect-libc@2.0.3", "", {}, "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw=="],
|
||||||
|
|
||||||
"postcss-html/postcss-safe-parser": ["postcss-safe-parser@6.0.0", "", { "peerDependencies": { "postcss": "^8.3.3" } }, "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ=="],
|
"postcss-html/postcss-safe-parser": ["postcss-safe-parser@6.0.0", "", { "peerDependencies": { "postcss": "^8.3.3" } }, "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ=="],
|
||||||
|
|
||||||
"stylelint/file-entry-cache": ["file-entry-cache@10.0.6", "", { "dependencies": { "flat-cache": "^6.1.6" } }, "sha512-0wvv16mVo9nN0Md3k7DMjgAPKG/TY4F/gYMBVb/wMThFRJvzrpaqBFqF6km9wf8QfYTN+mNg5aeaBLfy8k35uA=="],
|
"stylelint/file-entry-cache": ["file-entry-cache@10.0.6", "", { "dependencies": { "flat-cache": "^6.1.6" } }, "sha512-0wvv16mVo9nN0Md3k7DMjgAPKG/TY4F/gYMBVb/wMThFRJvzrpaqBFqF6km9wf8QfYTN+mNg5aeaBLfy8k35uA=="],
|
||||||
|
|
@ -1161,7 +1155,11 @@
|
||||||
|
|
||||||
"vite/esbuild": ["esbuild@0.25.0", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.0", "@esbuild/android-arm": "0.25.0", "@esbuild/android-arm64": "0.25.0", "@esbuild/android-x64": "0.25.0", "@esbuild/darwin-arm64": "0.25.0", "@esbuild/darwin-x64": "0.25.0", "@esbuild/freebsd-arm64": "0.25.0", "@esbuild/freebsd-x64": "0.25.0", "@esbuild/linux-arm": "0.25.0", "@esbuild/linux-arm64": "0.25.0", "@esbuild/linux-ia32": "0.25.0", "@esbuild/linux-loong64": "0.25.0", "@esbuild/linux-mips64el": "0.25.0", "@esbuild/linux-ppc64": "0.25.0", "@esbuild/linux-riscv64": "0.25.0", "@esbuild/linux-s390x": "0.25.0", "@esbuild/linux-x64": "0.25.0", "@esbuild/netbsd-arm64": "0.25.0", "@esbuild/netbsd-x64": "0.25.0", "@esbuild/openbsd-arm64": "0.25.0", "@esbuild/openbsd-x64": "0.25.0", "@esbuild/sunos-x64": "0.25.0", "@esbuild/win32-arm64": "0.25.0", "@esbuild/win32-ia32": "0.25.0", "@esbuild/win32-x64": "0.25.0" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw=="],
|
"vite/esbuild": ["esbuild@0.25.0", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.0", "@esbuild/android-arm": "0.25.0", "@esbuild/android-arm64": "0.25.0", "@esbuild/android-x64": "0.25.0", "@esbuild/darwin-arm64": "0.25.0", "@esbuild/darwin-x64": "0.25.0", "@esbuild/freebsd-arm64": "0.25.0", "@esbuild/freebsd-x64": "0.25.0", "@esbuild/linux-arm": "0.25.0", "@esbuild/linux-arm64": "0.25.0", "@esbuild/linux-ia32": "0.25.0", "@esbuild/linux-loong64": "0.25.0", "@esbuild/linux-mips64el": "0.25.0", "@esbuild/linux-ppc64": "0.25.0", "@esbuild/linux-riscv64": "0.25.0", "@esbuild/linux-s390x": "0.25.0", "@esbuild/linux-x64": "0.25.0", "@esbuild/netbsd-arm64": "0.25.0", "@esbuild/netbsd-x64": "0.25.0", "@esbuild/openbsd-arm64": "0.25.0", "@esbuild/openbsd-x64": "0.25.0", "@esbuild/sunos-x64": "0.25.0", "@esbuild/win32-arm64": "0.25.0", "@esbuild/win32-ia32": "0.25.0", "@esbuild/win32-x64": "0.25.0" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw=="],
|
||||||
|
|
||||||
"vue-eslint-parser/eslint-scope": ["eslint-scope@8.2.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A=="],
|
"vue-eslint-parser/eslint-scope": ["eslint-scope@7.2.2", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg=="],
|
||||||
|
|
||||||
|
"vue-eslint-parser/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="],
|
||||||
|
|
||||||
|
"vue-eslint-parser/espree": ["espree@9.6.1", "", { "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" } }, "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ=="],
|
||||||
|
|
||||||
"vue-router/@vue/devtools-api": ["@vue/devtools-api@6.6.4", "", {}, "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g=="],
|
"vue-router/@vue/devtools-api": ["@vue/devtools-api@6.6.4", "", {}, "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g=="],
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -83,7 +83,7 @@
|
||||||
"https://plugins.dprint.dev/json-0.20.0.wasm",
|
"https://plugins.dprint.dev/json-0.20.0.wasm",
|
||||||
"https://plugins.dprint.dev/markdown-0.18.0.wasm",
|
"https://plugins.dprint.dev/markdown-0.18.0.wasm",
|
||||||
"https://plugins.dprint.dev/toml-0.7.0.wasm",
|
"https://plugins.dprint.dev/toml-0.7.0.wasm",
|
||||||
"https://plugins.dprint.dev/g-plane/malva-v0.11.2.wasm",
|
"https://plugins.dprint.dev/g-plane/malva-v0.11.1.wasm",
|
||||||
"https://plugins.dprint.dev/g-plane/markup_fmt-v0.19.0.wasm",
|
"https://plugins.dprint.dev/g-plane/markup_fmt-v0.19.0.wasm",
|
||||||
"https://plugins.dprint.dev/g-plane/pretty_yaml-v0.5.0.wasm",
|
"https://plugins.dprint.dev/g-plane/pretty_yaml-v0.5.0.wasm",
|
||||||
"https://plugins.dprint.dev/exec-0.5.1.json@492414e39dea4dccc07b4af796d2f4efdb89e84bae2bd4e1e924c0cc050855bf"
|
"https://plugins.dprint.dev/exec-0.5.1.json@492414e39dea4dccc07b4af796d2f4efdb89e84bae2bd4e1e924c0cc050855bf"
|
||||||
|
|
|
||||||
|
|
@ -22,13 +22,11 @@ COPY . .
|
||||||
ENV NODE_ENV=production
|
ENV NODE_ENV=production
|
||||||
RUN bun --bun vite build
|
RUN bun --bun vite build
|
||||||
|
|
||||||
# TODO: Supprimer les fichiers par défaut Angie.
|
|
||||||
# Créé le nécessaire pour Angie, le proxy inversé servant l'application.
|
# Créé le nécessaire pour Angie, le proxy inversé servant l'application.
|
||||||
FROM docker.angie.software/angie:minimal AS release
|
FROM docker.angie.software/angie:minimal AS release
|
||||||
COPY --from=prerelease /usr/src/app/dist/ /usr/share/angie/html/
|
COPY --from=prerelease /usr/src/app/dist/ /usr/share/angie/html/
|
||||||
COPY containers/angie/default.conf /etc/angie/http.d/default.conf
|
COPY containers/angie/default.conf /etc/angie/http.d/default.conf
|
||||||
|
|
||||||
# TODO: Finir ça.
|
|
||||||
# Met en place les métadonnées OCI.
|
# Met en place les métadonnées OCI.
|
||||||
LABEL org.opencontainers.image.title=journal-media-vue \
|
LABEL org.opencontainers.image.title=journal-media-vue \
|
||||||
org.opencontainers.image.description="A modern client-server application for the Soulseek file sharing network" \
|
org.opencontainers.image.description="A modern client-server application for the Soulseek file sharing network" \
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,6 @@
|
||||||
"fieldset",
|
"fieldset",
|
||||||
"tabindex",
|
"tabindex",
|
||||||
"currentcolor",
|
"currentcolor",
|
||||||
"labelledby",
|
"labelledby"
|
||||||
"imdb",
|
|
||||||
"xstate"
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
16
justfile
16
justfile
|
|
@ -79,12 +79,12 @@ watch-format:
|
||||||
watchexec dprint --config "cfg/dprint.json" fmt
|
watchexec dprint --config "cfg/dprint.json" fmt
|
||||||
|
|
||||||
# Vérifie le code CSS avec stylelint.
|
# Vérifie le code CSS avec stylelint.
|
||||||
lint-css fix="":
|
lint-css:
|
||||||
bun --bun stylelint \
|
bun --bun stylelint \
|
||||||
--cache --cache-location "{{ cacheFolder }}/{{ stylelintCacheFile }}" \
|
--cache --cache-location "{{ cacheFolder }}/{{ stylelintCacheFile }}" \
|
||||||
--config "{{ stylelintConfigFile }}" \
|
--config "{{ stylelintConfigFile }}" \
|
||||||
"src/**/*.{css,vue}" \
|
--fix \
|
||||||
{{ fix }}
|
"**/*.{css,vue}"
|
||||||
|
|
||||||
# Analyse le code TypeScript et Vue.
|
# Analyse le code TypeScript et Vue.
|
||||||
lint-js fix="":
|
lint-js fix="":
|
||||||
|
|
@ -111,11 +111,5 @@ lint-dead-code:
|
||||||
|
|
||||||
# Vérifie tous les fichiers.
|
# Vérifie tous les fichiers.
|
||||||
lint-all:
|
lint-all:
|
||||||
just lint-css --fix
|
just lint-css
|
||||||
just lint-js --fix
|
just lint-js
|
||||||
|
|
||||||
# Génère le nécessaire pour TLS.
|
|
||||||
tls:
|
|
||||||
-rm -rfv .tls/
|
|
||||||
mkdir -vp .tls/
|
|
||||||
mkcert -key-file ./.tls/key.pem -cert-file ./.tls/cert.pem "journal.site"
|
|
||||||
|
|
|
||||||
28
package.json
28
package.json
|
|
@ -4,38 +4,36 @@
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@effect/platform": "^0.79.0",
|
"@effect/platform": "^0.77.6",
|
||||||
"@effect/sql-drizzle": "^0.31.0",
|
"@effect/sql-drizzle": "^0.29.6",
|
||||||
"@thi.ng/color-palettes": "^1.4.37",
|
"@thi.ng/color-palettes": "^1.4.36",
|
||||||
"@thi.ng/pixel": "^7.3.20",
|
"@thi.ng/pixel": "^7.3.19",
|
||||||
"@thi.ng/pixel-dither": "^1.1.160",
|
"@thi.ng/pixel-dither": "^1.1.159",
|
||||||
"@xstate/vue": "^4.0.2",
|
|
||||||
"a11y-dialog": "^8.1.1",
|
"a11y-dialog": "^8.1.1",
|
||||||
"drizzle-orm": "^0.40.0",
|
"drizzle-orm": "^0.40.0",
|
||||||
"effect": "^3.13.9",
|
"effect": "^3.13.6",
|
||||||
"pinia": "^3.0.1",
|
"pinia": "^3.0.1",
|
||||||
"sqlocal": "^0.14.0",
|
"sqlocal": "^0.14.0",
|
||||||
"vue": "^3.5.13",
|
"vue": "^3.5.13",
|
||||||
"vue-router": "^4.5.0",
|
"vue-router": "^4.5.0"
|
||||||
"xstate": "^5.19.2"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@cspell/dict-fr-fr": "^2.2.5",
|
"@cspell/dict-fr-fr": "^2.2.5",
|
||||||
"@eslint/css": "^0.4.0",
|
"@eslint/css": "^0.4.0",
|
||||||
"@types/bun": "^1.2.5",
|
"@types/bun": "^1.2.4",
|
||||||
"@vitejs/plugin-vue": "^5.2.1",
|
"@vitejs/plugin-vue": "^5.2.1",
|
||||||
"@vue/eslint-config-typescript": "^14.5.0",
|
"@vue/eslint-config-typescript": "^14.4.0",
|
||||||
"@vue/typescript-plugin": "^2.2.8",
|
"@vue/typescript-plugin": "^2.2.8",
|
||||||
"browserslist": "^4.24.4",
|
"browserslist": "^4.24.4",
|
||||||
"cspell": "^8.17.5",
|
"cspell": "^8.17.5",
|
||||||
"drizzle-kit": "^0.30.5",
|
"drizzle-kit": "^0.30.5",
|
||||||
"eslint": "^9.22.0",
|
"eslint": "^9.21.0",
|
||||||
"eslint-plugin-perfectionist": "^4.10.1",
|
"eslint-plugin-perfectionist": "^4.9.0",
|
||||||
"eslint-plugin-vue": "^10.0.0",
|
"eslint-plugin-vue": "^10.0.0",
|
||||||
"globals": "^16.0.0",
|
"globals": "^16.0.0",
|
||||||
"jiti": "^2.4.2",
|
"jiti": "^2.4.2",
|
||||||
"knip": "^5.45.0",
|
"knip": "^5.45.0",
|
||||||
"lightningcss": "^1.29.2",
|
"lightningcss": "^1.29.1",
|
||||||
"prettier": "^3.5.3",
|
"prettier": "^3.5.3",
|
||||||
"prettier-plugin-pkg": "^0.18.1",
|
"prettier-plugin-pkg": "^0.18.1",
|
||||||
"prettier-plugin-sh": "^0.15.0",
|
"prettier-plugin-sh": "^0.15.0",
|
||||||
|
|
@ -47,7 +45,7 @@
|
||||||
"stylelint-plugin-logical-css": "^1.2.1",
|
"stylelint-plugin-logical-css": "^1.2.1",
|
||||||
"tsr": "^1.3.4",
|
"tsr": "^1.3.4",
|
||||||
"typescript": "^5.8.2",
|
"typescript": "^5.8.2",
|
||||||
"vite": "^6.2.1",
|
"vite": "^6.2.0",
|
||||||
"vue-tsc": "^2.2.8"
|
"vue-tsc": "^2.2.8"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,133 +1,66 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import type { TmdbMovieDetailsQueryParams, TmdbMovieDetailsWithCreditsResponse } from "@/libs/apis/tmdb/schemas";
|
|
||||||
import type { TmdbCredit } from "@/libs/apis/tmdb/schemas/credits";
|
|
||||||
import type { MergedTmdbLocalData } from "@/libs/search/schemas";
|
import type { MergedTmdbLocalData } from "@/libs/search/schemas";
|
||||||
import type { ComputedRef, Ref, ShallowRef } from "vue";
|
import type { ComputedRef, Ref, ShallowRef } from "vue";
|
||||||
|
|
||||||
import ImposterBox from "@/components/dialogs/ImposterBox.vue";
|
import ImposterBox from "@/components/dialogs/ImposterBox.vue";
|
||||||
import LoadingBox from "@/components/loading/LoadingBox.vue";
|
|
||||||
import { editEntryDialogMachine } from "@/machines/EditEntryDialog";
|
|
||||||
import { Images } from "@/services/images.ts";
|
import { Images } from "@/services/images.ts";
|
||||||
import { PrettyLogger } from "@/services/logger";
|
|
||||||
import { RuntimeClient } from "@/services/runtime-client";
|
import { RuntimeClient } from "@/services/runtime-client";
|
||||||
import { TmdbApi } from "@/services/tmdb-api";
|
|
||||||
import { useEntryStore } from "@/stores/entry.ts";
|
|
||||||
import { Url } from "@effect/platform";
|
import { Url } from "@effect/platform";
|
||||||
import { useMachine } from "@xstate/vue";
|
import { Effect, pipe } from "effect";
|
||||||
import { Array as Arr, Effect, Match, pipe } from "effect";
|
|
||||||
import { isTruthy } from "effect/Predicate";
|
import { isTruthy } from "effect/Predicate";
|
||||||
import { computed, onMounted, ref, useTemplateRef, watch } from "vue";
|
import { onMounted, ref, useTemplateRef, watch } from "vue";
|
||||||
|
import { computed } from "vue";
|
||||||
interface Crew {
|
|
||||||
directors: TmdbCredit[];
|
|
||||||
editors: TmdbCredit[];
|
|
||||||
writers: TmdbCredit[];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Émissions et props
|
// Émissions et props
|
||||||
const emit = defineEmits(["dialog-hidden"]);
|
const emit = defineEmits(["dialog-hidden"]);
|
||||||
const { entryData } = defineProps<{ entryData: MergedTmdbLocalData }>();
|
const { entryData } = defineProps<{ entryData: MergedTmdbLocalData }>();
|
||||||
|
|
||||||
const tmdbDetails: Ref<TmdbMovieDetailsWithCreditsResponse | undefined> = ref<
|
const imageContainer: Readonly<ShallowRef<HTMLDivElement | null>> = useTemplateRef("imageContainer");
|
||||||
TmdbMovieDetailsWithCreditsResponse
|
const ditheredPoster: Ref<HTMLCanvasElement | undefined> = ref<HTMLCanvasElement>();
|
||||||
>();
|
const isFirstTimeEntryEditing: Ref<boolean> = ref<boolean>(false);
|
||||||
const crew: Ref<Crew> = ref<Crew>({ directors: [], editors: [], writers: [] });
|
|
||||||
|
|
||||||
const hasEntry: ComputedRef<boolean> = computed(() =>
|
const hasEntry: ComputedRef<boolean> = computed(() => isTruthy(entryData.entryId));
|
||||||
isTruthy(entryData.entryId) && isTruthy(entryData.artWorkId)
|
|
||||||
);
|
|
||||||
const hasUniqueOriginalTitle: ComputedRef<boolean> = computed(() =>
|
const hasUniqueOriginalTitle: ComputedRef<boolean> = computed(() =>
|
||||||
entryData.originalTitle.toLowerCase() !== entryData.title.toLowerCase()
|
entryData.originalTitle.toLowerCase() !== entryData.title.toLowerCase()
|
||||||
);
|
);
|
||||||
|
|
||||||
const imageContainer: Readonly<ShallowRef<HTMLDivElement | null>> = useTemplateRef("imageContainer");
|
const firstTimeEditingButtonText: ComputedRef<"Ajouter" | "Annuler"> = computed(() =>
|
||||||
const ditheredPoster: Ref<HTMLCanvasElement | undefined> = ref<HTMLCanvasElement>();
|
isFirstTimeEntryEditing.value ? "Annuler" : "Ajouter"
|
||||||
const isLoading: Ref<boolean> = ref<boolean>(true);
|
);
|
||||||
|
|
||||||
// Gestionnaires d'événements
|
// Gestionnaires d'événements
|
||||||
const closeDialog = (): void => {
|
const closeDialog = (event?: Event): void => {
|
||||||
|
event?.preventDefault();
|
||||||
emit("dialog-hidden");
|
emit("dialog-hidden");
|
||||||
};
|
};
|
||||||
|
const toggleFirstTimeEditing = (event?: Event): void => {
|
||||||
// Magasins
|
event?.preventDefault();
|
||||||
const entryStore = useEntryStore();
|
isFirstTimeEntryEditing.value = !isFirstTimeEntryEditing.value;
|
||||||
|
};
|
||||||
|
|
||||||
// Cycles
|
// Cycles
|
||||||
watch(() => entryData, async (): Promise<void> => {
|
watch(() => entryData, async (): Promise<void> => {
|
||||||
await RuntimeClient.runPromise(Effect.gen(function*() {
|
ditheredPoster.value = await RuntimeClient.runPromise(Effect.gen(function*() {
|
||||||
if (!entryData.posterUrl) return undefined;
|
if (!entryData.posterUrl) return undefined;
|
||||||
console.debug("dithering");
|
console.debug("dithering");
|
||||||
|
|
||||||
const imageService: Images = yield* Images;
|
const imageService: Images = yield* Images;
|
||||||
|
|
||||||
const canvas = yield* pipe(
|
return yield* pipe(
|
||||||
Url.fromString(`https://image.tmdb.org/t/p/w500/${entryData.posterUrl}`),
|
Url.fromString(`https://image.tmdb.org/t/p/w500/${entryData.posterUrl}`),
|
||||||
Effect.andThen((url: URL) => imageService.imageFromUrl(url)),
|
Effect.andThen((url: URL) => imageService.imageFromUrl(url)),
|
||||||
Effect.andThen((img: HTMLImageElement) => imageService.ditherImage(img, imageContainer.value ?? undefined)),
|
Effect.andThen((img: HTMLImageElement) => imageService.ditherImage(img, imageContainer.value ?? undefined)),
|
||||||
Effect.andThen(dithered => dithered.canvas),
|
Effect.andThen(dithered => dithered.canvas),
|
||||||
);
|
);
|
||||||
|
|
||||||
ditheredPoster.value = canvas;
|
|
||||||
|
|
||||||
// const base64 = encodeBase64Url(ditheredImage.buffer.data);
|
// const base64 = encodeBase64Url(ditheredImage.buffer.data);
|
||||||
// console.debug(base64.length);
|
// console.debug(base64.length);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
await RuntimeClient.runPromise(Effect.gen(function*() {
|
|
||||||
if (!entryData.tmdbId) return;
|
|
||||||
|
|
||||||
isLoading.value = true;
|
|
||||||
|
|
||||||
const tmdbApi = yield* TmdbApi;
|
|
||||||
const args: TmdbMovieDetailsQueryParams = {
|
|
||||||
append_to_response: "credits",
|
|
||||||
language: "en",
|
|
||||||
movie_id: entryData.tmdbId,
|
|
||||||
};
|
|
||||||
|
|
||||||
yield* pipe(
|
|
||||||
tmdbApi.getMovieDetails(args),
|
|
||||||
Effect.tapError(Effect.logError),
|
|
||||||
Effect.catchAll(_ => Effect.succeed(undefined)),
|
|
||||||
Effect.tap(details => {
|
|
||||||
tmdbDetails.value = details;
|
|
||||||
entryStore.setTmdbData(details);
|
|
||||||
isLoading.value = false;
|
|
||||||
}),
|
|
||||||
Effect.tap(Effect.logInfo),
|
|
||||||
Effect.provide(PrettyLogger),
|
|
||||||
);
|
|
||||||
|
|
||||||
const newCrew: Crew = { directors: [], editors: [], writers: [] };
|
|
||||||
|
|
||||||
yield* pipe(
|
|
||||||
Effect.fromNullable(tmdbDetails.value?.credits.crew),
|
|
||||||
Effect.tap(Arr.forEach(credit =>
|
|
||||||
Match.value(credit).pipe(
|
|
||||||
Match.when(c => c.job === "Director", c => newCrew.directors.push(c)),
|
|
||||||
Match.when(c => c.job === "Editor", c => newCrew.editors.push(c)),
|
|
||||||
Match.when(c => c.job === "Novel", c => newCrew.writers.push(c)),
|
|
||||||
Match.when(c => c.job === "Original Screenplay", c => newCrew.writers.push(c)),
|
|
||||||
Match.when(c => c.job === "Screenplay", c => newCrew.writers.push(c)),
|
|
||||||
Match.when(c => c.job === "Writer", c => newCrew.writers.push(c)),
|
|
||||||
Match.orElse(() => {}),
|
|
||||||
)
|
|
||||||
)),
|
|
||||||
);
|
|
||||||
|
|
||||||
crew.value = newCrew;
|
|
||||||
}));
|
|
||||||
}, { immediate: true });
|
}, { immediate: true });
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
console.debug("EditEntryDialog mounted");
|
console.debug("EditEntryDialog mounted");
|
||||||
});
|
});
|
||||||
|
|
||||||
const { send, snapshot } = useMachine(editEntryDialogMachine, {
|
|
||||||
input: {
|
|
||||||
entryData: entryData,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|
@ -135,63 +68,47 @@
|
||||||
<template #title>Éditer une entrée</template>
|
<template #title>Éditer une entrée</template>
|
||||||
|
|
||||||
<template #content>
|
<template #content>
|
||||||
<section aria-labelledby="media-title" class="switcher container" :data-loading="isLoading">
|
<section aria-labelledby="media-title" class="switcher container">
|
||||||
<!-- Écran de chargement -->
|
<div ref="imageContainer" class="canvas-container"> </div>
|
||||||
<LoadingBox></LoadingBox>
|
|
||||||
|
|
||||||
<div ref="imageContainer" class="canvas-container"></div>
|
|
||||||
|
|
||||||
<div class="stack">
|
<div class="stack">
|
||||||
<h3 id="media-title">{{ entryData.originalTitle }}</h3>
|
<h3 id="media-title">{{ entryData.originalTitle }}</h3>
|
||||||
<div class="original-metadata">
|
<p class="original-metadata">
|
||||||
<span v-if="hasUniqueOriginalTitle">{{ entryData.title }} | </span>
|
<span v-if="hasUniqueOriginalTitle">{{ entryData.title }} | </span>
|
||||||
{{ entryData.releaseDate }} | {{ tmdbDetails?.runtime ?? "??" }} min | {{
|
{{ entryData.releaseDate }} | {{ entryData.originalLanguage }} | {{ entryData.popularity }}
|
||||||
entryData.originalLanguage.toUpperCase()
|
</p>
|
||||||
}} | {{ entryData.popularity }}
|
|
||||||
|
|
||||||
<div class="credits cluster">
|
|
||||||
<div class="directors crew">
|
|
||||||
<strong>RÉALISATION </strong>
|
|
||||||
<ul>
|
|
||||||
<li v-for="director of crew.directors" :key="director.id">{{ director.name }}</li>
|
|
||||||
<li v-if="crew.directors.length === 0">/</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="writers crew">
|
|
||||||
<strong>ÉCRITURE </strong>
|
|
||||||
<ul>
|
|
||||||
<li v-for="writer of crew.writers" :key="writer.id">{{ writer.name }}</li>
|
|
||||||
<li v-if="crew.writers.length === 0">/</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="editors crew">
|
|
||||||
<strong>MONTAGE </strong>
|
|
||||||
<ul>
|
|
||||||
<li v-for="editor of crew.editors" :key="editor.id">{{ editor.name }}</li>
|
|
||||||
<li v-if="crew.editors.length === 0">/</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p class="overview">{{ entryData.overview }}</p>
|
<p class="overview">{{ entryData.overview }}</p>
|
||||||
|
|
||||||
<div class="entry-state">
|
<h3>Journal</h3>
|
||||||
<template v-if="entryData.entryId">
|
<div class="cluster entry-state">
|
||||||
<p>Dans le Journal</p>
|
<p>
|
||||||
<button class="invert" type="button">
|
<strong>État : </strong>
|
||||||
<router-link :to="{ name: 'ViewEntry', params: { entryId: entryData.entryId } }">Éditer</router-link>
|
<span v-if="hasEntry"></span>
|
||||||
</button>
|
<span v-else>Pas encore dans le journal.</span>
|
||||||
</template>
|
</p>
|
||||||
|
|
||||||
<template v-else>
|
<button v-if="!hasEntry" :class="{ invert: isFirstTimeEntryEditing }" @click="toggleFirstTimeEditing">
|
||||||
<p>Pas encore dans le Journal</p>
|
{{ firstTimeEditingButtonText }}
|
||||||
<router-link :to="{ name: 'AddEntry' }">
|
</button>
|
||||||
<span>Ajouter</span>
|
|
||||||
<span class="icon">→</span>
|
|
||||||
</router-link>
|
|
||||||
</template>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<form v-if="hasEntry || isFirstTimeEntryEditing" class="cluster entry-metadata">
|
||||||
|
<div class="field stack">
|
||||||
|
<label for="date-created">Date de création</label>
|
||||||
|
<input id="date-created" type="datetime-local">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="field stack">
|
||||||
|
<label for="date-created">Date de modification</label>
|
||||||
|
<input id="date-created" type="datetime-local">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="field stack">
|
||||||
|
<label for="date-created">Date d'obtention</label>
|
||||||
|
<input id="date-created" type="datetime-local">
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
</template>
|
</template>
|
||||||
|
|
@ -199,22 +116,13 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped lang="css">
|
<style scoped lang="css">
|
||||||
/* Affiche l'écran de chargement sur tout l'espace. */
|
|
||||||
.loading {
|
|
||||||
top: calc(var(--s1) * -1);
|
|
||||||
left: calc(var(--s1) * -1);
|
|
||||||
inline-size: calc(100% + var(--s1) * 2);
|
|
||||||
block-size: calc(100% + var(--s1) * 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
.canvas-container {
|
.canvas-container {
|
||||||
aspect-ratio: 0.6;
|
aspect-ratio: 0.6;
|
||||||
width: 400px;
|
width: 400px;
|
||||||
max-width: 400px;
|
max-width: 400px;
|
||||||
height: 600px;
|
height: 600px;
|
||||||
max-height: 600px;
|
max-height: 600px;
|
||||||
background: var(--bg25-tertiary);
|
background: var(--bg25-secondary);
|
||||||
border: 4px double var(--root-text-color);
|
|
||||||
|
|
||||||
> * {
|
> * {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
@ -224,77 +132,16 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.container {
|
.container {
|
||||||
--threshold: 45rem;
|
|
||||||
position: relative;
|
|
||||||
inline-size: 85vi;
|
inline-size: 85vi;
|
||||||
max-inline-size: 70rem;
|
max-inline-size: 74rem;
|
||||||
gap: var(--s1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.overview {
|
.overview {
|
||||||
max-inline-size: inherit;
|
max-inline-size: 40rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.entry-metadata {
|
.entry-metadata {
|
||||||
--layout-cluster-gap: var(--s0);
|
--layout-cluster-gap: var(--s0);
|
||||||
|
|
||||||
align-items: start;
|
|
||||||
margin-block-start: var(--s2);
|
margin-block-start: var(--s2);
|
||||||
}
|
}
|
||||||
|
|
||||||
.credits {
|
|
||||||
column-gap: var(--s-1);
|
|
||||||
row-gap: initial;
|
|
||||||
}
|
|
||||||
|
|
||||||
.crew ul {
|
|
||||||
display: inline-block;
|
|
||||||
|
|
||||||
> * + * {
|
|
||||||
padding-inline-start: var(--s-3);
|
|
||||||
|
|
||||||
&::before {
|
|
||||||
content: "·";
|
|
||||||
padding-inline-end: var(--s-3);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
li {
|
|
||||||
display: inline;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.entry-state {
|
|
||||||
display: flex;
|
|
||||||
flex-flow: row nowrap;
|
|
||||||
justify-content: space-between;
|
|
||||||
margin-block-start: var(--s3);
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
a {
|
|
||||||
text-decoration: unset;
|
|
||||||
box-shadow: initial;
|
|
||||||
border: 1px solid var(--root-text-color);
|
|
||||||
padding-inline: 0;
|
|
||||||
block-size: var(--s2);
|
|
||||||
padding-block: 0;
|
|
||||||
align-content: center;
|
|
||||||
display: inline-flex;
|
|
||||||
align-items: center;
|
|
||||||
block-size: 100%;
|
|
||||||
align-content: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
span {
|
|
||||||
display: inline-block;
|
|
||||||
align-content: center;
|
|
||||||
block-size: 100%;
|
|
||||||
padding-inline: var(--s-3);
|
|
||||||
|
|
||||||
&:last-of-type {
|
|
||||||
background: var(--root-text-color);
|
|
||||||
color: var(--root-background-color);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -1,45 +1,4 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template></template>
|
||||||
<div class="loading">
|
|
||||||
<p>loading</p>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style lang="css" scoped>
|
|
||||||
.loading {
|
|
||||||
position: absolute;
|
|
||||||
background:
|
|
||||||
linear-gradient(45deg, #000 25%, transparent 0, transparent 75%, #000 0, #000),
|
|
||||||
linear-gradient(45deg, #000 25%, transparent 0, transparent 75%, #000 0, #000);
|
|
||||||
background-position: 0 0, 2px 2px;
|
|
||||||
background-size: 4px 4px;
|
|
||||||
inset: 0;
|
|
||||||
align-content: center;
|
|
||||||
text-align: center;
|
|
||||||
inline-size: 100%;
|
|
||||||
opacity: 0;
|
|
||||||
block-size: 100%;
|
|
||||||
visibility: hidden;
|
|
||||||
|
|
||||||
*[data-loading="true"] & {
|
|
||||||
opacity: 1;
|
|
||||||
visibility: visible;
|
|
||||||
animation: flicker 100ms infinite;
|
|
||||||
}
|
|
||||||
|
|
||||||
p {
|
|
||||||
margin: auto;
|
|
||||||
inline-size: 12ch;
|
|
||||||
padding: var(--s-3);
|
|
||||||
background: var(--root-text-color);
|
|
||||||
color: var(--root-background-color);
|
|
||||||
|
|
||||||
&::after {
|
|
||||||
content: "";
|
|
||||||
animation: 1s forwards infinite loading;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,8 @@ export const DIARY_ENTRY_STATES = {
|
||||||
TO_FIND: "to_find",
|
TO_FIND: "to_find",
|
||||||
/** Un média déjà vu et à revoir. */
|
/** Un média déjà vu et à revoir. */
|
||||||
TO_REWATCH: "to_rewatch",
|
TO_REWATCH: "to_rewatch",
|
||||||
|
/** Un média souhaité mais dont l'état est encore flou. */
|
||||||
|
TO_SORT: "to_sort",
|
||||||
/** Un média acquis et à regarder. */
|
/** Un média acquis et à regarder. */
|
||||||
TO_WATCH: "to_watch",
|
TO_WATCH: "to_watch",
|
||||||
/** Un média à l'état inconnu (état par défaut). */
|
/** Un média à l'état inconnu (état par défaut). */
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import type { Coercible, Input } from "@effect/platform/UrlParams";
|
import type { Input } from "@effect/platform/UrlParams";
|
||||||
|
|
||||||
import { FetchHttpClient, HttpClient, HttpClientRequest, Url, UrlParams } from "@effect/platform";
|
import { FetchHttpClient, HttpClient, HttpClientRequest, Url, UrlParams } from "@effect/platform";
|
||||||
import { Effect, pipe } from "effect";
|
import { Effect, pipe } from "effect";
|
||||||
|
|
@ -19,14 +19,6 @@ export const createUrlWithParams = (stringUrl: string) => (params: Input) =>
|
||||||
return Url.setUrlParams(url, urlParams);
|
return Url.setUrlParams(url, urlParams);
|
||||||
});
|
});
|
||||||
|
|
||||||
export const createUrlWithParameterizedPathAndParams = (stringUrl: string, parameter: Coercible) => (params: Input) =>
|
|
||||||
Effect.gen(function*() {
|
|
||||||
const url: URL = yield* Url.fromString(`${stringUrl}/${String(parameter)}`);
|
|
||||||
const urlParams: UrlParams.UrlParams = UrlParams.fromInput(params);
|
|
||||||
|
|
||||||
return Url.setUrlParams(url, urlParams);
|
|
||||||
});
|
|
||||||
|
|
||||||
export const createGetHttpRequest = (url: URL): HttpClientRequest.HttpClientRequest =>
|
export const createGetHttpRequest = (url: URL): HttpClientRequest.HttpClientRequest =>
|
||||||
pipe(
|
pipe(
|
||||||
HttpClientRequest.get(url),
|
HttpClientRequest.get(url),
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1 @@
|
||||||
export const TMDB_ROUTE_SEARCH_MOVIE = "https://api.themoviedb.org/3/search/movie";
|
export const TMDB_ROUTE_SEARCH_MOVIE = "https://api.themoviedb.org/3/search/movie";
|
||||||
export const TMDB_ROUTE_MOVIE_DETAILS = "https://api.themoviedb.org/3/movie";
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,5 @@
|
||||||
import { Schema } from "effect";
|
import { Schema } from "effect";
|
||||||
|
|
||||||
import { TmdbCompany } from "./schemas/companies";
|
|
||||||
import { TmdbCredit } from "./schemas/credits";
|
|
||||||
import { TmdbLanguage } from "./schemas/languages";
|
|
||||||
|
|
||||||
// Requête
|
// Requête
|
||||||
|
|
||||||
export class TmdbMovieSearchQueryParams extends Schema.Class<TmdbMovieSearchQueryParams>("TmdbMovieSearchArgs")({
|
export class TmdbMovieSearchQueryParams extends Schema.Class<TmdbMovieSearchQueryParams>("TmdbMovieSearchArgs")({
|
||||||
|
|
@ -28,14 +24,6 @@ export class TmdbMovieSearchQueryParams extends Schema.Class<TmdbMovieSearchQuer
|
||||||
year: Schema.String.pipe(Schema.optional),
|
year: Schema.String.pipe(Schema.optional),
|
||||||
}) {}
|
}) {}
|
||||||
|
|
||||||
export class TmdbMovieDetailsQueryParams
|
|
||||||
extends Schema.Class<TmdbMovieDetailsQueryParams>("TmdbMovieDetailsQueryParams")({
|
|
||||||
append_to_response: Schema.Literal("credits"),
|
|
||||||
language: Schema.NonEmptyString,
|
|
||||||
movie_id: Schema.NonNegativeInt,
|
|
||||||
})
|
|
||||||
{}
|
|
||||||
|
|
||||||
// Réponse
|
// Réponse
|
||||||
|
|
||||||
export class TmdbMovieSearchResponseResult
|
export class TmdbMovieSearchResponseResult
|
||||||
|
|
@ -63,39 +51,3 @@ export class TmdbMovieSearchResponse extends Schema.Class<TmdbMovieSearchRespons
|
||||||
total_pages: Schema.NonNegativeInt,
|
total_pages: Schema.NonNegativeInt,
|
||||||
total_results: Schema.NonNegativeInt,
|
total_results: Schema.NonNegativeInt,
|
||||||
}) {}
|
}) {}
|
||||||
|
|
||||||
export class TmdbMovieDetailsWithCreditsResponse
|
|
||||||
extends Schema.Class<TmdbMovieDetailsWithCreditsResponse>("TmdbMovieDetailsWithCreditsResponse")({
|
|
||||||
adult: Schema.Boolean,
|
|
||||||
backdrop_path: Schema.Union(Schema.String, Schema.Null),
|
|
||||||
belongs_to_collection: Schema.Unknown,
|
|
||||||
budget: Schema.NonNegativeInt,
|
|
||||||
credits: Schema.Struct({
|
|
||||||
cast: Schema.Array(TmdbCredit),
|
|
||||||
crew: Schema.Array(TmdbCredit),
|
|
||||||
}),
|
|
||||||
genres: Schema.Array(Schema.Struct({
|
|
||||||
id: Schema.NonNegativeInt,
|
|
||||||
name: Schema.NonEmptyString,
|
|
||||||
})),
|
|
||||||
homepage: Schema.String,
|
|
||||||
id: Schema.NonNegativeInt,
|
|
||||||
imdb_id: Schema.Union(Schema.String, Schema.Null),
|
|
||||||
original_language: Schema.String,
|
|
||||||
original_title: Schema.String,
|
|
||||||
overview: Schema.String,
|
|
||||||
popularity: Schema.Number,
|
|
||||||
poster_path: Schema.Union(Schema.String, Schema.Null),
|
|
||||||
production_companies: Schema.Array(TmdbCompany),
|
|
||||||
release_date: Schema.String,
|
|
||||||
revenue: Schema.NonNegativeInt,
|
|
||||||
runtime: Schema.NonNegativeInt,
|
|
||||||
spoken_languages: Schema.Array(TmdbLanguage),
|
|
||||||
status: Schema.NonEmptyString,
|
|
||||||
tagline: Schema.String,
|
|
||||||
title: Schema.NonEmptyString,
|
|
||||||
video: Schema.Boolean,
|
|
||||||
vote_average: Schema.Number,
|
|
||||||
vote_count: Schema.NonNegativeInt,
|
|
||||||
})
|
|
||||||
{}
|
|
||||||
|
|
|
||||||
|
|
@ -1,22 +0,0 @@
|
||||||
import { Brand, Schema } from "effect";
|
|
||||||
|
|
||||||
import { CountryIsoCode } from "./countries";
|
|
||||||
|
|
||||||
/** L'ID d'une société sous forme de nombre entier positif. */
|
|
||||||
export type CompanyId = Brand.Brand<"CompanyId"> & number;
|
|
||||||
export const CompanyId = Brand.refined<CompanyId>(
|
|
||||||
n => Number.isInteger(n) && n >= 0,
|
|
||||||
n => Brand.error(`${String(n)} doit être un nombre entier positif.`),
|
|
||||||
);
|
|
||||||
|
|
||||||
/** Entité représentant une société (p. ex. de production). */
|
|
||||||
export class TmdbCompany extends Schema.Class<TmdbCompany>("TmdbCompany")({
|
|
||||||
/** ID de la société. */
|
|
||||||
id: Schema.NonNegativeInt.pipe(Schema.fromBrand(CompanyId)),
|
|
||||||
/** Chemin relatif du logo de la société. */
|
|
||||||
logo_path: Schema.Union(Schema.String, Schema.Null),
|
|
||||||
/** Nom de la société. */
|
|
||||||
name: Schema.String,
|
|
||||||
/** Pays d'origine de la société sous forme de code ISO 3166-1. */
|
|
||||||
origin_country: Schema.Union(Schema.String.pipe(Schema.fromBrand(CountryIsoCode)), Schema.String),
|
|
||||||
}) {}
|
|
||||||
|
|
@ -1,14 +0,0 @@
|
||||||
import { Brand, Schema } from "effect";
|
|
||||||
|
|
||||||
// TODO: Vérifier le code ISO dans une liste.
|
|
||||||
/** Le code ISO 3166-1 (à deux lettres) d'un pays. */
|
|
||||||
export type CountryIsoCode = Brand.Brand<CountryIsoCode> & string;
|
|
||||||
export const CountryIsoCode = Brand.refined<CountryIsoCode>(
|
|
||||||
s => s.length == 2,
|
|
||||||
s => Brand.error(`${s} ne correspond pas au code ISO 3166-1 connu d'un pays.`),
|
|
||||||
);
|
|
||||||
|
|
||||||
export class TmdbCountry extends Schema.Class<TmdbCountry>("TmdbCountry")({
|
|
||||||
iso_3166_1: Schema.NonEmptyString.pipe(Schema.fromBrand(CountryIsoCode)),
|
|
||||||
name: Schema.String,
|
|
||||||
}) {}
|
|
||||||
|
|
@ -1,66 +0,0 @@
|
||||||
import type { Values } from "@/libs/utils/types";
|
|
||||||
|
|
||||||
import { Brand, Match, Schema } from "effect";
|
|
||||||
|
|
||||||
export const PERSON_GENDER_VALUES = {
|
|
||||||
FEMALE: "female",
|
|
||||||
MALE: "male",
|
|
||||||
NON_BINARY: "non-binary",
|
|
||||||
OTHER: "other",
|
|
||||||
} as const;
|
|
||||||
export type PersonGender = Values<typeof PERSON_GENDER_VALUES>;
|
|
||||||
|
|
||||||
const GenderStringFromInteger = Schema.transform(
|
|
||||||
Schema.Literal(0, 1, 2, 3),
|
|
||||||
Schema.Enums(PERSON_GENDER_VALUES),
|
|
||||||
{
|
|
||||||
decode: (number: 0 | 1 | 2 | 3) =>
|
|
||||||
Match.value(number).pipe(
|
|
||||||
Match.when(0, () => PERSON_GENDER_VALUES.OTHER),
|
|
||||||
Match.when(1, () => PERSON_GENDER_VALUES.FEMALE),
|
|
||||||
Match.when(2, () => PERSON_GENDER_VALUES.MALE),
|
|
||||||
Match.when(3, () => PERSON_GENDER_VALUES.NON_BINARY),
|
|
||||||
Match.exhaustive,
|
|
||||||
),
|
|
||||||
encode: (gender: PersonGender) =>
|
|
||||||
Match.value(gender).pipe(
|
|
||||||
Match.when(PERSON_GENDER_VALUES.OTHER, () => 0 as const),
|
|
||||||
Match.when(PERSON_GENDER_VALUES.FEMALE, () => 1 as const),
|
|
||||||
Match.when(PERSON_GENDER_VALUES.MALE, () => 2 as const),
|
|
||||||
Match.when(PERSON_GENDER_VALUES.NON_BINARY, () => 3 as const),
|
|
||||||
Match.exhaustive,
|
|
||||||
),
|
|
||||||
strict: true,
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
/** L'ID d'une personne sous forme de nombre entier positif. */
|
|
||||||
export type PersonId = Brand.Brand<"PersonId"> & number;
|
|
||||||
export const PersonId = Brand.refined<PersonId>(
|
|
||||||
n => Number.isInteger(n) && n >= 0,
|
|
||||||
n => Brand.error(`${String(n)} doit être un nombre entier positif.`),
|
|
||||||
);
|
|
||||||
|
|
||||||
/** Le nom d'une personne. */
|
|
||||||
export type PersonName = Brand.Brand<"PersonName"> & string;
|
|
||||||
export const PersonName = Brand.refined<PersonName>(
|
|
||||||
s => s.length > 2,
|
|
||||||
s => Brand.error(`${String(s)} doit contenir au moins 2 lettres.`),
|
|
||||||
);
|
|
||||||
|
|
||||||
export class TmdbCredit extends Schema.Class<TmdbCredit>("TmdbCredit")({
|
|
||||||
adult: Schema.Boolean,
|
|
||||||
cast_id: Schema.NonNegativeInt.pipe(Schema.optional),
|
|
||||||
character: Schema.NonEmptyString.pipe(Schema.optional),
|
|
||||||
credit_id: Schema.String,
|
|
||||||
department: Schema.String.pipe(Schema.optional),
|
|
||||||
gender: GenderStringFromInteger,
|
|
||||||
id: Schema.NonNegativeInt.pipe(Schema.fromBrand(PersonId)),
|
|
||||||
job: Schema.NonEmptyString.pipe(Schema.optional),
|
|
||||||
known_for_department: Schema.String,
|
|
||||||
name: Schema.NonEmptyString.pipe(Schema.fromBrand(PersonName)),
|
|
||||||
order: Schema.NonNegativeInt.pipe(Schema.optional),
|
|
||||||
original_name: Schema.NonEmptyString.pipe(Schema.fromBrand(PersonName)),
|
|
||||||
popularity: Schema.Number,
|
|
||||||
profile_path: Schema.Union(Schema.String, Schema.Null),
|
|
||||||
}) {}
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
import { Brand, Schema } from "effect";
|
|
||||||
|
|
||||||
export type LanguageIsoCode = Brand.Brand<LanguageIsoCode> & string;
|
|
||||||
export const LanguageIsoCode = Brand.refined<LanguageIsoCode>(
|
|
||||||
s => /[a-z]{2}/.test(s),
|
|
||||||
s => Brand.error(`${s} ne correspond pas au code ISO 639-1 connu d'une langue.`),
|
|
||||||
);
|
|
||||||
|
|
||||||
export class TmdbLanguage extends Schema.Class<TmdbLanguage>("TmdbLanguage")({
|
|
||||||
english_name: Schema.NonEmptyString,
|
|
||||||
iso_639_1: Schema.NonEmptyString.pipe(Schema.fromBrand(LanguageIsoCode)),
|
|
||||||
name: Schema.NonEmptyString,
|
|
||||||
}) {}
|
|
||||||
|
|
@ -1,53 +0,0 @@
|
||||||
import type { MergedTmdbLocalData } from "@/libs/search/schemas";
|
|
||||||
|
|
||||||
import { not, setup } from "xstate";
|
|
||||||
|
|
||||||
export const editEntryDialogMachine = setup({
|
|
||||||
guards: {
|
|
||||||
/** Est-ce que l'ouvre présentée possède une entrée dans le Journal ? */
|
|
||||||
hasDiaryEntry: ({ context }) => context.entryData?.entryId !== undefined,
|
|
||||||
},
|
|
||||||
types: {
|
|
||||||
context: {} as { entryData: MergedTmdbLocalData | undefined },
|
|
||||||
input: {} as { entryData: MergedTmdbLocalData },
|
|
||||||
},
|
|
||||||
})
|
|
||||||
.createMachine({
|
|
||||||
context: ({ input }) => ({
|
|
||||||
entryData: input.entryData,
|
|
||||||
}),
|
|
||||||
id: "editEntryDialog",
|
|
||||||
initial: "blankOrEntry",
|
|
||||||
states: {
|
|
||||||
blankOrEntry: {
|
|
||||||
always: [
|
|
||||||
{
|
|
||||||
guard: not("hasDiaryEntry"),
|
|
||||||
target: "viewing.blank",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
guard: "hasDiaryEntry",
|
|
||||||
target: "viewing.entry",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
description: "État initial « fantôme » ne servant qu'à déterminer si le média est dans le Journal ou non.",
|
|
||||||
},
|
|
||||||
editing: {
|
|
||||||
description: "État de finalisation.",
|
|
||||||
type: "final",
|
|
||||||
},
|
|
||||||
viewing: {
|
|
||||||
description: "État de lecture seule des données de l'entrée.",
|
|
||||||
initial: "blank",
|
|
||||||
on: {
|
|
||||||
editWanted: {
|
|
||||||
target: "editing",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
states: {
|
|
||||||
blank: {},
|
|
||||||
entry: {},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
<script setup lang="ts">
|
|
||||||
import { useEntryStore } from "@/stores/entry";
|
|
||||||
import { onMounted } from "vue";
|
|
||||||
|
|
||||||
const entryStore = useEntryStore();
|
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
console.debug(entryStore.entry);
|
|
||||||
console.debug(entryStore.tmdbData);
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template></template>
|
|
||||||
|
|
@ -23,7 +23,6 @@
|
||||||
import { Effect, pipe, Schema } from "effect";
|
import { Effect, pipe, Schema } from "effect";
|
||||||
import { computed, onMounted, ref, useTemplateRef, watch } from "vue";
|
import { computed, onMounted, ref, useTemplateRef, watch } from "vue";
|
||||||
import { useRoute, useRouter } from "vue-router";
|
import { useRoute, useRouter } from "vue-router";
|
||||||
import { useEntryStore } from "@/stores/entry.ts";
|
|
||||||
|
|
||||||
// États
|
// États
|
||||||
|
|
||||||
|
|
@ -55,9 +54,6 @@
|
||||||
|
|
||||||
const editedEntry: Ref<MergedTmdbLocalData | undefined> = ref();
|
const editedEntry: Ref<MergedTmdbLocalData | undefined> = ref();
|
||||||
|
|
||||||
// Magasins
|
|
||||||
const entryStore = useEntryStore();
|
|
||||||
|
|
||||||
// Fonctions
|
// Fonctions
|
||||||
|
|
||||||
let updateUrlQuery = updateUrlQueryFromFormData(router, form.value);
|
let updateUrlQuery = updateUrlQueryFromFormData(router, form.value);
|
||||||
|
|
@ -152,32 +148,33 @@
|
||||||
effect => getOrUndefined(effect),
|
effect => getOrUndefined(effect),
|
||||||
);
|
);
|
||||||
|
|
||||||
const newEntry = yield* Schema.decodeUnknown(MergedTmdbLocalData)(
|
// TODO: Uniformiser la casse des propriétés.
|
||||||
{
|
searchData.value.set(
|
||||||
artWorkId: artWork?.id,
|
result.id,
|
||||||
artWorkMediumTypeId: artWork?.mediumTypeId,
|
yield* Schema.decodeUnknown(MergedTmdbLocalData)(
|
||||||
entryAppreciation: entry?.appreciation,
|
{
|
||||||
entryCommentary: entry?.commentary,
|
artWorkId: artWork?.id,
|
||||||
entryDateCreated: entry?.dateCreated,
|
artWorkMediumTypeId: artWork?.mediumTypeId,
|
||||||
entryDateModified: entry?.dateModified,
|
entryAppreciation: entry?.appreciation,
|
||||||
entryDateObtained: entry?.dateObtained,
|
entryCommentary: entry?.commentary,
|
||||||
entryId: entry?.id,
|
entryDateCreated: entry?.dateCreated,
|
||||||
entryStateId: entry?.stateId,
|
entryDateModified: entry?.dateModified,
|
||||||
genreIds: result.genre_ids,
|
entryDateObtained: entry?.dateObtained,
|
||||||
originalLanguage: result.original_language,
|
entryId: entry?.id,
|
||||||
originalResultIndex: index,
|
entryStateId: entry?.stateId,
|
||||||
originalTitle: result.original_title,
|
genreIds: result.genre_ids,
|
||||||
overview: result.overview,
|
originalLanguage: result.original_language,
|
||||||
popularity: result.popularity,
|
originalResultIndex: index,
|
||||||
posterUrl: result.poster_path,
|
originalTitle: result.original_title,
|
||||||
releaseDate: result.release_date,
|
overview: result.overview,
|
||||||
title: result.title,
|
popularity: result.popularity,
|
||||||
tmdbId: result.id,
|
posterUrl: result.poster_path,
|
||||||
} satisfies MergedTmdbLocalData,
|
releaseDate: result.release_date,
|
||||||
|
title: result.title,
|
||||||
|
tmdbId: result.id,
|
||||||
|
} satisfies MergedTmdbLocalData,
|
||||||
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
searchData.value.set(result.id, newEntry);
|
|
||||||
entryStore.setEntry(newEntry);
|
|
||||||
}).pipe(Effect.runPromise)
|
}).pipe(Effect.runPromise)
|
||||||
);
|
);
|
||||||
}));
|
}));
|
||||||
|
|
|
||||||
|
|
@ -29,18 +29,6 @@ const router: Router = createRouter({
|
||||||
name: "Search",
|
name: "Search",
|
||||||
path: "/search",
|
path: "/search",
|
||||||
},
|
},
|
||||||
{
|
|
||||||
component: () => import("@/pages/AddEntryPage.vue"),
|
|
||||||
meta: { title: "Ajouter une entrée au Journal" },
|
|
||||||
name: "AddEntry",
|
|
||||||
path: "/entry/add",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
component: () => import("@/pages/HomePage.vue"),
|
|
||||||
meta: { title: "Voir une entrée du Journal" },
|
|
||||||
name: "ViewEntry",
|
|
||||||
path: "/entry/:entryId",
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
14
src/router/typed-routes.d.ts
vendored
14
src/router/typed-routes.d.ts
vendored
|
|
@ -3,13 +3,6 @@ import type { RouteRecordInfo } from "vue-router";
|
||||||
import "vue-router";
|
import "vue-router";
|
||||||
|
|
||||||
export interface RouteNamedMap {
|
export interface RouteNamedMap {
|
||||||
AddEntry: RouteRecordInfo<
|
|
||||||
"AddEntry",
|
|
||||||
"/entry/add",
|
|
||||||
Record<never, never>,
|
|
||||||
Record<never, never>,
|
|
||||||
{ title: string }
|
|
||||||
>;
|
|
||||||
Home: RouteRecordInfo<
|
Home: RouteRecordInfo<
|
||||||
"Home",
|
"Home",
|
||||||
"/",
|
"/",
|
||||||
|
|
@ -31,13 +24,6 @@ export interface RouteNamedMap {
|
||||||
Record<never, never>,
|
Record<never, never>,
|
||||||
{ title: string }
|
{ title: string }
|
||||||
>;
|
>;
|
||||||
ViewEntry: RouteRecordInfo<
|
|
||||||
"ViewEntry",
|
|
||||||
"/entry/:entryId",
|
|
||||||
{ entryId: number },
|
|
||||||
{ entryId: number },
|
|
||||||
{ title: string }
|
|
||||||
>;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Last, you will need to augment the Vue Router types with this map of routes
|
// Last, you will need to augment the Vue Router types with this map of routes
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,8 @@ export class ReadApi extends Effect.Service<ReadApi>()("ReadApi", {
|
||||||
|
|
||||||
yield* Effect.logDebug("--- READ-API ---");
|
yield* Effect.logDebug("--- READ-API ---");
|
||||||
|
|
||||||
|
// TODO: Implémenter ReadApiError pour des requêtes avec zéro retour.
|
||||||
|
|
||||||
return {
|
return {
|
||||||
getAllEntries: () => query(_ => _.select().from(DiaryEntries)),
|
getAllEntries: () => query(_ => _.select().from(DiaryEntries)),
|
||||||
getArtworkByTmdbId: (tmdbId: number) =>
|
getArtworkByTmdbId: (tmdbId: number) =>
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,6 @@
|
||||||
import {
|
import { createGetHttpRequest, createUrlWithParams, DebugHttpClient as Dhc } from "@/libs/apis/clients";
|
||||||
createGetHttpRequest,
|
import { TMDB_ROUTE_SEARCH_MOVIE } from "@/libs/apis/routes";
|
||||||
createUrlWithParameterizedPathAndParams,
|
import { type TmdbMovieSearchQueryParams, TmdbMovieSearchResponse } from "@/libs/apis/tmdb/schemas";
|
||||||
createUrlWithParams,
|
|
||||||
DebugHttpClient as Dhc,
|
|
||||||
} from "@/libs/apis/clients";
|
|
||||||
import { TMDB_ROUTE_MOVIE_DETAILS, TMDB_ROUTE_SEARCH_MOVIE } from "@/libs/apis/routes";
|
|
||||||
import {
|
|
||||||
TmdbMovieDetailsQueryParams,
|
|
||||||
TmdbMovieDetailsWithCreditsResponse,
|
|
||||||
type TmdbMovieSearchQueryParams,
|
|
||||||
TmdbMovieSearchResponse,
|
|
||||||
} from "@/libs/apis/tmdb/schemas";
|
|
||||||
import { HttpClient, HttpClientRequest, HttpClientResponse } from "@effect/platform";
|
import { HttpClient, HttpClientRequest, HttpClientResponse } from "@effect/platform";
|
||||||
import { Data, Effect, pipe } from "effect";
|
import { Data, Effect, pipe } from "effect";
|
||||||
|
|
||||||
|
|
@ -24,20 +14,6 @@ export class TmdbApi extends Effect.Service<TmdbApi>()("TmdbApi", {
|
||||||
const client = yield* Dhc;
|
const client = yield* Dhc;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
getMovieDetails: (args: TmdbMovieDetailsQueryParams) =>
|
|
||||||
pipe(
|
|
||||||
createUrlWithParameterizedPathAndParams(TMDB_ROUTE_MOVIE_DETAILS, args.movie_id)({
|
|
||||||
append_to_response: args.append_to_response,
|
|
||||||
language: args.language,
|
|
||||||
}),
|
|
||||||
Effect.andThen((url: URL) => createGetHttpRequest(url)),
|
|
||||||
Effect.andThen((request: HttpClientRequest.HttpClientRequest) => client.execute(request)),
|
|
||||||
HttpClient.withTracerPropagation(false),
|
|
||||||
Effect.andThen((response: HttpClientResponse.HttpClientResponse) =>
|
|
||||||
HttpClientResponse.schemaBodyJson(TmdbMovieDetailsWithCreditsResponse)(response)
|
|
||||||
),
|
|
||||||
Effect.scoped,
|
|
||||||
),
|
|
||||||
searchMovie: (args: TmdbMovieSearchQueryParams) =>
|
searchMovie: (args: TmdbMovieSearchQueryParams) =>
|
||||||
pipe(
|
pipe(
|
||||||
createUrlWithParams(TMDB_ROUTE_SEARCH_MOVIE)({ ...args }),
|
createUrlWithParams(TMDB_ROUTE_SEARCH_MOVIE)({ ...args }),
|
||||||
|
|
|
||||||
|
|
@ -1,20 +0,0 @@
|
||||||
import type { TmdbMovieDetailsWithCreditsResponse } from "@/libs/apis/tmdb/schemas";
|
|
||||||
import type { MergedTmdbLocalData } from "@/libs/search/schemas";
|
|
||||||
|
|
||||||
import { defineStore } from "pinia";
|
|
||||||
import { type Ref, ref } from "vue";
|
|
||||||
|
|
||||||
export const useEntryStore = defineStore("entry", () => {
|
|
||||||
const entry: Ref<MergedTmdbLocalData | undefined> = ref<MergedTmdbLocalData>();
|
|
||||||
const tmdbData: Ref<TmdbMovieDetailsWithCreditsResponse | undefined> = ref<TmdbMovieDetailsWithCreditsResponse>();
|
|
||||||
|
|
||||||
const setEntry = (newEntry: MergedTmdbLocalData | undefined): void => {
|
|
||||||
entry.value = newEntry;
|
|
||||||
};
|
|
||||||
|
|
||||||
const setTmdbData = (newData: TmdbMovieDetailsWithCreditsResponse | undefined): void => {
|
|
||||||
tmdbData.value = newData;
|
|
||||||
};
|
|
||||||
|
|
||||||
return { entry, setEntry, setTmdbData, tmdbData };
|
|
||||||
});
|
|
||||||
|
|
@ -67,7 +67,7 @@ body {
|
||||||
navigation: auto;
|
navigation: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* @media (prefers-reduced-motion) {
|
@media (prefers-reduced-motion) {
|
||||||
*, *::before, *::after {
|
*, *::before, *::after {
|
||||||
scroll-behavior: auto !important;
|
scroll-behavior: auto !important;
|
||||||
transition: none !important;
|
transition: none !important;
|
||||||
|
|
@ -77,4 +77,4 @@ body {
|
||||||
@view-transition {
|
@view-transition {
|
||||||
navigation: none !important;
|
navigation: none !important;
|
||||||
}
|
}
|
||||||
} */
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,15 +11,6 @@
|
||||||
--color-tertiary: dimgrey;
|
--color-tertiary: dimgrey;
|
||||||
--color-quartary: #be2727;
|
--color-quartary: #be2727;
|
||||||
|
|
||||||
/* *
|
|
||||||
* Depuis saumon :
|
|
||||||
* Complémentaire : #72ecfa
|
|
||||||
* Brun foncé : #502924
|
|
||||||
* Brun clair : #7a3f38
|
|
||||||
* Rouge brun : #a5544b
|
|
||||||
* Rouge marron : #cf6a5f
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Hauteurs de ligne */
|
/* Hauteurs de ligne */
|
||||||
--line-height-comfortable: 1.4;
|
--line-height-comfortable: 1.4;
|
||||||
--line-height-compact: 1.1;
|
--line-height-compact: 1.1;
|
||||||
|
|
@ -43,11 +34,7 @@
|
||||||
--s5: calc(var(--s4) * var(--ratio));
|
--s5: calc(var(--s4) * var(--ratio));
|
||||||
|
|
||||||
/* Arrière-plans à motifs */
|
/* Arrière-plans à motifs */
|
||||||
--bg25-tertiary: repeating-conic-gradient(var(--color-tertiary) 0% 25%, transparent 0% 100%) 1px
|
--bg25-secondary: repeating-conic-gradient(var(--color-tertiary) 0% 25%, transparent 0% 100%) 1px
|
||||||
0.5px / 2px 2px;
|
|
||||||
--bg75-tertiary: repeating-conic-gradient(var(--color-tertiary) 0% 75%, transparent 0% 100%) 1px
|
|
||||||
0.5px / 2px 2px;
|
|
||||||
--bg25-secondary: repeating-conic-gradient(var(--color-secondary) 0% 25%, transparent 0% 100%) 1px
|
|
||||||
0.5px / 2px 2px;
|
0.5px / 2px 2px;
|
||||||
--bg75-secondary: repeating-conic-gradient(var(--color-secondary) 0% 75%, transparent 0% 100%) 1px
|
--bg75-secondary: repeating-conic-gradient(var(--color-secondary) 0% 75%, transparent 0% 100%) 1px
|
||||||
0.5px / 2px 2px;
|
0.5px / 2px 2px;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/* Élément conteneur de la fenêtre modale. */
|
/* Élément conteneur de la fenêtre modale. */
|
||||||
.dialog {
|
.dialog {
|
||||||
--dialog-overlay-background: var(--bg25-tertiary);
|
--dialog-overlay-background: var(--bg25-secondary);
|
||||||
--dialog-background-color: var(--root-background-color);
|
--dialog-background-color: var(--root-background-color);
|
||||||
--dialog-border-color: var(--root-text-color);
|
--dialog-border-color: var(--root-text-color);
|
||||||
--dialog-shadow-color: var(--root-text-color);
|
--dialog-shadow-color: var(--root-text-color);
|
||||||
|
|
@ -37,16 +37,14 @@
|
||||||
border-block-end: 1px solid var(--dialog-border-color);
|
border-block-end: 1px solid var(--dialog-border-color);
|
||||||
|
|
||||||
h2 {
|
h2 {
|
||||||
font-family: "BRKLY", monospace;
|
|
||||||
padding-inline: var(--s-1);
|
padding-inline: var(--s-1);
|
||||||
text-transform: uppercase;
|
font-size: var(--s1);
|
||||||
font-size: var(--s0);
|
|
||||||
font-weight: var(--brkly-font-weight-semibold);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
button {
|
button {
|
||||||
padding: var(--s-1);
|
padding: var(--s-1);
|
||||||
font-weight: var(--brkly-font-weight-semibold);
|
font-family: Banquise, monospace;
|
||||||
|
font-weight: 500;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,25 +13,3 @@
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes loading {
|
|
||||||
0% {
|
|
||||||
content: "";
|
|
||||||
}
|
|
||||||
|
|
||||||
25% {
|
|
||||||
content: ".";
|
|
||||||
}
|
|
||||||
|
|
||||||
50% {
|
|
||||||
content: "..";
|
|
||||||
}
|
|
||||||
|
|
||||||
75% {
|
|
||||||
content: "...";
|
|
||||||
}
|
|
||||||
|
|
||||||
100% {
|
|
||||||
content: "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -6,19 +6,16 @@ h1 {
|
||||||
font-family: var(--headings-font-family);
|
font-family: var(--headings-font-family);
|
||||||
font-size: var(--s3);
|
font-size: var(--s3);
|
||||||
letter-spacing: var(--letter-spacing-medium);
|
letter-spacing: var(--letter-spacing-medium);
|
||||||
line-height: var(--line-height-compact);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
h2 {
|
h2 {
|
||||||
font-family: var(--headings-font-family);
|
font-family: var(--headings-font-family);
|
||||||
font-size: var(--s2);
|
font-size: var(--s2);
|
||||||
letter-spacing: var(--letter-spacing-small);
|
letter-spacing: var(--letter-spacing-small);
|
||||||
line-height: var(--line-height-compact);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
h3 {
|
h3 {
|
||||||
font-family: var(--headings-font-family);
|
font-family: var(--headings-font-family);
|
||||||
font-size: var(--s1);
|
font-size: var(--s1);
|
||||||
letter-spacing: var(--letter-spacing-small);
|
letter-spacing: var(--letter-spacing-small);
|
||||||
line-height: var(--line-height-compact);
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
import vue from "@vitejs/plugin-vue";
|
import vue from "@vitejs/plugin-vue";
|
||||||
import fs from "node:fs";
|
|
||||||
import { defineConfig } from "vite";
|
import { defineConfig } from "vite";
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
|
|
@ -8,13 +7,7 @@ export default defineConfig({
|
||||||
emptyOutDir: true,
|
emptyOutDir: true,
|
||||||
outDir: "dist",
|
outDir: "dist",
|
||||||
reportCompressedSize: true,
|
reportCompressedSize: true,
|
||||||
rollupOptions: {
|
rollupOptions: { output: { compact: true, format: "esm", validate: true } },
|
||||||
output: {
|
|
||||||
compact: true,
|
|
||||||
format: "esm",
|
|
||||||
validate: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
sourcemap: false,
|
sourcemap: false,
|
||||||
},
|
},
|
||||||
cacheDir: ".cache/vite",
|
cacheDir: ".cache/vite",
|
||||||
|
|
@ -23,27 +16,26 @@ export default defineConfig({
|
||||||
optimizeDeps: { exclude: ["sqlocal"] },
|
optimizeDeps: { exclude: ["sqlocal"] },
|
||||||
plugins: [
|
plugins: [
|
||||||
vue(),
|
vue(),
|
||||||
|
{
|
||||||
|
configureServer: server => {
|
||||||
|
server.middlewares.use((_req, res, next) => {
|
||||||
|
res.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
|
||||||
|
res.setHeader("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT");
|
||||||
|
res.setHeader("Access-Control-Allow-Origin", "http://localhost:4321");
|
||||||
|
res.setHeader("Access-Control-Allow-Credentials", "true");
|
||||||
|
res.setHeader("Cross-Origin-Embedder-Policy", "require-corp");
|
||||||
|
res.setHeader("Cross-Origin-Opener-Policy", "same-origin");
|
||||||
|
res.setHeader("Cross-Origin-Resource-Policy", "cross-origin");
|
||||||
|
next();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
name: "configure-response-headers",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
resolve: {
|
resolve: {
|
||||||
alias: {
|
alias: {
|
||||||
"@": Bun.fileURLToPath(new URL("./src", import.meta.url)),
|
"@": Bun.fileURLToPath(new URL("./src", import.meta.url)),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
server: {
|
|
||||||
allowedHosts: ["journal.site"],
|
|
||||||
cors: { origin: ["https://journal.site"] },
|
|
||||||
hmr: {
|
|
||||||
clientPort: 5173,
|
|
||||||
protocol: "wss",
|
|
||||||
},
|
|
||||||
host: "0.0.0.0",
|
|
||||||
https: {
|
|
||||||
cert: fs.readFileSync(".tls/cert.pem"),
|
|
||||||
key: fs.readFileSync(".tls/key.pem"),
|
|
||||||
},
|
|
||||||
port: 5173,
|
|
||||||
proxy: {},
|
|
||||||
strictPort: true,
|
|
||||||
},
|
|
||||||
worker: { format: "es" },
|
worker: { format: "es" },
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue