diff --git a/ic10emu/build.rs b/ic10emu/build.rs index 1acc4f9..480398a 100644 --- a/ic10emu/build.rs +++ b/ic10emu/build.rs @@ -25,7 +25,7 @@ fn write_repr_enum<'a, T: std::io::Write, I, P>( use_phf: bool, ) where P: Display + FromStr + 'a, - I: Iterator)>, + I: IntoIterator)>, { let additional_strum = if use_phf { "#[strum(use_phf)]\n" } else { "" }; write!( @@ -156,25 +156,11 @@ fn write_logictypes() { } } - write_repr_enum( - &mut writer, - "LogicType", - logictypes - .iter() - .map(|(key, variant)| (key, variant)), - true, - ); + write_repr_enum(&mut writer, "LogicType", &logictypes, true); println!("cargo:rerun-if-changed=data/logictypes.txt"); - write_repr_enum( - &mut writer, - "SlotLogicType", - slotlogictypes - .iter() - .map(|(key, variant)| (key, variant)), - true, - ); + write_repr_enum(&mut writer, "SlotLogicType", &slotlogictypes, true); println!("cargo:rerun-if-changed=data/slotlogictypes.txt"); } @@ -210,14 +196,7 @@ fn write_enums() { )); } - write_repr_enum( - &mut writer, - "LogicEnums", - enums_map - .iter() - .map(|(key, variant)| (key, variant)), - true, - ); + write_repr_enum(&mut writer, "LogicEnums", &enums_map, true); println!("cargo:rerun-if-changed=data/enums.txt"); } @@ -305,21 +284,11 @@ fn write_modes() { } } - write_repr_enum( - &mut writer, - "BatchMode", - batchmodes.iter().map(|(key, variant)| (key, variant)), - false, - ); + write_repr_enum(&mut writer, "BatchMode", &batchmodes, false); println!("cargo:rerun-if-changed=data/batchmodes.txt"); - write_repr_enum( - &mut writer, - "ReagentMode", - reagentmodes.iter().map(|(key, variant)| (key, variant)), - false, - ); + write_repr_enum(&mut writer, "ReagentMode", &reagentmodes, false); println!("cargo:rerun-if-changed=data/reagentmodes.txt"); } diff --git a/ic10emu/src/interpreter.rs b/ic10emu/src/interpreter.rs index a31b15e..568e67a 100644 --- a/ic10emu/src/interpreter.rs +++ b/ic10emu/src/interpreter.rs @@ -32,83 +32,83 @@ impl Error for LineError {} #[derive(Debug, Error, Clone, Serialize, Deserialize)] pub enum ICError { - #[error("Error Compiling Code: {0}")] + #[error("error compiling code: {0}")] ParseError(#[from] ParseError), - #[error("Duplicate label {0}")] + #[error("duplicate label {0}")] DuplicateLabel(String), - #[error("Instruction Pointer out of range: '{0}'")] + #[error("instruction pointer out of range: '{0}'")] InstructionPointerOutOfRange(u32), - #[error("Register Pointer out of range: '{0}'")] + #[error("register pointer out of range: '{0}'")] RegisterIndexOutOfRange(f64), - #[error("Device Pointer out of range: '{0}'")] + #[error("device pointer out of range: '{0}'")] DeviceIndexOutOfRange(f64), - #[error("Stack index out of range: '{0}'")] + #[error("stack index out of range: '{0}'")] StackIndexOutOfRange(f64), #[error("slot index out of range: '{0}'")] SlotIndexOutOfRange(f64), #[error("pin index {0} out of range 0-6")] PinIndexOutOfRange(usize), - #[error("Connection index {0} out of range {1}")] + #[error("connection index {0} out of range {1}")] ConnectionIndexOutOfRange(usize, usize), - #[error("Unknown device ID '{0}'")] + #[error("unknown device ID '{0}'")] UnknownDeviceID(f64), - #[error("Too few operands!: provide: '{provided}', desired: '{desired}'")] + #[error("too few operands!: provide: '{provided}', desired: '{desired}'")] TooFewOperands { provided: u32, desired: u32 }, - #[error("Too many operands!: provide: '{provided}', desired: '{desired}'")] + #[error("too many operands!: provide: '{provided}', desired: '{desired}'")] TooManyOperands { provided: u32, desired: u32 }, - #[error("Incorrect Operand Type for instruction `{inst}` operand {index}, not a {desired} ")] + #[error("incorrect operand type for instruction `{inst}` operand {index}, not a {desired} ")] IncorrectOperandType { inst: grammar::InstructionOp, index: u32, desired: String, }, - #[error("Unknown identifier {0}")] + #[error("unknown identifier {0}")] UnknownIdentifier(String), - #[error("Device Not Set")] + #[error("device Not Set")] DeviceNotSet, - #[error("Shift Underflow i64(signed long)")] + #[error("shift Underflow i64(signed long)")] ShiftUnderflowI64, - #[error("Shift Overflow i64(signed long)")] + #[error("shift Overflow i64(signed long)")] ShiftOverflowI64, - #[error("Shift Underflow i32(signed int)")] + #[error("shift underflow i32(signed int)")] ShiftUnderflowI32, - #[error("Shift Overflow i32(signed int)")] + #[error("shift overflow i32(signed int)")] ShiftOverflowI32, - #[error("Stack Underflow")] + #[error("stack underflow")] StackUnderflow, - #[error("Stack Overflow")] + #[error("stack overflow")] StackOverflow, - #[error("Duplicate Define '{0}'")] + #[error("duplicate define '{0}'")] DuplicateDefine(String), - #[error("Read Only field '{0}'")] + #[error("read only field '{0}'")] ReadOnlyField(String), - #[error("Write Only field '{0}'")] + #[error("write only field '{0}'")] WriteOnlyField(String), - #[error("Device Has No Field '{0}'")] + #[error("device has no field '{0}'")] DeviceHasNoField(String), - #[error("Device has not IC")] + #[error("device has not ic")] DeviceHasNoIC, - #[error("Unknown Device '{0}'")] - UnknownDeviceId(f64), - #[error("Unknown Logic Type '{0}'")] + #[error("unknown device '{0}'")] + unknownDeviceId(f64), + #[error("unknown logic type '{0}'")] UnknownLogicType(f64), - #[error("Unknown Slot Logic Type '{0}'")] + #[error("unknown slot logic type '{0}'")] UnknownSlotLogicType(f64), - #[error("Unknown Batch Mode '{0}'")] + #[error("unknown batch mode '{0}'")] UnknownBatchMode(f64), - #[error("Unknown Reagent Mode '{0}'")] + #[error("unknown reagent mode '{0}'")] UnknownReagentMode(f64), - #[error("Type Value Not Known")] + #[error("type value not known")] TypeValueNotKnown, - #[error("Empty Device List")] + #[error("empty device list")] EmptyDeviceList, - #[error("Connection specifier missing")] + #[error("connection specifier missing")] MissingConnectionSpecifier, - #[error("No data network on connection '{0}'")] + #[error("no data network on connection '{0}'")] NotDataConnection(usize), - #[error("Network not connected on connection '{0}'")] + #[error("network not connected on connection '{0}'")] NetworkNotConnected(usize), - #[error("Bad Network Id '{0}'")] + #[error("bad network Id '{0}'")] BadNetworkId(u32), } diff --git a/ic10emu/src/lib.rs b/ic10emu/src/lib.rs index e44a9bc..c208fed 100644 --- a/ic10emu/src/lib.rs +++ b/ic10emu/src/lib.rs @@ -18,19 +18,19 @@ use thiserror::Error; #[derive(Error, Debug, Serialize, Deserialize)] pub enum VMError { - #[error("Device with id '{0}' does not exist")] + #[error("device with id '{0}' does not exist")] UnknownId(u16), - #[error("IC with id '{0}' does not exist")] + #[error("ic with id '{0}' does not exist")] UnknownIcId(u16), - #[error("Device with id '{0}' does not have a IC Slot")] + #[error("device with id '{0}' does not have a ic slot")] NoIC(u16), - #[error("IC encountered an error: {0}")] + #[error("ic encountered an error: {0}")] ICError(#[from] ICError), - #[error("IC encountered an error: {0}")] + #[error("ic encountered an error: {0}")] LineError(#[from] LineError), - #[error("Invalid network ID {0}")] + #[error("invalid network id {0}")] InvalidNetwork(u16), - #[error("Device {0} not visible to device {1} (not on the same networks)")] + #[error("device {0} not visible to device {1} (not on the same networks)")] DeviceNotVisible(u16, u16), } @@ -867,7 +867,7 @@ impl VM { for conn in device_ref.connections.iter_mut() { if let Connection::CableNetwork(conn) = conn { - if *conn == Some(network_id) { + if conn.is_some_and(|id| id == network_id) { *conn = None; } } diff --git a/www/assets_finding.ipynb b/www/assets_finding.ipynb index 2ecc5e0..9f34731 100644 --- a/www/assets_finding.ipynb +++ b/www/assets_finding.ipynb @@ -1,8 +1,21 @@ { "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# About\n", + "\n", + "This is a notebook for finding and copying Textures form extracted game assets to named images for the item database. \n", + "\n", + "## Why not a script?\n", + "\n", + "because depending on what extractor you use and the whims of the developers all this could use some serious tweaking every run. The notebook lets you run things in stages and inspect what your working with." + ] + }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -16,32 +29,58 @@ "db = database[\"db\"]" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Item Database Pulled in" + ] + }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from pathlib import Path \n", "\n", + "# Location were https://github.com/SeriousCache/UABE has extracted all Texture2D assets\n", + "# Change as necessary\n", "datapath = Path(r\"E:\\Games\\SteamLibrary\\steamapps\\common\\Stationeers\\Stationpedia\\exported_textures\")\n" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Change this Datapath to point to the extracted textures" + ] + }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import os\n", "\n", + "# Pull in a list of all found textures\n", "images = list(datapath.glob(\"*.png\"))\n", "names = [image.name for image in images]\n" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Finding matches\n", + "\n", + "This next section loops through all the item names and collects all the candidate textures. Then, through a series of rules, attempts to narrow down the choices to 1 texture." + ] + }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -143,9 +182,16 @@ "\n" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Some Items end up with no match but these items are often subtypes of an item that will have a match" + ] + }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -157,9 +203,16 @@ " image_candidates[other] = image_candidates[name]" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Prepare out List of file copies. at this point a few items will never have a match. and one or two will have two choices but those choices will be arbitrary." + ] + }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -201,30 +254,43 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "|████████████████████████████████████████| 1223/1223 [100%] in 0.8s (1494.22/s) \n" + "1223 of 1223 | 100.00% \n", + "Done\n" ] } ], "source": [ "import shutil\n", - "from alive_progress import alive_bar\n", + "\n", "destpath = Path(\"img/stationpedia\")\n", "total_files = len(to_copy)\n", "\n", - "with alive_bar(total_files) as bar:\n", - " for name, file in to_copy:\n", - " source = datapath / file\n", - " dest = destpath / f\"{name}.png\"\n", - " shutil.copy(source, dest)\n", - " bar()\n" + "count = 0\n", + "print ( f\"{count} of {total_files} | { count / total_files * 100}\", end=\"\\r\")\n", + "for name, file in to_copy:\n", + " source = datapath / file\n", + " dest = destpath / f\"{name}.png\"\n", + " shutil.copy(source, dest)\n", + " count += 1\n", + " print ( f\"{count} of {total_files} | { (count / total_files) * 100 :.2f}% \", end=\"\\r\")\n", + "print()\n", + "print(\"Done\")\n", + "\n" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/www/package.json b/www/package.json index e33c009..02beaec 100644 --- a/www/package.json +++ b/www/package.json @@ -32,7 +32,10 @@ "copy-webpack-plugin": "^12.0.2", "css-loader": "^6.10.0", "css-minimizer-webpack-plugin": "^6.0.0", + "esbuild": "^0.20.2", + "esbuild-loader": "^4.1.0", "extract-loader": "^5.1.0", + "fork-ts-checker-webpack-plugin": "^9.0.2", "hello-wasm-pack": "^0.1.0", "html-webpack-plugin": "^5.6.0", "image-minimizer-webpack-plugin": "^4.0.0", @@ -47,6 +50,7 @@ "sass": "^1.72.0", "sass-loader": "^14.1.1", "style-loader": "^3.3.4", + "thread-loader": "^4.0.2", "ts-lit-plugin": "^2.0.2", "ts-loader": "^9.5.1", "typescript": "^5.4.3", diff --git a/www/pnpm-lock.yaml b/www/pnpm-lock.yaml index 01b0a03..e4c2908 100644 --- a/www/pnpm-lock.yaml +++ b/www/pnpm-lock.yaml @@ -84,10 +84,19 @@ devDependencies: version: 6.10.0(webpack@5.91.0) css-minimizer-webpack-plugin: specifier: ^6.0.0 - version: 6.0.0(webpack@5.91.0) + version: 6.0.0(esbuild@0.20.2)(webpack@5.91.0) + esbuild: + specifier: ^0.20.2 + version: 0.20.2 + esbuild-loader: + specifier: ^4.1.0 + version: 4.1.0(webpack@5.91.0) extract-loader: specifier: ^5.1.0 version: 5.1.0 + fork-ts-checker-webpack-plugin: + specifier: ^9.0.2 + version: 9.0.2(typescript@5.4.3)(webpack@5.91.0) hello-wasm-pack: specifier: ^0.1.0 version: 0.1.0 @@ -130,6 +139,9 @@ devDependencies: style-loader: specifier: ^3.3.4 version: 3.3.4(webpack@5.91.0) + thread-loader: + specifier: ^4.0.2 + version: 4.0.2(webpack@5.91.0) ts-lit-plugin: specifier: ^2.0.2 version: 2.0.2 @@ -144,7 +156,7 @@ devDependencies: version: 0.9.0 webpack: specifier: ^5.91.0 - version: 5.91.0(webpack-cli@5.1.4) + version: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) webpack-cli: specifier: ^5.1.4 version: 5.1.4(webpack-dev-server@5.0.4)(webpack@5.91.0) @@ -198,6 +210,213 @@ packages: resolution: {integrity: sha512-Ce3xE2JvTSEbASFbRbA1gAIcMcZWdS2yUYRaQbeM0nbOzaZrUYfa3ePtcriYRZOZmr+CkKA+zbjhvTpIOAYVcw==} dev: true + /@esbuild/aix-ppc64@0.20.2: + resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm64@0.20.2: + resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.20.2: + resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.20.2: + resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.20.2: + resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.20.2: + resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.20.2: + resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.20.2: + resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.20.2: + resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.20.2: + resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.20.2: + resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.20.2: + resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.20.2: + resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.20.2: + resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.20.2: + resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.20.2: + resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.20.2: + resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.20.2: + resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.20.2: + resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.20.2: + resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.20.2: + resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.20.2: + resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.20.2: + resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@floating-ui/core@1.6.0: resolution: {integrity: sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==} dependencies: @@ -739,7 +958,7 @@ packages: webpack: 5.x.x webpack-cli: 5.x.x dependencies: - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-dev-server@5.0.4)(webpack@5.91.0) dev: true @@ -750,7 +969,7 @@ packages: webpack: 5.x.x webpack-cli: 5.x.x dependencies: - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-dev-server@5.0.4)(webpack@5.91.0) dev: true @@ -765,7 +984,7 @@ packages: webpack-dev-server: optional: true dependencies: - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-dev-server@5.0.4)(webpack@5.91.0) webpack-dev-server: 5.0.4(webpack-cli@5.1.4)(webpack@5.91.0) dev: true @@ -2137,7 +2356,7 @@ packages: normalize-path: 3.0.0 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) dev: true /core-js@2.6.12: @@ -2149,6 +2368,22 @@ packages: /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + /cosmiconfig@8.3.6(typescript@5.4.3): + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + typescript: 5.4.3 + dev: true + /cosmiconfig@9.0.0(typescript@5.4.3): resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} engines: {node: '>=14'} @@ -2266,10 +2501,10 @@ packages: postcss-modules-values: 4.0.0(postcss@8.4.38) postcss-value-parser: 4.2.0 semver: 7.6.0 - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) dev: true - /css-minimizer-webpack-plugin@6.0.0(webpack@5.91.0): + /css-minimizer-webpack-plugin@6.0.0(esbuild@0.20.2)(webpack@5.91.0): resolution: {integrity: sha512-BLpR9CCDkKvhO3i0oZQgad6v9pCxUuhSc5RT6iUEy9M8hBXi4TJb5vqF2GQ2deqYHmRi3O6IR9hgAZQWg0EBwA==} engines: {node: '>= 18.12.0'} peerDependencies: @@ -2296,11 +2531,12 @@ packages: dependencies: '@jridgewell/trace-mapping': 0.3.25 cssnano: 6.1.2(postcss@8.4.38) + esbuild: 0.20.2 jest-worker: 29.7.0 postcss: 8.4.38 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) dev: true /css-select@4.3.0: @@ -2535,6 +2771,11 @@ packages: strip-dirs: 2.1.0 dev: true + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: true + /default-browser-id@5.0.0: resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} engines: {node: '>=18'} @@ -2833,6 +3074,49 @@ packages: resolution: {integrity: sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==} dev: true + /esbuild-loader@4.1.0(webpack@5.91.0): + resolution: {integrity: sha512-543TtIvqbqouEMlOHg4xKoDQkmdImlwIpyAIgpUtDPvMuklU/c2k+Qt2O3VeDBgAwozxmlEbjOzV+F8CZ0g+Bw==} + peerDependencies: + webpack: ^4.40.0 || ^5.0.0 + dependencies: + esbuild: 0.20.2 + get-tsconfig: 4.7.3 + loader-utils: 2.0.4 + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) + webpack-sources: 1.4.3 + dev: true + + /esbuild@0.20.2: + resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.20.2 + '@esbuild/android-arm': 0.20.2 + '@esbuild/android-arm64': 0.20.2 + '@esbuild/android-x64': 0.20.2 + '@esbuild/darwin-arm64': 0.20.2 + '@esbuild/darwin-x64': 0.20.2 + '@esbuild/freebsd-arm64': 0.20.2 + '@esbuild/freebsd-x64': 0.20.2 + '@esbuild/linux-arm': 0.20.2 + '@esbuild/linux-arm64': 0.20.2 + '@esbuild/linux-ia32': 0.20.2 + '@esbuild/linux-loong64': 0.20.2 + '@esbuild/linux-mips64el': 0.20.2 + '@esbuild/linux-ppc64': 0.20.2 + '@esbuild/linux-riscv64': 0.20.2 + '@esbuild/linux-s390x': 0.20.2 + '@esbuild/linux-x64': 0.20.2 + '@esbuild/netbsd-x64': 0.20.2 + '@esbuild/openbsd-x64': 0.20.2 + '@esbuild/sunos-x64': 0.20.2 + '@esbuild/win32-arm64': 0.20.2 + '@esbuild/win32-ia32': 0.20.2 + '@esbuild/win32-x64': 0.20.2 + dev: true + /escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} @@ -3206,6 +3490,29 @@ packages: signal-exit: 4.1.0 dev: true + /fork-ts-checker-webpack-plugin@9.0.2(typescript@5.4.3)(webpack@5.91.0): + resolution: {integrity: sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==} + engines: {node: '>=12.13.0', yarn: '>=1.0.0'} + peerDependencies: + typescript: '>3.6.0' + webpack: ^5.11.0 + dependencies: + '@babel/code-frame': 7.24.2 + chalk: 4.1.2 + chokidar: 3.6.0 + cosmiconfig: 8.3.6(typescript@5.4.3) + deepmerge: 4.3.1 + fs-extra: 10.1.0 + memfs: 3.5.3 + minimatch: 3.1.2 + node-abort-controller: 3.1.1 + schema-utils: 3.3.0 + semver: 7.6.0 + tapable: 2.2.1 + typescript: 5.4.3 + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) + dev: true + /forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -3231,6 +3538,19 @@ packages: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} dev: true + /fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: true + + /fs-monkey@1.0.5: + resolution: {integrity: sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==} + dev: true + /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -3299,6 +3619,12 @@ packages: engines: {node: '>=10'} dev: true + /get-tsconfig@4.7.3: + resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} + dependencies: + resolve-pkg-maps: 1.0.0 + dev: true + /gifsicle@5.3.0: resolution: {integrity: sha512-FJTpgdj1Ow/FITB7SVza5HlzXa+/lqEY0tHQazAJbuAdvyJtkH4wIdsR2K414oaTwRXHFLLF+tYbipj+OpYg+Q==} engines: {node: '>=10'} @@ -3587,7 +3913,7 @@ packages: lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) dev: true /htmlhint@1.1.4: @@ -3729,7 +4055,7 @@ packages: imagemin: 8.0.1 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) dev: true /imagemin-gifsicle@7.0.0: @@ -4106,6 +4432,10 @@ packages: resolution: {integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==} dev: true + /json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + dev: true + /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: true @@ -4130,6 +4460,12 @@ packages: minimist: 1.2.8 dev: true + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: true + /jsonc-parser@1.0.3: resolution: {integrity: sha512-hk/69oAeaIzchq/v3lS50PXuzn5O2ynldopMC+SWBql7J2WtdptfB9dy8Y7+Og5rPkTCpn83zTiO8FMcqlXJ/g==} dev: true @@ -4138,6 +4474,14 @@ packages: resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} dev: false + /jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + dev: true + /junk@3.1.0: resolution: {integrity: sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==} engines: {node: '>=8'} @@ -4210,7 +4554,7 @@ packages: webpack: ^5.37.1 dependencies: clean-css: 4.2.4 - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) dev: true /lit@3.1.2: @@ -4246,6 +4590,15 @@ packages: json5: 1.0.2 dev: true + /loader-utils@2.0.4: + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 2.2.3 + dev: true + /locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -4388,6 +4741,13 @@ packages: engines: {node: '>= 0.6'} dev: true + /memfs@3.5.3: + resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} + engines: {node: '>= 4.0.0'} + dependencies: + fs-monkey: 1.0.5 + dev: true + /memfs@4.8.1: resolution: {integrity: sha512-7q/AdPzf2WpwPlPL4v1kE2KsJsHl7EF4+hAeVzlyanr2+YnR21NVn9mDqo+7DEaKDRsQy8nvxPlKH4WqMtiO0w==} engines: {node: '>= 4.0.0'} @@ -4487,7 +4847,7 @@ packages: dependencies: schema-utils: 4.2.0 tapable: 2.2.1 - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) dev: true /minimalistic-assert@1.0.1: @@ -4571,6 +4931,10 @@ packages: tslib: 2.6.2 dev: true + /node-abort-controller@3.1.1: + resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} + dev: true + /node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -5087,7 +5451,7 @@ packages: jiti: 1.21.0 postcss: 8.4.38 semver: 7.6.0 - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) transitivePeerDependencies: - typescript dev: true @@ -5647,6 +6011,10 @@ packages: engines: {node: '>=8'} dev: true + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: true + /resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -5738,7 +6106,7 @@ packages: dependencies: neo-async: 2.6.2 sass: 1.72.0 - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) dev: true /sass@1.72.0: @@ -6006,6 +6374,10 @@ packages: is-plain-obj: 1.1.0 dev: true + /source-list-map@2.0.1: + resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} + dev: true + /source-map-js@1.2.0: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} @@ -6233,7 +6605,7 @@ packages: peerDependencies: webpack: ^5.0.0 dependencies: - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) dev: true /stylehacks@6.1.1(postcss@8.4.38): @@ -6336,7 +6708,7 @@ packages: uuid: 3.4.0 dev: true - /terser-webpack-plugin@5.3.10(webpack@5.91.0): + /terser-webpack-plugin@5.3.10(esbuild@0.20.2)(webpack@5.91.0): resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -6353,11 +6725,12 @@ packages: optional: true dependencies: '@jridgewell/trace-mapping': 0.3.25 + esbuild: 0.20.2 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.30.0 - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) dev: true /terser@5.30.0: @@ -6371,6 +6744,19 @@ packages: source-map-support: 0.5.21 dev: true + /thread-loader@4.0.2(webpack@5.91.0): + resolution: {integrity: sha512-UOk/KBydsQjh4Ja5kocxDUzhv11KYptHN/h8gdSwo6/MBkYrWqQua6K2qwlpXnCXS9c/uLs8F/JF8rpveF0+fA==} + engines: {node: '>= 16.10.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + json-parse-better-errors: 1.0.2 + loader-runner: 4.3.0 + neo-async: 2.6.2 + schema-utils: 4.2.0 + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) + dev: true + /through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true @@ -6455,7 +6841,7 @@ packages: semver: 7.6.0 source-map: 0.7.4 typescript: 5.4.3 - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) dev: true /ts-simple-type@2.0.0-next.0: @@ -6531,6 +6917,11 @@ packages: engines: {node: '>=18'} dev: true + /universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + dev: true + /unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} @@ -6793,7 +7184,7 @@ packages: import-local: 3.1.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) webpack-dev-server: 5.0.4(webpack-cli@5.1.4)(webpack@5.91.0) webpack-merge: 5.10.0 dev: true @@ -6813,7 +7204,7 @@ packages: on-finished: 2.4.1 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) dev: true /webpack-dev-server@5.0.4(webpack-cli@5.1.4)(webpack@5.91.0): @@ -6857,7 +7248,7 @@ packages: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-dev-server@5.0.4)(webpack@5.91.0) webpack-dev-middleware: 7.2.0(webpack@5.91.0) ws: 8.16.0 @@ -6877,12 +7268,19 @@ packages: wildcard: 2.0.1 dev: true + /webpack-sources@1.4.3: + resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} + dependencies: + source-list-map: 2.0.1 + source-map: 0.6.1 + dev: true + /webpack-sources@3.2.3: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} dev: true - /webpack@5.91.0(webpack-cli@5.1.4): + /webpack@5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4): resolution: {integrity: sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==} engines: {node: '>=10.13.0'} hasBin: true @@ -6913,7 +7311,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(webpack@5.91.0) + terser-webpack-plugin: 5.3.10(esbuild@0.20.2)(webpack@5.91.0) watchpack: 2.4.1 webpack-cli: 5.1.4(webpack-dev-server@5.0.4)(webpack@5.91.0) webpack-sources: 3.2.3 diff --git a/www/src/ts/editor/ace.ts b/www/src/ts/editor/ace.ts index 6734181..1eca64d 100644 --- a/www/src/ts/editor/ace.ts +++ b/www/src/ts/editor/ace.ts @@ -21,8 +21,6 @@ export async function setupLspWorker() { } export import Ace = ace.Ace; -export import EditSession = ace.Ace.EditSession; -export import Editor = ace.Ace.Editor; import { Range } from "ace-builds"; export { ace, TextMode, Range, AceLanguageClient } diff --git a/www/src/ts/editor/index.ts b/www/src/ts/editor/index.ts index 5fbb421..8c170b6 100644 --- a/www/src/ts/editor/index.ts +++ b/www/src/ts/editor/index.ts @@ -1,8 +1,6 @@ import { ace, Ace, - Editor, - EditSession, Range, AceLanguageClient, setupLspWorker, @@ -45,7 +43,7 @@ export class IC10Editor extends BaseElement { fontSize: number; relativeLineNumbers: boolean; }; - sessions: Map; + sessions: Map; @property({ type: Number }) accessor active_session: number = 0; @@ -60,7 +58,7 @@ export class IC10Editor extends BaseElement { editorDiv: HTMLElement; editorContainerDiv: HTMLElement; editorStatusbarDiv: HTMLElement; - editor: Editor; + editor: Ace.Editor; statusBar: any; snippetManager: any; observer: ResizeObserver; @@ -353,7 +351,7 @@ export class IC10Editor extends BaseElement { name: "showSettingsMenu", // description: "Show settings menu", bindKey: { win: "Ctrl-,", mac: "Command-," }, - exec: (_editor: Editor) => { + exec: (_editor: Ace.Editor) => { that.settingDialog.show(); }, }, @@ -363,7 +361,7 @@ export class IC10Editor extends BaseElement { win: "Ctrl-Alt-h", mac: "Command-Alt-h", }, - exec: (_editor: Editor) => { + exec: (_editor: Ace.Editor) => { that.kbShortcuts.show(); }, }, @@ -581,7 +579,7 @@ export class IC10Editor extends BaseElement { return true; } - bindSession(session_id: number, session?: EditSession) { + bindSession(session_id: number, session?: Ace.EditSession) { if (session) { session.on("change", () => { var val = session.getValue(); diff --git a/www/src/ts/editor/shortcuts_ui.ts b/www/src/ts/editor/shortcuts_ui.ts index dee8087..9172a39 100644 --- a/www/src/ts/editor/shortcuts_ui.ts +++ b/www/src/ts/editor/shortcuts_ui.ts @@ -1,7 +1,7 @@ import { BaseElement, defaultCss } from "../components"; import { html, css, PropertyValueMap } from "lit"; import { customElement, property, query } from "lit/decorators.js"; -import { ace, Editor } from "./ace"; +import { ace, Ace } from "./ace"; import "@shoelace-style/shoelace/dist/components/drawer/drawer.js"; @@ -28,7 +28,7 @@ export class AceKeyboardShortcuts extends BaseElement { `, ]; - editor?: Editor; + editor?: Ace.Editor; @query('.drawer') accessor drawer: SlDrawer; constructor() { diff --git a/www/src/ts/virtual_machine/index.ts b/www/src/ts/virtual_machine/index.ts index 46da1ab..e4ecf06 100644 --- a/www/src/ts/virtual_machine/index.ts +++ b/www/src/ts/virtual_machine/index.ts @@ -256,4 +256,4 @@ class VirtualMachine extends EventTarget { } } -export { VirtualMachine, DeviceDB }; +export { VirtualMachine }; diff --git a/www/tsconfig.json b/www/tsconfig.json index e4c6c44..9661d95 100644 --- a/www/tsconfig.json +++ b/www/tsconfig.json @@ -8,10 +8,9 @@ "allowJs": true, "moduleResolution": "bundler", "resolveJsonModule": true, - "types": [ - "@types/wicg-file-system-access", - "@types/ace" - ], + "isolatedModules": true, + "experimentalDecorators": true, + "types": ["@types/wicg-file-system-access", "@types/ace"], "plugins": [ { "name": "ts-lit-plugin" @@ -21,7 +20,5 @@ } ] }, - "include": [ - "node_modules/lit-scss-loader/types.d.ts" - ] + "include": ["src/**/*", "node_modules/lit-scss-loader/types.d.ts"] } diff --git a/www/webpack.config.js b/www/webpack.config.js index d8238b8..2c1fc0f 100644 --- a/www/webpack.config.js +++ b/www/webpack.config.js @@ -1,6 +1,7 @@ const CopyWebpackPlugin = require("copy-webpack-plugin"); const HtmlWebpackPlugin = require("html-webpack-plugin"); const miniCssExtractPlugin = require("mini-css-extract-plugin"); +const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin"); const { SourceMap } = require("module"); const path = require("path"); @@ -20,6 +21,7 @@ module.exports = { mode: "development", devtool: "eval-source-map", plugins: [ + new ForkTsCheckerWebpackPlugin(), new CopyWebpackPlugin({ patterns: [ "img/*.png", @@ -41,9 +43,13 @@ module.exports = { module: { rules: [ { - test: /\.tsx?$/, - use: "ts-loader", + test: /\.[jt]sx?$/, exclude: /node_modules/, + loader: "esbuild-loader", + options: { + target: "es2021", + tsconfig: "./tsconfig.json", + }, }, { test: /\.(jpg|png|svg|gif)$/, @@ -110,5 +116,5 @@ module.exports = { }, optimization: { chunkIds: "named", - } + }, }; diff --git a/www/webpack.config.prod.js b/www/webpack.config.prod.js index 3f8d0a7..744ea87 100644 --- a/www/webpack.config.prod.js +++ b/www/webpack.config.prod.js @@ -2,7 +2,9 @@ const CopyWebpackPlugin = require("copy-webpack-plugin"); const HtmlWebpackPlugin = require("html-webpack-plugin"); const CssMinimizerPlugin = require("css-minimizer-webpack-plugin"); const miniCssExtractPlugin = require("mini-css-extract-plugin"); +const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin"); const ImageMinimizerPlugin = require("image-minimizer-webpack-plugin"); +const { EsbuildPlugin } = require("esbuild-loader"); const path = require("path"); @@ -16,6 +18,7 @@ module.exports = { mode: "production", devtool: "source-map", plugins: [ + new ForkTsCheckerWebpackPlugin(), new CopyWebpackPlugin({ patterns: [ "img/*.png", @@ -37,9 +40,13 @@ module.exports = { module: { rules: [ { - test: /\.tsx?$/, - use: "ts-loader", + test: /\.[jt]sx?$/, exclude: /node_modules/, + loader: "esbuild-loader", + options: { + target: "es2021", + tsconfig: "./tsconfig.json", + }, }, { test: /\.(jpg|png|svg|gif)$/, @@ -56,6 +63,13 @@ module.exports = { // translates CSS into CommonJS modules loader: "css-loader", }, + { + loader: "esbuild-loader", + options: { + loader: 'css', + minify: true, + }, + }, { // Run postcss actions loader: "postcss-loader", @@ -75,9 +89,6 @@ module.exports = { loader: "sass-loader", }, ], - // parser: { - // javascript : { importMeta: false } - // } }, ], }, @@ -96,8 +107,10 @@ module.exports = { }, optimization: { minimizer: [ - `...`, - new CssMinimizerPlugin(), + new EsbuildPlugin({ + target: "es2021", // Syntax to transpile to (see options below for possible values) + css: true, + }), new ImageMinimizerPlugin({ minimizer: { implementation: ImageMinimizerPlugin.imageminMinify,