Use canvas and memory

This commit is contained in:
Fabian Schmidt 2025-02-24 09:52:01 +01:00
parent eb277a0118
commit 388e6d900f
5 changed files with 176 additions and 149 deletions

View File

@ -111,6 +111,18 @@ impl Universe {
pub fn render(&self) -> String { pub fn render(&self) -> String {
self.to_string() self.to_string()
} }
pub fn width(&self) -> u32 {
self.width
}
pub fn height(&self) -> u32 {
self.height
}
pub fn cells(&self) -> *const Cell {
self.cells.as_ptr()
}
} }
impl Default for Universe { impl Default for Universe {

View File

@ -21,7 +21,7 @@
</head> </head>
<body> <body>
<pre id="game-of-life-canvas"></pre> <canvas id="game-of-life-canvas"></canvas>
<script src="./bootstrap.js"></script> <script src="./bootstrap.js"></script>
</body> </body>

View File

@ -1,14 +1,81 @@
import { Universe } from "wasm-game-of-life"; import { Universe, Cell } from "wasm-game-of-life";
import { memory } from "wasm-game-of-life/wasm_game_of_life_bg.wasm";
const CELL_SIZE = 5;
const GRID_COLOR = "#CCCCCC";
const DEAD_COLOR = "#FFFFFF";
const ALIVE_COLOR = "#000000";
const pre = document.getElementById("game-of-life-canvas");
const universe = Universe.new(); const universe = Universe.new();
const width = universe.width();
const height = universe.height();
// Give the canvas room for all of our cells and a 1px border
// around each of them.
const canvas = document.getElementById("game-of-life-canvas");
canvas.height = (CELL_SIZE + 1) * height + 1;
canvas.width = (CELL_SIZE + 1) * width + 1;
const ctx = canvas.getContext('2d');
const drawGrid = () => {
ctx.beginPath();
ctx.strokeStyle = GRID_COLOR;
// Vertical lines.
for (let i = 0; i <= width; i++) {
ctx.moveTo(i * (CELL_SIZE + 1) + 1, 0);
ctx.lineTo(i * (CELL_SIZE + 1) + 1, (CELL_SIZE + 1) * height + 1);
}
// Horizontal lines.
for (let j = 0; j <= height; j++) {
ctx.moveTo(0, j * (CELL_SIZE + 1) + 1);
ctx.lineTo((CELL_SIZE + 1) * width + 1, j * (CELL_SIZE + 1) + 1);
}
ctx.stroke();
};
const getIndex = (row, column) => {
return row * width + column;
};
const drawCells = () => {
const cellsPtr = universe.cells();
const cells = new Uint8Array(memory.buffer, cellsPtr, width * height);
ctx.beginPath();
for (let row = 0; row < height; row++) {
for (let col = 0; col < width; col++) {
const idx = getIndex(row, col);
ctx.fillStyle = cells[idx] === Cell.Dead
? DEAD_COLOR
: ALIVE_COLOR;
ctx.fillRect(
col * (CELL_SIZE + 1) + 1,
row * (CELL_SIZE + 1) + 1,
CELL_SIZE,
CELL_SIZE
);
}
}
ctx.stroke();
};
const renderLoop = () => { const renderLoop = () => {
pre.textContent = universe.render();
universe.tick(); universe.tick();
drawGrid();
drawCells();
requestAnimationFrame(renderLoop); requestAnimationFrame(renderLoop);
}; };
drawGrid();
drawCells();
requestAnimationFrame(renderLoop); requestAnimationFrame(renderLoop);

View File

@ -26,13 +26,13 @@
"url": "https://github.com/rustwasm/create-wasm-app/issues" "url": "https://github.com/rustwasm/create-wasm-app/issues"
}, },
"homepage": "https://github.com/rustwasm/create-wasm-app#readme", "homepage": "https://github.com/rustwasm/create-wasm-app#readme",
"dependencies": { "dependencies": {
"wasm-game-of-life": "file:../pkg" "wasm-game-of-life": "file:../pkg"
}, },
"devDependencies": { "devDependencies": {
"webpack": "^5.97.1", "copy-webpack-plugin": "^12.0.2",
"webpack": "^5.98.0",
"webpack-cli": "^6.0.1", "webpack-cli": "^6.0.1",
"webpack-dev-server": "^5.2.0", "webpack-dev-server": "^5.2.0"
"copy-webpack-plugin": "^12.0.2"
} }
} }

View File

@ -14,16 +14,16 @@ importers:
devDependencies: devDependencies:
copy-webpack-plugin: copy-webpack-plugin:
specifier: ^12.0.2 specifier: ^12.0.2
version: 12.0.2(webpack@5.97.1) version: 12.0.2(webpack@5.98.0)
webpack: webpack:
specifier: ^5.97.1 specifier: ^5.98.0
version: 5.97.1(webpack-cli@6.0.1) version: 5.98.0(webpack-cli@6.0.1)
webpack-cli: webpack-cli:
specifier: ^6.0.1 specifier: ^6.0.1
version: 6.0.1(webpack-dev-server@5.2.0)(webpack@5.97.1) version: 6.0.1(webpack-dev-server@5.2.0)(webpack@5.98.0)
webpack-dev-server: webpack-dev-server:
specifier: ^5.2.0 specifier: ^5.2.0
version: 5.2.0(webpack-cli@6.0.1)(webpack@5.97.1) version: 5.2.0(webpack-cli@6.0.1)(webpack@5.98.0)
packages: packages:
@ -134,8 +134,8 @@ packages:
'@types/node-forge@1.3.11': '@types/node-forge@1.3.11':
resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==}
'@types/node@22.13.1': '@types/node@22.13.5':
resolution: {integrity: sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==} resolution: {integrity: sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg==}
'@types/qs@6.9.18': '@types/qs@6.9.18':
resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==} resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==}
@ -254,19 +254,11 @@ packages:
ajv: ajv:
optional: true optional: true
ajv-keywords@3.5.2:
resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==}
peerDependencies:
ajv: ^6.9.1
ajv-keywords@5.1.0: ajv-keywords@5.1.0:
resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==}
peerDependencies: peerDependencies:
ajv: ^8.8.2 ajv: ^8.8.2
ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
ajv@8.17.1: ajv@8.17.1:
resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
@ -316,16 +308,16 @@ packages:
resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
engines: {node: '>= 0.8'} engines: {node: '>= 0.8'}
call-bind-apply-helpers@1.0.1: call-bind-apply-helpers@1.0.2:
resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
call-bound@1.0.3: call-bound@1.0.3:
resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
caniuse-lite@1.0.30001699: caniuse-lite@1.0.30001700:
resolution: {integrity: sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w==} resolution: {integrity: sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==}
chokidar@3.6.0: chokidar@3.6.0:
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
@ -353,8 +345,8 @@ packages:
resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==}
engines: {node: '>= 0.6'} engines: {node: '>= 0.6'}
compression@1.7.5: compression@1.8.0:
resolution: {integrity: sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==} resolution: {integrity: sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==}
engines: {node: '>= 0.8.0'} engines: {node: '>= 0.8.0'}
connect-history-api-fallback@2.0.0: connect-history-api-fallback@2.0.0:
@ -444,8 +436,8 @@ packages:
ee-first@1.1.1: ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
electron-to-chromium@1.5.96: electron-to-chromium@1.5.103:
resolution: {integrity: sha512-8AJUW6dh75Fm/ny8+kZKJzI1pgoE8bKLZlzDU2W1ENd+DXKJrx7I7l9hb8UWR4ojlnb5OlixMt00QWiYJoVw1w==} resolution: {integrity: sha512-P6+XzIkfndgsrjROJWfSvVEgNHtPgbhVyTkwLjUM2HU/h7pZRORgaTlHqfAikqxKmdJMLW8fftrdGWbd/Ds0FA==}
encodeurl@1.0.2: encodeurl@1.0.2:
resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
@ -524,9 +516,6 @@ packages:
resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
engines: {node: '>=8.6.0'} engines: {node: '>=8.6.0'}
fast-json-stable-stringify@2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
fast-uri@3.0.6: fast-uri@3.0.6:
resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==}
@ -582,8 +571,8 @@ packages:
function-bind@1.1.2: function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
get-intrinsic@1.2.7: get-intrinsic@1.3.0:
resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
get-proto@1.0.1: get-proto@1.0.1:
@ -755,9 +744,6 @@ packages:
json-parse-even-better-errors@2.3.1: json-parse-even-better-errors@2.3.1:
resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
json-schema-traverse@0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
json-schema-traverse@1.0.0: json-schema-traverse@1.0.0:
resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
@ -765,8 +751,8 @@ packages:
resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
launch-editor@2.9.1: launch-editor@2.10.0:
resolution: {integrity: sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==} resolution: {integrity: sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==}
loader-runner@4.3.0: loader-runner@4.3.0:
resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==}
@ -933,10 +919,6 @@ packages:
resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
engines: {node: '>= 0.10'} engines: {node: '>= 0.10'}
punycode@2.3.1:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
qs@6.13.0: qs@6.13.0:
resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==}
engines: {node: '>=0.6'} engines: {node: '>=0.6'}
@ -1014,10 +996,6 @@ packages:
safer-buffer@2.1.2: safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
schema-utils@3.3.0:
resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==}
engines: {node: '>= 10.13.0'}
schema-utils@4.3.0: schema-utils@4.3.0:
resolution: {integrity: sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==} resolution: {integrity: sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==}
engines: {node: '>= 10.13.0'} engines: {node: '>= 10.13.0'}
@ -1145,8 +1123,8 @@ packages:
uglify-js: uglify-js:
optional: true optional: true
terser@5.38.1: terser@5.39.0:
resolution: {integrity: sha512-GWANVlPM/ZfYzuPHjq0nxT+EbOEDDN3Jwhwdg1D8TU8oSkktp8w64Uq4auuGLxFSoNTRDncTq2hQHX1Ld9KHkA==} resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==}
engines: {node: '>=10'} engines: {node: '>=10'}
hasBin: true hasBin: true
@ -1197,9 +1175,6 @@ packages:
peerDependencies: peerDependencies:
browserslist: '>= 4.21.0' browserslist: '>= 4.21.0'
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
util-deprecate@1.0.2: util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
@ -1269,8 +1244,8 @@ packages:
resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
engines: {node: '>=10.13.0'} engines: {node: '>=10.13.0'}
webpack@5.97.1: webpack@5.98.0:
resolution: {integrity: sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==} resolution: {integrity: sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==}
engines: {node: '>=10.13.0'} engines: {node: '>=10.13.0'}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
@ -1295,8 +1270,8 @@ packages:
wildcard@2.0.1: wildcard@2.0.1:
resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==}
ws@8.18.0: ws@8.18.1:
resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==}
engines: {node: '>=10.0.0'} engines: {node: '>=10.0.0'}
peerDependencies: peerDependencies:
bufferutil: ^4.0.1 bufferutil: ^4.0.1
@ -1368,20 +1343,20 @@ snapshots:
'@types/body-parser@1.19.5': '@types/body-parser@1.19.5':
dependencies: dependencies:
'@types/connect': 3.4.38 '@types/connect': 3.4.38
'@types/node': 22.13.1 '@types/node': 22.13.5
'@types/bonjour@3.5.13': '@types/bonjour@3.5.13':
dependencies: dependencies:
'@types/node': 22.13.1 '@types/node': 22.13.5
'@types/connect-history-api-fallback@1.5.4': '@types/connect-history-api-fallback@1.5.4':
dependencies: dependencies:
'@types/express-serve-static-core': 5.0.6 '@types/express-serve-static-core': 5.0.6
'@types/node': 22.13.1 '@types/node': 22.13.5
'@types/connect@3.4.38': '@types/connect@3.4.38':
dependencies: dependencies:
'@types/node': 22.13.1 '@types/node': 22.13.5
'@types/eslint-scope@3.7.7': '@types/eslint-scope@3.7.7':
dependencies: dependencies:
@ -1397,14 +1372,14 @@ snapshots:
'@types/express-serve-static-core@4.19.6': '@types/express-serve-static-core@4.19.6':
dependencies: dependencies:
'@types/node': 22.13.1 '@types/node': 22.13.5
'@types/qs': 6.9.18 '@types/qs': 6.9.18
'@types/range-parser': 1.2.7 '@types/range-parser': 1.2.7
'@types/send': 0.17.4 '@types/send': 0.17.4
'@types/express-serve-static-core@5.0.6': '@types/express-serve-static-core@5.0.6':
dependencies: dependencies:
'@types/node': 22.13.1 '@types/node': 22.13.5
'@types/qs': 6.9.18 '@types/qs': 6.9.18
'@types/range-parser': 1.2.7 '@types/range-parser': 1.2.7
'@types/send': 0.17.4 '@types/send': 0.17.4
@ -1420,7 +1395,7 @@ snapshots:
'@types/http-proxy@1.17.16': '@types/http-proxy@1.17.16':
dependencies: dependencies:
'@types/node': 22.13.1 '@types/node': 22.13.5
'@types/json-schema@7.0.15': {} '@types/json-schema@7.0.15': {}
@ -1428,9 +1403,9 @@ snapshots:
'@types/node-forge@1.3.11': '@types/node-forge@1.3.11':
dependencies: dependencies:
'@types/node': 22.13.1 '@types/node': 22.13.5
'@types/node@22.13.1': '@types/node@22.13.5':
dependencies: dependencies:
undici-types: 6.20.0 undici-types: 6.20.0
@ -1443,7 +1418,7 @@ snapshots:
'@types/send@0.17.4': '@types/send@0.17.4':
dependencies: dependencies:
'@types/mime': 1.3.5 '@types/mime': 1.3.5
'@types/node': 22.13.1 '@types/node': 22.13.5
'@types/serve-index@1.9.4': '@types/serve-index@1.9.4':
dependencies: dependencies:
@ -1452,16 +1427,16 @@ snapshots:
'@types/serve-static@1.15.7': '@types/serve-static@1.15.7':
dependencies: dependencies:
'@types/http-errors': 2.0.4 '@types/http-errors': 2.0.4
'@types/node': 22.13.1 '@types/node': 22.13.5
'@types/send': 0.17.4 '@types/send': 0.17.4
'@types/sockjs@0.3.36': '@types/sockjs@0.3.36':
dependencies: dependencies:
'@types/node': 22.13.1 '@types/node': 22.13.5
'@types/ws@8.5.14': '@types/ws@8.5.14':
dependencies: dependencies:
'@types/node': 22.13.1 '@types/node': 22.13.5
'@webassemblyjs/ast@1.14.1': '@webassemblyjs/ast@1.14.1':
dependencies: dependencies:
@ -1539,22 +1514,22 @@ snapshots:
'@webassemblyjs/ast': 1.14.1 '@webassemblyjs/ast': 1.14.1
'@xtuc/long': 4.2.2 '@xtuc/long': 4.2.2
'@webpack-cli/configtest@3.0.1(webpack-cli@6.0.1)(webpack@5.97.1)': '@webpack-cli/configtest@3.0.1(webpack-cli@6.0.1)(webpack@5.98.0)':
dependencies: dependencies:
webpack: 5.97.1(webpack-cli@6.0.1) webpack: 5.98.0(webpack-cli@6.0.1)
webpack-cli: 6.0.1(webpack-dev-server@5.2.0)(webpack@5.97.1) webpack-cli: 6.0.1(webpack-dev-server@5.2.0)(webpack@5.98.0)
'@webpack-cli/info@3.0.1(webpack-cli@6.0.1)(webpack@5.97.1)': '@webpack-cli/info@3.0.1(webpack-cli@6.0.1)(webpack@5.98.0)':
dependencies: dependencies:
webpack: 5.97.1(webpack-cli@6.0.1) webpack: 5.98.0(webpack-cli@6.0.1)
webpack-cli: 6.0.1(webpack-dev-server@5.2.0)(webpack@5.97.1) webpack-cli: 6.0.1(webpack-dev-server@5.2.0)(webpack@5.98.0)
'@webpack-cli/serve@3.0.1(webpack-cli@6.0.1)(webpack-dev-server@5.2.0)(webpack@5.97.1)': '@webpack-cli/serve@3.0.1(webpack-cli@6.0.1)(webpack-dev-server@5.2.0)(webpack@5.98.0)':
dependencies: dependencies:
webpack: 5.97.1(webpack-cli@6.0.1) webpack: 5.98.0(webpack-cli@6.0.1)
webpack-cli: 6.0.1(webpack-dev-server@5.2.0)(webpack@5.97.1) webpack-cli: 6.0.1(webpack-dev-server@5.2.0)(webpack@5.98.0)
optionalDependencies: optionalDependencies:
webpack-dev-server: 5.2.0(webpack-cli@6.0.1)(webpack@5.97.1) webpack-dev-server: 5.2.0(webpack-cli@6.0.1)(webpack@5.98.0)
'@xtuc/ieee754@1.2.0': {} '@xtuc/ieee754@1.2.0': {}
@ -1571,22 +1546,11 @@ snapshots:
optionalDependencies: optionalDependencies:
ajv: 8.17.1 ajv: 8.17.1
ajv-keywords@3.5.2(ajv@6.12.6):
dependencies:
ajv: 6.12.6
ajv-keywords@5.1.0(ajv@8.17.1): ajv-keywords@5.1.0(ajv@8.17.1):
dependencies: dependencies:
ajv: 8.17.1 ajv: 8.17.1
fast-deep-equal: 3.1.3 fast-deep-equal: 3.1.3
ajv@6.12.6:
dependencies:
fast-deep-equal: 3.1.3
fast-json-stable-stringify: 2.1.0
json-schema-traverse: 0.4.1
uri-js: 4.4.1
ajv@8.17.1: ajv@8.17.1:
dependencies: dependencies:
fast-deep-equal: 3.1.3 fast-deep-equal: 3.1.3
@ -1635,8 +1599,8 @@ snapshots:
browserslist@4.24.4: browserslist@4.24.4:
dependencies: dependencies:
caniuse-lite: 1.0.30001699 caniuse-lite: 1.0.30001700
electron-to-chromium: 1.5.96 electron-to-chromium: 1.5.103
node-releases: 2.0.19 node-releases: 2.0.19
update-browserslist-db: 1.1.2(browserslist@4.24.4) update-browserslist-db: 1.1.2(browserslist@4.24.4)
@ -1648,17 +1612,17 @@ snapshots:
bytes@3.1.2: {} bytes@3.1.2: {}
call-bind-apply-helpers@1.0.1: call-bind-apply-helpers@1.0.2:
dependencies: dependencies:
es-errors: 1.3.0 es-errors: 1.3.0
function-bind: 1.1.2 function-bind: 1.1.2
call-bound@1.0.3: call-bound@1.0.3:
dependencies: dependencies:
call-bind-apply-helpers: 1.0.1 call-bind-apply-helpers: 1.0.2
get-intrinsic: 1.2.7 get-intrinsic: 1.3.0
caniuse-lite@1.0.30001699: {} caniuse-lite@1.0.30001700: {}
chokidar@3.6.0: chokidar@3.6.0:
dependencies: dependencies:
@ -1690,7 +1654,7 @@ snapshots:
dependencies: dependencies:
mime-db: 1.53.0 mime-db: 1.53.0
compression@1.7.5: compression@1.8.0:
dependencies: dependencies:
bytes: 3.1.2 bytes: 3.1.2
compressible: 2.0.18 compressible: 2.0.18
@ -1714,7 +1678,7 @@ snapshots:
cookie@0.7.1: {} cookie@0.7.1: {}
copy-webpack-plugin@12.0.2(webpack@5.97.1): copy-webpack-plugin@12.0.2(webpack@5.98.0):
dependencies: dependencies:
fast-glob: 3.3.3 fast-glob: 3.3.3
glob-parent: 6.0.2 glob-parent: 6.0.2
@ -1722,7 +1686,7 @@ snapshots:
normalize-path: 3.0.0 normalize-path: 3.0.0
schema-utils: 4.3.0 schema-utils: 4.3.0
serialize-javascript: 6.0.2 serialize-javascript: 6.0.2
webpack: 5.97.1(webpack-cli@6.0.1) webpack: 5.98.0(webpack-cli@6.0.1)
core-util-is@1.0.3: {} core-util-is@1.0.3: {}
@ -1763,13 +1727,13 @@ snapshots:
dunder-proto@1.0.1: dunder-proto@1.0.1:
dependencies: dependencies:
call-bind-apply-helpers: 1.0.1 call-bind-apply-helpers: 1.0.2
es-errors: 1.3.0 es-errors: 1.3.0
gopd: 1.2.0 gopd: 1.2.0
ee-first@1.1.1: {} ee-first@1.1.1: {}
electron-to-chromium@1.5.96: {} electron-to-chromium@1.5.103: {}
encodeurl@1.0.2: {} encodeurl@1.0.2: {}
@ -1861,8 +1825,6 @@ snapshots:
merge2: 1.4.1 merge2: 1.4.1
micromatch: 4.0.8 micromatch: 4.0.8
fast-json-stable-stringify@2.1.0: {}
fast-uri@3.0.6: {} fast-uri@3.0.6: {}
fastest-levenshtein@1.0.16: {} fastest-levenshtein@1.0.16: {}
@ -1909,9 +1871,9 @@ snapshots:
function-bind@1.1.2: {} function-bind@1.1.2: {}
get-intrinsic@1.2.7: get-intrinsic@1.3.0:
dependencies: dependencies:
call-bind-apply-helpers: 1.0.1 call-bind-apply-helpers: 1.0.2
es-define-property: 1.0.1 es-define-property: 1.0.1
es-errors: 1.3.0 es-errors: 1.3.0
es-object-atoms: 1.1.1 es-object-atoms: 1.1.1
@ -2071,19 +2033,17 @@ snapshots:
jest-worker@27.5.1: jest-worker@27.5.1:
dependencies: dependencies:
'@types/node': 22.13.1 '@types/node': 22.13.5
merge-stream: 2.0.0 merge-stream: 2.0.0
supports-color: 8.1.1 supports-color: 8.1.1
json-parse-even-better-errors@2.3.1: {} json-parse-even-better-errors@2.3.1: {}
json-schema-traverse@0.4.1: {}
json-schema-traverse@1.0.0: {} json-schema-traverse@1.0.0: {}
kind-of@6.0.3: {} kind-of@6.0.3: {}
launch-editor@2.9.1: launch-editor@2.10.0:
dependencies: dependencies:
picocolors: 1.1.1 picocolors: 1.1.1
shell-quote: 1.8.2 shell-quote: 1.8.2
@ -2211,8 +2171,6 @@ snapshots:
forwarded: 0.2.0 forwarded: 0.2.0
ipaddr.js: 1.9.1 ipaddr.js: 1.9.1
punycode@2.3.1: {}
qs@6.13.0: qs@6.13.0:
dependencies: dependencies:
side-channel: 1.1.0 side-channel: 1.1.0
@ -2288,12 +2246,6 @@ snapshots:
safer-buffer@2.1.2: {} safer-buffer@2.1.2: {}
schema-utils@3.3.0:
dependencies:
'@types/json-schema': 7.0.15
ajv: 6.12.6
ajv-keywords: 3.5.2(ajv@6.12.6)
schema-utils@4.3.0: schema-utils@4.3.0:
dependencies: dependencies:
'@types/json-schema': 7.0.15 '@types/json-schema': 7.0.15
@ -2376,14 +2328,14 @@ snapshots:
dependencies: dependencies:
call-bound: 1.0.3 call-bound: 1.0.3
es-errors: 1.3.0 es-errors: 1.3.0
get-intrinsic: 1.2.7 get-intrinsic: 1.3.0
object-inspect: 1.13.4 object-inspect: 1.13.4
side-channel-weakmap@1.0.2: side-channel-weakmap@1.0.2:
dependencies: dependencies:
call-bound: 1.0.3 call-bound: 1.0.3
es-errors: 1.3.0 es-errors: 1.3.0
get-intrinsic: 1.2.7 get-intrinsic: 1.3.0
object-inspect: 1.13.4 object-inspect: 1.13.4
side-channel-map: 1.0.1 side-channel-map: 1.0.1
@ -2451,16 +2403,16 @@ snapshots:
tapable@2.2.1: {} tapable@2.2.1: {}
terser-webpack-plugin@5.3.11(webpack@5.97.1): terser-webpack-plugin@5.3.11(webpack@5.98.0):
dependencies: dependencies:
'@jridgewell/trace-mapping': 0.3.25 '@jridgewell/trace-mapping': 0.3.25
jest-worker: 27.5.1 jest-worker: 27.5.1
schema-utils: 4.3.0 schema-utils: 4.3.0
serialize-javascript: 6.0.2 serialize-javascript: 6.0.2
terser: 5.38.1 terser: 5.39.0
webpack: 5.97.1(webpack-cli@6.0.1) webpack: 5.98.0(webpack-cli@6.0.1)
terser@5.38.1: terser@5.39.0:
dependencies: dependencies:
'@jridgewell/source-map': 0.3.6 '@jridgewell/source-map': 0.3.6
acorn: 8.14.0 acorn: 8.14.0
@ -2502,10 +2454,6 @@ snapshots:
escalade: 3.2.0 escalade: 3.2.0
picocolors: 1.1.1 picocolors: 1.1.1
uri-js@4.4.1:
dependencies:
punycode: 2.3.1
util-deprecate@1.0.2: {} util-deprecate@1.0.2: {}
utils-merge@1.0.1: {} utils-merge@1.0.1: {}
@ -2525,12 +2473,12 @@ snapshots:
dependencies: dependencies:
minimalistic-assert: 1.0.1 minimalistic-assert: 1.0.1
webpack-cli@6.0.1(webpack-dev-server@5.2.0)(webpack@5.97.1): webpack-cli@6.0.1(webpack-dev-server@5.2.0)(webpack@5.98.0):
dependencies: dependencies:
'@discoveryjs/json-ext': 0.6.3 '@discoveryjs/json-ext': 0.6.3
'@webpack-cli/configtest': 3.0.1(webpack-cli@6.0.1)(webpack@5.97.1) '@webpack-cli/configtest': 3.0.1(webpack-cli@6.0.1)(webpack@5.98.0)
'@webpack-cli/info': 3.0.1(webpack-cli@6.0.1)(webpack@5.97.1) '@webpack-cli/info': 3.0.1(webpack-cli@6.0.1)(webpack@5.98.0)
'@webpack-cli/serve': 3.0.1(webpack-cli@6.0.1)(webpack-dev-server@5.2.0)(webpack@5.97.1) '@webpack-cli/serve': 3.0.1(webpack-cli@6.0.1)(webpack-dev-server@5.2.0)(webpack@5.98.0)
colorette: 2.0.20 colorette: 2.0.20
commander: 12.1.0 commander: 12.1.0
cross-spawn: 7.0.6 cross-spawn: 7.0.6
@ -2539,12 +2487,12 @@ snapshots:
import-local: 3.2.0 import-local: 3.2.0
interpret: 3.1.1 interpret: 3.1.1
rechoir: 0.8.0 rechoir: 0.8.0
webpack: 5.97.1(webpack-cli@6.0.1) webpack: 5.98.0(webpack-cli@6.0.1)
webpack-merge: 6.0.1 webpack-merge: 6.0.1
optionalDependencies: optionalDependencies:
webpack-dev-server: 5.2.0(webpack-cli@6.0.1)(webpack@5.97.1) webpack-dev-server: 5.2.0(webpack-cli@6.0.1)(webpack@5.98.0)
webpack-dev-middleware@7.4.2(webpack@5.97.1): webpack-dev-middleware@7.4.2(webpack@5.98.0):
dependencies: dependencies:
colorette: 2.0.20 colorette: 2.0.20
memfs: 4.17.0 memfs: 4.17.0
@ -2553,9 +2501,9 @@ snapshots:
range-parser: 1.2.1 range-parser: 1.2.1
schema-utils: 4.3.0 schema-utils: 4.3.0
optionalDependencies: optionalDependencies:
webpack: 5.97.1(webpack-cli@6.0.1) webpack: 5.98.0(webpack-cli@6.0.1)
webpack-dev-server@5.2.0(webpack-cli@6.0.1)(webpack@5.97.1): webpack-dev-server@5.2.0(webpack-cli@6.0.1)(webpack@5.98.0):
dependencies: dependencies:
'@types/bonjour': 3.5.13 '@types/bonjour': 3.5.13
'@types/connect-history-api-fallback': 1.5.4 '@types/connect-history-api-fallback': 1.5.4
@ -2568,13 +2516,13 @@ snapshots:
bonjour-service: 1.3.0 bonjour-service: 1.3.0
chokidar: 3.6.0 chokidar: 3.6.0
colorette: 2.0.20 colorette: 2.0.20
compression: 1.7.5 compression: 1.8.0
connect-history-api-fallback: 2.0.0 connect-history-api-fallback: 2.0.0
express: 4.21.2 express: 4.21.2
graceful-fs: 4.2.11 graceful-fs: 4.2.11
http-proxy-middleware: 2.0.7(@types/express@4.17.21) http-proxy-middleware: 2.0.7(@types/express@4.17.21)
ipaddr.js: 2.2.0 ipaddr.js: 2.2.0
launch-editor: 2.9.1 launch-editor: 2.10.0
open: 10.1.0 open: 10.1.0
p-retry: 6.2.1 p-retry: 6.2.1
schema-utils: 4.3.0 schema-utils: 4.3.0
@ -2582,11 +2530,11 @@ snapshots:
serve-index: 1.9.1 serve-index: 1.9.1
sockjs: 0.3.24 sockjs: 0.3.24
spdy: 4.0.2 spdy: 4.0.2
webpack-dev-middleware: 7.4.2(webpack@5.97.1) webpack-dev-middleware: 7.4.2(webpack@5.98.0)
ws: 8.18.0 ws: 8.18.1
optionalDependencies: optionalDependencies:
webpack: 5.97.1(webpack-cli@6.0.1) webpack: 5.98.0(webpack-cli@6.0.1)
webpack-cli: 6.0.1(webpack-dev-server@5.2.0)(webpack@5.97.1) webpack-cli: 6.0.1(webpack-dev-server@5.2.0)(webpack@5.98.0)
transitivePeerDependencies: transitivePeerDependencies:
- bufferutil - bufferutil
- debug - debug
@ -2601,7 +2549,7 @@ snapshots:
webpack-sources@3.2.3: {} webpack-sources@3.2.3: {}
webpack@5.97.1(webpack-cli@6.0.1): webpack@5.98.0(webpack-cli@6.0.1):
dependencies: dependencies:
'@types/eslint-scope': 3.7.7 '@types/eslint-scope': 3.7.7
'@types/estree': 1.0.6 '@types/estree': 1.0.6
@ -2621,13 +2569,13 @@ snapshots:
loader-runner: 4.3.0 loader-runner: 4.3.0
mime-types: 2.1.35 mime-types: 2.1.35
neo-async: 2.6.2 neo-async: 2.6.2
schema-utils: 3.3.0 schema-utils: 4.3.0
tapable: 2.2.1 tapable: 2.2.1
terser-webpack-plugin: 5.3.11(webpack@5.97.1) terser-webpack-plugin: 5.3.11(webpack@5.98.0)
watchpack: 2.4.2 watchpack: 2.4.2
webpack-sources: 3.2.3 webpack-sources: 3.2.3
optionalDependencies: optionalDependencies:
webpack-cli: 6.0.1(webpack-dev-server@5.2.0)(webpack@5.97.1) webpack-cli: 6.0.1(webpack-dev-server@5.2.0)(webpack@5.98.0)
transitivePeerDependencies: transitivePeerDependencies:
- '@swc/core' - '@swc/core'
- esbuild - esbuild
@ -2647,4 +2595,4 @@ snapshots:
wildcard@2.0.1: {} wildcard@2.0.1: {}
ws@8.18.0: {} ws@8.18.1: {}