From 98168ddcf1dcbdd6e166fc8e4fc80a23ed36d3c8 Mon Sep 17 00:00:00 2001 From: Jamie Winsor Date: Thu, 17 Dec 2015 18:24:09 -0800 Subject: [PATCH 001/316] Initial commit --- libraries/libarchive/.gitignore | 4 + libraries/libarchive/.travis.yml | 21 + libraries/libarchive/Cargo.toml | 13 + libraries/libarchive/LICENSE | 21 + libraries/libarchive/README.md | 39 ++ libraries/libarchive/src/archive.rs | 225 ++++++++++ libraries/libarchive/src/error.rs | 36 ++ libraries/libarchive/src/lib.rs | 7 + libraries/libarchive/src/reader.rs | 407 ++++++++++++++++++ libraries/libarchive/src/writer.rs | 339 +++++++++++++++ .../libarchive/tests/fixtures/sample.tar.gz | Bin 0 -> 148 bytes libraries/libarchive/tests/lib.rs | 97 +++++ libraries/libarchive/tests/util/mod.rs | 1 + libraries/libarchive/tests/util/path.rs | 18 + 14 files changed, 1228 insertions(+) create mode 100644 libraries/libarchive/.gitignore create mode 100644 libraries/libarchive/.travis.yml create mode 100644 libraries/libarchive/Cargo.toml create mode 100644 libraries/libarchive/LICENSE create mode 100644 libraries/libarchive/README.md create mode 100644 libraries/libarchive/src/archive.rs create mode 100644 libraries/libarchive/src/error.rs create mode 100644 libraries/libarchive/src/lib.rs create mode 100644 libraries/libarchive/src/reader.rs create mode 100644 libraries/libarchive/src/writer.rs create mode 100644 libraries/libarchive/tests/fixtures/sample.tar.gz create mode 100644 libraries/libarchive/tests/lib.rs create mode 100644 libraries/libarchive/tests/util/mod.rs create mode 100644 libraries/libarchive/tests/util/path.rs diff --git a/libraries/libarchive/.gitignore b/libraries/libarchive/.gitignore new file mode 100644 index 00000000..866ed041 --- /dev/null +++ b/libraries/libarchive/.gitignore @@ -0,0 +1,4 @@ +target +Cargo.lock +.tags +.tags1 diff --git a/libraries/libarchive/.travis.yml b/libraries/libarchive/.travis.yml new file mode 100644 index 00000000..68e89ccb --- /dev/null +++ b/libraries/libarchive/.travis.yml @@ -0,0 +1,21 @@ +language: rust +rust: stable +sudo: false +addons: + apt: + packages: + - libarchive13 +script: +- cargo build +- cargo test +- cargo doc +after_success: | + [ $TRAVIS_BRANCH = master ] && + [ $TRAVIS_PULL_REQUEST = false ] && + echo '' > target/doc/index.html && + pip install --user ghp-import && + $HOME/.local/bin/ghp-import -n target/doc && + git push -qf https://${GH_TOKEN}@github.com/${TRAVIS_REPO_SLUG}.git gh-pages +env: + global: + secure: KKPYXC3dn8CR8YRPuqkBSEu9VUjt7qSTLENnPYz4B2+lFT0iI265MqZGaHFhBv3YHjV/ONjvOj6Tn1l1JFIzLyBbiJ9EeY/5u/kh+tN2fjR8AniaqPG+SZuRERZwe92T/8xr+fGdzlG9hKr7XgAXQAdB7hAlQoU+cuiwuB0+FDMBciDELnLokIRCoKzW0LSY5EvQQ2BkPHuWv3n04isd7WF11IsidqN0HMDtSaVSC6FbfpW/MdlRqVzey/VxG/BpY0FWvCkRayB7NVLEWXtr/rWyn3jY6pKqev+I0w6eIL/hvKrQUrmSP3y0RJcCgq/7asdNQDeIFXbT1emFXw3dKmA9ZdSzBnm5Z2NO18DNAb3yUQjCJztSWaCfyEbKFbrV/V6cl8I61gHzGzS8kWG8kAbC6dSQxaAtm3wrcrPI1q4bHj0JAXJ27ICKAHoxMUWX50+tMZDchv8exQjBPu35gPi+5tJGCuGeSnZ33w+XHPTdJtb1Hqt87CSEs8umJyZbjT/NpIWzgKJz/2dTX1dpvEnJ0THRMTd2W2TQra9Y9e6GxUZlV6MVI6pDSBKdee6fGTxAtfmVzgL6Bfey5vP+70RanHmLTN/FJXw/thEfZaSsZnK298XsmJ6WXksCEBo40E0wINDe6R7R4egzTzoFqUzsv/uPNu/0QXXrM8DWTo4= diff --git a/libraries/libarchive/Cargo.toml b/libraries/libarchive/Cargo.toml new file mode 100644 index 00000000..f0d1c70a --- /dev/null +++ b/libraries/libarchive/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "libarchive" +version = "0.1.0" +authors = ["Jamie Winsor "] +license = "MIT" +repository = "https://github.com/reset/libarchive-rust" + +[dependencies] +libc = "*" + +[dependencies.libarchive3-sys] +git = "https://github.com/reset/libarchive3-sys" +branch = "master" diff --git a/libraries/libarchive/LICENSE b/libraries/libarchive/LICENSE new file mode 100644 index 00000000..55c6a20f --- /dev/null +++ b/libraries/libarchive/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015 Jamie Winsor + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/libraries/libarchive/README.md b/libraries/libarchive/README.md new file mode 100644 index 00000000..0336b5d8 --- /dev/null +++ b/libraries/libarchive/README.md @@ -0,0 +1,39 @@ +# libarchive-rust + +[![Build Status](https://travis-ci.org/reset/libarchive-rust.svg?branch=master)](https://travis-ci.org/reset/libarchive-rust) +[![crates.io](https://meritbadge.herokuapp.com/gpgme)](https://crates.io/crates/libarchive) + +A Rust crate for interacting with archives using [libarchive](http://www.libarchive.org) + +[Documentation](http://reset.github.io/libarchive-rust) + +## Requirements + +Version 3 of libarchive is required to use this library. + +The required libraries and binaries can be installed by running: + +#### Debian / Ubuntu +```shell +$ sudo apt-get install libarchive13 +``` + +#### Mac OS X +```shell +$ brew install libarchive +``` + +## Usage + +Put this in your `Cargo.toml`: + +```toml +[dependencies] +libarchive = "*" +``` + +And this in your crate root: + +```rust +extern crate libarchive; +``` diff --git a/libraries/libarchive/src/archive.rs b/libraries/libarchive/src/archive.rs new file mode 100644 index 00000000..06163780 --- /dev/null +++ b/libraries/libarchive/src/archive.rs @@ -0,0 +1,225 @@ +use std::default::Default; +use std::str; +use std::ffi::CStr; + +use libarchive3_sys::ffi; + +pub enum ReadCompression { + All, + Bzip2, + Compress, + Gzip, + Lzip, + Lzma, + None, + Program(String), + Rpm, + Uu, + Xz, +} + +pub enum ReadFormat { + SevenZip, + All, + Ar, + Cab, + Cpio, + Empty, + Gnutar, + Iso9660, + Lha, + Mtree, + Rar, + Raw, + Tar, + Xar, + Zip, +} + +pub enum ReadFilter { + All, + Bzip2, + Compress, + Gzip, + Grzip, + Lrzip, + Lzip, + Lzma, + Lzop, + None, + Program(String), + ProgramSignature(String, Option ()>, usize), + Rpm, + Uu, + Xz, +} + +pub enum WriteFormat { + SevenZip, + ArBsd, + ArSvr4, + Cpio, + CpioNewc, + Gnutar, + Iso9660, + Mtree, + MtreeClassic, + Pax, + PaxRestricted, + Shar, + SharDump, + Ustar, + V7tar, + Xar, + Zip, +} + +pub enum WriteFilter { + B64Encode, + Bzip2, + Compress, + Grzip, + Gzip, + Lrzip, + Lzip, + Lzma, + Lzop, + None, + Program(String), + UuEncode, + Xz, +} + +pub trait Handle { + unsafe fn handle(&self) -> *mut ffi::Struct_archive; + + fn err_code(&self) -> i32 { + unsafe { ffi::archive_errno(self.handle()) } + } + + fn err_msg(&self) -> String { + unsafe { + let c_str = CStr::from_ptr(ffi::archive_error_string(self.handle())); + let buf = c_str.to_bytes(); + String::from(str::from_utf8(buf).unwrap()) + } + } +} + +pub trait Entry { + unsafe fn entry(&self) -> *mut ffi::Struct_archive_entry; + + fn pathname(&self) -> &str { + let c_str: &CStr = unsafe { CStr::from_ptr(ffi::archive_entry_pathname(self.entry())) }; + let buf: &[u8] = c_str.to_bytes(); + str::from_utf8(buf).unwrap() + } + + fn size(&self) -> i64 { + unsafe { ffi::archive_entry_size(self.entry()) } + } +} + +pub enum ExtractOption { + // The user and group IDs should be set on the restored file. By default, the user and group + // IDs are not restored. + Owner, + // Full permissions (including SGID, SUID, and sticky bits) should be restored exactly as + // specified, without obeying the current umask. Note that SUID and SGID bits can only be + // restored if the user and group ID of the object on disk are correct. If + // `ExtractOption::Owner` is not specified, then SUID and SGID bits will only be restored if + // the default user and group IDs of newly-created objects on disk happen to match those + // specified in the archive entry. By default, only basic permissions are restored, and umask + // is obeyed. + Permissions, + // The timestamps (mtime, ctime, and atime) should be restored. By default, they are ignored. + // Note that restoring of atime is not currently supported. + Time, + // Existing files on disk will not be overwritten. By default, existing regular files are + // truncated and overwritten; existing directories will have their permissions updated; other + // pre-existing objects are unlinked and recreated from scratch. + NoOverwrite, + // Existing files on disk will be unlinked before any attempt to create them. In some cases, + // this can prove to be a significant performance improvement. By default, existing files are + // truncated and rewritten, but the file is not recreated. In particular, the default behavior + // does not break existing hard links. + Unlink, + // Attempt to restore ACLs. By default, extended ACLs are ignored. + ACL, + // Attempt to restore extended file flags. By default, file flags are ignored. + FFlags, + // Attempt to restore POSIX.1e extended attributes. By default, they are ignored. + XAttr, + // Refuse to extract any object whose final location would be altered by a symlink on disk. + // This is intended to help guard against a variety of mischief caused by archives that + // (deliberately or otherwise) extract files outside of the current directory. The default is + // not to perform this check. If ARCHIVE_EXTRACT_UNLINK is specified together with this option, + // the library will remove any intermediate symlinks it finds and return an error only if such + // symlink could not be removed. + SecureSymlinks, + // Refuse to extract a path that contains a `..` element anywhere within it. The default is to + // not refuse such paths. Note that paths ending in `..` always cause an error, regardless of + // this flag. + SecureNoDotDot, + // Default: Create parent directories as needed + NoAutoDir, + // Default: Overwrite files, even if one on disk is newer + NoOverwriteNewer, + // Scan data for blocks of NUL bytes and try to recreate them with holes. This results in + // sparse files, independent of whether the archive format supports or uses them. + Sparse, + // Default: Do not restore Mac extended metadata + // This has no effect except on Mac OS + MacMetadata, + // Default: Use HFS+ compression if it was compressed + // This has no effect except on Mac OS v10.6 or later + NoHFSCompression, + // Default: Do not use HFS+ compression if it was not compressed + // This has no effect except on Mac OS v10.6 or later + HFSCompressionForced, + // Default: Do not reject entries with absolute paths */ + SecureNoAbsolutePaths, + // Default: Do not clear no-change flags when unlinking object */ + ClearNoChangeFFlags, +} + +pub struct ExtractOptions { + pub flags: i32, +} + +impl ExtractOptions { + pub fn new() -> Self { + ExtractOptions::default() + } + + pub fn add(&mut self, opt: ExtractOption) -> &mut Self { + let flag = match opt { + ExtractOption::Owner => ffi::ARCHIVE_EXTRACT_OWNER, + ExtractOption::Permissions => ffi::ARCHIVE_EXTRACT_PERM, + ExtractOption::Time => ffi::ARCHIVE_EXTRACT_TIME, + ExtractOption::NoOverwrite => ffi::ARCHIVE_EXTRACT_NO_OVERWRITE, + ExtractOption::Unlink => ffi::ARCHIVE_EXTRACT_UNLINK, + ExtractOption::ACL => ffi::ARCHIVE_EXTRACT_ACL, + ExtractOption::FFlags => ffi::ARCHIVE_EXTRACT_FFLAGS, + ExtractOption::XAttr => ffi::ARCHIVE_EXTRACT_XATTR, + ExtractOption::SecureSymlinks => ffi::ARCHIVE_EXTRACT_SECURE_SYMLINKS, + ExtractOption::SecureNoDotDot => ffi::ARCHIVE_EXTRACT_SECURE_NODOTDOT, + ExtractOption::NoAutoDir => ffi::ARCHIVE_EXTRACT_NO_AUTODIR, + ExtractOption::NoOverwriteNewer => ffi::ARCHIVE_EXTRACT_NO_OVERWRITE_NEWER, + ExtractOption::Sparse => ffi::ARCHIVE_EXTRACT_SPARSE, + ExtractOption::MacMetadata => ffi::ARCHIVE_EXTRACT_MAC_METADATA, + ExtractOption::NoHFSCompression => ffi::ARCHIVE_EXTRACT_NO_HFS_COMPRESSION, + ExtractOption::HFSCompressionForced => ffi::ARCHIVE_EXTRACT_HFS_COMPRESSION_FORCED, + ExtractOption::SecureNoAbsolutePaths => ffi::ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS, + ExtractOption::ClearNoChangeFFlags => ffi::ARCHIVE_EXTRACT_CLEAR_NOCHANGE_FFLAGS, + }; + self.flags |= flag; + self + } +} + +impl Default for ExtractOptions { + fn default() -> ExtractOptions { + ExtractOptions { flags: 0 } + } +} diff --git a/libraries/libarchive/src/error.rs b/libraries/libarchive/src/error.rs new file mode 100644 index 00000000..88ff4ea1 --- /dev/null +++ b/libraries/libarchive/src/error.rs @@ -0,0 +1,36 @@ +use archive; + +pub type ArchiveResult = Result; + +#[derive(Debug)] +pub struct ErrCode(i32); + +#[derive(Debug)] +pub enum ArchiveError { + Consumed, + Sys(ErrCode, String), + ReadFailure, + WriteFailure, + HeaderPosition, +} + +impl<'a> From<&'a archive::Handle> for ArchiveError { + fn from(handle: &'a archive::Handle) -> ArchiveError { + ArchiveError::Sys(ErrCode::from(handle), handle.err_msg()) + } +} + +impl<'a> From<&'a archive::Handle> for ErrCode { + fn from(handle: &'a archive::Handle) -> ErrCode { + ErrCode(handle.err_code()) + } +} + +impl<'a> From<&'a archive::Handle> for ArchiveResult<()> { + fn from(handle: &'a archive::Handle) -> ArchiveResult<()> { + match handle.err_code() { + 0 => Ok(()), + _ => Err(ArchiveError::from(handle)), + } + } +} diff --git a/libraries/libarchive/src/lib.rs b/libraries/libarchive/src/lib.rs new file mode 100644 index 00000000..c24af2f9 --- /dev/null +++ b/libraries/libarchive/src/lib.rs @@ -0,0 +1,7 @@ +extern crate libc; +extern crate libarchive3_sys; + +pub mod archive; +pub mod error; +pub mod reader; +pub mod writer; diff --git a/libraries/libarchive/src/reader.rs b/libraries/libarchive/src/reader.rs new file mode 100644 index 00000000..45bb1d76 --- /dev/null +++ b/libraries/libarchive/src/reader.rs @@ -0,0 +1,407 @@ +use std::any::Any; +use std::default::Default; +use std::error::Error; +use std::ffi::CString; +use std::io::{self, Read}; +use std::mem; +use std::path::Path; +use std::ptr; + +use libc::{c_void, ssize_t}; +use libarchive3_sys::ffi; + +use archive::{Entry, ReadCompression, ReadFilter, ReadFormat, Handle}; +use error::{ArchiveResult, ArchiveError}; + +const BLOCK_SIZE: usize = 10240; + +unsafe extern "C" fn stream_read_callback(handle: *mut ffi::Struct_archive, + data: *mut c_void, + buff: *mut *const c_void) + -> ssize_t { + let pipe: &mut Pipe = &mut *(data as *mut Pipe); + *buff = pipe.buffer.as_mut_ptr() as *mut c_void; + match pipe.read_bytes() { + Ok(size) => size as ssize_t, + Err(e) => { + let desc = CString::new(e.description()).unwrap(); + ffi::archive_set_error(handle, e.raw_os_error().unwrap_or(0), desc.as_ptr()); + -1 as ssize_t + } + } +} + +pub trait Reader : Handle { + fn entry(&mut self) -> &mut ReaderEntry; + + fn header_position(&self) -> i64 { + unsafe { ffi::archive_read_header_position(self.handle()) } + } + + fn next_header(&mut self) -> Option<&ReaderEntry> { + let res = unsafe { ffi::archive_read_next_header(self.handle(), &mut self.entry().handle) }; + if res == 0 { + Some(self.entry()) + } else { + None + } + } +} + +pub struct FileReader { + handle: *mut ffi::Struct_archive, + entry: ReaderEntry, +} + +pub struct StreamReader { + handle: *mut ffi::Struct_archive, + entry: ReaderEntry, + _pipe: Pipe, +} + +pub struct Builder { + handle: *mut ffi::Struct_archive, + consumed: bool, +} + +pub struct ReaderEntry { + handle: *mut ffi::Struct_archive_entry, +} + +struct Pipe { + reader: Box, + buffer: Vec, +} + +impl Pipe { + fn new(src: T) -> Self { + Pipe { + reader: Box::new(src), + buffer: vec![0; 8192], + } + } + + fn read_bytes(&mut self) -> io::Result { + self.reader.read(&mut self.buffer[..]) + } +} + +impl FileReader { + pub fn open>(mut builder: Builder, file: T) -> ArchiveResult { + try!(builder.check_consumed()); + let c_file = CString::new(file.as_ref().to_string_lossy().as_bytes()).unwrap(); + unsafe { + match ffi::archive_read_open_filename(builder.handle(), c_file.as_ptr(), BLOCK_SIZE) { + 0 => { + builder.consume(); + Ok(Self::new(builder.handle())) + } + _ => Err(ArchiveError::from(&builder as &Handle)), + } + } + } + + fn new(handle: *mut ffi::Struct_archive) -> Self { + FileReader { + handle: handle, + entry: ReaderEntry::default(), + } + } +} + +impl Handle for FileReader { + unsafe fn handle(&self) -> *mut ffi::Struct_archive { + self.handle + } +} + +impl Reader for FileReader { + fn entry(&mut self) -> &mut ReaderEntry { + &mut self.entry + } +} + +impl Drop for FileReader { + fn drop(&mut self) { + unsafe { + ffi::archive_read_close(self.handle()); // jw todo: close here? + ffi::archive_read_free(self.handle()); + } + } +} + +impl StreamReader { + pub fn open(mut builder: Builder, src: T) -> ArchiveResult { + unsafe { + builder.consume(); + let mut pipe = Pipe::new(src); + let pipe_ptr: *mut c_void = &mut pipe as *mut Pipe as *mut c_void; + match ffi::archive_read_open(builder.handle(), + pipe_ptr, + None, + Some(stream_read_callback), + None) { + 0 => { + let reader = StreamReader { + handle: builder.handle(), + entry: ReaderEntry::default(), + _pipe: pipe, + }; + Ok(reader) + } + _ => Err(ArchiveError::from(&builder as &Handle)), + } + } + } +} + +impl Handle for StreamReader { + unsafe fn handle(&self) -> *mut ffi::Struct_archive { + self.handle + } +} + +impl Reader for StreamReader { + fn entry(&mut self) -> &mut ReaderEntry { + &mut self.entry + } +} + +impl Drop for StreamReader { + fn drop(&mut self) { + unsafe { + ffi::archive_read_close(self.handle()); // jw todo: close here? + ffi::archive_read_free(self.handle()); + } + } +} + +impl Builder { + pub fn new() -> Self { + Builder::default() + } + + pub fn support_compression(&mut self, compression: ReadCompression) -> ArchiveResult<()> { + match compression { + ReadCompression::All => unsafe { + ffi::archive_read_support_compression_all(self.handle); + }, + ReadCompression::Bzip2 => unsafe { + ffi::archive_read_support_compression_bzip2(self.handle); + }, + ReadCompression::Compress => unsafe { + ffi::archive_read_support_compression_compress(self.handle); + }, + ReadCompression::Gzip => unsafe { + ffi::archive_read_support_compression_gzip(self.handle); + }, + ReadCompression::Lzip => unsafe { + ffi::archive_read_support_compression_lzip(self.handle); + }, + ReadCompression::Lzma => unsafe { + ffi::archive_read_support_compression_lzma(self.handle); + }, + ReadCompression::None => unsafe { + ffi::archive_read_support_compression_none(self.handle); + }, + ReadCompression::Program(prog) => { + let c_prog = CString::new(prog).unwrap(); + unsafe { + ffi::archive_read_support_compression_program(self.handle, c_prog.as_ptr()); + } + } + ReadCompression::Rpm => unsafe { + ffi::archive_read_support_compression_rpm(self.handle); + }, + ReadCompression::Uu => unsafe { + ffi::archive_read_support_compression_uu(self.handle); + }, + ReadCompression::Xz => unsafe { + ffi::archive_read_support_compression_xz(self.handle); + }, + } + ArchiveResult::from(self as &Handle) + } + + pub fn support_filter(&mut self, filter: ReadFilter) -> ArchiveResult<()> { + match filter { + ReadFilter::All => unsafe { + ffi::archive_read_support_filter_all(self.handle); + }, + ReadFilter::Bzip2 => unsafe { + ffi::archive_read_support_filter_bzip2(self.handle); + }, + ReadFilter::Compress => unsafe { + ffi::archive_read_support_filter_compress(self.handle); + }, + ReadFilter::Grzip => unsafe { + ffi::archive_read_support_filter_grzip(self.handle); + }, + ReadFilter::Gzip => unsafe { + ffi::archive_read_support_filter_gzip(self.handle); + }, + ReadFilter::Lrzip => unsafe { + ffi::archive_read_support_filter_lrzip(self.handle); + }, + ReadFilter::Lzip => unsafe { + ffi::archive_read_support_filter_lzip(self.handle); + }, + ReadFilter::Lzma => unsafe { + ffi::archive_read_support_filter_lzma(self.handle); + }, + ReadFilter::Lzop => unsafe { + ffi::archive_read_support_filter_lzop(self.handle); + }, + ReadFilter::None => unsafe { + ffi::archive_read_support_filter_none(self.handle); + }, + ReadFilter::Program(prog) => { + let c_prog = CString::new(prog).unwrap(); + unsafe { + ffi::archive_read_support_filter_program(self.handle, c_prog.as_ptr()); + } + } + ReadFilter::ProgramSignature(prog, cb, size) => { + let c_prog = CString::new(prog).unwrap(); + unsafe { + ffi::archive_read_support_filter_program_signature(self.handle, + c_prog.as_ptr(), + mem::transmute(cb), + size); + } + } + ReadFilter::Rpm => unsafe { + ffi::archive_read_support_filter_rpm(self.handle); + }, + ReadFilter::Uu => unsafe { + ffi::archive_read_support_filter_uu(self.handle); + }, + ReadFilter::Xz => unsafe { + ffi::archive_read_support_filter_xz(self.handle); + }, + } + ArchiveResult::from(self as &Handle) + } + + pub fn support_format(&self, format: ReadFormat) -> ArchiveResult<()> { + match format { + ReadFormat::SevenZip => unsafe { + ffi::archive_read_support_format_7zip(self.handle()); + }, + ReadFormat::All => unsafe { + ffi::archive_read_support_format_all(self.handle()); + }, + ReadFormat::Ar => unsafe { + ffi::archive_read_support_format_ar(self.handle()); + }, + ReadFormat::Cab => unsafe { + ffi::archive_read_support_format_cab(self.handle()); + }, + ReadFormat::Cpio => unsafe { + ffi::archive_read_support_format_cpio(self.handle()); + }, + ReadFormat::Empty => unsafe { + ffi::archive_read_support_format_empty(self.handle()); + }, + ReadFormat::Gnutar => unsafe { + ffi::archive_read_support_format_gnutar(self.handle()); + }, + ReadFormat::Iso9660 => unsafe { + ffi::archive_read_support_format_iso9660(self.handle()); + }, + ReadFormat::Lha => unsafe { + ffi::archive_read_support_format_lha(self.handle()); + }, + ReadFormat::Mtree => unsafe { + ffi::archive_read_support_format_mtree(self.handle()); + }, + ReadFormat::Rar => unsafe { + ffi::archive_read_support_format_rar(self.handle()); + }, + ReadFormat::Raw => unsafe { + ffi::archive_read_support_format_raw(self.handle()); + }, + ReadFormat::Tar => unsafe { + ffi::archive_read_support_format_tar(self.handle()); + }, + ReadFormat::Xar => unsafe { + ffi::archive_read_support_format_xar(self.handle()); + }, + ReadFormat::Zip => unsafe { + ffi::archive_read_support_format_zip(self.handle()); + }, + } + ArchiveResult::from(self as &Handle) + } + + pub fn open_file>(self, file: T) -> ArchiveResult { + try!(self.check_consumed()); + FileReader::open(self, file) + } + + pub fn open_stream(self, src: T) -> ArchiveResult { + try!(self.check_consumed()); + StreamReader::open(self, src) + } + + fn check_consumed(&self) -> ArchiveResult<()> { + if self.consumed { + Err(ArchiveError::Consumed) + } else { + Ok(()) + } + } + + fn consume(&mut self) { + self.consumed = true; + } +} + +impl Handle for Builder { + unsafe fn handle(&self) -> *mut ffi::Struct_archive { + self.handle + } +} + +impl Drop for Builder { + fn drop(&mut self) { + if !self.consumed { + unsafe { + ffi::archive_read_free(self.handle); + } + } + } +} + +impl Default for Builder { + fn default() -> Self { + unsafe { + let handle = ffi::archive_read_new(); + if handle.is_null() { + panic!("Allocation error"); + } + Builder { + handle: handle, + consumed: false, + } + } + } +} + +impl ReaderEntry { + pub fn new(handle: *mut ffi::Struct_archive_entry) -> Self { + ReaderEntry { handle: handle } + } +} + +impl Default for ReaderEntry { + fn default() -> Self { + ReaderEntry { handle: ptr::null_mut() } + } +} + +impl Entry for ReaderEntry { + unsafe fn entry(&self) -> *mut ffi::Struct_archive_entry { + self.handle + } +} diff --git a/libraries/libarchive/src/writer.rs b/libraries/libarchive/src/writer.rs new file mode 100644 index 00000000..0942bdee --- /dev/null +++ b/libraries/libarchive/src/writer.rs @@ -0,0 +1,339 @@ +use std::default::Default; +use std::path::Path; +use std::ptr; +use std::ffi::CString; + +use libarchive3_sys::ffi; + +use archive::{Entry, ExtractOptions, Handle, WriteFilter, WriteFormat}; +use reader::{Reader, ReaderEntry}; +use error::{ArchiveResult, ArchiveError}; + +pub struct Writer { + handle: *mut ffi::Struct_archive, +} + +pub struct Disk { + handle: *mut ffi::Struct_archive, +} + +pub struct Builder { + handle: *mut ffi::Struct_archive, + consumed: bool, +} + +impl Writer { + pub fn new(handle: *mut ffi::Struct_archive) -> Self { + Writer { handle: handle } + } +} + +impl Handle for Writer { + unsafe fn handle(&self) -> *mut ffi::Struct_archive { + self.handle + } +} + +impl Drop for Writer { + fn drop(&mut self) { + unsafe { + ffi::archive_write_free(self.handle()); + } + } +} + +impl Disk { + pub fn new() -> Self { + Disk::default() + } + + // Retrieve the currently-set value for last block size. A value of -1 here indicates that the + // library should use default values. + pub fn bytes_in_last_block(&self) -> i32 { + unsafe { ffi::archive_write_get_bytes_in_last_block(self.handle) } + } + + // Retrieve the block size to be used for writing. A value of -1 here indicates that the + // library should use default values. A value of zero indicates that internal blocking is + // suppressed. + pub fn bytes_per_block(&self) -> i32 { + unsafe { ffi::archive_write_get_bytes_per_block(self.handle) } + } + + pub fn set_bytes_per_block(&mut self, count: i32) -> ArchiveResult<()> { + unsafe { + ffi::archive_write_set_bytes_per_block(self.handle, count); + } + ArchiveResult::from(self as &Handle) + } + + pub fn set_bytes_in_last_block(&mut self, count: i32) -> ArchiveResult<()> { + unsafe { + ffi::archive_write_set_bytes_in_last_block(self.handle, count); + } + ArchiveResult::from(self as &Handle) + } + + // Set options for extraction built from `ExtractOptions` + pub fn set_options(&self, eopt: &ExtractOptions) -> ArchiveResult<()> { + unsafe { + ffi::archive_write_disk_set_options(self.handle, eopt.flags); + } + ArchiveResult::from(self as &Handle) + } + + // This convenience function installs a standard set of user and group lookup functions. These + // functions use getpwnam(3) and getgrnam(3) to convert names to ids, defaulting to the ids if + // the names cannot be looked up. These functions also implement a simple memory cache to + // reduce the number of calls to getpwnam(3) and getgrnam(3). + pub fn set_standard_lookup(&self) -> ArchiveResult<()> { + unsafe { + ffi::archive_write_disk_set_standard_lookup(self.handle); + } + ArchiveResult::from(self as &Handle) + } + + // * Failures - HeaderPosition + pub fn write(&self, reader: &mut T) -> ArchiveResult<()> { + if reader.header_position() != 0 { + return Err(ArchiveError::HeaderPosition); + } + let mut write_pending: bool = false; + loop { + { + if let Some(entry) = reader.next_header() { + match self.write_header(entry) { + Ok(()) => (), + Err(e) => return Err(e), + } + if entry.size() > 0 { + write_pending = true + } + } else { + return Ok(()); + } + } + if write_pending { + try!(self.write_data(reader)); + write_pending = false; + } + } + } + + pub fn close(&self) -> ArchiveResult<()> { + unsafe { + ffi::archive_write_close(self.handle()); + } + ArchiveResult::from(self as &Handle) + } + + fn write_data(&self, reader: &T) -> ArchiveResult<()> { + let mut buff = ptr::null(); + let mut size = 0; + let mut offset = 0; + + unsafe { + match ffi::archive_read_data_block(reader.handle(), &mut buff, &mut size, &mut offset) { + ffi::ARCHIVE_EOF => Ok(()), + ffi::ARCHIVE_OK => { + if ffi::archive_write_data_block(self.handle, buff, size, offset) < 0 { + Err(ArchiveError::from(self as &Handle)) + } else { + Ok(()) + } + } + _ => Err(ArchiveError::from(reader as &Handle)), + } + } + } + + fn write_header(&self, entry: &ReaderEntry) -> ArchiveResult<()> { + unsafe { + ffi::archive_write_header(self.handle, entry.entry()); + } + ArchiveResult::from(self as &Handle) + } +} + +impl Handle for Disk { + unsafe fn handle(&self) -> *mut ffi::Struct_archive { + self.handle + } +} + +impl Default for Disk { + fn default() -> Self { + unsafe { + let handle = ffi::archive_write_disk_new(); + if handle.is_null() { + panic!("Allocation error"); + } + Disk { handle: handle } + } + } +} + +impl Drop for Disk { + fn drop(&mut self) { + self.close().unwrap(); + unsafe { + ffi::archive_write_free(self.handle()); + } + } +} + +impl Builder { + pub fn new() -> Self { + Builder::default() + } + + pub fn add_filter(&mut self, filter: WriteFilter) -> ArchiveResult<()> { + match filter { + WriteFilter::B64Encode => unsafe { + ffi::archive_write_add_filter_b64encode(self.handle); + }, + WriteFilter::Bzip2 => unsafe { + ffi::archive_write_add_filter_bzip2(self.handle); + }, + WriteFilter::Compress => unsafe { + ffi::archive_write_add_filter_compress(self.handle); + }, + WriteFilter::Grzip => unsafe { + ffi::archive_write_add_filter_grzip(self.handle); + }, + WriteFilter::Gzip => unsafe { + ffi::archive_write_add_filter_gzip(self.handle); + }, + WriteFilter::Lrzip => unsafe { + ffi::archive_write_add_filter_lrzip(self.handle); + }, + WriteFilter::Lzip => unsafe { + ffi::archive_write_add_filter_lzip(self.handle); + }, + WriteFilter::Lzma => unsafe { + ffi::archive_write_add_filter_lzma(self.handle); + }, + WriteFilter::Lzop => unsafe { + ffi::archive_write_add_filter_lzop(self.handle); + }, + WriteFilter::None => unsafe { + ffi::archive_write_add_filter_none(self.handle); + }, + WriteFilter::Program(prog) => { + let c_prog = CString::new(prog).unwrap(); + unsafe { ffi::archive_write_add_filter_program(self.handle, c_prog.as_ptr()) }; + + } + WriteFilter::UuEncode => unsafe { + ffi::archive_write_add_filter_uuencode(self.handle); + }, + WriteFilter::Xz => unsafe { + ffi::archive_write_add_filter_xz(self.handle); + }, + } + ArchiveResult::from(self as &Handle) + } + + pub fn set_format(&self, format: WriteFormat) -> ArchiveResult<()> { + match format { + WriteFormat::SevenZip => unsafe { + ffi::archive_write_set_format_7zip(self.handle); + }, + WriteFormat::ArBsd => unsafe { + ffi::archive_write_set_format_ar_bsd(self.handle); + }, + WriteFormat::ArSvr4 => unsafe { + ffi::archive_write_set_format_ar_svr4(self.handle); + }, + WriteFormat::Cpio => unsafe { + ffi::archive_write_set_format_cpio(self.handle); + }, + WriteFormat::CpioNewc => unsafe { + ffi::archive_write_set_format_cpio_newc(self.handle); + }, + WriteFormat::Gnutar => unsafe { + ffi::archive_write_set_format_gnutar(self.handle); + }, + WriteFormat::Iso9660 => unsafe { + ffi::archive_write_set_format_iso9660(self.handle); + }, + WriteFormat::Mtree => unsafe { + ffi::archive_write_set_format_mtree(self.handle); + }, + WriteFormat::MtreeClassic => unsafe { + ffi::archive_write_set_format_mtree_classic(self.handle); + }, + WriteFormat::Pax => unsafe { + ffi::archive_write_set_format_pax(self.handle); + }, + WriteFormat::PaxRestricted => unsafe { + ffi::archive_write_set_format_pax_restricted(self.handle); + }, + WriteFormat::Shar => unsafe { + ffi::archive_write_set_format_shar(self.handle); + }, + WriteFormat::SharDump => unsafe { + ffi::archive_write_set_format_shar_dump(self.handle); + }, + WriteFormat::Ustar => unsafe { + ffi::archive_write_set_format_ustar(self.handle); + }, + WriteFormat::V7tar => unsafe { + ffi::archive_write_set_format_v7tar(self.handle); + }, + WriteFormat::Xar => unsafe { + ffi::archive_write_set_format_xar(self.handle); + }, + WriteFormat::Zip => unsafe { + ffi::archive_write_set_format_zip(self.handle); + }, + } + ArchiveResult::from(self as &Handle) + } + + pub fn open_file>(mut self, file: T) -> ArchiveResult { + if self.consumed { + return Err(ArchiveError::Consumed); + } + let c_file = CString::new(file.as_ref().to_string_lossy().as_bytes()).unwrap(); + let res = unsafe { ffi::archive_write_open_filename(self.handle, c_file.as_ptr()) }; + match res { + 0 => { + self.consumed = true; + Ok(Writer::new(self.handle)) + } + _ => Err(ArchiveError::from(&self as &Handle)), + } + } +} + +impl Default for Builder { + fn default() -> Self { + unsafe { + let handle = ffi::archive_write_new(); + if handle.is_null() { + panic!("Allocation error"); + } + Builder { + handle: handle, + consumed: false, + } + } + } +} + +impl Handle for Builder { + unsafe fn handle(&self) -> *mut ffi::Struct_archive { + self.handle + } +} + +impl Drop for Builder { + fn drop(&mut self) { + if !self.consumed { + unsafe { + ffi::archive_write_free(self.handle); + } + } + } +} diff --git a/libraries/libarchive/tests/fixtures/sample.tar.gz b/libraries/libarchive/tests/fixtures/sample.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..4d9aa8e726b079aa47e52d0d9cebfb7b8e3ef4f7 GIT binary patch literal 148 zcmb2|=3ww=$qHj&etXf8>yUv!>%(=nM|X(N^h~ajTc{b!!jd4L9+x=IqetxQH2KU;}ug>^fiF#e5T$Ql=Y_i_>Js~Fx u`>MSo=J6grS3B2b+aKY_zy6C?`dNN`etG?E1{ARGE1PJJ{u>4j1_l5zM?h5o literal 0 HcmV?d00001 diff --git a/libraries/libarchive/tests/lib.rs b/libraries/libarchive/tests/lib.rs new file mode 100644 index 00000000..fcbd7acf --- /dev/null +++ b/libraries/libarchive/tests/lib.rs @@ -0,0 +1,97 @@ +extern crate libarchive; + +pub mod util; + +use std::fs::File; +use libarchive::archive::{self, ReadFilter, ReadFormat}; +use libarchive::reader::{self, Reader}; +use libarchive::writer; + +#[test] +fn reading_from_file() { + let tar = util::path::fixture("sample.tar.gz"); + let mut builder = reader::Builder::new(); + builder.support_format(ReadFormat::All).ok(); + builder.support_filter(ReadFilter::All).ok(); + let mut reader = builder.open_file(tar).ok().unwrap(); + reader.next_header(); + // let entry: &archive::Entry = &reader.entry; + // println!("{:?}", entry.pathname()); + // println!("{:?}", entry.size()); + // for entry in reader.entries() { + // let file = entry as &archive::Entry; + // println!("{:?}", file.pathname()); + // println!("{:?}", file.size()); + // } + assert_eq!(4, 4); +} + +#[test] +fn read_archive_from_stream() { + let tar = util::path::fixture("sample.tar.gz"); + let f = File::open(tar).ok().unwrap(); + let mut builder = reader::Builder::new(); + builder.support_format(ReadFormat::All).ok(); + builder.support_filter(ReadFilter::All).ok(); + match builder.open_stream(f) { + Ok(mut reader) => { + println!("{:?}", reader.header_position()); + let writer = writer::Disk::new(); + writer.write(&mut reader).ok(); + println!("{:?}", reader.header_position()); + assert_eq!(4, 4) + }, + Err(e) => { + println!("{:?}", e); + } + } +} + +#[test] +fn extracting_from_file() { + let tar = util::path::fixture("sample.tar.gz"); + let mut builder = reader::Builder::new(); + builder.support_format(ReadFormat::All).ok(); + builder.support_filter(ReadFilter::All).ok(); + let mut reader = builder.open_file(tar).ok().unwrap(); + println!("{:?}", reader.header_position()); + let writer = writer::Disk::new(); + writer.write(&mut reader).ok(); + println!("{:?}", reader.header_position()); + assert_eq!(4, 4) +} + +#[test] +fn extracting_an_archive_with_options() { + let tar = util::path::fixture("sample.tar.gz"); + let mut builder = reader::Builder::new(); + builder.support_format(ReadFormat::All).ok(); + builder.support_filter(ReadFilter::All).ok(); + let mut reader = builder.open_file(tar).ok().unwrap(); + println!("{:?}", reader.header_position()); + let mut opts = archive::ExtractOptions::new(); + opts.add(archive::ExtractOption::Time); + let writer = writer::Disk::new(); + writer.set_options(&opts).ok(); + writer.write(&mut reader).ok(); + println!("{:?}", reader.header_position()); + assert_eq!(4, 4) +} + +#[test] +fn extracting_a_reader_twice() { + let tar = util::path::fixture("sample.tar.gz"); + let mut builder = reader::Builder::new(); + builder.support_format(ReadFormat::All).ok(); + builder.support_filter(ReadFilter::All).ok(); + let mut reader = builder.open_file(tar).ok().unwrap(); + println!("{:?}", reader.header_position()); + let writer = writer::Disk::new(); + writer.write(&mut reader).ok(); + println!("{:?}", reader.header_position()); + match writer.write(&mut reader) { + Ok(_) => println!("oops"), + Err(_) => println!("nice") + } + assert_eq!(4, 4) +} diff --git a/libraries/libarchive/tests/util/mod.rs b/libraries/libarchive/tests/util/mod.rs new file mode 100644 index 00000000..4da97892 --- /dev/null +++ b/libraries/libarchive/tests/util/mod.rs @@ -0,0 +1 @@ +pub mod path; diff --git a/libraries/libarchive/tests/util/path.rs b/libraries/libarchive/tests/util/path.rs new file mode 100644 index 00000000..da579b33 --- /dev/null +++ b/libraries/libarchive/tests/util/path.rs @@ -0,0 +1,18 @@ +use std::env; +use std::path::PathBuf; + +pub fn exe_path() -> PathBuf { + env::current_exe().unwrap() +} + +pub fn root() -> PathBuf { + exe_path().parent().unwrap().parent().unwrap().parent().unwrap().join("tests") +} + +pub fn fixtures() -> PathBuf { + root().join("fixtures") +} + +pub fn fixture(name: &str) -> PathBuf { + fixtures().join(name) +} From fe0b023a2d44bb9818e7fa35d6f2c73d9cfbcf06 Mon Sep 17 00:00:00 2001 From: Jamie Winsor Date: Sat, 9 Jan 2016 16:14:19 -0800 Subject: [PATCH 002/316] implement display trait for archive error and err code --- libraries/libarchive/src/error.rs | 34 ++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/libraries/libarchive/src/error.rs b/libraries/libarchive/src/error.rs index 88ff4ea1..0c5c70de 100644 --- a/libraries/libarchive/src/error.rs +++ b/libraries/libarchive/src/error.rs @@ -1,3 +1,5 @@ +use std::error; +use std::fmt; use archive; pub type ArchiveResult = Result; @@ -5,13 +7,39 @@ pub type ArchiveResult = Result; #[derive(Debug)] pub struct ErrCode(i32); +impl fmt::Display for ErrCode { + fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { + write!(fmt, "{}", self.0) + } +} + #[derive(Debug)] pub enum ArchiveError { Consumed, - Sys(ErrCode, String), - ReadFailure, - WriteFailure, HeaderPosition, + Sys(ErrCode, String), +} + +impl error::Error for ArchiveError { + fn description(&self) -> &str { + match self { + &ArchiveError::Consumed => "Builder already consumed", + &ArchiveError::HeaderPosition => "Header position expected to be 0", + &ArchiveError::Sys(_, _) => "libarchive system error", + } + } +} + +impl fmt::Display for ArchiveError { + fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { + match self { + &ArchiveError::Consumed => write!(fmt, "Builder already consumed"), + &ArchiveError::HeaderPosition => write!(fmt, "Header position expected to be 0"), + &ArchiveError::Sys(ref code, ref msg) => { + write!(fmt, "{} (libarchive err_code={})", msg, code) + } + } + } } impl<'a> From<&'a archive::Handle> for ArchiveError { From a45b168b6ca0172ff7886164f38a7048feb2987b Mon Sep 17 00:00:00 2001 From: Jamie Winsor Date: Mon, 11 Jan 2016 19:23:04 -0800 Subject: [PATCH 003/316] lock to >= 0.2.0 of libc --- libraries/libarchive/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/libarchive/Cargo.toml b/libraries/libarchive/Cargo.toml index f0d1c70a..4dff20a5 100644 --- a/libraries/libarchive/Cargo.toml +++ b/libraries/libarchive/Cargo.toml @@ -6,7 +6,7 @@ license = "MIT" repository = "https://github.com/reset/libarchive-rust" [dependencies] -libc = "*" +libc = ">= 0.2.0" [dependencies.libarchive3-sys] git = "https://github.com/reset/libarchive3-sys" From a069bd2a98bd88d00b21b0acc26efec2aca222e2 Mon Sep 17 00:00:00 2001 From: Jamie Winsor Date: Mon, 11 Jan 2016 19:38:01 -0800 Subject: [PATCH 004/316] fix segmentation fault add read_block function to reader --- libraries/libarchive/src/archive.rs | 6 ++++-- libraries/libarchive/src/error.rs | 12 +++--------- libraries/libarchive/src/reader.rs | 30 +++++++++++++++++++++++------ 3 files changed, 31 insertions(+), 17 deletions(-) diff --git a/libraries/libarchive/src/archive.rs b/libraries/libarchive/src/archive.rs index 06163780..e680965d 100644 --- a/libraries/libarchive/src/archive.rs +++ b/libraries/libarchive/src/archive.rs @@ -3,6 +3,7 @@ use std::str; use std::ffi::CStr; use libarchive3_sys::ffi; +use error::ErrCode; pub enum ReadCompression { All, @@ -93,8 +94,9 @@ pub enum WriteFilter { pub trait Handle { unsafe fn handle(&self) -> *mut ffi::Struct_archive; - fn err_code(&self) -> i32 { - unsafe { ffi::archive_errno(self.handle()) } + fn err_code(&self) -> ErrCode { + let code = unsafe { ffi::archive_errno(self.handle()) }; + ErrCode(code) } fn err_msg(&self) -> String { diff --git a/libraries/libarchive/src/error.rs b/libraries/libarchive/src/error.rs index 0c5c70de..7d22effb 100644 --- a/libraries/libarchive/src/error.rs +++ b/libraries/libarchive/src/error.rs @@ -5,7 +5,7 @@ use archive; pub type ArchiveResult = Result; #[derive(Debug)] -pub struct ErrCode(i32); +pub struct ErrCode(pub i32); impl fmt::Display for ErrCode { fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { @@ -44,20 +44,14 @@ impl fmt::Display for ArchiveError { impl<'a> From<&'a archive::Handle> for ArchiveError { fn from(handle: &'a archive::Handle) -> ArchiveError { - ArchiveError::Sys(ErrCode::from(handle), handle.err_msg()) - } -} - -impl<'a> From<&'a archive::Handle> for ErrCode { - fn from(handle: &'a archive::Handle) -> ErrCode { - ErrCode(handle.err_code()) + ArchiveError::Sys(handle.err_code(), handle.err_msg()) } } impl<'a> From<&'a archive::Handle> for ArchiveResult<()> { fn from(handle: &'a archive::Handle) -> ArchiveResult<()> { match handle.err_code() { - 0 => Ok(()), + ErrCode(0) => Ok(()), _ => Err(ArchiveError::from(handle)), } } diff --git a/libraries/libarchive/src/reader.rs b/libraries/libarchive/src/reader.rs index 45bb1d76..ee124df4 100644 --- a/libraries/libarchive/src/reader.rs +++ b/libraries/libarchive/src/reader.rs @@ -6,6 +6,7 @@ use std::io::{self, Read}; use std::mem; use std::path::Path; use std::ptr; +use std::slice; use libc::{c_void, ssize_t}; use libarchive3_sys::ffi; @@ -38,7 +39,7 @@ pub trait Reader : Handle { unsafe { ffi::archive_read_header_position(self.handle()) } } - fn next_header(&mut self) -> Option<&ReaderEntry> { + fn next_header(&mut self) -> Option<&mut ReaderEntry> { let res = unsafe { ffi::archive_read_next_header(self.handle(), &mut self.entry().handle) }; if res == 0 { Some(self.entry()) @@ -46,6 +47,20 @@ pub trait Reader : Handle { None } } + + fn read_block(&self) -> ArchiveResult> { + let mut buff = ptr::null(); + let mut size = 0; + let mut offset = 0; + + unsafe { + match ffi::archive_read_data_block(self.handle(), &mut buff, &mut size, &mut offset) { + ffi::ARCHIVE_EOF => Ok(None), + ffi::ARCHIVE_OK => Ok(Some(slice::from_raw_parts(buff as *const u8, size))), + _ => Err(ArchiveError::Sys(self.err_code(), self.err_msg())), + } + } + } } pub struct FileReader { @@ -56,7 +71,7 @@ pub struct FileReader { pub struct StreamReader { handle: *mut ffi::Struct_archive, entry: ReaderEntry, - _pipe: Pipe, + _pipe: Box, } pub struct Builder { @@ -133,9 +148,8 @@ impl Drop for FileReader { impl StreamReader { pub fn open(mut builder: Builder, src: T) -> ArchiveResult { unsafe { - builder.consume(); - let mut pipe = Pipe::new(src); - let pipe_ptr: *mut c_void = &mut pipe as *mut Pipe as *mut c_void; + let mut pipe = Box::new(Pipe::new(src)); + let pipe_ptr: *mut c_void = &mut *pipe as *mut Pipe as *mut c_void; match ffi::archive_read_open(builder.handle(), pipe_ptr, None, @@ -147,9 +161,13 @@ impl StreamReader { entry: ReaderEntry::default(), _pipe: pipe, }; + builder.consume(); Ok(reader) } - _ => Err(ArchiveError::from(&builder as &Handle)), + _ => { + builder.consume(); + Err(ArchiveError::from(&builder as &Handle)) + } } } } From 39b37933d77f07d190b80a4e83ed63ddcff5693a Mon Sep 17 00:00:00 2001 From: Jamie Winsor Date: Tue, 12 Jan 2016 00:00:30 -0800 Subject: [PATCH 005/316] add option for writing an archive's entries with a prefix --- libraries/libarchive/src/archive.rs | 13 +++++++++++-- libraries/libarchive/src/writer.rs | 23 +++++++++++++++++------ libraries/libarchive/tests/lib.rs | 17 +++++++++-------- 3 files changed, 37 insertions(+), 16 deletions(-) diff --git a/libraries/libarchive/src/archive.rs b/libraries/libarchive/src/archive.rs index e680965d..4fa3172a 100644 --- a/libraries/libarchive/src/archive.rs +++ b/libraries/libarchive/src/archive.rs @@ -1,9 +1,10 @@ use std::default::Default; +use std::ffi::{CStr, CString}; +use std::path::PathBuf; use std::str; -use std::ffi::CStr; use libarchive3_sys::ffi; -use error::ErrCode; +use error::{ArchiveResult, ErrCode}; pub enum ReadCompression { All, @@ -120,6 +121,14 @@ pub trait Entry { fn size(&self) -> i64 { unsafe { ffi::archive_entry_size(self.entry()) } } + + fn set_pathname(&mut self, path: PathBuf) -> ArchiveResult<()> { + unsafe { + let c_str = CString::new(path.to_str().unwrap()).unwrap(); + ffi::archive_entry_set_pathname(self.entry(), c_str.as_ptr()); + } + Ok(()) + } } pub enum ExtractOption { diff --git a/libraries/libarchive/src/writer.rs b/libraries/libarchive/src/writer.rs index 0942bdee..14e41b80 100644 --- a/libraries/libarchive/src/writer.rs +++ b/libraries/libarchive/src/writer.rs @@ -94,14 +94,19 @@ impl Disk { } // * Failures - HeaderPosition - pub fn write(&self, reader: &mut T) -> ArchiveResult<()> { + pub fn write(&self, reader: &mut T, prefix: Option<&str>) -> ArchiveResult { if reader.header_position() != 0 { return Err(ArchiveError::HeaderPosition); } + let mut bytes: usize = 0; let mut write_pending: bool = false; loop { { if let Some(entry) = reader.next_header() { + if let Some(pfx) = prefix { + let path = Path::new(pfx).join(entry.pathname()); + try!(entry.set_pathname(path)); + } match self.write_header(entry) { Ok(()) => (), Err(e) => return Err(e), @@ -110,14 +115,20 @@ impl Disk { write_pending = true } } else { - return Ok(()); + break; } } if write_pending { - try!(self.write_data(reader)); + bytes += try!(self.write_data(reader)); write_pending = false; } } + unsafe { + match ffi::archive_write_finish_entry(self.handle()) { + ffi::ARCHIVE_OK => Ok(bytes), + _ => Err(ArchiveError::from(self as &Handle)), + } + } } pub fn close(&self) -> ArchiveResult<()> { @@ -127,19 +138,19 @@ impl Disk { ArchiveResult::from(self as &Handle) } - fn write_data(&self, reader: &T) -> ArchiveResult<()> { + fn write_data(&self, reader: &T) -> ArchiveResult { let mut buff = ptr::null(); let mut size = 0; let mut offset = 0; unsafe { match ffi::archive_read_data_block(reader.handle(), &mut buff, &mut size, &mut offset) { - ffi::ARCHIVE_EOF => Ok(()), + ffi::ARCHIVE_EOF => Ok(size), ffi::ARCHIVE_OK => { if ffi::archive_write_data_block(self.handle, buff, size, offset) < 0 { Err(ArchiveError::from(self as &Handle)) } else { - Ok(()) + Ok(size) } } _ => Err(ArchiveError::from(reader as &Handle)), diff --git a/libraries/libarchive/tests/lib.rs b/libraries/libarchive/tests/lib.rs index fcbd7acf..872e9472 100644 --- a/libraries/libarchive/tests/lib.rs +++ b/libraries/libarchive/tests/lib.rs @@ -35,11 +35,12 @@ fn read_archive_from_stream() { builder.support_filter(ReadFilter::All).ok(); match builder.open_stream(f) { Ok(mut reader) => { - println!("{:?}", reader.header_position()); + assert_eq!(reader.header_position(), 0); let writer = writer::Disk::new(); - writer.write(&mut reader).ok(); - println!("{:?}", reader.header_position()); - assert_eq!(4, 4) + let count = writer.write(&mut reader, Some("/opt/bldr/fucks")).ok().unwrap(); + assert_eq!(count, 14); + assert_eq!(reader.header_position(), 1024); + assert_eq!(4, 4); }, Err(e) => { println!("{:?}", e); @@ -56,7 +57,7 @@ fn extracting_from_file() { let mut reader = builder.open_file(tar).ok().unwrap(); println!("{:?}", reader.header_position()); let writer = writer::Disk::new(); - writer.write(&mut reader).ok(); + writer.write(&mut reader, None).ok(); println!("{:?}", reader.header_position()); assert_eq!(4, 4) } @@ -73,7 +74,7 @@ fn extracting_an_archive_with_options() { opts.add(archive::ExtractOption::Time); let writer = writer::Disk::new(); writer.set_options(&opts).ok(); - writer.write(&mut reader).ok(); + writer.write(&mut reader, None).ok(); println!("{:?}", reader.header_position()); assert_eq!(4, 4) } @@ -87,9 +88,9 @@ fn extracting_a_reader_twice() { let mut reader = builder.open_file(tar).ok().unwrap(); println!("{:?}", reader.header_position()); let writer = writer::Disk::new(); - writer.write(&mut reader).ok(); + writer.write(&mut reader, None).ok(); println!("{:?}", reader.header_position()); - match writer.write(&mut reader) { + match writer.write(&mut reader, None) { Ok(_) => println!("oops"), Err(_) => println!("nice") } From ad5ed84d918b4736ebf8b0d10f7101294cfb1e8c Mon Sep 17 00:00:00 2001 From: Jamie Winsor Date: Thu, 17 Mar 2016 13:17:17 -0700 Subject: [PATCH 006/316] fix bug where all data blocks were not extracted to file --- libraries/libarchive/src/writer.rs | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/libraries/libarchive/src/writer.rs b/libraries/libarchive/src/writer.rs index 14e41b80..975e8eb3 100644 --- a/libraries/libarchive/src/writer.rs +++ b/libraries/libarchive/src/writer.rs @@ -144,16 +144,20 @@ impl Disk { let mut offset = 0; unsafe { - match ffi::archive_read_data_block(reader.handle(), &mut buff, &mut size, &mut offset) { - ffi::ARCHIVE_EOF => Ok(size), - ffi::ARCHIVE_OK => { - if ffi::archive_write_data_block(self.handle, buff, size, offset) < 0 { - Err(ArchiveError::from(self as &Handle)) - } else { - Ok(size) + loop { + match ffi::archive_read_data_block(reader.handle(), + &mut buff, + &mut size, + &mut offset) { + ffi::ARCHIVE_EOF => return Ok(size), + ffi::ARCHIVE_OK => { + if ffi::archive_write_data_block(self.handle, buff, size, offset) != + ffi::ARCHIVE_OK as isize { + return Err(ArchiveError::from(self as &Handle)); + } } + _ => return Err(ArchiveError::from(reader as &Handle)), } - _ => Err(ArchiveError::from(reader as &Handle)), } } } From f7cc72e0711b8a533ec529e10de747ad9e54547a Mon Sep 17 00:00:00 2001 From: Jamie Winsor Date: Thu, 17 Mar 2016 13:32:37 -0700 Subject: [PATCH 007/316] prepare for first release --- libraries/libarchive/Cargo.toml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/libraries/libarchive/Cargo.toml b/libraries/libarchive/Cargo.toml index 4dff20a5..93c018fc 100644 --- a/libraries/libarchive/Cargo.toml +++ b/libraries/libarchive/Cargo.toml @@ -1,13 +1,12 @@ [package] name = "libarchive" version = "0.1.0" -authors = ["Jamie Winsor "] -license = "MIT" -repository = "https://github.com/reset/libarchive-rust" +authors = ["Jamie Winsor "] +license = "Apache-2.0" +repository = "https://github.com/chef/libarchive-rust" +description = "A safe Rust API for authoring and extracting archives with libarchive" +keywords = ["libarchive", "archive", "tar", "zip"] [dependencies] libc = ">= 0.2.0" - -[dependencies.libarchive3-sys] -git = "https://github.com/reset/libarchive3-sys" -branch = "master" +libarchive3-sys = "0.1" From a2e51c7f8b5fc53515c6a493d3ec48466f7566e8 Mon Sep 17 00:00:00 2001 From: Jamie Winsor Date: Mon, 21 Mar 2016 13:22:30 -0700 Subject: [PATCH 008/316] match result code before extracting an error --- libraries/libarchive/src/reader.rs | 165 ++++++++++------------------- libraries/libarchive/src/writer.rs | 162 ++++++++++++---------------- 2 files changed, 124 insertions(+), 203 deletions(-) diff --git a/libraries/libarchive/src/reader.rs b/libraries/libarchive/src/reader.rs index ee124df4..b0aaf207 100644 --- a/libraries/libarchive/src/reader.rs +++ b/libraries/libarchive/src/reader.rs @@ -107,7 +107,7 @@ impl FileReader { let c_file = CString::new(file.as_ref().to_string_lossy().as_bytes()).unwrap(); unsafe { match ffi::archive_read_open_filename(builder.handle(), c_file.as_ptr(), BLOCK_SIZE) { - 0 => { + ffi::ARCHIVE_OK => { builder.consume(); Ok(Self::new(builder.handle())) } @@ -155,7 +155,7 @@ impl StreamReader { None, Some(stream_read_callback), None) { - 0 => { + ffi::ARCHIVE_OK => { let reader = StreamReader { handle: builder.handle(), entry: ReaderEntry::default(), @@ -200,84 +200,63 @@ impl Builder { } pub fn support_compression(&mut self, compression: ReadCompression) -> ArchiveResult<()> { - match compression { + let result = match compression { ReadCompression::All => unsafe { - ffi::archive_read_support_compression_all(self.handle); + ffi::archive_read_support_compression_all(self.handle) }, ReadCompression::Bzip2 => unsafe { - ffi::archive_read_support_compression_bzip2(self.handle); + ffi::archive_read_support_compression_bzip2(self.handle) }, ReadCompression::Compress => unsafe { - ffi::archive_read_support_compression_compress(self.handle); + ffi::archive_read_support_compression_compress(self.handle) }, ReadCompression::Gzip => unsafe { - ffi::archive_read_support_compression_gzip(self.handle); + ffi::archive_read_support_compression_gzip(self.handle) }, ReadCompression::Lzip => unsafe { - ffi::archive_read_support_compression_lzip(self.handle); + ffi::archive_read_support_compression_lzip(self.handle) }, ReadCompression::Lzma => unsafe { - ffi::archive_read_support_compression_lzma(self.handle); + ffi::archive_read_support_compression_lzma(self.handle) }, ReadCompression::None => unsafe { - ffi::archive_read_support_compression_none(self.handle); + ffi::archive_read_support_compression_none(self.handle) }, ReadCompression::Program(prog) => { let c_prog = CString::new(prog).unwrap(); unsafe { - ffi::archive_read_support_compression_program(self.handle, c_prog.as_ptr()); + ffi::archive_read_support_compression_program(self.handle, c_prog.as_ptr()) } } ReadCompression::Rpm => unsafe { - ffi::archive_read_support_compression_rpm(self.handle); - }, - ReadCompression::Uu => unsafe { - ffi::archive_read_support_compression_uu(self.handle); - }, - ReadCompression::Xz => unsafe { - ffi::archive_read_support_compression_xz(self.handle); + ffi::archive_read_support_compression_rpm(self.handle) }, + ReadCompression::Uu => unsafe { ffi::archive_read_support_compression_uu(self.handle) }, + ReadCompression::Xz => unsafe { ffi::archive_read_support_compression_xz(self.handle) }, + }; + match result { + ffi::ARCHIVE_OK => Ok(()), + _ => ArchiveResult::from(self as &Handle), } - ArchiveResult::from(self as &Handle) } pub fn support_filter(&mut self, filter: ReadFilter) -> ArchiveResult<()> { - match filter { - ReadFilter::All => unsafe { - ffi::archive_read_support_filter_all(self.handle); - }, - ReadFilter::Bzip2 => unsafe { - ffi::archive_read_support_filter_bzip2(self.handle); - }, + let result = match filter { + ReadFilter::All => unsafe { ffi::archive_read_support_filter_all(self.handle) }, + ReadFilter::Bzip2 => unsafe { ffi::archive_read_support_filter_bzip2(self.handle) }, ReadFilter::Compress => unsafe { - ffi::archive_read_support_filter_compress(self.handle); - }, - ReadFilter::Grzip => unsafe { - ffi::archive_read_support_filter_grzip(self.handle); - }, - ReadFilter::Gzip => unsafe { - ffi::archive_read_support_filter_gzip(self.handle); - }, - ReadFilter::Lrzip => unsafe { - ffi::archive_read_support_filter_lrzip(self.handle); - }, - ReadFilter::Lzip => unsafe { - ffi::archive_read_support_filter_lzip(self.handle); - }, - ReadFilter::Lzma => unsafe { - ffi::archive_read_support_filter_lzma(self.handle); - }, - ReadFilter::Lzop => unsafe { - ffi::archive_read_support_filter_lzop(self.handle); - }, - ReadFilter::None => unsafe { - ffi::archive_read_support_filter_none(self.handle); + ffi::archive_read_support_filter_compress(self.handle) }, + ReadFilter::Grzip => unsafe { ffi::archive_read_support_filter_grzip(self.handle) }, + ReadFilter::Gzip => unsafe { ffi::archive_read_support_filter_gzip(self.handle) }, + ReadFilter::Lrzip => unsafe { ffi::archive_read_support_filter_lrzip(self.handle) }, + ReadFilter::Lzip => unsafe { ffi::archive_read_support_filter_lzip(self.handle) }, + ReadFilter::Lzma => unsafe { ffi::archive_read_support_filter_lzma(self.handle) }, + ReadFilter::Lzop => unsafe { ffi::archive_read_support_filter_lzop(self.handle) }, + ReadFilter::None => unsafe { ffi::archive_read_support_filter_none(self.handle) }, ReadFilter::Program(prog) => { let c_prog = CString::new(prog).unwrap(); - unsafe { - ffi::archive_read_support_filter_program(self.handle, c_prog.as_ptr()); - } + unsafe { ffi::archive_read_support_filter_program(self.handle, c_prog.as_ptr()) } } ReadFilter::ProgramSignature(prog, cb, size) => { let c_prog = CString::new(prog).unwrap(); @@ -285,71 +264,43 @@ impl Builder { ffi::archive_read_support_filter_program_signature(self.handle, c_prog.as_ptr(), mem::transmute(cb), - size); + size) } } - ReadFilter::Rpm => unsafe { - ffi::archive_read_support_filter_rpm(self.handle); - }, - ReadFilter::Uu => unsafe { - ffi::archive_read_support_filter_uu(self.handle); - }, - ReadFilter::Xz => unsafe { - ffi::archive_read_support_filter_xz(self.handle); - }, + ReadFilter::Rpm => unsafe { ffi::archive_read_support_filter_rpm(self.handle) }, + ReadFilter::Uu => unsafe { ffi::archive_read_support_filter_uu(self.handle) }, + ReadFilter::Xz => unsafe { ffi::archive_read_support_filter_xz(self.handle) }, + }; + match result { + ffi::ARCHIVE_OK => Ok(()), + _ => ArchiveResult::from(self as &Handle), } - ArchiveResult::from(self as &Handle) } pub fn support_format(&self, format: ReadFormat) -> ArchiveResult<()> { - match format { - ReadFormat::SevenZip => unsafe { - ffi::archive_read_support_format_7zip(self.handle()); - }, - ReadFormat::All => unsafe { - ffi::archive_read_support_format_all(self.handle()); - }, - ReadFormat::Ar => unsafe { - ffi::archive_read_support_format_ar(self.handle()); - }, - ReadFormat::Cab => unsafe { - ffi::archive_read_support_format_cab(self.handle()); - }, - ReadFormat::Cpio => unsafe { - ffi::archive_read_support_format_cpio(self.handle()); - }, - ReadFormat::Empty => unsafe { - ffi::archive_read_support_format_empty(self.handle()); - }, - ReadFormat::Gnutar => unsafe { - ffi::archive_read_support_format_gnutar(self.handle()); - }, + let result = match format { + ReadFormat::SevenZip => unsafe { ffi::archive_read_support_format_7zip(self.handle()) }, + ReadFormat::All => unsafe { ffi::archive_read_support_format_all(self.handle()) }, + ReadFormat::Ar => unsafe { ffi::archive_read_support_format_ar(self.handle()) }, + ReadFormat::Cab => unsafe { ffi::archive_read_support_format_cab(self.handle()) }, + ReadFormat::Cpio => unsafe { ffi::archive_read_support_format_cpio(self.handle()) }, + ReadFormat::Empty => unsafe { ffi::archive_read_support_format_empty(self.handle()) }, + ReadFormat::Gnutar => unsafe { ffi::archive_read_support_format_gnutar(self.handle()) }, ReadFormat::Iso9660 => unsafe { - ffi::archive_read_support_format_iso9660(self.handle()); - }, - ReadFormat::Lha => unsafe { - ffi::archive_read_support_format_lha(self.handle()); - }, - ReadFormat::Mtree => unsafe { - ffi::archive_read_support_format_mtree(self.handle()); - }, - ReadFormat::Rar => unsafe { - ffi::archive_read_support_format_rar(self.handle()); - }, - ReadFormat::Raw => unsafe { - ffi::archive_read_support_format_raw(self.handle()); - }, - ReadFormat::Tar => unsafe { - ffi::archive_read_support_format_tar(self.handle()); - }, - ReadFormat::Xar => unsafe { - ffi::archive_read_support_format_xar(self.handle()); - }, - ReadFormat::Zip => unsafe { - ffi::archive_read_support_format_zip(self.handle()); + ffi::archive_read_support_format_iso9660(self.handle()) }, + ReadFormat::Lha => unsafe { ffi::archive_read_support_format_lha(self.handle()) }, + ReadFormat::Mtree => unsafe { ffi::archive_read_support_format_mtree(self.handle()) }, + ReadFormat::Rar => unsafe { ffi::archive_read_support_format_rar(self.handle()) }, + ReadFormat::Raw => unsafe { ffi::archive_read_support_format_raw(self.handle()) }, + ReadFormat::Tar => unsafe { ffi::archive_read_support_format_tar(self.handle()) }, + ReadFormat::Xar => unsafe { ffi::archive_read_support_format_xar(self.handle()) }, + ReadFormat::Zip => unsafe { ffi::archive_read_support_format_zip(self.handle()) }, + }; + match result { + ffi::ARCHIVE_OK => Ok(()), + _ => ArchiveResult::from(self as &Handle), } - ArchiveResult::from(self as &Handle) } pub fn open_file>(self, file: T) -> ArchiveResult { diff --git a/libraries/libarchive/src/writer.rs b/libraries/libarchive/src/writer.rs index 975e8eb3..06a5b85b 100644 --- a/libraries/libarchive/src/writer.rs +++ b/libraries/libarchive/src/writer.rs @@ -62,24 +62,30 @@ impl Disk { pub fn set_bytes_per_block(&mut self, count: i32) -> ArchiveResult<()> { unsafe { - ffi::archive_write_set_bytes_per_block(self.handle, count); + match ffi::archive_write_set_bytes_per_block(self.handle, count) { + ffi::ARCHIVE_OK => Ok(()), + _ => ArchiveResult::from(self as &Handle), + } } - ArchiveResult::from(self as &Handle) } pub fn set_bytes_in_last_block(&mut self, count: i32) -> ArchiveResult<()> { unsafe { - ffi::archive_write_set_bytes_in_last_block(self.handle, count); + match ffi::archive_write_set_bytes_in_last_block(self.handle, count) { + ffi::ARCHIVE_OK => Ok(()), + _ => ArchiveResult::from(self as &Handle), + } } - ArchiveResult::from(self as &Handle) } // Set options for extraction built from `ExtractOptions` pub fn set_options(&self, eopt: &ExtractOptions) -> ArchiveResult<()> { unsafe { - ffi::archive_write_disk_set_options(self.handle, eopt.flags); + match ffi::archive_write_disk_set_options(self.handle, eopt.flags) { + ffi::ARCHIVE_OK => Ok(()), + _ => ArchiveResult::from(self as &Handle), + } } - ArchiveResult::from(self as &Handle) } // This convenience function installs a standard set of user and group lookup functions. These @@ -88,9 +94,11 @@ impl Disk { // reduce the number of calls to getpwnam(3) and getgrnam(3). pub fn set_standard_lookup(&self) -> ArchiveResult<()> { unsafe { - ffi::archive_write_disk_set_standard_lookup(self.handle); + match ffi::archive_write_disk_set_standard_lookup(self.handle) { + ffi::ARCHIVE_OK => Ok(()), + _ => ArchiveResult::from(self as &Handle), + } } - ArchiveResult::from(self as &Handle) } // * Failures - HeaderPosition @@ -133,9 +141,11 @@ impl Disk { pub fn close(&self) -> ArchiveResult<()> { unsafe { - ffi::archive_write_close(self.handle()); + match ffi::archive_write_close(self.handle()) { + ffi::ARCHIVE_OK => Ok(()), + _ => ArchiveResult::from(self as &Handle), + } } - ArchiveResult::from(self as &Handle) } fn write_data(&self, reader: &T) -> ArchiveResult { @@ -164,9 +174,11 @@ impl Disk { fn write_header(&self, entry: &ReaderEntry) -> ArchiveResult<()> { unsafe { - ffi::archive_write_header(self.handle, entry.entry()); + match ffi::archive_write_header(self.handle, entry.entry()) { + ffi::ARCHIVE_OK => Ok(()), + _ => ArchiveResult::from(self as &Handle), + } } - ArchiveResult::from(self as &Handle) } } @@ -190,6 +202,7 @@ impl Default for Disk { impl Drop for Disk { fn drop(&mut self) { + // JW TODO: do not close, libarchive will handle it self.close().unwrap(); unsafe { ffi::archive_write_free(self.handle()); @@ -203,107 +216,64 @@ impl Builder { } pub fn add_filter(&mut self, filter: WriteFilter) -> ArchiveResult<()> { - match filter { + let result = match filter { WriteFilter::B64Encode => unsafe { - ffi::archive_write_add_filter_b64encode(self.handle); - }, - WriteFilter::Bzip2 => unsafe { - ffi::archive_write_add_filter_bzip2(self.handle); - }, - WriteFilter::Compress => unsafe { - ffi::archive_write_add_filter_compress(self.handle); - }, - WriteFilter::Grzip => unsafe { - ffi::archive_write_add_filter_grzip(self.handle); - }, - WriteFilter::Gzip => unsafe { - ffi::archive_write_add_filter_gzip(self.handle); - }, - WriteFilter::Lrzip => unsafe { - ffi::archive_write_add_filter_lrzip(self.handle); - }, - WriteFilter::Lzip => unsafe { - ffi::archive_write_add_filter_lzip(self.handle); - }, - WriteFilter::Lzma => unsafe { - ffi::archive_write_add_filter_lzma(self.handle); - }, - WriteFilter::Lzop => unsafe { - ffi::archive_write_add_filter_lzop(self.handle); - }, - WriteFilter::None => unsafe { - ffi::archive_write_add_filter_none(self.handle); + ffi::archive_write_add_filter_b64encode(self.handle) }, + WriteFilter::Bzip2 => unsafe { ffi::archive_write_add_filter_bzip2(self.handle) }, + WriteFilter::Compress => unsafe { ffi::archive_write_add_filter_compress(self.handle) }, + WriteFilter::Grzip => unsafe { ffi::archive_write_add_filter_grzip(self.handle) }, + WriteFilter::Gzip => unsafe { ffi::archive_write_add_filter_gzip(self.handle) }, + WriteFilter::Lrzip => unsafe { ffi::archive_write_add_filter_lrzip(self.handle) }, + WriteFilter::Lzip => unsafe { ffi::archive_write_add_filter_lzip(self.handle) }, + WriteFilter::Lzma => unsafe { ffi::archive_write_add_filter_lzma(self.handle) }, + WriteFilter::Lzop => unsafe { ffi::archive_write_add_filter_lzop(self.handle) }, + WriteFilter::None => unsafe { ffi::archive_write_add_filter_none(self.handle) }, WriteFilter::Program(prog) => { let c_prog = CString::new(prog).unwrap(); - unsafe { ffi::archive_write_add_filter_program(self.handle, c_prog.as_ptr()) }; - + unsafe { ffi::archive_write_add_filter_program(self.handle, c_prog.as_ptr()) } } - WriteFilter::UuEncode => unsafe { - ffi::archive_write_add_filter_uuencode(self.handle); - }, - WriteFilter::Xz => unsafe { - ffi::archive_write_add_filter_xz(self.handle); - }, + WriteFilter::UuEncode => unsafe { ffi::archive_write_add_filter_uuencode(self.handle) }, + WriteFilter::Xz => unsafe { ffi::archive_write_add_filter_xz(self.handle) }, + }; + match result { + ffi::ARCHIVE_OK => Ok(()), + _ => ArchiveResult::from(self as &Handle), } - ArchiveResult::from(self as &Handle) } pub fn set_format(&self, format: WriteFormat) -> ArchiveResult<()> { - match format { - WriteFormat::SevenZip => unsafe { - ffi::archive_write_set_format_7zip(self.handle); - }, - WriteFormat::ArBsd => unsafe { - ffi::archive_write_set_format_ar_bsd(self.handle); - }, - WriteFormat::ArSvr4 => unsafe { - ffi::archive_write_set_format_ar_svr4(self.handle); - }, - WriteFormat::Cpio => unsafe { - ffi::archive_write_set_format_cpio(self.handle); - }, + let result = match format { + WriteFormat::SevenZip => unsafe { ffi::archive_write_set_format_7zip(self.handle) }, + WriteFormat::ArBsd => unsafe { ffi::archive_write_set_format_ar_bsd(self.handle) }, + WriteFormat::ArSvr4 => unsafe { ffi::archive_write_set_format_ar_svr4(self.handle) }, + WriteFormat::Cpio => unsafe { ffi::archive_write_set_format_cpio(self.handle) }, WriteFormat::CpioNewc => unsafe { - ffi::archive_write_set_format_cpio_newc(self.handle); - }, - WriteFormat::Gnutar => unsafe { - ffi::archive_write_set_format_gnutar(self.handle); - }, - WriteFormat::Iso9660 => unsafe { - ffi::archive_write_set_format_iso9660(self.handle); - }, - WriteFormat::Mtree => unsafe { - ffi::archive_write_set_format_mtree(self.handle); + ffi::archive_write_set_format_cpio_newc(self.handle) }, + WriteFormat::Gnutar => unsafe { ffi::archive_write_set_format_gnutar(self.handle) }, + WriteFormat::Iso9660 => unsafe { ffi::archive_write_set_format_iso9660(self.handle) }, + WriteFormat::Mtree => unsafe { ffi::archive_write_set_format_mtree(self.handle) }, WriteFormat::MtreeClassic => unsafe { - ffi::archive_write_set_format_mtree_classic(self.handle); - }, - WriteFormat::Pax => unsafe { - ffi::archive_write_set_format_pax(self.handle); + ffi::archive_write_set_format_mtree_classic(self.handle) }, + WriteFormat::Pax => unsafe { ffi::archive_write_set_format_pax(self.handle) }, WriteFormat::PaxRestricted => unsafe { - ffi::archive_write_set_format_pax_restricted(self.handle); - }, - WriteFormat::Shar => unsafe { - ffi::archive_write_set_format_shar(self.handle); + ffi::archive_write_set_format_pax_restricted(self.handle) }, + WriteFormat::Shar => unsafe { ffi::archive_write_set_format_shar(self.handle) }, WriteFormat::SharDump => unsafe { - ffi::archive_write_set_format_shar_dump(self.handle); - }, - WriteFormat::Ustar => unsafe { - ffi::archive_write_set_format_ustar(self.handle); - }, - WriteFormat::V7tar => unsafe { - ffi::archive_write_set_format_v7tar(self.handle); - }, - WriteFormat::Xar => unsafe { - ffi::archive_write_set_format_xar(self.handle); - }, - WriteFormat::Zip => unsafe { - ffi::archive_write_set_format_zip(self.handle); + ffi::archive_write_set_format_shar_dump(self.handle) }, + WriteFormat::Ustar => unsafe { ffi::archive_write_set_format_ustar(self.handle) }, + WriteFormat::V7tar => unsafe { ffi::archive_write_set_format_v7tar(self.handle) }, + WriteFormat::Xar => unsafe { ffi::archive_write_set_format_xar(self.handle) }, + WriteFormat::Zip => unsafe { ffi::archive_write_set_format_zip(self.handle) }, + }; + match result { + ffi::ARCHIVE_OK => Ok(()), + _ => ArchiveResult::from(self as &Handle), } - ArchiveResult::from(self as &Handle) } pub fn open_file>(mut self, file: T) -> ArchiveResult { @@ -313,7 +283,7 @@ impl Builder { let c_file = CString::new(file.as_ref().to_string_lossy().as_bytes()).unwrap(); let res = unsafe { ffi::archive_write_open_filename(self.handle, c_file.as_ptr()) }; match res { - 0 => { + ffi::ARCHIVE_OK => { self.consumed = true; Ok(Writer::new(self.handle)) } From baa9b408d655c11f46f534a85a8e9420b3f88f53 Mon Sep 17 00:00:00 2001 From: Jamie Winsor Date: Mon, 21 Mar 2016 13:23:47 -0700 Subject: [PATCH 009/316] don't close on free - libarchive takes care of this --- libraries/libarchive/src/reader.rs | 2 -- libraries/libarchive/src/writer.rs | 2 -- 2 files changed, 4 deletions(-) diff --git a/libraries/libarchive/src/reader.rs b/libraries/libarchive/src/reader.rs index b0aaf207..c913b1c8 100644 --- a/libraries/libarchive/src/reader.rs +++ b/libraries/libarchive/src/reader.rs @@ -139,7 +139,6 @@ impl Reader for FileReader { impl Drop for FileReader { fn drop(&mut self) { unsafe { - ffi::archive_read_close(self.handle()); // jw todo: close here? ffi::archive_read_free(self.handle()); } } @@ -188,7 +187,6 @@ impl Reader for StreamReader { impl Drop for StreamReader { fn drop(&mut self) { unsafe { - ffi::archive_read_close(self.handle()); // jw todo: close here? ffi::archive_read_free(self.handle()); } } diff --git a/libraries/libarchive/src/writer.rs b/libraries/libarchive/src/writer.rs index 06a5b85b..ca90e524 100644 --- a/libraries/libarchive/src/writer.rs +++ b/libraries/libarchive/src/writer.rs @@ -202,8 +202,6 @@ impl Default for Disk { impl Drop for Disk { fn drop(&mut self) { - // JW TODO: do not close, libarchive will handle it - self.close().unwrap(); unsafe { ffi::archive_write_free(self.handle()); } From 9e3659dcf90e2cbb77d4e99dfae3b87509b1fa1a Mon Sep 17 00:00:00 2001 From: Jamie Winsor Date: Mon, 21 Mar 2016 15:58:09 -0700 Subject: [PATCH 010/316] expose ability to set/get filetype of archive entry --- libraries/libarchive/src/archive.rs | 48 +++++++++++++++++++++++++++-- libraries/libarchive/src/writer.rs | 2 +- 2 files changed, 46 insertions(+), 4 deletions(-) diff --git a/libraries/libarchive/src/archive.rs b/libraries/libarchive/src/archive.rs index 4fa3172a..ff5a1dfb 100644 --- a/libraries/libarchive/src/archive.rs +++ b/libraries/libarchive/src/archive.rs @@ -4,7 +4,7 @@ use std::path::PathBuf; use std::str; use libarchive3_sys::ffi; -use error::{ArchiveResult, ErrCode}; +use error::ErrCode; pub enum ReadCompression { All, @@ -92,6 +92,17 @@ pub enum WriteFilter { Xz, } +pub enum FileType { + BlockDevice, + SymbolicLink, + Socket, + CharacterDevice, + Directory, + NamedPipe, + Mount, + RegularFile, +} + pub trait Handle { unsafe fn handle(&self) -> *mut ffi::Struct_archive; @@ -112,6 +123,22 @@ pub trait Handle { pub trait Entry { unsafe fn entry(&self) -> *mut ffi::Struct_archive_entry; + fn filetype(&self) -> FileType { + unsafe { + match ffi::archive_entry_filetype(self.entry()) as u32 { + ffi::AE_IFBLK => FileType::BlockDevice, + ffi::AE_IFCHR => FileType::CharacterDevice, + ffi::AE_IFLNK => FileType::SymbolicLink, + ffi::AE_IFDIR => FileType::Directory, + ffi::AE_IFIFO => FileType::NamedPipe, + ffi::AE_IFMT => FileType::Mount, + ffi::AE_IFREG => FileType::RegularFile, + ffi::AE_IFSOCK => FileType::Socket, + code => unreachable!("undefined filetype: {}", code), + } + } + } + fn pathname(&self) -> &str { let c_str: &CStr = unsafe { CStr::from_ptr(ffi::archive_entry_pathname(self.entry())) }; let buf: &[u8] = c_str.to_bytes(); @@ -122,12 +149,27 @@ pub trait Entry { unsafe { ffi::archive_entry_size(self.entry()) } } - fn set_pathname(&mut self, path: PathBuf) -> ArchiveResult<()> { + fn set_filetype(&mut self, file_type: FileType) { + unsafe { + let file_type = match file_type { + FileType::BlockDevice => ffi::AE_IFBLK, + FileType::CharacterDevice => ffi::AE_IFCHR, + FileType::SymbolicLink => ffi::AE_IFLNK, + FileType::Directory => ffi::AE_IFDIR, + FileType::NamedPipe => ffi::AE_IFIFO, + FileType::Mount => ffi::AE_IFMT, + FileType::RegularFile => ffi::AE_IFREG, + FileType::Socket => ffi::AE_IFSOCK, + }; + ffi::archive_entry_set_filetype(self.entry(), file_type); + } + } + + fn set_pathname(&mut self, path: PathBuf) { unsafe { let c_str = CString::new(path.to_str().unwrap()).unwrap(); ffi::archive_entry_set_pathname(self.entry(), c_str.as_ptr()); } - Ok(()) } } diff --git a/libraries/libarchive/src/writer.rs b/libraries/libarchive/src/writer.rs index ca90e524..6b79b2fc 100644 --- a/libraries/libarchive/src/writer.rs +++ b/libraries/libarchive/src/writer.rs @@ -113,7 +113,7 @@ impl Disk { if let Some(entry) = reader.next_header() { if let Some(pfx) = prefix { let path = Path::new(pfx).join(entry.pathname()); - try!(entry.set_pathname(path)); + entry.set_pathname(path); } match self.write_header(entry) { Ok(()) => (), From fc8b870317b28f90f0be2a0b72ed5beeb4ceb176 Mon Sep 17 00:00:00 2001 From: Jamie Winsor Date: Mon, 21 Mar 2016 17:06:57 -0700 Subject: [PATCH 011/316] write prefix for hardlinks on Disk restore --- libraries/libarchive/src/archive.rs | 27 ++++++++++++++++++++++++++- libraries/libarchive/src/writer.rs | 6 +++++- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/libraries/libarchive/src/archive.rs b/libraries/libarchive/src/archive.rs index ff5a1dfb..2a798702 100644 --- a/libraries/libarchive/src/archive.rs +++ b/libraries/libarchive/src/archive.rs @@ -139,6 +139,18 @@ pub trait Entry { } } + fn hardlink(&self) -> Option<&str> { + let c_str: &CStr = unsafe { + let ptr = ffi::archive_entry_hardlink(self.entry()); + if ptr.is_null() { + return None; + } + CStr::from_ptr(ptr) + }; + let buf: &[u8] = c_str.to_bytes(); + Some(str::from_utf8(buf).unwrap()) + } + fn pathname(&self) -> &str { let c_str: &CStr = unsafe { CStr::from_ptr(ffi::archive_entry_pathname(self.entry())) }; let buf: &[u8] = c_str.to_bytes(); @@ -149,6 +161,12 @@ pub trait Entry { unsafe { ffi::archive_entry_size(self.entry()) } } + fn symlink(&self) -> &str { + let c_str: &CStr = unsafe { CStr::from_ptr(ffi::archive_entry_symlink(self.entry())) }; + let buf: &[u8] = c_str.to_bytes(); + str::from_utf8(buf).unwrap() + } + fn set_filetype(&mut self, file_type: FileType) { unsafe { let file_type = match file_type { @@ -165,7 +183,14 @@ pub trait Entry { } } - fn set_pathname(&mut self, path: PathBuf) { + fn set_link(&mut self, path: &PathBuf) { + unsafe { + let c_str = CString::new(path.to_str().unwrap()).unwrap(); + ffi::archive_entry_set_link(self.entry(), c_str.as_ptr()); + } + } + + fn set_pathname(&mut self, path: &PathBuf) { unsafe { let c_str = CString::new(path.to_str().unwrap()).unwrap(); ffi::archive_entry_set_pathname(self.entry(), c_str.as_ptr()); diff --git a/libraries/libarchive/src/writer.rs b/libraries/libarchive/src/writer.rs index 6b79b2fc..9218aa2f 100644 --- a/libraries/libarchive/src/writer.rs +++ b/libraries/libarchive/src/writer.rs @@ -113,7 +113,11 @@ impl Disk { if let Some(entry) = reader.next_header() { if let Some(pfx) = prefix { let path = Path::new(pfx).join(entry.pathname()); - entry.set_pathname(path); + entry.set_pathname(&path); + if entry.hardlink().is_some() { + let path = Path::new(pfx).join(entry.hardlink().unwrap()); + entry.set_link(&path); + } } match self.write_header(entry) { Ok(()) => (), From 5325f1533957342e68e45e6bcecd245efa88f22e Mon Sep 17 00:00:00 2001 From: Jamie Winsor Date: Mon, 21 Mar 2016 17:25:21 -0700 Subject: [PATCH 012/316] version bump 0.1.1 --- libraries/libarchive/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/libarchive/Cargo.toml b/libraries/libarchive/Cargo.toml index 93c018fc..2d1462e1 100644 --- a/libraries/libarchive/Cargo.toml +++ b/libraries/libarchive/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "libarchive" -version = "0.1.0" +version = "0.1.1" authors = ["Jamie Winsor "] license = "Apache-2.0" repository = "https://github.com/chef/libarchive-rust" From fa34497ddeebc3df54ff510dda48ce4179b58d73 Mon Sep 17 00:00:00 2001 From: Tim Smith Date: Wed, 2 Jan 2019 15:57:21 -0800 Subject: [PATCH 013/316] Fix travis badge --- libraries/libarchive/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/libarchive/README.md b/libraries/libarchive/README.md index 0336b5d8..f47a7411 100644 --- a/libraries/libarchive/README.md +++ b/libraries/libarchive/README.md @@ -1,6 +1,6 @@ # libarchive-rust -[![Build Status](https://travis-ci.org/reset/libarchive-rust.svg?branch=master)](https://travis-ci.org/reset/libarchive-rust) +[![Build Status](https://travis-ci.org/chef/libarchive-rust.svg?branch=master)](https://travis-ci.org/chef/libarchive-rust) [![crates.io](https://meritbadge.herokuapp.com/gpgme)](https://crates.io/crates/libarchive) A Rust crate for interacting with archives using [libarchive](http://www.libarchive.org) From c7b823dc1052c35cd68cada6713f7f94b43cdd45 Mon Sep 17 00:00:00 2001 From: Tim Smith Date: Thu, 3 Jan 2019 18:13:37 -0800 Subject: [PATCH 014/316] Remove invalid docs link --- libraries/libarchive/README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/libraries/libarchive/README.md b/libraries/libarchive/README.md index f47a7411..d66d0221 100644 --- a/libraries/libarchive/README.md +++ b/libraries/libarchive/README.md @@ -5,8 +5,6 @@ A Rust crate for interacting with archives using [libarchive](http://www.libarchive.org) -[Documentation](http://reset.github.io/libarchive-rust) - ## Requirements Version 3 of libarchive is required to use this library. From b465210070a970e8ad89f3b09b46583f9835afc8 Mon Sep 17 00:00:00 2001 From: Vincent Herlemont Date: Sat, 2 Sep 2023 12:49:01 +0200 Subject: [PATCH 015/316] feat: init --- .../workflows/build_and_test_release.yml | 71 ++++ .../workflows/conventional_commits.yml | 13 + libraries/native_model/.gitignore | 5 + libraries/native_model/Cargo.toml | 39 ++ libraries/native_model/LICENSE | 21 ++ libraries/native_model/README.md | 168 +++++++++ libraries/native_model/README.md.skt.md | 140 +++++++ libraries/native_model/benches/overhead.rs | 49 +++ .../benches/overhead_on_bincode.rs | 88 +++++ libraries/native_model/build.rs | 11 + libraries/native_model/cargo_publish.sh | 14 + .../native_model_macro/Cargo.toml | 19 + .../native_model/native_model_macro/README.md | 1 + .../native_model_macro/src/lib.rs | 114 ++++++ .../src/method/decode_body.rs | 15 + .../src/method/decode_upgrade_body.rs | 50 +++ .../src/method/encode_body.rs | 15 + .../src/method/encode_downgrade_body.rs | 54 +++ .../native_model_macro/src/method/id.rs | 13 + .../native_model_macro/src/method/mod.rs | 13 + .../native_model_macro/src/method/version.rs | 13 + libraries/native_model/release.config.js | 38 ++ libraries/native_model/renovate.json | 21 ++ libraries/native_model/src/header.rs | 9 + libraries/native_model/src/lib.rs | 114 ++++++ libraries/native_model/src/model.rs | 60 +++ libraries/native_model/src/wrapper.rs | 86 +++++ libraries/native_model/tests/_example.rs | 1 + libraries/native_model/tests/_experiment.rs | 344 ++++++++++++++++++ .../tests/example/encode_decode/bincode.rs | 34 ++ .../example/encode_decode/bincode_serde.rs | 34 ++ .../tests/example/encode_decode/mod.rs | 2 + .../tests/example/example_define_model.rs | 104 ++++++ .../tests/example/example_main.rs | 70 ++++ libraries/native_model/tests/example/mod.rs | 3 + libraries/native_model/tests/macro.rs | 46 +++ .../tests/macro_decode_decode_upgrade.rs | 149 ++++++++ .../native_model/tests/macro_encode_decode.rs | 48 +++ .../native_model/tests/native_model_from.rs | 102 ++++++ .../tests/native_model_try_from.rs | 74 ++++ libraries/native_model/tests/skeptic.rs | 1 + libraries/native_model/version_update.sh | 39 ++ 42 files changed, 2305 insertions(+) create mode 100644 libraries/native_model/.github/workflows/build_and_test_release.yml create mode 100644 libraries/native_model/.github/workflows/conventional_commits.yml create mode 100644 libraries/native_model/.gitignore create mode 100644 libraries/native_model/Cargo.toml create mode 100644 libraries/native_model/LICENSE create mode 100644 libraries/native_model/README.md create mode 100644 libraries/native_model/README.md.skt.md create mode 100644 libraries/native_model/benches/overhead.rs create mode 100644 libraries/native_model/benches/overhead_on_bincode.rs create mode 100644 libraries/native_model/build.rs create mode 100755 libraries/native_model/cargo_publish.sh create mode 100644 libraries/native_model/native_model_macro/Cargo.toml create mode 100644 libraries/native_model/native_model_macro/README.md create mode 100644 libraries/native_model/native_model_macro/src/lib.rs create mode 100644 libraries/native_model/native_model_macro/src/method/decode_body.rs create mode 100644 libraries/native_model/native_model_macro/src/method/decode_upgrade_body.rs create mode 100644 libraries/native_model/native_model_macro/src/method/encode_body.rs create mode 100644 libraries/native_model/native_model_macro/src/method/encode_downgrade_body.rs create mode 100644 libraries/native_model/native_model_macro/src/method/id.rs create mode 100644 libraries/native_model/native_model_macro/src/method/mod.rs create mode 100644 libraries/native_model/native_model_macro/src/method/version.rs create mode 100644 libraries/native_model/release.config.js create mode 100644 libraries/native_model/renovate.json create mode 100644 libraries/native_model/src/header.rs create mode 100644 libraries/native_model/src/lib.rs create mode 100644 libraries/native_model/src/model.rs create mode 100644 libraries/native_model/src/wrapper.rs create mode 100644 libraries/native_model/tests/_example.rs create mode 100644 libraries/native_model/tests/_experiment.rs create mode 100644 libraries/native_model/tests/example/encode_decode/bincode.rs create mode 100644 libraries/native_model/tests/example/encode_decode/bincode_serde.rs create mode 100644 libraries/native_model/tests/example/encode_decode/mod.rs create mode 100644 libraries/native_model/tests/example/example_define_model.rs create mode 100644 libraries/native_model/tests/example/example_main.rs create mode 100644 libraries/native_model/tests/example/mod.rs create mode 100644 libraries/native_model/tests/macro.rs create mode 100644 libraries/native_model/tests/macro_decode_decode_upgrade.rs create mode 100644 libraries/native_model/tests/macro_encode_decode.rs create mode 100644 libraries/native_model/tests/native_model_from.rs create mode 100644 libraries/native_model/tests/native_model_try_from.rs create mode 100644 libraries/native_model/tests/skeptic.rs create mode 100755 libraries/native_model/version_update.sh diff --git a/libraries/native_model/.github/workflows/build_and_test_release.yml b/libraries/native_model/.github/workflows/build_and_test_release.yml new file mode 100644 index 00000000..2cdc77d3 --- /dev/null +++ b/libraries/native_model/.github/workflows/build_and_test_release.yml @@ -0,0 +1,71 @@ +name: Linux/Windows/macOS (Build/Test/Release) + +on: + push: + branches: [ main, next ] + pull_request: + branches: [ main, next ] + +jobs: + build_test_common_os: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: true + matrix: + os: [ubuntu-latest, windows-latest, macOS-latest] + toolchain: [stable] + feature: [ no_feature ] + steps: + - uses: actions/checkout@v3 + - name: Setup Rust + uses: actions-rs/toolchain@v1 + with: + toolchain: ${{ matrix.toolchain }} + override: true + - name: Setup Feature Args + shell: bash + run: | + if [[ "${{ matrix.feature }}" == "no_feature" ]]; then + echo "FEATURE_ARGS=" >> $GITHUB_ENV + else + echo "FEATURE_ARGS=-F ${{ matrix.feature }}" >> $GITHUB_ENV + fi + - name: Build + uses: actions-rs/cargo@v1 + with: + command: build + args: ${{ env.FEATURE_ARGS }} + - name: Run tests + uses: actions-rs/cargo@v1 + with: + command: test + args: ${{ env.FEATURE_ARGS }} + release: + name: Release + runs-on: ubuntu-latest + needs: [build_test_common_os] + if: github.ref == 'refs/heads/main' + permissions: + contents: write + packages: write + steps: + - name: Checkout code + uses: actions/checkout@v3 + with: + ref: main + + - name: install npm + uses: actions/setup-node@v3 + with: + node-version: '16' + + - name: install @semantic-release/exec + run: npm install @semantic-release/exec + + - name: Semantic Release + uses: cycjimmy/semantic-release-action@v3 + with: + branch: main + env: + GITHUB_TOKEN: ${{ secrets.PAT_GLOBAL }} + CARGO_TOKEN: ${{ secrets.CARGO_TOKEN }} \ No newline at end of file diff --git a/libraries/native_model/.github/workflows/conventional_commits.yml b/libraries/native_model/.github/workflows/conventional_commits.yml new file mode 100644 index 00000000..1a04683a --- /dev/null +++ b/libraries/native_model/.github/workflows/conventional_commits.yml @@ -0,0 +1,13 @@ +name: Conventional Commits + +on: + pull_request: + branches: [ main ] + +jobs: + build: + name: Conventional Commits + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: webiny/action-conventional-commits@v1.1.0 \ No newline at end of file diff --git a/libraries/native_model/.gitignore b/libraries/native_model/.gitignore new file mode 100644 index 00000000..5dd8b9d2 --- /dev/null +++ b/libraries/native_model/.gitignore @@ -0,0 +1,5 @@ +/target +/Cargo.lock + +/native_model_macro/target +/native_model_macro/Cargo.lock diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml new file mode 100644 index 00000000..4da3106b --- /dev/null +++ b/libraries/native_model/Cargo.toml @@ -0,0 +1,39 @@ +[package] +name = "native_model" +version = "0.1.0" +authors = ["Vincent Herlemont "] +edition = "2021" +description = "A thin wrapper around serialized data which add information of identity and version." +license = "MIT" +repository = "https://github.com/vincent-herlemont/native_model" +readme = "README.md" +build = "build.rs" +keywords = ["serialization", "interoperability", "data-consistency", "flexibility", "performance"] +categories = ["data-structures", "encoding", "rust-patterns"] + +[workspace] +members = ["native_model_macro"] + +[dependencies] +zerocopy = { version = "0.7.1", features = [ "derive"] } +thiserror = "1.0" +anyhow = "1.0" +native_model_macro = { version = "0.1.0", path = "native_model_macro" } + +[dev-dependencies] +serde = { version = "1.0", features = ["derive"] } +bincode = { version = "2.0.0-rc.3", features = ["serde"] } +serde_json = "1.0" +criterion = { version = "0.5.1" } +skeptic = "0.13" + +[[bench]] +name = "overhead" +harness = false + +[[bench]] +name = "overhead_on_bincode" +harness = false + +[build-dependencies] +skeptic = "0.13" \ No newline at end of file diff --git a/libraries/native_model/LICENSE b/libraries/native_model/LICENSE new file mode 100644 index 00000000..60a8c5ea --- /dev/null +++ b/libraries/native_model/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Vincent Herlemont + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/libraries/native_model/README.md b/libraries/native_model/README.md new file mode 100644 index 00000000..4017deea --- /dev/null +++ b/libraries/native_model/README.md @@ -0,0 +1,168 @@ +# Native model + +[![Crates.io](https://img.shields.io/crates/v/native_model)](https://crates.io/crates/native_model) +[![Build and Release](https://github.com/vincent-herlemont/native_model/actions/workflows/build_and_test_release. +yml/badge. +svg)](https://github.com/vincent-herlemont/native_model/actions/workflows/build_and_test_release.yml) +[![Documentation](https://docs.rs/native_model/badge.svg)](https://docs.rs/native_model) +[![License](https://img.shields.io/crates/l/native_model)](LICENSE) + +A thin wrapper around serialized data which add information of identity and version. + +## Goals + +- **Interoperability**: Allows different applications to work together, even if they are using different + versions of the data model. +- **Data Consistency**: Ensure that we process the data expected model. +- **Flexibility**: You can use any serialization format you want. More details [here](#setup-your-serialization-format). +- **Performance**: A minimal overhead. More details [here](#performance). + +## Usage + +``` + Application 1 (DotV1) Application 2 (DotV1 and DotV2) + | | + Encode DotV1 |----------------------------------------> | Decode DotV1 to DotV2 + | | Modify DotV2 + Decode DotV1 | <----------------------------------------| Encode DotV2 back to DotV1 + | | +``` + + +```rust,skt-main +// Application 1 +let dot = DotV1(1, 2); +let bytes = native_model::encode(&dot).unwrap(); + +// Application 1 sends bytes to Application 2. + +// Application 2 +// We are able to decode the bytes directly into a new type DotV2. +let (mut dot, source_version) = native_model::decode::(bytes).unwrap(); +assert_eq!(dot, DotV2 { + name: "".to_string(), + x: 1, + y: 2 +}); +dot.name = "Dot".to_string(); +dot.x = 5; +// For interoperability, we encode the data with the version compatible with Application 1. +let bytes = native_model::encode_downgrade(dot, source_version).unwrap(); + +// Application 2 sends bytes to Application 1. + +// Application 1 +let (dot, _) = native_model::decode::(bytes).unwrap(); +assert_eq!(dot, DotV1(5, 2)); + ``` + +Full example [here](./tests/example/example_main.rs). + +When use it? +- Your applications that interact with each other are written in Rust. +- Your applications evolve independently need to read serialized data coming from each other. +- Your applications store data locally and need to read it later by a newer version of the application. +- Your systems need to be upgraded incrementally. Instead of having to upgrade the entire system at once, individual + applications can be upgraded one at a time, while still being able to communicate with each other. + +When not use it? +- Your applications that interact with each other are **not all** written in Rust. +- Your applications need to communicate with other systems that you don't control. +- You need to have a human-readable format. (You can use a human-readable format like JSON wrapped in a native model, + but you have to unwrap it to see the data correctly.) + +# Status + +Early development. Not ready for production. + +## Setup your serialization format + +First, you need to set up your serialization format. You can use any serialization format. + +Just define the following functions, so they must be imported in the scope where you use the native model. + +```rust,ignore +fn native_model_encode_body(obj: &T) -> Result, dyn Error> { + ... +} + +fn native_model_decode_body(data: Vec) -> Result { + ... +} +``` +Examples: +- [bincode with encode/decode](./tests/example/encode_decode/bincode.rs) +- [bincode with serde](./tests/example/encode_decode/bincode_serde.rs) + + +## Setup your data model + +Define your model using the macro [`native_model`](file:///home/vincentherlemont/IdeaProjects/native_model/target/doc/native_model/attr.native_model.html). + +Attributes: +- `id = u32`: The unique identifier of the model. +- `version = u32`: The version of the model. +- `from = type`: Optional, the previous version of the model. + - `type`: The previous version of the model that you use for the From implementation. +- `try_from = (type, error)`: Optional, the previous version of the model with error handling. + - `type`: The previous version of the model that you use for the TryFrom implementation. + - `error`: The error type that you use for the TryFrom implementation. + +```rust,skt-define-models +use native_model::native_model; + +#[derive(Encode, Decode, PartialEq, Debug)] +#[native_model(id = 1, version = 1)] +struct DotV1(u32, u32); + +#[derive(Encode, Decode, PartialEq, Debug)] +#[native_model(id = 1, version = 2, from = DotV1)] +struct DotV2 { + name: String, + x: u64, + y: u64, +} + +// Implement the conversion between versions From for DotV2 and From for DotV1. + +#[derive(Encode, Decode, PartialEq, Debug)] +#[native_model(id = 1, version = 3, try_from = (DotV2, anyhow::Error))] +struct DotV3 { + name: String, + cord: Cord, +} + +#[derive(Encode, Decode, PartialEq, Debug)] +struct Cord { + x: u64, + y: u64, +} + +// Implement the conversion between versions From for DotV3 and From for DotV2. +``` + +Full example [here](tests/example/example_define_model.rs). + + +# Performance + +This crate is in an early stage of development, so the performance should be improved in the future. +The goal is to have a minimal and constant overhead for all data sizes. It uses the [zerocopy](https://docs.rs/zerocopy/latest/zerocopy/) crate to avoid unnecessary copies. + +Current performance: +- Encode time: have overhead that evolves linearly with the data size. +- Decode time: have overhead of ~162 ps for all data sizes. + + +| data size | encode time (ns/ps/µs/ms) | decode time (ps) | +|:---------------------:|:--------------------------:|:----------------:| +| 1 B | 40.093 ns - 40.510 ns | 161.87 ps - 162.02 ps | +| 1 KiB (1024 B) | 116.45 ns - 116.83 ns | 161.85 ps - 162.08 ps | +| 1 MiB (1048576 B) | 66.697 µs - 67.634 µs | 161.87 ps - 162.18 ps | +| 10 MiB (10485760 B) | 1.5670 ms - 1.5843 ms | 162.40 ps - 163.52 ps | +| 100 MiB (104857600 B) | 63.778 ms - 64.132 ms | 162.71 ps - 165.10 ps | + +Benchmark of the native model overhead [here](benches/overhead.rs). + +To know how much time it takes to encode/decode your data, you need to add this overhead to the time of your serialization format. + diff --git a/libraries/native_model/README.md.skt.md b/libraries/native_model/README.md.skt.md new file mode 100644 index 00000000..969e1ffb --- /dev/null +++ b/libraries/native_model/README.md.skt.md @@ -0,0 +1,140 @@ +```rust,skt-main +use bincode; +use bincode::{{Decode, Encode}}; +use native_model_macro::native_model; + +fn native_model_encode_body( + model: &T, +) -> Result, bincode::error::EncodeError> {{ + {{ + bincode::encode_to_vec(model, bincode::config::standard()) + }} +}} + +fn native_model_decode_body( + data: Vec, +) -> Result {{ + {{ + bincode::decode_from_slice(&data, bincode::config::standard()).map(|(result, _)| result) + }} +}} + +#[derive(Encode, Decode, PartialEq, Debug)] +#[native_model(id = 1, version = 1)] +struct DotV1(u32, u32); + +#[derive(Encode, Decode, PartialEq, Debug)] +#[native_model(id = 1, version = 2, from = DotV1)] +struct DotV2 {{ + name: String, + x: u64, + y: u64, +}} + +impl From for DotV2 {{ + fn from(dot: DotV1) -> Self {{ + DotV2 {{ + name: "".to_string(), + x: dot.0 as u64, + y: dot.1 as u64, + }} + }} +}} + +impl From for DotV1 {{ + fn from(dot: DotV2) -> Self {{ + DotV1(dot.x as u32, dot.y as u32) + }} +}} + + +fn main() {{ + {} +}} +``` + +```rust,skt-define-models +use bincode::{{config, Decode, Encode}}; + +#[allow(dead_code)] +fn native_model_encode_body(obj: &T) -> Result, bincode::error::EncodeError> {{ + bincode::encode_to_vec(obj, config::standard()) +}} + +#[allow(dead_code)] +fn native_model_decode_body(data: Vec) -> Result {{ + bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) +}} + + +{} + +impl From for DotV2 {{ + fn from(dot: DotV1) -> Self {{ + DotV2 {{ + name: "".to_string(), + x: dot.0 as u64, + y: dot.1 as u64, + }} + }} +}} + +impl From for DotV1 {{ + fn from(dot: DotV2) -> Self {{ + DotV1(dot.x as u32, dot.y as u32) + }} +}} + +impl TryFrom for DotV3 {{ + type Error = anyhow::Error; + + fn try_from(dot: DotV2) -> Result {{ + Ok(DotV3 {{ + name: dot.name, + cord: Cord {{ x: dot.x, y: dot.y }}, + }}) + }} +}} + +impl TryFrom for DotV2 {{ + type Error = anyhow::Error; + + fn try_from(dot: DotV3) -> Result {{ + Ok(DotV2 {{ + name: dot.name, + x: dot.cord.x, + y: dot.cord.y, + }}) + }} +}} + + + +fn main() {{ + let dot = DotV1(1, 2); + let bytes = native_model::encode(&dot).unwrap(); + + let (dot_decoded, _) = native_model::decode::(bytes.clone()).unwrap(); + assert_eq!(dot, dot_decoded); + + let (dot_decoded, _) = native_model::decode::(bytes.clone()).unwrap(); + assert_eq!( + DotV2 {{ + name: "".to_string(), + x: 1, + y: 2 + }}, + dot_decoded + ); + + let (dot_decoded, _) = native_model::decode::(bytes.clone()).unwrap(); + assert_eq!( + DotV3 {{ + name: "".to_string(), + cord: Cord {{ x: 1, y: 2 }} + }}, + dot_decoded + ); +}} + +``` \ No newline at end of file diff --git a/libraries/native_model/benches/overhead.rs b/libraries/native_model/benches/overhead.rs new file mode 100644 index 00000000..2946afe4 --- /dev/null +++ b/libraries/native_model/benches/overhead.rs @@ -0,0 +1,49 @@ +use bincode::{Decode, Encode}; +use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion}; +use native_model_macro::native_model; + +fn native_model_encode_body(obj: &T) -> Result, bincode::error::EncodeError> { + bincode::encode_to_vec(obj, bincode::config::standard()) +} + +fn native_model_decode_body(data: Vec) -> Result { + bincode::decode_from_slice(&data, bincode::config::standard()).map(|(result, _)| result) +} + +#[derive(Encode, Decode)] +#[native_model(id = 1, version = 1)] +struct Data(Vec); + +fn wrapper(data: &mut Vec) { + native_model::wrapper::native_model_encode(data, 1, 1); +} + +fn unwrap(data: &mut Vec) { + native_model::wrapper::Wrapper::deserialize(&data[..]).unwrap(); +} + +fn criterion_benchmark(c: &mut Criterion) { + let mut group = c.benchmark_group("encode"); + + // 1 byte, 1KB, 1MB, 10MB, 100MB + for nb_bytes in [1, 1024, 1024 * 1024, 10 * 1024 * 1024, 100 * 1024 * 1024].into_iter() { + group.throughput(criterion::Throughput::Bytes(nb_bytes as u64)); + + // encode + let data = Data(vec![1; nb_bytes]); + let encode_body = native_model_encode_body(&data).unwrap(); + group.bench_function(BenchmarkId::new("encode", nb_bytes), |b| { + b.iter(|| wrapper(&mut encode_body.clone())) + }); + + // decode + let data = Data(vec![1; nb_bytes]); + let encode_body = native_model::encode(&data).unwrap(); + group.bench_function(BenchmarkId::new("decode", nb_bytes), |b| { + b.iter(|| unwrap(&mut encode_body.clone())) + }); + } +} + +criterion_group!(benches, criterion_benchmark); +criterion_main!(benches); diff --git a/libraries/native_model/benches/overhead_on_bincode.rs b/libraries/native_model/benches/overhead_on_bincode.rs new file mode 100644 index 00000000..48b1212a --- /dev/null +++ b/libraries/native_model/benches/overhead_on_bincode.rs @@ -0,0 +1,88 @@ +use bincode::{Decode, Encode}; +use criterion::{black_box, criterion_group, criterion_main, Criterion}; +use native_model_macro::native_model; + +#[derive(Encode, Decode)] +struct DataForBincode { + x: i32, + string: String, +} + +// Encode 1 data with bincode +fn native_model_encode_body(obj: &T) -> Result, bincode::error::EncodeError> { + bincode::encode_to_vec(obj, bincode::config::standard()) +} + +fn native_model_decode_body(data: Vec) -> Result { + bincode::decode_from_slice(&data, bincode::config::standard()).map(|(result, _)| result) +} + +fn encode_with_bincode(data: &DataForBincode) -> Vec { + native_model_encode_body(data).unwrap() +} + +fn decode_with_bincode(data: Vec) -> DataForBincode { + native_model_decode_body(data).unwrap() +} + +fn encode_decode_with_bincode(data: &DataForBincode) -> DataForBincode { + decode_with_bincode(encode_with_bincode(data)) +} + +#[derive(Encode, Decode)] +#[native_model(id = 1, version = 1)] +struct DataForNativeModel { + x: i32, + string: String, +} + +fn encode_with_native_model(data: &DataForNativeModel) -> Vec { + native_model::encode(data).unwrap() +} + +fn decode_with_native_model(data: Vec) -> DataForNativeModel { + let (data, _) = native_model::decode::(data).unwrap(); + data +} + +fn encode_decode_with_native_model(data: &DataForNativeModel) -> DataForNativeModel { + decode_with_native_model(encode_with_native_model(data)) +} + +fn criterion_benchmark(c: &mut Criterion) { + // Bincode + let data = DataForBincode { + x: 1, + // Set a very long string + string: "Hello".repeat(10000), + }; + c.bench_function("encode_with_bincode", |b| { + b.iter(|| encode_with_bincode(black_box(&data))) + }); + let encoded_data = encode_with_bincode(&data); + c.bench_function("decode_with_bincode", |b| { + b.iter(|| decode_with_bincode(black_box(encoded_data.clone()))) + }); + c.bench_function("encode_decode_with_bincode", |b| { + b.iter(|| encode_decode_with_bincode(black_box(&data))) + }); + + // Native model + let data = DataForNativeModel { + x: 1, + string: "Hello".repeat(10000), + }; + c.bench_function("encode_with_native_model", |b| { + b.iter(|| encode_with_native_model(black_box(&data))) + }); + let encoded_data = native_model::encode(&data).unwrap(); + c.bench_function("decode_with_native_model", |b| { + b.iter(|| decode_with_native_model(black_box(encoded_data.clone()))) + }); + c.bench_function("encode_decode_with_native_model", |b| { + b.iter(|| encode_decode_with_native_model(black_box(&data))) + }); +} + +criterion_group!(benches, criterion_benchmark); +criterion_main!(benches); diff --git a/libraries/native_model/build.rs b/libraries/native_model/build.rs new file mode 100644 index 00000000..5be349fc --- /dev/null +++ b/libraries/native_model/build.rs @@ -0,0 +1,11 @@ +extern crate skeptic; + +use skeptic::{generate_doc_tests, markdown_files_of_directory}; + +fn main() { + { + let mut mdbook_files = markdown_files_of_directory("doc/"); + mdbook_files.push("README.md".into()); + generate_doc_tests(&mdbook_files); + } +} diff --git a/libraries/native_model/cargo_publish.sh b/libraries/native_model/cargo_publish.sh new file mode 100755 index 00000000..36787b98 --- /dev/null +++ b/libraries/native_model/cargo_publish.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +set -e +set -x + +ARG_TOKEN="--token=$CARGO_TOKEN" + +cd $DIR/native_model_macro +cargo publish $ARG_TOKEN $@ + +cd $DIR +cargo publish $ARG_TOKEN $@ \ No newline at end of file diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml new file mode 100644 index 00000000..04306f22 --- /dev/null +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "native_model_macro" +version = "0.1.0" +authors = ["Vincent Herlemont "] +edition = "2018" +description = "A procedural macro for native_model" +license = "MIT" +repository = "https://github.com/vincent-herlemont/native_model" +readme = "README.md" + + +[lib] +path = "src/lib.rs" +proc-macro = true + +[dependencies] +syn = { version = "2.0", features = ["full"] } +quote = "1.0" +proc-macro2 = "1.0.66" diff --git a/libraries/native_model/native_model_macro/README.md b/libraries/native_model/native_model_macro/README.md new file mode 100644 index 00000000..136027bb --- /dev/null +++ b/libraries/native_model/native_model_macro/README.md @@ -0,0 +1 @@ +A procedural macro for [native_model](https://github.com/vincent-herlemont/native_model). \ No newline at end of file diff --git a/libraries/native_model/native_model_macro/src/lib.rs b/libraries/native_model/native_model_macro/src/lib.rs new file mode 100644 index 00000000..80fce1df --- /dev/null +++ b/libraries/native_model/native_model_macro/src/lib.rs @@ -0,0 +1,114 @@ +extern crate proc_macro; + +mod method; + +use crate::method::{ + generate_native_model_decode_body, generate_native_model_decode_upgrade_body, + generate_native_model_encode_body, generate_native_model_encode_downgrade_body, + generate_native_model_id, generate_native_model_version, +}; +use proc_macro::TokenStream; +use quote::quote; +use syn::meta::ParseNestedMeta; +use syn::parse::{Parse, Result}; +use syn::punctuated::Punctuated; +use syn::token; +use syn::{parse_macro_input, DeriveInput, LitInt, Path, Token}; + +// Inspiration: https://docs.rs/syn/2.0.29/syn/meta/fn.parser.html#example-1 +#[derive(Default)] +pub(crate) struct ModelAttributes { + pub(crate) id: Option, + pub(crate) version: Option, + // type + pub(crate) from: Option, + // (type, try_from::Error type) + pub(crate) try_from: Option<(Path, Path)>, +} + +impl ModelAttributes { + fn parse(&mut self, meta: ParseNestedMeta) -> Result<()> { + if meta.path.is_ident("id") { + self.id = Some(meta.value()?.parse()?); + } else if meta.path.is_ident("version") { + self.version = Some(meta.value()?.parse()?); + } else if meta.path.is_ident("from") { + self.from = Some(meta.value()?.parse()?); + } else if meta.path.is_ident("try_from") { + let tuple_try_from: TupleTryFrom = meta.value()?.parse()?; + let mut fields = tuple_try_from.fields.into_iter(); + self.try_from.replace(( + fields.next().unwrap().clone(), + fields.next().unwrap().clone(), + )); + } else { + panic!( + "Unknown attribute: {}", + meta.path.get_ident().unwrap().to_string() + ); + } + Ok(()) + } +} + +#[derive(Default)] +pub(crate) struct TupleTryFrom { + pub(crate) _parent_token: token::Paren, + pub(crate) fields: Punctuated, +} + +impl Parse for TupleTryFrom { + fn parse(input: syn::parse::ParseStream) -> syn::Result { + let content; + Ok(TupleTryFrom { + _parent_token: syn::parenthesized!(content in input), + fields: content.parse_terminated(Path::parse, Token![,])?, + }) + } +} + +/// Macro which add identity and version to your rust type. +/// +/// Attributes: +/// - `id = u32`: The unique identifier of the model. +/// - `version = u32`: The version of the model. +/// - `from = type`: Optional, the previous version of the model. +/// - `type`: The previous version of the model that you use for the From implementation. +/// - `try_from = (type, error)`: Optional, the previous version of the model with error handling. +/// - `type`: The previous version of the model that you use for the TryFrom implementation. +/// - `error`: The error type that you use for the TryFrom implementation. +/// +/// See examples: +/// - [Setup your data model](https://github.com/vincent-herlemont/native_model_private#setup-your-data-model). +/// - other [examples](https://github.com/vincent-herlemont/native_model/tree/master/tests/example) +#[proc_macro_attribute] +pub fn native_model(args: TokenStream, input: TokenStream) -> TokenStream { + let ast = parse_macro_input!(input as DeriveInput); + let struct_name = &ast.ident; + + let mut attrs = ModelAttributes::default(); + let model_attributes_parser = syn::meta::parser(|meta| attrs.parse(meta)); + parse_macro_input!(args with model_attributes_parser); + + let native_model_id_fn = generate_native_model_id(&attrs); + let native_model_version_fn = generate_native_model_version(&attrs); + let native_model_encode_body_fn = generate_native_model_encode_body(); + let native_model_encode_downgrade_body_fn = generate_native_model_encode_downgrade_body(&attrs); + let native_model_decode_body_fn = generate_native_model_decode_body(); + let native_model_decode_upgrade_body_fn = generate_native_model_decode_upgrade_body(&attrs); + + let gen = quote! { + #ast + + impl native_model::Model for #struct_name { + #native_model_id_fn + #native_model_version_fn + #native_model_encode_body_fn + #native_model_encode_downgrade_body_fn + #native_model_decode_body_fn + #native_model_decode_upgrade_body_fn + } + }; + + gen.into() +} diff --git a/libraries/native_model/native_model_macro/src/method/decode_body.rs b/libraries/native_model/native_model_macro/src/method/decode_body.rs new file mode 100644 index 00000000..99137878 --- /dev/null +++ b/libraries/native_model/native_model_macro/src/method/decode_body.rs @@ -0,0 +1,15 @@ +use proc_macro2::TokenStream; +use quote::quote; + +pub(crate) fn generate_native_model_decode_body() -> TokenStream { + let gen = quote! { + fn native_model_decode_body(data: Vec) -> Result { + native_model_decode_body(data).map_err(|e| native_model::DecodeBodyError { + msg: format!("{}", e), + source: e.into(), + }) + } + }; + + gen.into() +} \ No newline at end of file diff --git a/libraries/native_model/native_model_macro/src/method/decode_upgrade_body.rs b/libraries/native_model/native_model_macro/src/method/decode_upgrade_body.rs new file mode 100644 index 00000000..bc4ad5c7 --- /dev/null +++ b/libraries/native_model/native_model_macro/src/method/decode_upgrade_body.rs @@ -0,0 +1,50 @@ +use crate::ModelAttributes; +use proc_macro2::TokenStream; +use quote::quote; + +pub(crate) fn generate_native_model_decode_upgrade_body(attrs: &ModelAttributes) -> TokenStream { + let native_model_from = attrs.from.clone(); + let native_model_try_from = attrs.try_from.clone(); + + let model_from_or_try_from = if let Some(from) = native_model_from { + quote! { + #from::native_model_decode_upgrade_body(data, x).map(|a| a.into()) + } + } else if let Some((try_from, error_try_from)) = native_model_try_from { + quote! { + let result = #try_from::native_model_decode_upgrade_body(data, x).map(|b| { + b.try_into() + .map_err(|e: #error_try_from| native_model::UpgradeError { + msg: format!("{}", e), + source: e.into(), + }) + })??; + Ok(result) + } + } else { + quote! { + Err(native_model::Error::UpgradeNotSupported { + from: x, + to: Self::native_model_version(), + }) + } + }; + + let gen = quote! { + fn native_model_decode_upgrade_body(data: Vec, x: u32) -> native_model::Result { + if x == Self::native_model_version() { + let result = Self::native_model_decode_body(data)?; + Ok(result) + } else if x < Self::native_model_version() { + #model_from_or_try_from + } else { + Err(native_model::Error::UpgradeNotSupported { + from: x, + to: Self::native_model_version(), + }) + } + } + }; + + gen +} diff --git a/libraries/native_model/native_model_macro/src/method/encode_body.rs b/libraries/native_model/native_model_macro/src/method/encode_body.rs new file mode 100644 index 00000000..2fa097fe --- /dev/null +++ b/libraries/native_model/native_model_macro/src/method/encode_body.rs @@ -0,0 +1,15 @@ +use proc_macro2::TokenStream; +use quote::quote; + +pub(crate) fn generate_native_model_encode_body() -> TokenStream { + let gen = quote! { + fn native_model_encode_body(&self) -> Result, native_model::EncodeBodyError> { + native_model_encode_body(self).map_err(|e| native_model::EncodeBodyError { + msg: format!("{}", e), + source: e.into(), + }) + } + }; + + gen.into() +} \ No newline at end of file diff --git a/libraries/native_model/native_model_macro/src/method/encode_downgrade_body.rs b/libraries/native_model/native_model_macro/src/method/encode_downgrade_body.rs new file mode 100644 index 00000000..76b824bf --- /dev/null +++ b/libraries/native_model/native_model_macro/src/method/encode_downgrade_body.rs @@ -0,0 +1,54 @@ +use crate::ModelAttributes; +use proc_macro2::TokenStream; +use quote::quote; + +pub(crate) fn generate_native_model_encode_downgrade_body(attrs: &ModelAttributes) -> TokenStream { + let native_model_from = attrs.from.clone(); + let native_model_try_from = attrs.try_from.clone(); + + let model_from_or_try_from = if let Some(from) = native_model_from { + quote! { + #from::native_model_encode_downgrade_body(self.into(), version) + } + } else if let Some((try_from, error_try_from)) = native_model_try_from { + quote! { + let result = #try_from::native_model_encode_downgrade_body( + self.try_into() + .map_err(|e: #error_try_from| native_model::DowngradeError { + msg: format!("{}", e), + source: e.into(), + })?, + version, + )?; + Ok(result) + } + } else { + quote! { + Err(native_model::Error::DowngradeNotSupported { + from: version, + to: Self::native_model_version(), + }) + } + }; + + let gen = quote! { + fn native_model_encode_downgrade_body(self, version: u32) -> native_model::Result> { + if version == Self::native_model_version() { + let result = self.native_model_encode_body()?; + Ok(result) + } else if version < Self::native_model_version() { + #model_from_or_try_from + } else { + Err(native_model::Error::DowngradeNotSupported { + from: version, + to: Self::native_model_version(), + }) + } + } + }; + + gen +} + +// #[error("Wrong type id expected: {}, actual: {}", expected, actual)] +// WrongTypeId { expected: u32, actual: u32 }, diff --git a/libraries/native_model/native_model_macro/src/method/id.rs b/libraries/native_model/native_model_macro/src/method/id.rs new file mode 100644 index 00000000..6257e434 --- /dev/null +++ b/libraries/native_model/native_model_macro/src/method/id.rs @@ -0,0 +1,13 @@ +use crate::ModelAttributes; +use proc_macro2::TokenStream; +use quote::quote; + +pub(crate) fn generate_native_model_id(model_attributes: &ModelAttributes) -> TokenStream { + let native_model_id = model_attributes.id.clone().unwrap(); + let gen = quote! { + fn native_model_id() -> u32 { + #native_model_id + } + }; + gen +} diff --git a/libraries/native_model/native_model_macro/src/method/mod.rs b/libraries/native_model/native_model_macro/src/method/mod.rs new file mode 100644 index 00000000..1eb669ea --- /dev/null +++ b/libraries/native_model/native_model_macro/src/method/mod.rs @@ -0,0 +1,13 @@ +mod decode_body; +mod decode_upgrade_body; +mod encode_body; +mod encode_downgrade_body; +mod id; +mod version; + +pub(crate) use decode_body::*; +pub(crate) use decode_upgrade_body::*; +pub(crate) use encode_body::*; +pub(crate) use encode_downgrade_body::*; +pub(crate) use id::*; +pub(crate) use version::*; diff --git a/libraries/native_model/native_model_macro/src/method/version.rs b/libraries/native_model/native_model_macro/src/method/version.rs new file mode 100644 index 00000000..fd10d829 --- /dev/null +++ b/libraries/native_model/native_model_macro/src/method/version.rs @@ -0,0 +1,13 @@ +use crate::ModelAttributes; +use proc_macro2::TokenStream; +use quote::quote; + +pub(crate) fn generate_native_model_version(model_attributes: &ModelAttributes) -> TokenStream { + let native_model_version = model_attributes.version.clone().unwrap(); + let gen = quote! { + fn native_model_version() -> u32 { + #native_model_version + } + }; + gen +} diff --git a/libraries/native_model/release.config.js b/libraries/native_model/release.config.js new file mode 100644 index 00000000..b050a20b --- /dev/null +++ b/libraries/native_model/release.config.js @@ -0,0 +1,38 @@ +module.exports = { + branches: ['main'], + tagFormat: '${version}', + plugins: [ + ['@semantic-release/commit-analyzer', { + releaseRules: [ + {breaking: true, release: 'minor'}, + {revert: true, release: 'patch'}, + {type: 'feat', release: 'minor'}, + {type: 'fix', release: 'patch'}, + {type: 'perf', release: 'patch'}, + {type: 'docs', release: 'patch'}, + {emoji: ':racehorse:', release: 'patch'}, + {emoji: ':bug:', release: 'patch'}, + {emoji: ':penguin:', release: 'patch'}, + {emoji: ':apple:', release: 'patch'}, + {emoji: ':checkered_flag:', release: 'patch'}, + {tag: 'BUGFIX', release: 'patch'}, + {tag: 'FEATURE', release: 'minor'}, + {tag: 'SECURITY', release: 'patch'}, + {tag: 'Breaking', release: 'minor'}, + {tag: 'Fix', release: 'patch'}, + {tag: 'Update', release: 'minor'}, + {tag: 'New', release: 'minor'}, + {component: 'perf', release: 'patch'}, + {component: 'deps', release: 'patch'}, + {type: 'FEAT', release: 'minor'}, + {type: 'FIX', release: 'patch'}, + ], + }], + '@semantic-release/release-notes-generator', + ['@semantic-release/exec', { + "prepareCmd": "bash version_update.sh ${nextRelease.version}", + "publishCmd": "bash cargo_publish.sh", + }], + '@semantic-release/github', + ], +}; \ No newline at end of file diff --git a/libraries/native_model/renovate.json b/libraries/native_model/renovate.json new file mode 100644 index 00000000..067588e4 --- /dev/null +++ b/libraries/native_model/renovate.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": ["config:base"], + "semanticCommits": "enabled", + "semanticCommitType": "chore", + "semanticCommitScope": "deps", + "platformAutomerge": true, + "packageRules": [ + { + "description": "Automerge non-major updates", + "matchUpdateTypes": ["minor", "patch"], + "automerge": true + }, + { + "description": "Automerge actions", + "matchDepTypes": ["action"], + "matchUpdateTypes": ["major", "minor", "patch"], + "automerge": true + } + ] +} \ No newline at end of file diff --git a/libraries/native_model/src/header.rs b/libraries/native_model/src/header.rs new file mode 100644 index 00000000..5d09cce4 --- /dev/null +++ b/libraries/native_model/src/header.rs @@ -0,0 +1,9 @@ +use zerocopy::little_endian::U32; +use zerocopy::{AsBytes, FromBytes, FromZeroes}; + +#[derive(FromZeroes, FromBytes, AsBytes, Debug)] +#[repr(C)] +pub struct Header { + pub(crate) type_id: U32, + pub(crate) version: U32, +} diff --git a/libraries/native_model/src/lib.rs b/libraries/native_model/src/lib.rs new file mode 100644 index 00000000..40bb28d1 --- /dev/null +++ b/libraries/native_model/src/lib.rs @@ -0,0 +1,114 @@ +//! `native_model` is a Rust crate that acts as a thin wrapper around serialized data, adding identity and version information. +//! +//! - It aims to ensure: +//! - **Interoperability**: Different applications can work together even if they use different data model versions. +//! - **Data Consistency**: Ensures the data is processed as expected. +//! - **Flexibility**: Allows the use of any serialization format. +//! - **Minimal Performance Overhead**: Current performance shows linearly increasing encoding overhead with data size, and constant decoding overhead (~162 picoseconds) for all data sizes. +//! - **Suitability**: +//! - Suitable for applications that are written in Rust, evolve independently, store data locally, and require incremental upgrades. +//! - Not suitable for non-Rust applications, systems not controlled by the user, or when human-readable formats are needed. +//! - **Setup**: +//! - Users must define their own serialization format and data model. Examples and a `native_model` macro are provided for this purpose. +//! - **Development Stage**: +//! - The crate is in early development, and performance is expected to improve over time. +//! +//! See examples in the [README.md](https://github.com/vincent-herlemont/native_model) file. + +mod header; +mod model; +pub mod wrapper; + +pub use model::*; + +/// Macro to generate a [`native_model`] implementation for a struct. +pub use native_model_macro::*; + +use wrapper::*; + +use thiserror::Error; + +pub type Result = std::result::Result; + +#[derive(Error, Debug)] +pub enum Error { + #[error("Invalid header")] + InvalidHeader, + #[error("Failed to decode native model")] + DecodeError, + #[error(transparent)] + DecodeBodyError(#[from] DecodeBodyError), + #[error(transparent)] + EncodeBodyError(#[from] EncodeBodyError), + #[error(transparent)] + UpgradeError(#[from] UpgradeError), + #[error("Upgrade from {} to {} is not supported", from, to)] + UpgradeNotSupported { from: u32, to: u32 }, + #[error(transparent)] + DowngradeError(#[from] DowngradeError), + #[error("Downgrade from {} to {} is not supported", from, to)] + DowngradeNotSupported { from: u32, to: u32 }, + #[error("Wrong type id expected: {}, actual: {}", expected, actual)] + WrongTypeId { expected: u32, actual: u32 }, +} + +pub type DecodeResult = std::result::Result; + +#[derive(Error, Debug)] +#[error("Decode body error: {msg}")] +pub struct DecodeBodyError { + pub msg: String, + #[source] + pub source: anyhow::Error, +} + +pub type EncodeResult = std::result::Result; + +#[derive(Error, Debug)] +#[error("Encode body error: {msg}")] +pub struct EncodeBodyError { + pub msg: String, + #[source] + pub source: anyhow::Error, +} + +#[derive(Error, Debug)] +#[error("Upgrade error: {msg}")] +pub struct UpgradeError { + pub msg: String, + #[source] + pub source: anyhow::Error, +} + +#[derive(Error, Debug)] +#[error("Downgrade error: {msg}")] +pub struct DowngradeError { + pub msg: String, + #[source] + pub source: anyhow::Error, +} + +/// Allows to encode a [`native_model`] into a [`Vec`]. +/// +/// See examples: +/// - [README.md](https://github.com/vincent-herlemont/native_model) file. +/// - other [examples](https://github.com/vincent-herlemont/native_model/tree/master/tests/example) +pub fn encode(model: &T) -> Result> { + T::native_model_encode(model) +} + +/// Allows to encode a [`native_model`] into a [`Vec`] with a specific version. +/// See examples: +/// - [README.md](https://github.com/vincent-herlemont/native_model) file. +/// - other [examples](https://github.com/vincent-herlemont/native_model/tree/master/tests/example) +pub fn encode_downgrade(model: T, version: u32) -> Result> { + T::native_model_encode_downgrade(model, version) +} + +/// Allows to decode a [`native_model`] from a [`Vec`] and returns the version ([`u32`]). +/// See examples: +/// - [README.md](https://github.com/vincent-herlemont/native_model) file. +/// - other [examples](https://github.com/vincent-herlemont/native_model/tree/master/tests/example) +pub fn decode(data: Vec) -> Result<(T, u32)> { + T::native_model_decode(data) +} diff --git a/libraries/native_model/src/model.rs b/libraries/native_model/src/model.rs new file mode 100644 index 00000000..f1160afb --- /dev/null +++ b/libraries/native_model/src/model.rs @@ -0,0 +1,60 @@ +use crate::{DecodeResult, EncodeResult, Result}; + +pub trait Model: Sized { + fn native_model_id() -> u32; + fn native_model_version() -> u32; + + // --------------- Decode --------------- + + fn native_model_decode_body(data: Vec) -> DecodeResult + where + Self: Sized; + + fn native_model_decode_upgrade_body(data: Vec, version: u32) -> Result + where + Self: Sized; + + fn native_model_decode(data: Vec) -> Result<(Self, u32)> + where + Self: Sized, + { + let native_model = crate::Wrapper::deserialize(&data[..]).unwrap(); + let source_version = native_model.get_version(); + let result = + Self::native_model_decode_upgrade_body(native_model.value().to_vec(), source_version)?; + Ok((result, source_version)) + } + + // --------------- Encode --------------- + + fn native_model_encode_body(&self) -> EncodeResult> + where + Self: Sized; + + fn native_model_encode_downgrade_body(self, version: u32) -> Result> + where + Self: Sized; + + fn native_model_encode(&self) -> Result> + where + Self: Sized, + { + let mut data = self.native_model_encode_body()?; + crate::native_model_encode( + &mut data, + Self::native_model_id(), + Self::native_model_version(), + ); + Ok(data) + } + + fn native_model_encode_downgrade(self, version: u32) -> Result> + where + Self: Sized, + { + let version = version.clone(); + let mut data = self.native_model_encode_downgrade_body(version)?; + crate::native_model_encode(&mut data, Self::native_model_id(), version); + Ok(data) + } +} diff --git a/libraries/native_model/src/wrapper.rs b/libraries/native_model/src/wrapper.rs new file mode 100644 index 00000000..cc45652a --- /dev/null +++ b/libraries/native_model/src/wrapper.rs @@ -0,0 +1,86 @@ +use crate::header::Header; +use zerocopy::little_endian::U32; +use zerocopy::{AsBytes, ByteSlice, ByteSliceMut, Ref}; + +#[derive(Debug)] +pub struct Wrapper { + header: Ref, // Deprecated: Rename LayoutVerified to Ref #203 + value: T, +} + +impl Wrapper { + pub fn deserialize(packed: T) -> Option { + let (header_lv, rest) = Ref::<_, Header>::new_from_prefix(packed)?; + let native_model = Self { + header: header_lv, + value: rest, + }; + Some(native_model) + } + + pub fn value(&self) -> &T { + &self.value + } + + pub fn get_type_id(&self) -> u32 { + self.header.type_id.get() + } + + pub fn get_version(&self) -> u32 { + self.header.version.get() + } +} + +impl Wrapper { + pub fn set_type_id(&mut self, type_id: u32) { + self.header.type_id = U32::new(type_id); + } + + pub fn set_version(&mut self, version: u32) { + self.header.version = U32::new(version); + } +} + +pub fn native_model_encode(value: &mut Vec, type_id: u32, version: u32) { + let header = Header { + type_id: U32::new(type_id), + version: U32::new(version), + }; + let header = header.as_bytes(); + value.reserve(header.len()); + value.splice(..0, header.iter().cloned()); + + // Try to do with unsafe code to improve performance but benchmark shows that it's the same + // + // // Add header to the beginning of the vector + // unsafe { + // // get the raw pointer to the vector's buffer + // let ptr = value.as_mut_ptr(); + // + // // move the existing elements to the right + // ptr.offset(header.len() as isize) + // .copy_from_nonoverlapping(ptr, value.len()); + // + // // copy the elements from the header to the beginning of the vector + // ptr.copy_from_nonoverlapping(header.as_ptr(), header.len()); + // + // // update the length of the vector + // value.set_len(value.len() + header.len()); + // } +} + +#[cfg(test)] +mod tests { + use crate::{native_model_encode, Wrapper}; + + #[test] + fn native_model_deserialize_with_body() { + let mut data = vec![0u8; 8]; + native_model_encode(&mut data, 200000, 100000); + assert_eq!(data.len(), 16); + let model = Wrapper::deserialize(&data[..]).unwrap(); + assert_eq!(model.get_type_id(), 200000); + assert_eq!(model.get_version(), 100000); + assert_eq!(model.value().len(), 8); + } +} diff --git a/libraries/native_model/tests/_example.rs b/libraries/native_model/tests/_example.rs new file mode 100644 index 00000000..4fb02733 --- /dev/null +++ b/libraries/native_model/tests/_example.rs @@ -0,0 +1 @@ +mod example; diff --git a/libraries/native_model/tests/_experiment.rs b/libraries/native_model/tests/_experiment.rs new file mode 100644 index 00000000..42ddfffb --- /dev/null +++ b/libraries/native_model/tests/_experiment.rs @@ -0,0 +1,344 @@ +use bincode::{config, Decode, Encode}; +use native_model::Result; +use native_model::{DecodeBodyError, DecodeResult, EncodeBodyError, EncodeResult, Model}; + +// Add this function to the macro for custom serialization +fn native_model_encode(obj: &T) -> anyhow::Result> { + let result = bincode::encode_to_vec(obj, config::standard())?; + Ok(result) +} + +// Add this function to the macro for custom deserialization +fn native_model_decode(data: Vec) -> anyhow::Result { + let (result, _) = + bincode::decode_from_slice(&data, config::standard()).map_err(|e| EncodeBodyError { + msg: format!("Decode error: {}", e), + source: e.into(), + })?; + Ok(result) +} + +#[derive(Debug, Encode, Decode)] +struct A {} +impl Model for A { + fn native_model_id() -> u32 { + 1 + } + + fn native_model_version() -> u32 { + 1 + } + + fn native_model_decode_upgrade_body(_data: Vec, x: u32) -> Result { + println!( + "A::deserialization_and_upgrade({}, {})", + x, + Self::native_model_version() + ); + if x == Self::native_model_version() { + Ok(Self {}) + } else if x < Self::native_model_version() { + panic!("The version {} not supported", x); + } else { + panic!("Not implemented"); + } + } + + fn native_model_encode_body(&self) -> EncodeResult> + where + Self: Sized, + { + native_model_encode(self).map_err(|e| EncodeBodyError { + msg: format!("{}", e), + source: e.into(), + }) + } + + fn native_model_decode_body(data: Vec) -> DecodeResult + where + Self: Sized, + { + native_model_decode(data).map_err(|e| DecodeBodyError { + msg: format!("{}", e), + source: e.into(), + }) + } + + fn native_model_encode_downgrade_body(self, version: u32) -> Result> + where + Self: Sized, + { + println!( + "A::serialization_and_downgrade({}, {})", + version, + Self::native_model_version() + ); + if version == Self::native_model_version() { + let result = self.native_model_encode_body()?; + Ok(result) + } else if version < Self::native_model_version() { + panic!("The version {} not supported", version); + } else { + panic!("Not implemented"); + } + } +} + +#[derive(Debug, Encode, Decode)] +struct B {} +impl Model for B { + fn native_model_id() -> u32 { + 1 + } + + fn native_model_version() -> u32 { + 2 + } + + fn native_model_decode_upgrade_body(_data: Vec, x: u32) -> Result { + println!( + "B::deserialization_and_upgrade({}, {})", + x, + Self::native_model_version() + ); + if x == Self::native_model_version() { + Ok(Self {}) + } else if x < Self::native_model_version() { + A::native_model_decode_upgrade_body(_data, x).map(|a| a.into()) + } else { + panic!("Not implemented"); + } + } + + fn native_model_encode_body(&self) -> EncodeResult> + where + Self: Sized, + { + native_model_encode(self).map_err(|e| EncodeBodyError { + msg: format!("{}", e), + source: e.into(), + }) + } + + fn native_model_decode_body(data: Vec) -> DecodeResult + where + Self: Sized, + { + native_model_decode(data).map_err(|e| DecodeBodyError { + msg: format!("{}", e), + source: e.into(), + }) + } + + fn native_model_encode_downgrade_body(self, version: u32) -> Result> + where + Self: Sized, + { + println!( + "B::serialization_and_downgrade({}, {})", + version, + Self::native_model_version() + ); + if version == Self::native_model_version() { + let result = self.native_model_encode_body()?; + Ok(result) + } else if version < Self::native_model_version() { + A::native_model_encode_downgrade_body(self.into(), version) + } else { + panic!("Not implemented"); + } + } +} + +impl From for A { + fn from(_: B) -> Self { + Self {} + } +} + +impl From for B { + fn from(_: A) -> Self { + Self {} + } +} + +#[derive(Debug, Encode, Decode)] +struct C {} +impl Model for C { + fn native_model_id() -> u32 { + 1 + } + + fn native_model_version() -> u32 { + 3 + } + + fn native_model_decode_upgrade_body(_data: Vec, x: u32) -> Result { + println!( + "C::deserialization_and_upgrade({}, {})", + x, + Self::native_model_version() + ); + if x == Self::native_model_version() { + Ok(Self {}) + } else if x < Self::native_model_version() { + let result = B::native_model_decode_upgrade_body(_data, x).map(|b| { + b.try_into() + .map_err(|e: anyhow::Error| native_model::UpgradeError { + msg: format!("{}", e), + source: e.into(), + }) + })??; + Ok(result) + } else { + panic!("Not implemented"); + } + } + + fn native_model_encode_body(&self) -> EncodeResult> + where + Self: Sized, + { + native_model_encode(self).map_err(|e| EncodeBodyError { + msg: format!("{}", e), + source: e.into(), + }) + } + + fn native_model_decode_body(data: Vec) -> DecodeResult + where + Self: Sized, + { + native_model_decode(data).map_err(|e| DecodeBodyError { + msg: format!("{}", e), + source: e.into(), + }) + } + + fn native_model_encode_downgrade_body(self, version: u32) -> Result> + where + Self: Sized, + { + println!( + "C::serialization_and_downgrade({}, {})", + version, + Self::native_model_version() + ); + if version == Self::native_model_version() { + let result = self.native_model_encode_body()?; + Ok(result) + } else if version < Self::native_model_version() { + let result = B::native_model_encode_downgrade_body( + self.try_into() + .map_err(|e: anyhow::Error| native_model::DowngradeError { + msg: format!("{}", e), + source: e.into(), + })?, + version, + )?; + Ok(result) + } else { + panic!("Not implemented"); + } + } +} + +impl TryFrom for B { + type Error = anyhow::Error; + + fn try_from(_: C) -> anyhow::Result { + Ok(Self {}) + } +} + +impl TryFrom for C { + type Error = anyhow::Error; + + fn try_from(_: B) -> anyhow::Result { + Ok(Self {}) + } +} + +/** +I want to manage the upgrade and downgrade of native types using From and Into traits. +Let see 3 model A,B,C of a model id 1. +A is the oldest version of the model and is the version 1. +B is the intermediate version of the model and is the version 2. +C is the most recent version of the model and is the version 3. + +We need to imagine that the data are serialized as a vector of bytes. The only things that we know +is the model id 1 and the version of the model. + +I need to found an elegant way to deserialize the data as the most recent version of the model. +**/ + +#[test] +fn test_encode_downgrade() { + let x = 3; + let result = C::native_model_encode_downgrade_body(C {}, x); + dbg!(&result); + + let x = 2; + let result = C::native_model_encode_downgrade_body(C {}, x); + dbg!(&result); + + let x = 1; + let result = C::native_model_encode_downgrade_body(C {}, x); + dbg!(&result); +} + +#[test] +fn test_decode_upgrade() { + let x = 3; + let result = C::native_model_decode_upgrade_body(vec![], x); + dbg!(&result); + + let x = 2; + let result = C::native_model_decode_upgrade_body(vec![], x); + dbg!(&result); + + let x = 1; + let result = C::native_model_decode_upgrade_body(vec![], x); + dbg!(&result); +} + +fn native_model_decode_upgrade( + _data: Vec, + model_id: u32, + version: u32, +) -> native_model::Result +where + T: Model, +{ + if model_id == T::native_model_id() { + T::native_model_decode_upgrade_body(_data, version) + } else { + panic!("The model id {} not supported", model_id); + } +} + +#[test] +fn test_decode_upgrade_c() { + let x = 3; + let result: C = native_model_decode_upgrade(vec![], 1, x).unwrap(); + dbg!(&result); + + let x = 2; + let result: C = native_model_decode_upgrade(vec![], 1, x).unwrap(); + dbg!(&result); + + let x = 1; + let result: C = native_model_decode_upgrade(vec![], 1, x).unwrap(); + dbg!(&result); +} + +#[test] +fn test_decode_upgrade_b() { + let x = 2; + let result: B = native_model_decode_upgrade(vec![], 1, x).unwrap(); + dbg!(&result); + + // let x = 2; + // let result: B = native_model_decode_upgrade(vec![], 1, x).unwrap(); + // dbg!(&result); +} diff --git a/libraries/native_model/tests/example/encode_decode/bincode.rs b/libraries/native_model/tests/example/encode_decode/bincode.rs new file mode 100644 index 00000000..d3b8ce3f --- /dev/null +++ b/libraries/native_model/tests/example/encode_decode/bincode.rs @@ -0,0 +1,34 @@ +use bincode; +use bincode::{Decode, Encode}; + +fn native_model_encode_body( + model: &T, +) -> Result, bincode::error::EncodeError> { + { + bincode::encode_to_vec(model, bincode::config::standard()) + } +} + +fn native_model_decode_body( + data: Vec, +) -> Result { + { + bincode::decode_from_slice(&data, bincode::config::standard()).map(|(result, _)| result) + } +} + +use native_model_macro::native_model; + +#[derive(Encode, Decode, PartialEq, Debug)] +#[native_model(id = 1, version = 1)] +struct DotV1(u32, u32); + +#[test] +fn test_bincode_encode_decode() { + // Application 1 + let dot = DotV1(1, 2); + let bytes = native_model::encode(&dot).unwrap(); + // Application 1 + let (dot, _) = native_model::decode::(bytes).unwrap(); + assert_eq!(dot, DotV1(1, 2)); +} diff --git a/libraries/native_model/tests/example/encode_decode/bincode_serde.rs b/libraries/native_model/tests/example/encode_decode/bincode_serde.rs new file mode 100644 index 00000000..a4acd978 --- /dev/null +++ b/libraries/native_model/tests/example/encode_decode/bincode_serde.rs @@ -0,0 +1,34 @@ +use bincode; +use serde::{Deserialize, Serialize}; + +fn native_model_encode_body( + model: &T, +) -> Result, bincode::error::EncodeError> { + { + bincode::serde::encode_to_vec(model, bincode::config::standard()) + } +} + +fn native_model_decode_body Deserialize<'a>>( + data: Vec, +) -> Result { + { + Ok(bincode::serde::decode_from_slice(&data, bincode::config::standard())?.0) + } +} + +use native_model_macro::native_model; + +#[derive(Serialize, Deserialize, PartialEq, Debug)] +#[native_model(id = 1, version = 1)] +struct DotV1(u32, u32); + +#[test] +fn test_bincode_serde_serialize_deserialize() { + // Application 1 + let dot = DotV1(1, 2); + let bytes = native_model::encode(&dot).unwrap(); + // Application 1 + let (dot, _) = native_model::decode::(bytes).unwrap(); + assert_eq!(dot, DotV1(1, 2)); +} diff --git a/libraries/native_model/tests/example/encode_decode/mod.rs b/libraries/native_model/tests/example/encode_decode/mod.rs new file mode 100644 index 00000000..cd23757b --- /dev/null +++ b/libraries/native_model/tests/example/encode_decode/mod.rs @@ -0,0 +1,2 @@ +mod bincode; +mod bincode_serde; diff --git a/libraries/native_model/tests/example/example_define_model.rs b/libraries/native_model/tests/example/example_define_model.rs new file mode 100644 index 00000000..6deae702 --- /dev/null +++ b/libraries/native_model/tests/example/example_define_model.rs @@ -0,0 +1,104 @@ +use bincode::{config, Decode, Encode}; +use native_model_macro::native_model; + +#[allow(dead_code)] +fn native_model_encode_body(obj: &T) -> Result, bincode::error::EncodeError> { + bincode::encode_to_vec(obj, config::standard()) +} + +#[allow(dead_code)] +fn native_model_decode_body(data: Vec) -> Result { + bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) +} + +#[derive(Encode, Decode, PartialEq, Debug)] +#[native_model(id = 1, version = 1)] +struct DotV1(u32, u32); + +#[derive(Encode, Decode, PartialEq, Debug)] +#[native_model(id = 1, version = 2, from = DotV1)] +struct DotV2 { + name: String, + x: u64, + y: u64, +} + +impl From for DotV2 { + fn from(dot: DotV1) -> Self { + DotV2 { + name: "".to_string(), + x: dot.0 as u64, + y: dot.1 as u64, + } + } +} + +impl From for DotV1 { + fn from(dot: DotV2) -> Self { + DotV1(dot.x as u32, dot.y as u32) + } +} + +#[derive(Encode, Decode, PartialEq, Debug)] +#[native_model(id = 1, version = 3, try_from = (DotV2, anyhow::Error))] +struct DotV3 { + name: String, + cord: Cord, +} + +#[derive(Encode, Decode, PartialEq, Debug)] +struct Cord { + x: u64, + y: u64, +} + +impl TryFrom for DotV3 { + type Error = anyhow::Error; + + fn try_from(dot: DotV2) -> Result { + Ok(DotV3 { + name: dot.name, + cord: Cord { x: dot.x, y: dot.y }, + }) + } +} + +impl TryFrom for DotV2 { + type Error = anyhow::Error; + + fn try_from(dot: DotV3) -> Result { + Ok(DotV2 { + name: dot.name, + x: dot.cord.x, + y: dot.cord.y, + }) + } +} + +#[test] +fn simple_test() { + let dot = DotV1(1, 2); + let bytes = native_model::encode(&dot).unwrap(); + + let (dot_decoded, _) = native_model::decode::(bytes.clone()).unwrap(); + assert_eq!(dot, dot_decoded); + + let (dot_decoded, _) = native_model::decode::(bytes.clone()).unwrap(); + assert_eq!( + DotV2 { + name: "".to_string(), + x: 1, + y: 2 + }, + dot_decoded + ); + + let (dot_decoded, _) = native_model::decode::(bytes.clone()).unwrap(); + assert_eq!( + DotV3 { + name: "".to_string(), + cord: Cord { x: 1, y: 2 } + }, + dot_decoded + ); +} diff --git a/libraries/native_model/tests/example/example_main.rs b/libraries/native_model/tests/example/example_main.rs new file mode 100644 index 00000000..5835c46b --- /dev/null +++ b/libraries/native_model/tests/example/example_main.rs @@ -0,0 +1,70 @@ +use bincode; +use bincode::{Decode, Encode}; +use native_model::native_model; + +fn native_model_encode_body( + model: &T, +) -> Result, bincode::error::EncodeError> { + { + bincode::encode_to_vec(model, bincode::config::standard()) + } +} + +fn native_model_decode_body( + data: Vec, +) -> Result { + { + bincode::decode_from_slice(&data, bincode::config::standard()).map(|(result, _)| result) + } +} + +#[derive(Encode, Decode, PartialEq, Debug)] +#[native_model(id = 1, version = 1)] +struct DotV1(u32, u32); + +#[derive(Encode, Decode, PartialEq, Debug)] +#[native_model(id = 1, version = 2, from = DotV1)] +struct DotV2 { + name: String, + x: u64, + y: u64, +} + +impl From for DotV2 { + fn from(dot: DotV1) -> Self { + DotV2 { + name: "".to_string(), + x: dot.0 as u64, + y: dot.1 as u64, + } + } +} + +impl From for DotV1 { + fn from(dot: DotV2) -> Self { + DotV1(dot.x as u32, dot.y as u32) + } +} + +#[test] +fn run_example() { + // Application 1 + let dot = DotV1(1, 2); + let bytes = native_model::encode(&dot).unwrap(); + + // Application 1 sends bytes to Application 2. + + // Application 2 + let (mut dot, source_version) = native_model::decode::(bytes).unwrap(); + // Use the struct DataV2 which has more fields and a different structure. + dot.name = "Dot".to_string(); + dot.x = 5; + // Encode the dot with the application 1 version in order to be compatible with it. + let bytes = native_model::encode_downgrade(dot, source_version).unwrap(); + + // Application 2 sends bytes to Application 1. + + // Application 1 + let (dot, _) = native_model::decode::(bytes).unwrap(); + assert_eq!(dot, DotV1(5, 2)); +} diff --git a/libraries/native_model/tests/example/mod.rs b/libraries/native_model/tests/example/mod.rs new file mode 100644 index 00000000..1c591e28 --- /dev/null +++ b/libraries/native_model/tests/example/mod.rs @@ -0,0 +1,3 @@ +mod encode_decode; +mod example_define_model; +mod example_main; diff --git a/libraries/native_model/tests/macro.rs b/libraries/native_model/tests/macro.rs new file mode 100644 index 00000000..1b1f48b0 --- /dev/null +++ b/libraries/native_model/tests/macro.rs @@ -0,0 +1,46 @@ +use bincode::{config, Decode, Encode}; +use native_model::Model; +use native_model_macro::native_model; + +#[allow(dead_code)] +fn native_model_encode_body(obj: &T) -> Result, bincode::error::EncodeError> { + bincode::encode_to_vec(obj, config::standard()) +} + +#[allow(dead_code)] +fn native_model_decode_body(data: Vec) -> Result { + bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) +} + +#[derive(Debug, Encode, Decode)] +#[native_model(id = 1, version = 1)] +struct Foo1 { + x: i32, +} + +#[derive(Debug, Encode, Decode)] +#[native_model(id = 1, version = 2, from = Foo1)] +struct Foo2 { + x: i32, +} + +impl From for Foo2 { + fn from(foo1: Foo1) -> Self { + Foo2 { x: foo1.x } + } +} + +impl From for Foo1 { + fn from(foo2: Foo2) -> Self { + Foo1 { x: foo2.x } + } +} + +#[test] +fn test_simple() { + assert_eq!(Foo1::native_model_id(), 1); + assert_eq!(Foo1::native_model_version(), 1); + + assert_eq!(Foo2::native_model_id(), 1); + assert_eq!(Foo2::native_model_version(), 2); +} diff --git a/libraries/native_model/tests/macro_decode_decode_upgrade.rs b/libraries/native_model/tests/macro_decode_decode_upgrade.rs new file mode 100644 index 00000000..39d598cd --- /dev/null +++ b/libraries/native_model/tests/macro_decode_decode_upgrade.rs @@ -0,0 +1,149 @@ +use bincode::{config, Decode, Encode}; +use native_model::Model; +use native_model_macro::native_model; + +fn native_model_encode_body(obj: &T) -> Result, bincode::error::EncodeError> { + bincode::encode_to_vec(obj, config::standard()) +} + +fn native_model_decode_body(data: Vec) -> Result { + bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) +} + +#[derive(Debug, Encode, Decode, PartialEq)] +#[native_model(id = 1, version = 1)] +struct Foo1 { + x: i32, +} + +#[derive(Debug, Encode, Decode, PartialEq)] +#[native_model(id = 1, version = 2, from = Foo1)] +struct Foo2 { + x: String, +} + +impl From for Foo2 { + fn from(foo1: Foo1) -> Self { + Foo2 { + x: foo1.x.to_string(), + } + } +} + +impl From for Foo1 { + fn from(foo2: Foo2) -> Self { + Foo1 { + x: foo2.x.parse::().unwrap(), + } + } +} + +#[derive(Debug, Encode, Decode, PartialEq)] +#[native_model(id = 1, version = 3, from = Foo2)] +enum Foo3 { + X(i32), +} + +impl From for Foo3 { + fn from(foo2: Foo2) -> Self { + Foo3::X(foo2.x.parse::().unwrap()) + } +} + +impl From for Foo2 { + fn from(foo3: Foo3) -> Self { + match foo3 { + Foo3::X(x) => Foo2 { x: x.to_string() }, + } + } +} + +#[test] +fn test_decode_foo1_to_foo2() { + let foo1 = Foo1 { x: 100 }; + let foo1_encoded = foo1.native_model_encode_body().unwrap(); + let foo2_decoded = Foo2::native_model_decode_upgrade_body(foo1_encoded, 1).unwrap(); + assert_eq!(foo1.x.to_string(), foo2_decoded.x); +} + +#[test] +fn test_decode_foo2_to_foo3() { + let foo2 = Foo2 { + x: "100".to_string(), + }; + let foo2_encoded = foo2.native_model_encode_body().unwrap(); + let foo3_decoded = Foo3::native_model_decode_upgrade_body(foo2_encoded, 2).unwrap(); + assert_eq!(Foo3::X(100), foo3_decoded); +} + +#[test] +fn test_decode_foo1_to_foo3() { + let foo1 = Foo1 { x: 100 }; + let foo1_encoded = foo1.native_model_encode_body().unwrap(); + let foo3_decoded = Foo3::native_model_decode_upgrade_body(foo1_encoded, 1).unwrap(); + assert_eq!(Foo3::X(100), foo3_decoded); +} + +#[test] +fn test_decode_foo1_to_foo1() { + let foo1 = Foo1 { x: 100 }; + let foo1_encoded = foo1.native_model_encode_body().unwrap(); + let foo1_decoded = Foo1::native_model_decode_upgrade_body(foo1_encoded, 1).unwrap(); + assert_eq!(foo1, foo1_decoded); +} + +#[test] +fn test_decode_foo2_to_foo2() { + let foo2 = Foo2 { + x: "100".to_string(), + }; + let foo2_encoded = foo2.native_model_encode_body().unwrap(); + let foo2_decoded = Foo2::native_model_decode_upgrade_body(foo2_encoded, 2).unwrap(); + assert_eq!(foo2, foo2_decoded); +} + +#[test] +fn test_decode_foo3_to_foo3() { + let foo3 = Foo3::X(100); + let foo3_encoded = foo3.native_model_encode_body().unwrap(); + let foo3_decoded = Foo3::native_model_decode_upgrade_body(foo3_encoded, 3).unwrap(); + assert_eq!(foo3, foo3_decoded); +} + +#[test] +fn test_should_fail_decode_foo3_to_foo2() { + let foo3 = Foo3::X(100); + let foo3_encoded = foo3.native_model_encode_body().unwrap(); + let foo3_decoded = Foo2::native_model_decode_upgrade_body(foo3_encoded, 3); + assert!(foo3_decoded.is_err()); + assert!(matches!( + foo3_decoded.unwrap_err(), + native_model::Error::UpgradeNotSupported { from: 3, to: 2 } + )); +} + +#[test] +fn test_should_fail_decode_foo3_to_foo1() { + let foo3 = Foo3::X(100); + let foo3_encoded = foo3.native_model_encode_body().unwrap(); + let foo3_decoded = Foo1::native_model_decode_upgrade_body(foo3_encoded, 3); + assert!(foo3_decoded.is_err()); + assert!(matches!( + foo3_decoded.unwrap_err(), + native_model::Error::UpgradeNotSupported { from: 3, to: 1 } + )); +} + +#[test] +fn test_should_fail_decode_foo2_to_foo1() { + let foo2 = Foo2 { + x: "100".to_string(), + }; + let foo2_encoded = foo2.native_model_encode_body().unwrap(); + let foo2_decoded = Foo1::native_model_decode_upgrade_body(foo2_encoded, 2); + assert!(foo2_decoded.is_err()); + assert!(matches!( + foo2_decoded.unwrap_err(), + native_model::Error::UpgradeNotSupported { from: 2, to: 1 } + )); +} diff --git a/libraries/native_model/tests/macro_encode_decode.rs b/libraries/native_model/tests/macro_encode_decode.rs new file mode 100644 index 00000000..37415c07 --- /dev/null +++ b/libraries/native_model/tests/macro_encode_decode.rs @@ -0,0 +1,48 @@ +use bincode::{config, Decode, Encode}; +use native_model::Model; +use native_model_macro::native_model; + +fn native_model_encode_body(obj: &T) -> Result, bincode::error::EncodeError> { + bincode::encode_to_vec(obj, config::standard()) +} + +fn native_model_decode_body(data: Vec) -> Result { + bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) +} + +#[derive(Debug, Encode, Decode, PartialEq)] +#[native_model(id = 1, version = 1)] +struct Foo1 { + x: i32, +} + +#[derive(Debug, Encode, Decode, PartialEq)] +#[native_model(id = 1, version = 2, from = Foo1)] +struct Foo2 { + x: i32, +} + +impl From for Foo2 { + fn from(foo1: Foo1) -> Self { + Foo2 { x: foo1.x } + } +} + +impl From for Foo1 { + fn from(foo2: Foo2) -> Self { + Foo1 { x: foo2.x } + } +} + +#[test] +fn test_simple() { + let foo1 = Foo1 { x: 100 }; + let foo2 = Foo2 { x: 200 }; + let foo1_encoded = foo1.native_model_encode().unwrap(); + let foo2_encoded = foo2.native_model_encode().unwrap(); + + let (foo1_decoded, _) = Foo1::native_model_decode(foo1_encoded).unwrap(); + assert!(foo1_decoded == foo1); + let (foo2_decoded, _) = Foo2::native_model_decode(foo2_encoded).unwrap(); + assert!(foo2_decoded == foo2); +} diff --git a/libraries/native_model/tests/native_model_from.rs b/libraries/native_model/tests/native_model_from.rs new file mode 100644 index 00000000..6e0acf1f --- /dev/null +++ b/libraries/native_model/tests/native_model_from.rs @@ -0,0 +1,102 @@ +use bincode::{config, Decode, Encode}; +use native_model_macro::native_model; + +fn native_model_encode_body(obj: &T) -> Result, bincode::error::EncodeError> { + bincode::encode_to_vec(obj, config::standard()) +} + +fn native_model_decode_body(data: Vec) -> Result { + bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) +} + +#[derive(Debug, Encode, Decode, PartialEq)] +#[native_model(id = 1, version = 1)] +struct Foo1 { + x: i32, +} + +#[derive(Debug, Encode, Decode, PartialEq)] +#[native_model(id = 1, version = 2, from = Foo1)] +struct Foo2 { + x: i32, + c: char, +} + +impl From for Foo2 { + fn from(foo1: Foo1) -> Self { + Foo2 { x: foo1.x, c: 'a' } + } +} + +impl From for Foo1 { + fn from(foo2: Foo2) -> Self { + Foo1 { x: foo2.x } + } +} + +impl PartialEq for Foo2 { + fn eq(&self, other: &Foo1) -> bool { + self.x == other.x + } +} + +#[test] +fn test_decode_foo1_to_foo1() { + let foo1 = Foo1 { x: 100 }; + let foo1_packed = native_model::encode(&foo1).unwrap(); + let (foo1_decoded, _) = native_model::decode::(foo1_packed.clone()).unwrap(); + assert_eq!(foo1, foo1_decoded); +} + +#[test] +fn test_decode_foo1_to_foo2() { + let foo1 = Foo1 { x: 100 }; + let foo1_packed = native_model::encode(&foo1).unwrap(); + let (foo2_decoded, _) = native_model::decode::(foo1_packed.clone()).unwrap(); + assert_eq!(Foo2 { x: 100, c: 'a' }, foo2_decoded); +} + +#[test] +fn test_encode_foo2_to_foo1() { + let foo2 = Foo2 { x: 100, c: 'a' }; + let foo2_packed = native_model::encode(&foo2).unwrap(); + assert_eq!(foo2_packed, vec![1, 0, 0, 0, 2, 0, 0, 0, 200, 97]); + let (foo2_decoded, _) = native_model::decode::(foo2_packed.clone()).unwrap(); + assert_eq!(Foo2 { x: 100, c: 'a' }, foo2_decoded); + let foo1_packed = native_model::encode_downgrade(foo2, 1).unwrap(); + assert_eq!(foo1_packed, vec![1, 0, 0, 0, 1, 0, 0, 0, 200]); + let (foo1_decoded, _) = native_model::decode::(foo1_packed.clone()).unwrap(); + assert_eq!(Foo1 { x: 100 }, foo1_decoded); +} + +#[test] +fn test_encode_foo1_to_foo1() { + let foo1 = Foo1 { x: 100 }; + let foo1_packed = native_model::encode(&foo1).unwrap(); + assert_eq!(foo1_packed, vec![1, 0, 0, 0, 1, 0, 0, 0, 200]); + let (foo1_decoded, _) = native_model::decode::(foo1_packed.clone()).unwrap(); + assert_eq!(Foo1 { x: 100 }, foo1_decoded); + let foo1_packed = native_model::encode_downgrade(foo1, 1).unwrap(); + assert_eq!(foo1_packed, vec![1, 0, 0, 0, 1, 0, 0, 0, 200]); + let (foo1_decoded, _) = native_model::decode::(foo1_packed.clone()).unwrap(); + assert_eq!(Foo1 { x: 100 }, foo1_decoded); +} + +#[test] +fn encode_decode_with_same_version() { + // Client 1 + let foo1 = Foo1 { x: 100 }; + let foo_packed = native_model::encode(&foo1).unwrap(); + // Send foo_packed to server + + // Server + let (mut foo2, version) = native_model::decode::(foo_packed.clone()).unwrap(); + // Do something with foo2 + foo2.x += 1; + let foo_packed = native_model::encode_downgrade(foo2, version).unwrap(); + // Send foo_packed back to client + + // Client + let (foo1_decoded, _) = native_model::decode::(foo_packed.clone()).unwrap(); + assert_eq!(Foo1 { x: 101 }, foo1_decoded); +} diff --git a/libraries/native_model/tests/native_model_try_from.rs b/libraries/native_model/tests/native_model_try_from.rs new file mode 100644 index 00000000..8cea2743 --- /dev/null +++ b/libraries/native_model/tests/native_model_try_from.rs @@ -0,0 +1,74 @@ +use bincode::{config, Decode, Encode}; +use native_model_macro::native_model; + +fn native_model_encode_body(obj: &T) -> Result, bincode::error::EncodeError> { + bincode::encode_to_vec(obj, config::standard()) +} + +fn native_model_decode_body(data: Vec) -> Result { + bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) +} + +#[derive(Debug, Encode, Decode, PartialEq)] +#[native_model(id = 1, version = 1)] +struct Foo1 { + x: i32, +} + +#[derive(Debug, Encode, Decode, PartialEq)] +#[native_model(id = 1, version = 2, try_from = (Foo1, anyhow::Error))] +struct Foo2 { + x: i32, +} + +impl TryFrom for Foo2 { + type Error = anyhow::Error; + + fn try_from(foo1: Foo1) -> Result { + if foo1.x > 10 { + return Err(anyhow::anyhow!("x > 10")); + } + + Ok(Foo2 { x: foo1.x }) + } +} + +impl TryFrom for Foo1 { + type Error = anyhow::Error; + + fn try_from(foo2: Foo2) -> Result { + if foo2.x > 10 { + return Err(anyhow::anyhow!("x > 10")); + } + + Ok(Foo1 { x: foo2.x }) + } +} + +#[test] +fn test_foo1_to_foo1() { + let foo1 = Foo1 { x: 1 }; + let foo1_packed = native_model::encode(&foo1).unwrap(); + let (foo1_decoded, _) = native_model::decode::(foo1_packed.clone()).unwrap(); + assert_eq!(foo1, foo1_decoded); +} + +#[test] +fn test_foo1_to_foo2() { + let foo1 = Foo1 { x: 1 }; + let foo1_packed = native_model::encode(&foo1).unwrap(); + let (foo2_decoded, _) = native_model::decode::(foo1_packed.clone()).unwrap(); + assert_eq!(Foo2 { x: 1 }, foo2_decoded); +} + +#[test] +fn test_foo1_to_foo2_error() { + let foo1 = Foo1 { x: 1000 }; + let foo1_packed = native_model::encode(&foo1).unwrap(); + let foo2_decoded = native_model::decode::(foo1_packed.clone()); + assert!(foo2_decoded.is_err()); + assert!(matches!( + foo2_decoded.unwrap_err(), + native_model::Error::UpgradeError(_) + )); +} diff --git a/libraries/native_model/tests/skeptic.rs b/libraries/native_model/tests/skeptic.rs new file mode 100644 index 00000000..ff46c9c0 --- /dev/null +++ b/libraries/native_model/tests/skeptic.rs @@ -0,0 +1 @@ +include!(concat!(env!("OUT_DIR"), "/skeptic-tests.rs")); diff --git a/libraries/native_model/version_update.sh b/libraries/native_model/version_update.sh new file mode 100755 index 00000000..95fd074c --- /dev/null +++ b/libraries/native_model/version_update.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" + +# Bash script to update version for native_model_macro + +# Semantic release version obtained from argument +NEW_VERSION=$1 + +# Exit if NEW_VERSION is not set +if [ -z "$NEW_VERSION" ]; then + echo "NEW_VERSION argument not set" + exit 1 +fi + +# Directories containing Cargo.toml files to update +declare -a directories=("." "native_model_macro") + +for directory in "${directories[@]}" +do + # Check if Cargo.toml exists in the directory + if [ -f "$directory/Cargo.toml" ]; then + echo "Updating version in $directory/Cargo.toml to $NEW_VERSION" + # Use sed to find and replace the version string + sed -i -E "s/^version = \"[0-9]+\.[0-9]+\.[0-9]+\"/version = \"$NEW_VERSION\"/g" "$directory/Cargo.toml" + + # Update the dependency version for native_model_macro in native_model_macro's Cargo.toml + if [ "$directory" == "." ]; then + sed -i -E "s/native_model_macro = \{ version = \"[0-9]+\.[0-9]+\.[0-9]+\", path = \"native_model_macro\" \}/native_model_macro = { version = \"$NEW_VERSION\", path = \"native_model_macro\" }/g" "$directory/Cargo.toml" + fi + fi +done + + +cd "$DIR/" + +# Commit +git commit --all --message "chore: update version to $NEW_VERSION" +git push \ No newline at end of file From d34d44dfc13029df5334872e660234df91e445fc Mon Sep 17 00:00:00 2001 From: Vincent Herlemont Date: Sat, 2 Sep 2023 13:18:57 +0200 Subject: [PATCH 016/316] chore: update version to 0.2.0 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 4da3106b..c22a65a7 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.1.0" +version = "0.2.0" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.1", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.1.0", path = "native_model_macro" } +native_model_macro = { version = "0.2.0", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 04306f22..49c6314e 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.1.0" +version = "0.2.0" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 1f92ef7b0317f391e07c60c9297e69ed1ac0a2f7 Mon Sep 17 00:00:00 2001 From: Vincent Herlemont Date: Sat, 2 Sep 2023 13:26:31 +0200 Subject: [PATCH 017/316] docs: fix CI badge --- libraries/native_model/README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/libraries/native_model/README.md b/libraries/native_model/README.md index 4017deea..4fe34a3e 100644 --- a/libraries/native_model/README.md +++ b/libraries/native_model/README.md @@ -1,9 +1,7 @@ # Native model [![Crates.io](https://img.shields.io/crates/v/native_model)](https://crates.io/crates/native_model) -[![Build and Release](https://github.com/vincent-herlemont/native_model/actions/workflows/build_and_test_release. -yml/badge. -svg)](https://github.com/vincent-herlemont/native_model/actions/workflows/build_and_test_release.yml) +[![Linux/Windows/macOS (Build/Test/Release)](https://github.com/vincent-herlemont/native_model/actions/workflows/build_and_test_release.yml/badge.svg)](https://github.com/vincent-herlemont/native_model/actions/workflows/build_and_test_release.yml) [![Documentation](https://docs.rs/native_model/badge.svg)](https://docs.rs/native_model) [![License](https://img.shields.io/crates/l/native_model)](LICENSE) From 972b2add9c87c188c2bb72501cd51f50a59c3955 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 2 Sep 2023 11:32:26 +0000 Subject: [PATCH 018/316] chore: update version to 0.2.1 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index c22a65a7..b3191aee 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.2.0" +version = "0.2.1" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.1", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.2.0", path = "native_model_macro" } +native_model_macro = { version = "0.2.1", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 49c6314e..61448652 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.2.0" +version = "0.2.1" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 5cceb9542eae0d826999a539d1e0db30fa899889 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 2 Sep 2023 11:32:37 +0000 Subject: [PATCH 019/316] fix(deps): update rust crate zerocopy to 0.7.3 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index b3191aee..4cc9f0ab 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -15,7 +15,7 @@ categories = ["data-structures", "encoding", "rust-patterns"] members = ["native_model_macro"] [dependencies] -zerocopy = { version = "0.7.1", features = [ "derive"] } +zerocopy = { version = "0.7.3", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" native_model_macro = { version = "0.2.1", path = "native_model_macro" } From 248869e77f4a15f9634bac23caae4873c135245f Mon Sep 17 00:00:00 2001 From: Vincent Herlemont Date: Sat, 2 Sep 2023 13:36:34 +0200 Subject: [PATCH 020/316] ci: fix ignore temporary files generated by semantic-release/exec --- libraries/native_model/.gitignore | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/libraries/native_model/.gitignore b/libraries/native_model/.gitignore index 5dd8b9d2..f7cd5926 100644 --- a/libraries/native_model/.gitignore +++ b/libraries/native_model/.gitignore @@ -1,5 +1,10 @@ /target /Cargo.lock +# TODO: remove it used by semantic-release/exec +node_modules/ +package-lock.json +package.json + /native_model_macro/target /native_model_macro/Cargo.lock From 0b0c2ccfd4abf6e0fa138ecc75a78b1c7df882ba Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 2 Sep 2023 11:40:01 +0000 Subject: [PATCH 021/316] chore: update version to 0.2.2 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 4cc9f0ab..7b263e38 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.2.1" +version = "0.2.2" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.3", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.2.1", path = "native_model_macro" } +native_model_macro = { version = "0.2.2", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 61448652..c3ca292b 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.2.1" +version = "0.2.2" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From c1b0a6f917302a7d3b0ae880d31c6a1a950c2a69 Mon Sep 17 00:00:00 2001 From: Vincent Herlemont Date: Sat, 2 Sep 2023 14:02:25 +0200 Subject: [PATCH 022/316] docs: fix example of setup serialization format --- libraries/native_model/README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/libraries/native_model/README.md b/libraries/native_model/README.md index 4fe34a3e..98282377 100644 --- a/libraries/native_model/README.md +++ b/libraries/native_model/README.md @@ -80,14 +80,17 @@ First, you need to set up your serialization format. You can use any serializati Just define the following functions, so they must be imported in the scope where you use the native model. ```rust,ignore -fn native_model_encode_body(obj: &T) -> Result, dyn Error> { +fn native_model_encode_body(obj: &T) -> Result, E> { ... } -fn native_model_decode_body(data: Vec) -> Result { +fn native_model_decode_body(data: Vec) -> Result { ... } ``` + +With `T` and `E` the type depending on the serialization format you use. Just `E` need to implement the `std::error::Error` trait. + Examples: - [bincode with encode/decode](./tests/example/encode_decode/bincode.rs) - [bincode with serde](./tests/example/encode_decode/bincode_serde.rs) From 9ab3fdae5a47b69f19b7a7e26f62ec3f213d126b Mon Sep 17 00:00:00 2001 From: Vincent Herlemont Date: Sat, 2 Sep 2023 14:11:55 +0200 Subject: [PATCH 023/316] docs: change CI badge name --- .../native_model/.github/workflows/build_and_test_release.yml | 2 +- libraries/native_model/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/native_model/.github/workflows/build_and_test_release.yml b/libraries/native_model/.github/workflows/build_and_test_release.yml index 2cdc77d3..14df88c9 100644 --- a/libraries/native_model/.github/workflows/build_and_test_release.yml +++ b/libraries/native_model/.github/workflows/build_and_test_release.yml @@ -1,4 +1,4 @@ -name: Linux/Windows/macOS (Build/Test/Release) +name: Build Test Release on: push: diff --git a/libraries/native_model/README.md b/libraries/native_model/README.md index 98282377..7feb0ee9 100644 --- a/libraries/native_model/README.md +++ b/libraries/native_model/README.md @@ -1,7 +1,7 @@ # Native model [![Crates.io](https://img.shields.io/crates/v/native_model)](https://crates.io/crates/native_model) -[![Linux/Windows/macOS (Build/Test/Release)](https://github.com/vincent-herlemont/native_model/actions/workflows/build_and_test_release.yml/badge.svg)](https://github.com/vincent-herlemont/native_model/actions/workflows/build_and_test_release.yml) +[![Build Test Release](https://github.com/vincent-herlemont/native_model/actions/workflows/build_and_test_release.yml/badge.svg)](https://github.com/vincent-herlemont/native_model/actions/workflows/build_and_test_release.yml) [![Documentation](https://docs.rs/native_model/badge.svg)](https://docs.rs/native_model) [![License](https://img.shields.io/crates/l/native_model)](LICENSE) From 9516b32aebcb06ed37dd17ae7347e006bbc723fc Mon Sep 17 00:00:00 2001 From: Vincent Herlemont Date: Sat, 2 Sep 2023 14:17:32 +0200 Subject: [PATCH 024/316] docs: improve rust docs --- libraries/native_model/src/lib.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/src/lib.rs b/libraries/native_model/src/lib.rs index 40bb28d1..3b5dbe71 100644 --- a/libraries/native_model/src/lib.rs +++ b/libraries/native_model/src/lib.rs @@ -3,13 +3,13 @@ //! - It aims to ensure: //! - **Interoperability**: Different applications can work together even if they use different data model versions. //! - **Data Consistency**: Ensures the data is processed as expected. -//! - **Flexibility**: Allows the use of any serialization format. -//! - **Minimal Performance Overhead**: Current performance shows linearly increasing encoding overhead with data size, and constant decoding overhead (~162 picoseconds) for all data sizes. +//! - **Flexibility**: Allows the use of any serialization format. Mode details [here](https://github.com/vincent-herlemont/native_model#setup-your-serialization-format). +//! - **Minimal Performance Overhead**: Current performance has a minimal overhead see [performance](https://github.com/vincent-herlemont/native_model#performance) section. //! - **Suitability**: //! - Suitable for applications that are written in Rust, evolve independently, store data locally, and require incremental upgrades. //! - Not suitable for non-Rust applications, systems not controlled by the user, or when human-readable formats are needed. //! - **Setup**: -//! - Users must define their own serialization format and data model. Examples and a `native_model` macro are provided for this purpose. +//! - Users must define their own serialization format and data model. Mode details [here](https://github.com/vincent-herlemont/native_model#setup-your-serialization-format). //! - **Development Stage**: //! - The crate is in early development, and performance is expected to improve over time. //! From 9fe3d611d9e29f291e8217eb16419c40968feec0 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 2 Sep 2023 12:20:46 +0000 Subject: [PATCH 025/316] chore: update version to 0.2.3 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 7b263e38..abd627b5 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.2.2" +version = "0.2.3" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.3", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.2.2", path = "native_model_macro" } +native_model_macro = { version = "0.2.3", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index c3ca292b..2201b2de 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.2.2" +version = "0.2.3" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 9d85256115e281c29795ae123a1b106b5b9c8c5f Mon Sep 17 00:00:00 2001 From: Vincent Herlemont Date: Mon, 4 Sep 2023 08:37:01 +0200 Subject: [PATCH 026/316] docs: add concepts section --- libraries/native_model/README.md | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/libraries/native_model/README.md b/libraries/native_model/README.md index 7feb0ee9..87b15385 100644 --- a/libraries/native_model/README.md +++ b/libraries/native_model/README.md @@ -7,6 +7,8 @@ A thin wrapper around serialized data which add information of identity and version. +See [concepts](#concepts) for more details. + ## Goals - **Interoperability**: Allows different applications to work together, even if they are using different @@ -35,7 +37,7 @@ let bytes = native_model::encode(&dot).unwrap(); // Application 1 sends bytes to Application 2. // Application 2 -// We are able to decode the bytes directly into a new type DotV2. +// We are able to decode the bytes directly into a new type DotV2 (upgrade). let (mut dot, source_version) = native_model::decode::(bytes).unwrap(); assert_eq!(dot, DotV2 { name: "".to_string(), @@ -44,7 +46,7 @@ assert_eq!(dot, DotV2 { }); dot.name = "Dot".to_string(); dot.x = 5; -// For interoperability, we encode the data with the version compatible with Application 1. +// For interoperability, we encode the data with the version compatible with Application 1 (downgrade). let bytes = native_model::encode_downgrade(dot, source_version).unwrap(); // Application 2 sends bytes to Application 1. @@ -56,14 +58,14 @@ assert_eq!(dot, DotV1(5, 2)); Full example [here](./tests/example/example_main.rs). -When use it? +When to use it? - Your applications that interact with each other are written in Rust. - Your applications evolve independently need to read serialized data coming from each other. - Your applications store data locally and need to read it later by a newer version of the application. - Your systems need to be upgraded incrementally. Instead of having to upgrade the entire system at once, individual applications can be upgraded one at a time, while still being able to communicate with each other. -When not use it? +When not to use it? - Your applications that interact with each other are **not all** written in Rust. - Your applications need to communicate with other systems that you don't control. - You need to have a human-readable format. (You can use a human-readable format like JSON wrapped in a native model, @@ -144,6 +146,26 @@ struct Cord { Full example [here](tests/example/example_define_model.rs). +# Concepts + +In order to understand how the native model works, you need to understand the following concepts. + +- **Identity**(`id`): The identity is the unique identifier of the model. It is used to identify the model and + prevent to decode a model into the wrong type. +- **Version**(`version`) The version is the version of the model. It is used to check the compatibility between two + models. +- **Encode**: The encode is the process of converting a model into a byte array. +- **Decode**: The decode is the process of converting a byte array into a model. +- **Downgrade**: The downgrade is the process of converting a model into a previous version of the model. +- **Upgrade**: The upgrade is the process of converting a model into a newer version of the model. + +Under the hood, the native model is a thin wrapper around serialized data. The `id` and the `version` are twice encoded with a [`little_endian::U32`](https://docs.rs/zerocopy/latest/zerocopy/byteorder/little_endian/type.U32.html). That represents 8 bytes, that are added at the beginning of the data. + +``` ++------------------+------------------+------------------------------------+ +| ID (4 bytes) | Version (4 bytes)| Data (indeterminate-length bytes) | ++------------------+------------------+------------------------------------+ +``` # Performance From beb180cf1a963d344b860a1ca4142b748924b52f Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 4 Sep 2023 06:49:09 +0000 Subject: [PATCH 027/316] chore: update version to 0.2.4 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index abd627b5..3a928800 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.2.3" +version = "0.2.4" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.3", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.2.3", path = "native_model_macro" } +native_model_macro = { version = "0.2.4", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 2201b2de..65448e90 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.2.3" +version = "0.2.4" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From e3ed493a2351bd22d842ef945d1ece326ac9371f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Sep 2023 13:06:08 +0000 Subject: [PATCH 028/316] chore(deps): update actions/checkout action to v4 --- .../native_model/.github/workflows/build_and_test_release.yml | 4 ++-- .../native_model/.github/workflows/conventional_commits.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/.github/workflows/build_and_test_release.yml b/libraries/native_model/.github/workflows/build_and_test_release.yml index 14df88c9..9c29f847 100644 --- a/libraries/native_model/.github/workflows/build_and_test_release.yml +++ b/libraries/native_model/.github/workflows/build_and_test_release.yml @@ -16,7 +16,7 @@ jobs: toolchain: [stable] feature: [ no_feature ] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4 - name: Setup Rust uses: actions-rs/toolchain@v1 with: @@ -50,7 +50,7 @@ jobs: packages: write steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4 with: ref: main diff --git a/libraries/native_model/.github/workflows/conventional_commits.yml b/libraries/native_model/.github/workflows/conventional_commits.yml index 1a04683a..4a173ba5 100644 --- a/libraries/native_model/.github/workflows/conventional_commits.yml +++ b/libraries/native_model/.github/workflows/conventional_commits.yml @@ -9,5 +9,5 @@ jobs: name: Conventional Commits runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4 - uses: webiny/action-conventional-commits@v1.1.0 \ No newline at end of file From 64301ca301fa9c21c95da76ad660a3ccd6253f29 Mon Sep 17 00:00:00 2001 From: Vincent Herlemont Date: Mon, 4 Sep 2023 19:35:43 +0200 Subject: [PATCH 029/316] feat: implement mismatched model id + improvement --- libraries/native_model/Cargo.toml | 4 + libraries/native_model/README.md | 77 ++++++++++--------- libraries/native_model/benches/overhead.rs | 10 +-- .../native_model/benches/prepend_bytes.rs | 28 +++++++ .../native_model_macro/src/lib.rs | 2 +- .../src/method/decode_body.rs | 15 +++- .../src/method/decode_upgrade_body.rs | 16 ++-- libraries/native_model/src/header.rs | 2 +- libraries/native_model/src/lib.rs | 13 +++- libraries/native_model/src/model.rs | 16 ++-- libraries/native_model/src/wrapper.rs | 38 +++------ libraries/native_model/tests/_experiment.rs | 58 +++++++------- .../tests/macro_decode_decode_upgrade.rs | 40 +++++++--- 13 files changed, 188 insertions(+), 131 deletions(-) create mode 100644 libraries/native_model/benches/prepend_bytes.rs diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 3a928800..44faa2a3 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -35,5 +35,9 @@ harness = false name = "overhead_on_bincode" harness = false +[[bench]] +name = "prepend_bytes" +harness = false + [build-dependencies] skeptic = "0.13" \ No newline at end of file diff --git a/libraries/native_model/README.md b/libraries/native_model/README.md index 87b15385..e26268ff 100644 --- a/libraries/native_model/README.md +++ b/libraries/native_model/README.md @@ -15,7 +15,7 @@ See [concepts](#concepts) for more details. versions of the data model. - **Data Consistency**: Ensure that we process the data expected model. - **Flexibility**: You can use any serialization format you want. More details [here](#setup-your-serialization-format). -- **Performance**: A minimal overhead. More details [here](#performance). +- **Performance**: A minimal overhead (encode: ~20 ns, decode: ~40 ps). More details [here](#performance). ## Usage @@ -71,10 +71,31 @@ When not to use it? - You need to have a human-readable format. (You can use a human-readable format like JSON wrapped in a native model, but you have to unwrap it to see the data correctly.) -# Status +## Status Early development. Not ready for production. +## Concepts + +In order to understand how the native model works, you need to understand the following concepts. + +- **Identity**(`id`): The identity is the unique identifier of the model. It is used to identify the model and + prevent to decode a model into the wrong Rust type. +- **Version**(`version`) The version is the version of the model. It is used to check the compatibility between two + models. +- **Encode**: The encode is the process of converting a model into a byte array. +- **Decode**: The decode is the process of converting a byte array into a model. +- **Downgrade**: The downgrade is the process of converting a model into a previous version of the model. +- **Upgrade**: The upgrade is the process of converting a model into a newer version of the model. + +Under the hood, the native model is a thin wrapper around serialized data. The `id` and the `version` are twice encoded with a [`little_endian::U32`](https://docs.rs/zerocopy/latest/zerocopy/byteorder/little_endian/type.U32.html). That represents 8 bytes, that are added at the beginning of the data. + +``` ++------------------+------------------+------------------------------------+ +| ID (4 bytes) | Version (4 bytes)| Data (indeterminate-length bytes) | ++------------------+------------------+------------------------------------+ +``` + ## Setup your serialization format First, you need to set up your serialization format. You can use any serialization format. @@ -146,46 +167,26 @@ struct Cord { Full example [here](tests/example/example_define_model.rs). -# Concepts +## Performance -In order to understand how the native model works, you need to understand the following concepts. +Native model has +been designed to have a minimal and constant overhead. That means that the overhead is the same +whatever the size of the data. Under the wood we use the [zerocopy](https://docs.rs/zerocopy/latest/zerocopy/) crate +to avoid unnecessary copies. -- **Identity**(`id`): The identity is the unique identifier of the model. It is used to identify the model and - prevent to decode a model into the wrong type. -- **Version**(`version`) The version is the version of the model. It is used to check the compatibility between two - models. -- **Encode**: The encode is the process of converting a model into a byte array. -- **Decode**: The decode is the process of converting a byte array into a model. -- **Downgrade**: The downgrade is the process of converting a model into a previous version of the model. -- **Upgrade**: The upgrade is the process of converting a model into a newer version of the model. +👉 To know the total time of the encode/decode, you need to add the time of your serialization format. -Under the hood, the native model is a thin wrapper around serialized data. The `id` and the `version` are twice encoded with a [`little_endian::U32`](https://docs.rs/zerocopy/latest/zerocopy/byteorder/little_endian/type.U32.html). That represents 8 bytes, that are added at the beginning of the data. +Resume: +- **Encode**: ~20 ns +- **Decode**: ~40 ps -``` -+------------------+------------------+------------------------------------+ -| ID (4 bytes) | Version (4 bytes)| Data (indeterminate-length bytes) | -+------------------+------------------+------------------------------------+ -``` - -# Performance - -This crate is in an early stage of development, so the performance should be improved in the future. -The goal is to have a minimal and constant overhead for all data sizes. It uses the [zerocopy](https://docs.rs/zerocopy/latest/zerocopy/) crate to avoid unnecessary copies. - -Current performance: -- Encode time: have overhead that evolves linearly with the data size. -- Decode time: have overhead of ~162 ps for all data sizes. - - -| data size | encode time (ns/ps/µs/ms) | decode time (ps) | -|:---------------------:|:--------------------------:|:----------------:| -| 1 B | 40.093 ns - 40.510 ns | 161.87 ps - 162.02 ps | -| 1 KiB (1024 B) | 116.45 ns - 116.83 ns | 161.85 ps - 162.08 ps | -| 1 MiB (1048576 B) | 66.697 µs - 67.634 µs | 161.87 ps - 162.18 ps | -| 10 MiB (10485760 B) | 1.5670 ms - 1.5843 ms | 162.40 ps - 163.52 ps | -| 100 MiB (104857600 B) | 63.778 ms - 64.132 ms | 162.71 ps - 165.10 ps | +| data size | encode time (ns) | decode time (ps) | +|:--------------------:|:---------------------:|:-----------------------:| +| 1 B | 19.769 ns - 20.154 ns | 40.526 ps - 40.617 ps | +| 1 KiB | 19.597 ns - 19.971 ns | 40.534 ps - 40.633 ps | +| 1 MiB | 19.662 ns - 19.910 ns | 40.508 ps - 40.632 ps | +| 10 MiB | 19.591 ns - 19.980 ns | 40.504 ps - 40.605 ps | +| 100 MiB | 19.669 ns - 19.867 ns | 40.520 ps - 40.644 ps | Benchmark of the native model overhead [here](benches/overhead.rs). -To know how much time it takes to encode/decode your data, you need to add this overhead to the time of your serialization format. - diff --git a/libraries/native_model/benches/overhead.rs b/libraries/native_model/benches/overhead.rs index 2946afe4..a21750fa 100644 --- a/libraries/native_model/benches/overhead.rs +++ b/libraries/native_model/benches/overhead.rs @@ -14,7 +14,7 @@ fn native_model_decode_body(data: Vec) -> Result); -fn wrapper(data: &mut Vec) { +fn wrap(data: &mut Vec) { native_model::wrapper::native_model_encode(data, 1, 1); } @@ -31,16 +31,16 @@ fn criterion_benchmark(c: &mut Criterion) { // encode let data = Data(vec![1; nb_bytes]); - let encode_body = native_model_encode_body(&data).unwrap(); + let mut encode_body = native_model_encode_body(&data).unwrap(); group.bench_function(BenchmarkId::new("encode", nb_bytes), |b| { - b.iter(|| wrapper(&mut encode_body.clone())) + b.iter(|| wrap(&mut encode_body)) }); // decode let data = Data(vec![1; nb_bytes]); - let encode_body = native_model::encode(&data).unwrap(); + let mut encode_body = native_model::encode(&data).unwrap(); group.bench_function(BenchmarkId::new("decode", nb_bytes), |b| { - b.iter(|| unwrap(&mut encode_body.clone())) + b.iter(|| unwrap(&mut encode_body)) }); } } diff --git a/libraries/native_model/benches/prepend_bytes.rs b/libraries/native_model/benches/prepend_bytes.rs new file mode 100644 index 00000000..7f77e371 --- /dev/null +++ b/libraries/native_model/benches/prepend_bytes.rs @@ -0,0 +1,28 @@ +/// Found a way to prepend bytes at the beginning of a Vec with a constant overhead. +use bincode::{Decode, Encode}; +use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion}; + +fn criterion_benchmark(c: &mut Criterion) { + let mut group = c.benchmark_group("encode"); + + // 1 byte, 1KB, 1MB, 10MB, 100MB + for nb_bytes in [1, 1024, 1024 * 1024, 10 * 1024 * 1024, 100 * 1024 * 1024].into_iter() { + group.throughput(criterion::Throughput::Bytes(nb_bytes as u64)); + + let header: Vec = vec![0; 4]; + let mut data: Vec = vec![1; nb_bytes]; + group.bench_function(BenchmarkId::new("prepend_bytes", nb_bytes), |b| { + b.iter(|| { + // Fastest way to prepend bytes to data + let mut header = header.clone(); + header.append(&mut data); + // prepend bytes to data + // let mut header = header.clone(); + // header.extend_from_slice(&data); + }); + }); + } +} + +criterion_group!(benches, criterion_benchmark); +criterion_main!(benches); diff --git a/libraries/native_model/native_model_macro/src/lib.rs b/libraries/native_model/native_model_macro/src/lib.rs index 80fce1df..a048b68a 100644 --- a/libraries/native_model/native_model_macro/src/lib.rs +++ b/libraries/native_model/native_model_macro/src/lib.rs @@ -94,7 +94,7 @@ pub fn native_model(args: TokenStream, input: TokenStream) -> TokenStream { let native_model_version_fn = generate_native_model_version(&attrs); let native_model_encode_body_fn = generate_native_model_encode_body(); let native_model_encode_downgrade_body_fn = generate_native_model_encode_downgrade_body(&attrs); - let native_model_decode_body_fn = generate_native_model_decode_body(); + let native_model_decode_body_fn = generate_native_model_decode_body(&attrs); let native_model_decode_upgrade_body_fn = generate_native_model_decode_upgrade_body(&attrs); let gen = quote! { diff --git a/libraries/native_model/native_model_macro/src/method/decode_body.rs b/libraries/native_model/native_model_macro/src/method/decode_body.rs index 99137878..97ad509b 100644 --- a/libraries/native_model/native_model_macro/src/method/decode_body.rs +++ b/libraries/native_model/native_model_macro/src/method/decode_body.rs @@ -1,10 +1,17 @@ +use crate::ModelAttributes; use proc_macro2::TokenStream; use quote::quote; -pub(crate) fn generate_native_model_decode_body() -> TokenStream { +pub(crate) fn generate_native_model_decode_body(attrs: &ModelAttributes) -> TokenStream { + let id = attrs.id.clone().expect("id is required"); let gen = quote! { - fn native_model_decode_body(data: Vec) -> Result { - native_model_decode_body(data).map_err(|e| native_model::DecodeBodyError { + fn native_model_decode_body(data: Vec, id: u32) -> Result { + println!("id: {}, {}", id, #id); + if id != #id { + return Err(native_model::DecodeBodyError::MismatchedModelId); + } + + native_model_decode_body(data).map_err(|e| native_model::DecodeBodyError::DecodeError { msg: format!("{}", e), source: e.into(), }) @@ -12,4 +19,4 @@ pub(crate) fn generate_native_model_decode_body() -> TokenStream { }; gen.into() -} \ No newline at end of file +} diff --git a/libraries/native_model/native_model_macro/src/method/decode_upgrade_body.rs b/libraries/native_model/native_model_macro/src/method/decode_upgrade_body.rs index bc4ad5c7..9e0d4490 100644 --- a/libraries/native_model/native_model_macro/src/method/decode_upgrade_body.rs +++ b/libraries/native_model/native_model_macro/src/method/decode_upgrade_body.rs @@ -8,11 +8,11 @@ pub(crate) fn generate_native_model_decode_upgrade_body(attrs: &ModelAttributes) let model_from_or_try_from = if let Some(from) = native_model_from { quote! { - #from::native_model_decode_upgrade_body(data, x).map(|a| a.into()) + #from::native_model_decode_upgrade_body(data, id, version).map(|a| a.into()) } } else if let Some((try_from, error_try_from)) = native_model_try_from { quote! { - let result = #try_from::native_model_decode_upgrade_body(data, x).map(|b| { + let result = #try_from::native_model_decode_upgrade_body(data, id, version).map(|b| { b.try_into() .map_err(|e: #error_try_from| native_model::UpgradeError { msg: format!("{}", e), @@ -24,22 +24,22 @@ pub(crate) fn generate_native_model_decode_upgrade_body(attrs: &ModelAttributes) } else { quote! { Err(native_model::Error::UpgradeNotSupported { - from: x, + from: version, to: Self::native_model_version(), }) } }; let gen = quote! { - fn native_model_decode_upgrade_body(data: Vec, x: u32) -> native_model::Result { - if x == Self::native_model_version() { - let result = Self::native_model_decode_body(data)?; + fn native_model_decode_upgrade_body(data: Vec, id: u32, version: u32) -> native_model::Result { + if version == Self::native_model_version() { + let result = Self::native_model_decode_body(data, id)?; Ok(result) - } else if x < Self::native_model_version() { + } else if version < Self::native_model_version() { #model_from_or_try_from } else { Err(native_model::Error::UpgradeNotSupported { - from: x, + from: version, to: Self::native_model_version(), }) } diff --git a/libraries/native_model/src/header.rs b/libraries/native_model/src/header.rs index 5d09cce4..db836feb 100644 --- a/libraries/native_model/src/header.rs +++ b/libraries/native_model/src/header.rs @@ -4,6 +4,6 @@ use zerocopy::{AsBytes, FromBytes, FromZeroes}; #[derive(FromZeroes, FromBytes, AsBytes, Debug)] #[repr(C)] pub struct Header { - pub(crate) type_id: U32, + pub(crate) id: U32, pub(crate) version: U32, } diff --git a/libraries/native_model/src/lib.rs b/libraries/native_model/src/lib.rs index 3b5dbe71..7fbbf7ce 100644 --- a/libraries/native_model/src/lib.rs +++ b/libraries/native_model/src/lib.rs @@ -56,10 +56,15 @@ pub type DecodeResult = std::result::Result; #[derive(Error, Debug)] #[error("Decode body error: {msg}")] -pub struct DecodeBodyError { - pub msg: String, - #[source] - pub source: anyhow::Error, +pub enum DecodeBodyError { + #[error("Mismatched model id")] + MismatchedModelId, + #[error("Decode error: {msg}")] + DecodeError { + msg: String, + #[source] + source: anyhow::Error, + }, } pub type EncodeResult = std::result::Result; diff --git a/libraries/native_model/src/model.rs b/libraries/native_model/src/model.rs index f1160afb..08a9351e 100644 --- a/libraries/native_model/src/model.rs +++ b/libraries/native_model/src/model.rs @@ -6,11 +6,11 @@ pub trait Model: Sized { // --------------- Decode --------------- - fn native_model_decode_body(data: Vec) -> DecodeResult + fn native_model_decode_body(data: Vec, id: u32) -> DecodeResult where Self: Sized; - fn native_model_decode_upgrade_body(data: Vec, version: u32) -> Result + fn native_model_decode_upgrade_body(data: Vec, id: u32, version: u32) -> Result where Self: Sized; @@ -19,9 +19,13 @@ pub trait Model: Sized { Self: Sized, { let native_model = crate::Wrapper::deserialize(&data[..]).unwrap(); + let source_id = native_model.get_id(); let source_version = native_model.get_version(); - let result = - Self::native_model_decode_upgrade_body(native_model.value().to_vec(), source_version)?; + let result = Self::native_model_decode_upgrade_body( + native_model.value().to_vec(), + source_id, + source_version, + )?; Ok((result, source_version)) } @@ -40,7 +44,7 @@ pub trait Model: Sized { Self: Sized, { let mut data = self.native_model_encode_body()?; - crate::native_model_encode( + let data = crate::native_model_encode( &mut data, Self::native_model_id(), Self::native_model_version(), @@ -54,7 +58,7 @@ pub trait Model: Sized { { let version = version.clone(); let mut data = self.native_model_encode_downgrade_body(version)?; - crate::native_model_encode(&mut data, Self::native_model_id(), version); + let data = crate::native_model_encode(&mut data, Self::native_model_id(), version); Ok(data) } } diff --git a/libraries/native_model/src/wrapper.rs b/libraries/native_model/src/wrapper.rs index cc45652a..5b13443d 100644 --- a/libraries/native_model/src/wrapper.rs +++ b/libraries/native_model/src/wrapper.rs @@ -23,7 +23,11 @@ impl Wrapper { } pub fn get_type_id(&self) -> u32 { - self.header.type_id.get() + self.header.id.get() + } + + pub fn get_id(&self) -> u32 { + self.header.id.get() } pub fn get_version(&self) -> u32 { @@ -33,7 +37,7 @@ impl Wrapper { impl Wrapper { pub fn set_type_id(&mut self, type_id: u32) { - self.header.type_id = U32::new(type_id); + self.header.id = U32::new(type_id); } pub fn set_version(&mut self, version: u32) { @@ -41,32 +45,14 @@ impl Wrapper { } } -pub fn native_model_encode(value: &mut Vec, type_id: u32, version: u32) { +pub fn native_model_encode(data: &mut Vec, type_id: u32, version: u32) -> Vec { let header = Header { - type_id: U32::new(type_id), + id: U32::new(type_id), version: U32::new(version), }; - let header = header.as_bytes(); - value.reserve(header.len()); - value.splice(..0, header.iter().cloned()); - - // Try to do with unsafe code to improve performance but benchmark shows that it's the same - // - // // Add header to the beginning of the vector - // unsafe { - // // get the raw pointer to the vector's buffer - // let ptr = value.as_mut_ptr(); - // - // // move the existing elements to the right - // ptr.offset(header.len() as isize) - // .copy_from_nonoverlapping(ptr, value.len()); - // - // // copy the elements from the header to the beginning of the vector - // ptr.copy_from_nonoverlapping(header.as_ptr(), header.len()); - // - // // update the length of the vector - // value.set_len(value.len() + header.len()); - // } + let mut header = header.as_bytes().to_vec(); + header.append(data); + header } #[cfg(test)] @@ -76,7 +62,7 @@ mod tests { #[test] fn native_model_deserialize_with_body() { let mut data = vec![0u8; 8]; - native_model_encode(&mut data, 200000, 100000); + let data = native_model_encode(&mut data, 200000, 100000); assert_eq!(data.len(), 16); let model = Wrapper::deserialize(&data[..]).unwrap(); assert_eq!(model.get_type_id(), 200000); diff --git a/libraries/native_model/tests/_experiment.rs b/libraries/native_model/tests/_experiment.rs index 42ddfffb..9e7b71c5 100644 --- a/libraries/native_model/tests/_experiment.rs +++ b/libraries/native_model/tests/_experiment.rs @@ -1,7 +1,6 @@ use bincode::{config, Decode, Encode}; use native_model::Result; use native_model::{DecodeBodyError, DecodeResult, EncodeBodyError, EncodeResult, Model}; - // Add this function to the macro for custom serialization fn native_model_encode(obj: &T) -> anyhow::Result> { let result = bincode::encode_to_vec(obj, config::standard())?; @@ -29,16 +28,16 @@ impl Model for A { 1 } - fn native_model_decode_upgrade_body(_data: Vec, x: u32) -> Result { + fn native_model_decode_upgrade_body(_data: Vec, _id: u32, version: u32) -> Result { println!( "A::deserialization_and_upgrade({}, {})", - x, + version, Self::native_model_version() ); - if x == Self::native_model_version() { + if version == Self::native_model_version() { Ok(Self {}) - } else if x < Self::native_model_version() { - panic!("The version {} not supported", x); + } else if version < Self::native_model_version() { + panic!("The version {} not supported", version); } else { panic!("Not implemented"); } @@ -54,11 +53,11 @@ impl Model for A { }) } - fn native_model_decode_body(data: Vec) -> DecodeResult + fn native_model_decode_body(data: Vec, _id: u32) -> DecodeResult where Self: Sized, { - native_model_decode(data).map_err(|e| DecodeBodyError { + native_model_decode(data).map_err(|e| DecodeBodyError::DecodeError { msg: format!("{}", e), source: e.into(), }) @@ -95,16 +94,16 @@ impl Model for B { 2 } - fn native_model_decode_upgrade_body(_data: Vec, x: u32) -> Result { + fn native_model_decode_upgrade_body(_data: Vec, id: u32, version: u32) -> Result { println!( "B::deserialization_and_upgrade({}, {})", - x, + version, Self::native_model_version() ); - if x == Self::native_model_version() { + if version == Self::native_model_version() { Ok(Self {}) - } else if x < Self::native_model_version() { - A::native_model_decode_upgrade_body(_data, x).map(|a| a.into()) + } else if version < Self::native_model_version() { + A::native_model_decode_upgrade_body(_data, id, version).map(|a| a.into()) } else { panic!("Not implemented"); } @@ -120,11 +119,11 @@ impl Model for B { }) } - fn native_model_decode_body(data: Vec) -> DecodeResult + fn native_model_decode_body(data: Vec, _id: u32) -> DecodeResult where Self: Sized, { - native_model_decode(data).map_err(|e| DecodeBodyError { + native_model_decode(data).map_err(|e| DecodeBodyError::DecodeError { msg: format!("{}", e), source: e.into(), }) @@ -173,16 +172,16 @@ impl Model for C { 3 } - fn native_model_decode_upgrade_body(_data: Vec, x: u32) -> Result { + fn native_model_decode_upgrade_body(_data: Vec, id: u32, version: u32) -> Result { println!( "C::deserialization_and_upgrade({}, {})", - x, + version, Self::native_model_version() ); - if x == Self::native_model_version() { + if version == Self::native_model_version() { Ok(Self {}) - } else if x < Self::native_model_version() { - let result = B::native_model_decode_upgrade_body(_data, x).map(|b| { + } else if version < Self::native_model_version() { + let result = B::native_model_decode_upgrade_body(_data, id, version).map(|b| { b.try_into() .map_err(|e: anyhow::Error| native_model::UpgradeError { msg: format!("{}", e), @@ -205,11 +204,11 @@ impl Model for C { }) } - fn native_model_decode_body(data: Vec) -> DecodeResult + fn native_model_decode_body(data: Vec, _id: u32) -> DecodeResult where Self: Sized, { - native_model_decode(data).map_err(|e| DecodeBodyError { + native_model_decode(data).map_err(|e| DecodeBodyError::DecodeError { msg: format!("{}", e), source: e.into(), }) @@ -289,16 +288,17 @@ fn test_encode_downgrade() { #[test] fn test_decode_upgrade() { - let x = 3; - let result = C::native_model_decode_upgrade_body(vec![], x); + let id = 1; + let version = 3; + let result = C::native_model_decode_upgrade_body(vec![], id, version); dbg!(&result); - let x = 2; - let result = C::native_model_decode_upgrade_body(vec![], x); + let version = 2; + let result = C::native_model_decode_upgrade_body(vec![], id, version); dbg!(&result); - let x = 1; - let result = C::native_model_decode_upgrade_body(vec![], x); + let version = 1; + let result = C::native_model_decode_upgrade_body(vec![], id, version); dbg!(&result); } @@ -311,7 +311,7 @@ where T: Model, { if model_id == T::native_model_id() { - T::native_model_decode_upgrade_body(_data, version) + T::native_model_decode_upgrade_body(_data, model_id, version) } else { panic!("The model id {} not supported", model_id); } diff --git a/libraries/native_model/tests/macro_decode_decode_upgrade.rs b/libraries/native_model/tests/macro_decode_decode_upgrade.rs index 39d598cd..d007c1c4 100644 --- a/libraries/native_model/tests/macro_decode_decode_upgrade.rs +++ b/libraries/native_model/tests/macro_decode_decode_upgrade.rs @@ -62,7 +62,7 @@ impl From for Foo2 { fn test_decode_foo1_to_foo2() { let foo1 = Foo1 { x: 100 }; let foo1_encoded = foo1.native_model_encode_body().unwrap(); - let foo2_decoded = Foo2::native_model_decode_upgrade_body(foo1_encoded, 1).unwrap(); + let foo2_decoded = Foo2::native_model_decode_upgrade_body(foo1_encoded, 1, 1).unwrap(); assert_eq!(foo1.x.to_string(), foo2_decoded.x); } @@ -72,7 +72,7 @@ fn test_decode_foo2_to_foo3() { x: "100".to_string(), }; let foo2_encoded = foo2.native_model_encode_body().unwrap(); - let foo3_decoded = Foo3::native_model_decode_upgrade_body(foo2_encoded, 2).unwrap(); + let foo3_decoded = Foo3::native_model_decode_upgrade_body(foo2_encoded, 1, 2).unwrap(); assert_eq!(Foo3::X(100), foo3_decoded); } @@ -80,7 +80,7 @@ fn test_decode_foo2_to_foo3() { fn test_decode_foo1_to_foo3() { let foo1 = Foo1 { x: 100 }; let foo1_encoded = foo1.native_model_encode_body().unwrap(); - let foo3_decoded = Foo3::native_model_decode_upgrade_body(foo1_encoded, 1).unwrap(); + let foo3_decoded = Foo3::native_model_decode_upgrade_body(foo1_encoded, 1, 1).unwrap(); assert_eq!(Foo3::X(100), foo3_decoded); } @@ -88,7 +88,7 @@ fn test_decode_foo1_to_foo3() { fn test_decode_foo1_to_foo1() { let foo1 = Foo1 { x: 100 }; let foo1_encoded = foo1.native_model_encode_body().unwrap(); - let foo1_decoded = Foo1::native_model_decode_upgrade_body(foo1_encoded, 1).unwrap(); + let foo1_decoded = Foo1::native_model_decode_upgrade_body(foo1_encoded, 1, 1).unwrap(); assert_eq!(foo1, foo1_decoded); } @@ -98,7 +98,7 @@ fn test_decode_foo2_to_foo2() { x: "100".to_string(), }; let foo2_encoded = foo2.native_model_encode_body().unwrap(); - let foo2_decoded = Foo2::native_model_decode_upgrade_body(foo2_encoded, 2).unwrap(); + let foo2_decoded = Foo2::native_model_decode_upgrade_body(foo2_encoded, 1, 2).unwrap(); assert_eq!(foo2, foo2_decoded); } @@ -106,7 +106,7 @@ fn test_decode_foo2_to_foo2() { fn test_decode_foo3_to_foo3() { let foo3 = Foo3::X(100); let foo3_encoded = foo3.native_model_encode_body().unwrap(); - let foo3_decoded = Foo3::native_model_decode_upgrade_body(foo3_encoded, 3).unwrap(); + let foo3_decoded = Foo3::native_model_decode_upgrade_body(foo3_encoded, 1, 3).unwrap(); assert_eq!(foo3, foo3_decoded); } @@ -114,7 +114,7 @@ fn test_decode_foo3_to_foo3() { fn test_should_fail_decode_foo3_to_foo2() { let foo3 = Foo3::X(100); let foo3_encoded = foo3.native_model_encode_body().unwrap(); - let foo3_decoded = Foo2::native_model_decode_upgrade_body(foo3_encoded, 3); + let foo3_decoded = Foo2::native_model_decode_upgrade_body(foo3_encoded, 1, 3); assert!(foo3_decoded.is_err()); assert!(matches!( foo3_decoded.unwrap_err(), @@ -126,7 +126,7 @@ fn test_should_fail_decode_foo3_to_foo2() { fn test_should_fail_decode_foo3_to_foo1() { let foo3 = Foo3::X(100); let foo3_encoded = foo3.native_model_encode_body().unwrap(); - let foo3_decoded = Foo1::native_model_decode_upgrade_body(foo3_encoded, 3); + let foo3_decoded = Foo1::native_model_decode_upgrade_body(foo3_encoded, 1, 3); assert!(foo3_decoded.is_err()); assert!(matches!( foo3_decoded.unwrap_err(), @@ -140,10 +140,32 @@ fn test_should_fail_decode_foo2_to_foo1() { x: "100".to_string(), }; let foo2_encoded = foo2.native_model_encode_body().unwrap(); - let foo2_decoded = Foo1::native_model_decode_upgrade_body(foo2_encoded, 2); + let foo2_decoded = Foo1::native_model_decode_upgrade_body(foo2_encoded, 1, 2); assert!(foo2_decoded.is_err()); assert!(matches!( foo2_decoded.unwrap_err(), native_model::Error::UpgradeNotSupported { from: 2, to: 1 } )); } + +#[derive(Debug, Encode, Decode, PartialEq)] +#[native_model(id = 2, version = 1)] +struct Foo1Bis { + x: i32, +} + +#[test] +fn test_prevent_to_decode_the_wrong_model() { + let foo1 = Foo1 { x: 100 }; + let foo1_encoded = foo1.native_model_encode_body().unwrap(); + let foo1_decoded = Foo1Bis::native_model_decode_upgrade_body(foo1_encoded, 1, 1); + dbg!(&foo1_decoded); + // assert!(foo1_decoded.is_err()); + // assert!(matches!( + // foo1_decoded.unwrap_err(), + // native_model::Error::TypeIdMismatch { + // expected: 1, + // actual: 1 + // } + // )); +} From f05bc7a13659ab90bf07b5c6ac2cd9f6b52b28f3 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 4 Sep 2023 17:39:36 +0000 Subject: [PATCH 030/316] chore: update version to 0.3.0 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 44faa2a3..d92c8fd4 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.2.4" +version = "0.3.0" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.3", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.2.4", path = "native_model_macro" } +native_model_macro = { version = "0.3.0", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 65448e90..c95b6bc4 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.2.4" +version = "0.3.0" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From ca8ebef8a33fa572e8daefe9aacf8d7e7735f6a1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 13 Sep 2023 18:04:40 +0000 Subject: [PATCH 031/316] fix(deps): update rust crate proc-macro2 to 1.0.67 --- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index c95b6bc4..4ef4c76e 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -16,4 +16,4 @@ proc-macro = true [dependencies] syn = { version = "2.0", features = ["full"] } quote = "1.0" -proc-macro2 = "1.0.66" +proc-macro2 = "1.0.67" From 47b715be3e7346998b158bb2392582d254f4af65 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 13 Sep 2023 18:08:38 +0000 Subject: [PATCH 032/316] chore: update version to 0.3.1 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index d92c8fd4..af2c2bcb 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.3.0" +version = "0.3.1" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.3", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.3.0", path = "native_model_macro" } +native_model_macro = { version = "0.3.1", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 4ef4c76e..f6e58596 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.3.0" +version = "0.3.1" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From e84837c24826e22fe7a48ac1c122840c06f10429 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 15 Sep 2023 19:47:22 +0000 Subject: [PATCH 033/316] fix(deps): update rust crate zerocopy to 0.7.4 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index af2c2bcb..843a7fbe 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -15,7 +15,7 @@ categories = ["data-structures", "encoding", "rust-patterns"] members = ["native_model_macro"] [dependencies] -zerocopy = { version = "0.7.3", features = [ "derive"] } +zerocopy = { version = "0.7.4", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" native_model_macro = { version = "0.3.1", path = "native_model_macro" } From d9e4bdc9745e5374270c5ec1f00d0557acb62cf9 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 15 Sep 2023 19:52:00 +0000 Subject: [PATCH 034/316] chore: update version to 0.3.2 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 843a7fbe..b96a263f 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.3.1" +version = "0.3.2" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.4", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.3.1", path = "native_model_macro" } +native_model_macro = { version = "0.3.2", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index f6e58596..6b5ede76 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.3.1" +version = "0.3.2" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 37d693a90b7e0628a0ff7c02962c816986fbfc72 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 15 Sep 2023 22:42:57 +0000 Subject: [PATCH 035/316] fix(deps): update rust crate zerocopy to 0.7.5 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index b96a263f..21a74f34 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -15,7 +15,7 @@ categories = ["data-structures", "encoding", "rust-patterns"] members = ["native_model_macro"] [dependencies] -zerocopy = { version = "0.7.4", features = [ "derive"] } +zerocopy = { version = "0.7.5", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" native_model_macro = { version = "0.3.2", path = "native_model_macro" } From 10be88529394b5f6caa0834a3948a55648bfe4c0 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 15 Sep 2023 22:46:11 +0000 Subject: [PATCH 036/316] chore: update version to 0.3.3 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 21a74f34..f8d791f3 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.3.2" +version = "0.3.3" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.5", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.3.2", path = "native_model_macro" } +native_model_macro = { version = "0.3.3", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 6b5ede76..0488ef26 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.3.2" +version = "0.3.3" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 84841601b4aebf70cd484730c143a2b5529a5d39 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 22 Sep 2023 20:07:49 +0000 Subject: [PATCH 037/316] chore(deps): update actions/checkout digest to 8ade135 --- .../native_model/.github/workflows/build_and_test_release.yml | 4 ++-- .../native_model/.github/workflows/conventional_commits.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/.github/workflows/build_and_test_release.yml b/libraries/native_model/.github/workflows/build_and_test_release.yml index 9c29f847..e974cf37 100644 --- a/libraries/native_model/.github/workflows/build_and_test_release.yml +++ b/libraries/native_model/.github/workflows/build_and_test_release.yml @@ -16,7 +16,7 @@ jobs: toolchain: [stable] feature: [ no_feature ] steps: - - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4 + - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4 - name: Setup Rust uses: actions-rs/toolchain@v1 with: @@ -50,7 +50,7 @@ jobs: packages: write steps: - name: Checkout code - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4 + uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4 with: ref: main diff --git a/libraries/native_model/.github/workflows/conventional_commits.yml b/libraries/native_model/.github/workflows/conventional_commits.yml index 4a173ba5..b458f077 100644 --- a/libraries/native_model/.github/workflows/conventional_commits.yml +++ b/libraries/native_model/.github/workflows/conventional_commits.yml @@ -9,5 +9,5 @@ jobs: name: Conventional Commits runs-on: ubuntu-latest steps: - - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4 + - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4 - uses: webiny/action-conventional-commits@v1.1.0 \ No newline at end of file From e21896aacba34cd50d108efce77f21f15e7c847b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 2 Oct 2023 22:24:41 +0000 Subject: [PATCH 038/316] fix(deps): update rust crate zerocopy to 0.7.6 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index f8d791f3..5dba2934 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -15,7 +15,7 @@ categories = ["data-structures", "encoding", "rust-patterns"] members = ["native_model_macro"] [dependencies] -zerocopy = { version = "0.7.5", features = [ "derive"] } +zerocopy = { version = "0.7.6", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" native_model_macro = { version = "0.3.3", path = "native_model_macro" } From 62b8d66f359ae7b1a2f2dd270f4e47c62fbd5cdd Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 2 Oct 2023 22:29:28 +0000 Subject: [PATCH 039/316] chore: update version to 0.3.4 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 5dba2934..71ec7bd4 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.3.3" +version = "0.3.4" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.6", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.3.3", path = "native_model_macro" } +native_model_macro = { version = "0.3.4", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 0488ef26..39587b89 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.3.3" +version = "0.3.4" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From c9f122ea84fdcf2ee1202a966e84ada6c21fbcd5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 4 Oct 2023 04:45:34 +0000 Subject: [PATCH 040/316] fix(deps): update rust crate zerocopy to 0.7.7 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 71ec7bd4..4eef5344 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -15,7 +15,7 @@ categories = ["data-structures", "encoding", "rust-patterns"] members = ["native_model_macro"] [dependencies] -zerocopy = { version = "0.7.6", features = [ "derive"] } +zerocopy = { version = "0.7.7", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" native_model_macro = { version = "0.3.4", path = "native_model_macro" } From 00899878fb3ca55c80b62eb10ba15c8f6336c614 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 4 Oct 2023 04:50:53 +0000 Subject: [PATCH 041/316] chore: update version to 0.3.5 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 4eef5344..e5033c20 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.3.4" +version = "0.3.5" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.7", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.3.4", path = "native_model_macro" } +native_model_macro = { version = "0.3.5", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 39587b89..fec776cb 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.3.4" +version = "0.3.5" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 11375d0d03385b88e9877d9bec455c3aeb6f133c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 4 Oct 2023 22:42:20 +0000 Subject: [PATCH 042/316] fix(deps): update rust crate zerocopy to 0.7.8 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index e5033c20..0bd0f8b7 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -15,7 +15,7 @@ categories = ["data-structures", "encoding", "rust-patterns"] members = ["native_model_macro"] [dependencies] -zerocopy = { version = "0.7.7", features = [ "derive"] } +zerocopy = { version = "0.7.8", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" native_model_macro = { version = "0.3.5", path = "native_model_macro" } From 9955cc742218dec63ad28a9cf134971d9b27a33b Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 4 Oct 2023 22:47:20 +0000 Subject: [PATCH 043/316] chore: update version to 0.3.6 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 0bd0f8b7..5a2ac36c 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.3.5" +version = "0.3.6" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.8", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.3.5", path = "native_model_macro" } +native_model_macro = { version = "0.3.6", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index fec776cb..31d15f14 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.3.5" +version = "0.3.6" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 79962944384edcd9f4ee3e6bcf61a9c42d081c25 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 6 Oct 2023 06:41:24 +0000 Subject: [PATCH 044/316] fix(deps): update rust crate proc-macro2 to 1.0.68 --- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 31d15f14..ea7c34f9 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -16,4 +16,4 @@ proc-macro = true [dependencies] syn = { version = "2.0", features = ["full"] } quote = "1.0" -proc-macro2 = "1.0.67" +proc-macro2 = "1.0.68" From 7bb76ab2bcf2bd8874f268f1f4f7452f5a4d43f1 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 6 Oct 2023 06:44:40 +0000 Subject: [PATCH 045/316] chore: update version to 0.3.7 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 5a2ac36c..7ed8be32 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.3.6" +version = "0.3.7" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.8", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.3.6", path = "native_model_macro" } +native_model_macro = { version = "0.3.7", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index ea7c34f9..c30c3dd1 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.3.6" +version = "0.3.7" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 3c50c8f188c0c96a009eb5d334809e72d782651f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 9 Oct 2023 01:26:32 +0000 Subject: [PATCH 046/316] fix(deps): update rust crate proc-macro2 to 1.0.69 --- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index c30c3dd1..c6cfece4 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -16,4 +16,4 @@ proc-macro = true [dependencies] syn = { version = "2.0", features = ["full"] } quote = "1.0" -proc-macro2 = "1.0.68" +proc-macro2 = "1.0.69" From e6b76cbb8373184fc2de4ac63b9e46ae068956f8 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 9 Oct 2023 01:29:59 +0000 Subject: [PATCH 047/316] chore: update version to 0.3.8 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 7ed8be32..30dc2923 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.3.7" +version = "0.3.8" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.8", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.3.7", path = "native_model_macro" } +native_model_macro = { version = "0.3.8", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index c6cfece4..d26ab2f9 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.3.7" +version = "0.3.8" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From c169f829f240fdb7172324b015404867e91b3a4f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 10 Oct 2023 22:48:28 +0000 Subject: [PATCH 048/316] fix(deps): update rust crate zerocopy to 0.7.9 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 30dc2923..81a4edaa 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -15,7 +15,7 @@ categories = ["data-structures", "encoding", "rust-patterns"] members = ["native_model_macro"] [dependencies] -zerocopy = { version = "0.7.8", features = [ "derive"] } +zerocopy = { version = "0.7.9", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" native_model_macro = { version = "0.3.8", path = "native_model_macro" } From 8fed3c98f8606275ab97fc42b7e6bb39a7b16333 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 10 Oct 2023 22:51:41 +0000 Subject: [PATCH 049/316] chore: update version to 0.3.9 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 81a4edaa..dc14fc7f 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.3.8" +version = "0.3.9" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.9", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.3.8", path = "native_model_macro" } +native_model_macro = { version = "0.3.9", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index d26ab2f9..982441c4 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.3.8" +version = "0.3.9" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 153c7a9c18f5e63ac5c8de62822c0a28948de171 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Oct 2023 18:37:59 +0000 Subject: [PATCH 050/316] fix(deps): update rust crate zerocopy to 0.7.10 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index dc14fc7f..37c10c13 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -15,7 +15,7 @@ categories = ["data-structures", "encoding", "rust-patterns"] members = ["native_model_macro"] [dependencies] -zerocopy = { version = "0.7.9", features = [ "derive"] } +zerocopy = { version = "0.7.10", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" native_model_macro = { version = "0.3.9", path = "native_model_macro" } From 227cf016a2d3c65e325521cce3f1fb6ccd0f86f0 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 11 Oct 2023 18:42:08 +0000 Subject: [PATCH 051/316] chore: update version to 0.3.10 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 37c10c13..86c8a5fc 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.3.9" +version = "0.3.10" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.10", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.3.9", path = "native_model_macro" } +native_model_macro = { version = "0.3.10", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 982441c4..126f27c4 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.3.9" +version = "0.3.10" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 870bdd2e7ebc245e56091e442ff5092e7329a843 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 12 Oct 2023 00:03:33 +0000 Subject: [PATCH 052/316] fix(deps): update rust crate zerocopy to 0.7.11 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 86c8a5fc..c410d61a 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -15,7 +15,7 @@ categories = ["data-structures", "encoding", "rust-patterns"] members = ["native_model_macro"] [dependencies] -zerocopy = { version = "0.7.10", features = [ "derive"] } +zerocopy = { version = "0.7.11", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" native_model_macro = { version = "0.3.10", path = "native_model_macro" } From 56f3aacaa72d28b4d749cf32a2cebb26e634d014 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 12 Oct 2023 00:07:01 +0000 Subject: [PATCH 053/316] chore: update version to 0.3.11 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index c410d61a..c957fbfb 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.3.10" +version = "0.3.11" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.11", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.3.10", path = "native_model_macro" } +native_model_macro = { version = "0.3.11", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 126f27c4..c72956cb 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.3.10" +version = "0.3.11" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 73c4686f272e39d5c689cafc67f455dc7c4d128b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Oct 2023 16:37:53 +0000 Subject: [PATCH 054/316] chore(deps): update actions/setup-node action to v4 --- .../native_model/.github/workflows/build_and_test_release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/.github/workflows/build_and_test_release.yml b/libraries/native_model/.github/workflows/build_and_test_release.yml index e974cf37..722e585b 100644 --- a/libraries/native_model/.github/workflows/build_and_test_release.yml +++ b/libraries/native_model/.github/workflows/build_and_test_release.yml @@ -55,7 +55,7 @@ jobs: ref: main - name: install npm - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: '16' From 5aff6d77b7263380147cdbf9bee60ca7023cf97f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 24 Oct 2023 17:35:19 +0000 Subject: [PATCH 055/316] fix(deps): update rust crate zerocopy to 0.7.12 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index c957fbfb..fb4c353a 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -15,7 +15,7 @@ categories = ["data-structures", "encoding", "rust-patterns"] members = ["native_model_macro"] [dependencies] -zerocopy = { version = "0.7.11", features = [ "derive"] } +zerocopy = { version = "0.7.12", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" native_model_macro = { version = "0.3.11", path = "native_model_macro" } From 4918c5853ac20ca4a14db6ebe69faefc82bb8d0b Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 24 Oct 2023 17:40:33 +0000 Subject: [PATCH 056/316] chore: update version to 0.3.12 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index fb4c353a..3b5dca42 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.3.11" +version = "0.3.12" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.12", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.3.11", path = "native_model_macro" } +native_model_macro = { version = "0.3.12", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index c72956cb..5f15af45 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.3.11" +version = "0.3.12" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 1b980817b7004be9708e05cb95d6e24cdee34148 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 24 Oct 2023 21:54:29 +0000 Subject: [PATCH 057/316] fix(deps): update rust crate zerocopy to 0.7.13 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 3b5dca42..2df941af 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -15,7 +15,7 @@ categories = ["data-structures", "encoding", "rust-patterns"] members = ["native_model_macro"] [dependencies] -zerocopy = { version = "0.7.12", features = [ "derive"] } +zerocopy = { version = "0.7.13", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" native_model_macro = { version = "0.3.12", path = "native_model_macro" } From c513fbb2779a9cb5496257bc29ce456c3dd435ff Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 24 Oct 2023 21:58:50 +0000 Subject: [PATCH 058/316] chore: update version to 0.3.13 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 2df941af..ee68f306 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.3.12" +version = "0.3.13" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.13", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.3.12", path = "native_model_macro" } +native_model_macro = { version = "0.3.13", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 5f15af45..df22bb0d 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.3.12" +version = "0.3.13" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 48573bd545249ffca4a5ede565bccfb021181f31 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 25 Oct 2023 00:27:32 +0000 Subject: [PATCH 059/316] fix(deps): update rust crate zerocopy to 0.7.14 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index ee68f306..63a2485a 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -15,7 +15,7 @@ categories = ["data-structures", "encoding", "rust-patterns"] members = ["native_model_macro"] [dependencies] -zerocopy = { version = "0.7.13", features = [ "derive"] } +zerocopy = { version = "0.7.14", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" native_model_macro = { version = "0.3.13", path = "native_model_macro" } From df4ccfa57ea813a456a74070b3036ef80fdd15f6 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 25 Oct 2023 00:31:44 +0000 Subject: [PATCH 060/316] chore: update version to 0.3.14 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 63a2485a..0f8714b2 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.3.13" +version = "0.3.14" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.14", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.3.13", path = "native_model_macro" } +native_model_macro = { version = "0.3.14", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index df22bb0d..da393fd6 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.3.13" +version = "0.3.14" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 326efd6c322f23fc51f53eef9b467678162f0057 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 25 Oct 2023 14:23:06 +0000 Subject: [PATCH 061/316] fix(deps): update rust crate zerocopy to 0.7.15 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 0f8714b2..fc506793 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -15,7 +15,7 @@ categories = ["data-structures", "encoding", "rust-patterns"] members = ["native_model_macro"] [dependencies] -zerocopy = { version = "0.7.14", features = [ "derive"] } +zerocopy = { version = "0.7.15", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" native_model_macro = { version = "0.3.14", path = "native_model_macro" } From f655663787af5e4604519c731a20a3a1460293bc Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 25 Oct 2023 14:27:23 +0000 Subject: [PATCH 062/316] chore: update version to 0.3.15 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index fc506793..c24bb8aa 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.3.14" +version = "0.3.15" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.15", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.3.14", path = "native_model_macro" } +native_model_macro = { version = "0.3.15", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index da393fd6..aa4a3fd5 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.3.14" +version = "0.3.15" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 00a26a7777fda8221bbaa5d9ce0b0c0aba91188a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 27 Oct 2023 19:59:17 +0000 Subject: [PATCH 063/316] fix(deps): update rust crate zerocopy to 0.7.17 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index c24bb8aa..be849ea8 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -15,7 +15,7 @@ categories = ["data-structures", "encoding", "rust-patterns"] members = ["native_model_macro"] [dependencies] -zerocopy = { version = "0.7.15", features = [ "derive"] } +zerocopy = { version = "0.7.17", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" native_model_macro = { version = "0.3.15", path = "native_model_macro" } From da941287858ff51b5741109940768947afe8c674 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 27 Oct 2023 20:03:15 +0000 Subject: [PATCH 064/316] chore: update version to 0.3.16 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index be849ea8..1b1f7b1b 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.3.15" +version = "0.3.16" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.17", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.3.15", path = "native_model_macro" } +native_model_macro = { version = "0.3.16", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index aa4a3fd5..9a19002c 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.3.15" +version = "0.3.16" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 1c4fa7336e9952135985e8f43eebc954cc4736dd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 27 Oct 2023 21:42:11 +0000 Subject: [PATCH 065/316] fix(deps): update rust crate zerocopy to 0.7.18 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 1b1f7b1b..7d16c4ba 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -15,7 +15,7 @@ categories = ["data-structures", "encoding", "rust-patterns"] members = ["native_model_macro"] [dependencies] -zerocopy = { version = "0.7.17", features = [ "derive"] } +zerocopy = { version = "0.7.18", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" native_model_macro = { version = "0.3.16", path = "native_model_macro" } From 60eb754bf54897f3c686f4b13972a2e5f19b3108 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 27 Oct 2023 21:46:42 +0000 Subject: [PATCH 066/316] chore: update version to 0.3.17 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 7d16c4ba..a9f7e5d6 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.3.16" +version = "0.3.17" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.18", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.3.16", path = "native_model_macro" } +native_model_macro = { version = "0.3.17", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 9a19002c..3334f873 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.3.16" +version = "0.3.17" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 203026e0cf424205221eee0372a278c392fe8e9c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 29 Oct 2023 18:32:16 +0000 Subject: [PATCH 067/316] fix(deps): update rust crate zerocopy to 0.7.19 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index a9f7e5d6..4214cb65 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -15,7 +15,7 @@ categories = ["data-structures", "encoding", "rust-patterns"] members = ["native_model_macro"] [dependencies] -zerocopy = { version = "0.7.18", features = [ "derive"] } +zerocopy = { version = "0.7.19", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" native_model_macro = { version = "0.3.17", path = "native_model_macro" } From c935549944dbfd4c6d4334b1847c6d39b76ede3b Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 29 Oct 2023 18:35:25 +0000 Subject: [PATCH 068/316] chore: update version to 0.3.18 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 4214cb65..055b04e6 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.3.17" +version = "0.3.18" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.19", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.3.17", path = "native_model_macro" } +native_model_macro = { version = "0.3.18", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 3334f873..ea684551 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.3.17" +version = "0.3.18" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 9ff2dccd9e2db2b0debeae086a0b0da96557b617 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:17:43 +0000 Subject: [PATCH 069/316] fix(deps): update rust crate zerocopy to 0.7.20 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 055b04e6..c140a0d8 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -15,7 +15,7 @@ categories = ["data-structures", "encoding", "rust-patterns"] members = ["native_model_macro"] [dependencies] -zerocopy = { version = "0.7.19", features = [ "derive"] } +zerocopy = { version = "0.7.20", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" native_model_macro = { version = "0.3.18", path = "native_model_macro" } From 3d3a994803bca10e504a69743d08c6bffc55d3bd Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 29 Oct 2023 22:21:57 +0000 Subject: [PATCH 070/316] chore: update version to 0.3.19 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index c140a0d8..fd8472d5 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.3.18" +version = "0.3.19" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.20", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.3.18", path = "native_model_macro" } +native_model_macro = { version = "0.3.19", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index ea684551..7e36ae69 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.3.18" +version = "0.3.19" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 7e2cd61b3606dd675b62bf719d5f01b42449dbd3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 31 Oct 2023 22:25:47 +0000 Subject: [PATCH 071/316] fix(deps): update rust crate zerocopy to 0.7.21 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index fd8472d5..72e06f43 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -15,7 +15,7 @@ categories = ["data-structures", "encoding", "rust-patterns"] members = ["native_model_macro"] [dependencies] -zerocopy = { version = "0.7.20", features = [ "derive"] } +zerocopy = { version = "0.7.21", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" native_model_macro = { version = "0.3.19", path = "native_model_macro" } From 6ff3ebd059c167c4ac7e3d9f9ad9e839f5e28673 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 31 Oct 2023 22:30:02 +0000 Subject: [PATCH 072/316] chore: update version to 0.3.20 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 72e06f43..7c07a865 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.3.19" +version = "0.3.20" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.21", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.3.19", path = "native_model_macro" } +native_model_macro = { version = "0.3.20", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 7e36ae69..80090e0a 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.3.19" +version = "0.3.20" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From d20f87055cba141dd22b2794f606eb219f714f58 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 2 Nov 2023 16:17:47 +0000 Subject: [PATCH 073/316] fix(deps): update rust crate zerocopy to 0.7.23 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 7c07a865..0f2ff9b8 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -15,7 +15,7 @@ categories = ["data-structures", "encoding", "rust-patterns"] members = ["native_model_macro"] [dependencies] -zerocopy = { version = "0.7.21", features = [ "derive"] } +zerocopy = { version = "0.7.23", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" native_model_macro = { version = "0.3.20", path = "native_model_macro" } From eb5deba246cc763ea9ee5a01421686bb64b68829 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 2 Nov 2023 16:21:12 +0000 Subject: [PATCH 074/316] chore: update version to 0.3.21 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 0f2ff9b8..f5c9ad40 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.3.20" +version = "0.3.21" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.23", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.3.20", path = "native_model_macro" } +native_model_macro = { version = "0.3.21", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 80090e0a..79ebd0d3 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.3.20" +version = "0.3.21" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 26d62802971eb4593f2726780ceb2028b0417218 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 3 Nov 2023 15:28:02 +0000 Subject: [PATCH 075/316] fix(deps): update rust crate zerocopy to 0.7.24 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index f5c9ad40..590ee1e6 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -15,7 +15,7 @@ categories = ["data-structures", "encoding", "rust-patterns"] members = ["native_model_macro"] [dependencies] -zerocopy = { version = "0.7.23", features = [ "derive"] } +zerocopy = { version = "0.7.24", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" native_model_macro = { version = "0.3.21", path = "native_model_macro" } From 134699d59a99d1b3adebc0cbaefab766adf10e69 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 3 Nov 2023 15:32:39 +0000 Subject: [PATCH 076/316] chore: update version to 0.3.22 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 590ee1e6..0238698a 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.3.21" +version = "0.3.22" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.24", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.3.21", path = "native_model_macro" } +native_model_macro = { version = "0.3.22", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 79ebd0d3..ed71be27 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.3.21" +version = "0.3.22" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From e319f2690f6bdefc85acfe76a694f712fc2a8a0c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 4 Nov 2023 07:41:44 +0000 Subject: [PATCH 077/316] fix(deps): update rust crate zerocopy to 0.7.25 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 0238698a..7019bae6 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -15,7 +15,7 @@ categories = ["data-structures", "encoding", "rust-patterns"] members = ["native_model_macro"] [dependencies] -zerocopy = { version = "0.7.24", features = [ "derive"] } +zerocopy = { version = "0.7.25", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" native_model_macro = { version = "0.3.22", path = "native_model_macro" } From 672f961fd90c90a25b33f94bb9dde4f37a167801 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 4 Nov 2023 07:45:30 +0000 Subject: [PATCH 078/316] chore: update version to 0.3.23 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 7019bae6..58bf0af7 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.3.22" +version = "0.3.23" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.25", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.3.22", path = "native_model_macro" } +native_model_macro = { version = "0.3.23", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index ed71be27..c6473c93 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.3.22" +version = "0.3.23" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 31159307d2d5210eea2a8679a9b1f61c249656be Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 14 Nov 2023 23:11:34 +0000 Subject: [PATCH 079/316] fix(deps): update rust crate zerocopy to 0.7.26 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 58bf0af7..51b159b9 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -15,7 +15,7 @@ categories = ["data-structures", "encoding", "rust-patterns"] members = ["native_model_macro"] [dependencies] -zerocopy = { version = "0.7.25", features = [ "derive"] } +zerocopy = { version = "0.7.26", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" native_model_macro = { version = "0.3.23", path = "native_model_macro" } From bcf9910d49b90e032912291dfd6d5abb4e92cf02 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 14 Nov 2023 23:16:29 +0000 Subject: [PATCH 080/316] chore: update version to 0.3.24 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 51b159b9..64a5b341 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.3.23" +version = "0.3.24" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.26", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.3.23", path = "native_model_macro" } +native_model_macro = { version = "0.3.24", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index c6473c93..b38b084c 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.3.23" +version = "0.3.24" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From a8ad1135cd71e918ceb1c8533ab12797cc74119a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 23 Nov 2023 22:50:12 +0000 Subject: [PATCH 081/316] chore(deps): update webiny/action-conventional-commits action to v1.2.0 --- .../native_model/.github/workflows/conventional_commits.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/.github/workflows/conventional_commits.yml b/libraries/native_model/.github/workflows/conventional_commits.yml index b458f077..019525e6 100644 --- a/libraries/native_model/.github/workflows/conventional_commits.yml +++ b/libraries/native_model/.github/workflows/conventional_commits.yml @@ -10,4 +10,4 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4 - - uses: webiny/action-conventional-commits@v1.1.0 \ No newline at end of file + - uses: webiny/action-conventional-commits@v1.2.0 \ No newline at end of file From b41b83358634892338aa3e8f7dd975058a6abda9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 26 Nov 2023 04:09:56 +0000 Subject: [PATCH 082/316] fix(deps): update rust crate proc-macro2 to 1.0.70 --- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index b38b084c..f3f25885 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -16,4 +16,4 @@ proc-macro = true [dependencies] syn = { version = "2.0", features = ["full"] } quote = "1.0" -proc-macro2 = "1.0.69" +proc-macro2 = "1.0.70" From a80148a412b46d2f32b0c4a1e84d441fd8e2d1b3 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 26 Nov 2023 04:12:14 +0000 Subject: [PATCH 083/316] chore: update version to 0.3.25 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 64a5b341..de86daf6 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.3.24" +version = "0.3.25" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.26", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.3.24", path = "native_model_macro" } +native_model_macro = { version = "0.3.25", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index f3f25885..da449900 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.3.24" +version = "0.3.25" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From ea331bb2b9333cf6188b9bf3dbb8badb08212c7c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 Nov 2023 17:29:59 +0000 Subject: [PATCH 084/316] fix(deps): update rust crate zerocopy to 0.7.27 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index de86daf6..18cf7399 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -15,7 +15,7 @@ categories = ["data-structures", "encoding", "rust-patterns"] members = ["native_model_macro"] [dependencies] -zerocopy = { version = "0.7.26", features = [ "derive"] } +zerocopy = { version = "0.7.27", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" native_model_macro = { version = "0.3.25", path = "native_model_macro" } From e34029e05176d1b92b4b154a78f5ad57e0f33d71 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 30 Nov 2023 17:33:03 +0000 Subject: [PATCH 085/316] chore: update version to 0.3.26 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 18cf7399..fddf84d4 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.3.25" +version = "0.3.26" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.27", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.3.25", path = "native_model_macro" } +native_model_macro = { version = "0.3.26", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index da449900..d02966f5 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.3.25" +version = "0.3.26" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 8831b7a2404f8f2e7dcb247b20f0966885c5681b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 1 Dec 2023 04:32:39 +0000 Subject: [PATCH 086/316] fix(deps): update rust crate zerocopy to 0.7.28 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index fddf84d4..091f2e9b 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -15,7 +15,7 @@ categories = ["data-structures", "encoding", "rust-patterns"] members = ["native_model_macro"] [dependencies] -zerocopy = { version = "0.7.27", features = [ "derive"] } +zerocopy = { version = "0.7.28", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" native_model_macro = { version = "0.3.26", path = "native_model_macro" } From 7944fe0f8522a5992df1c73732839e3db3866638 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 1 Dec 2023 04:35:47 +0000 Subject: [PATCH 087/316] chore: update version to 0.3.27 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 091f2e9b..ed985b71 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.3.26" +version = "0.3.27" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.28", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.3.26", path = "native_model_macro" } +native_model_macro = { version = "0.3.27", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index d02966f5..ad75e0f4 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.3.26" +version = "0.3.27" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From bd4ccf52bf0051a231ae71256e683ea12a7837bb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Dec 2023 20:16:36 +0000 Subject: [PATCH 088/316] fix(deps): update rust crate zerocopy to 0.7.29 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index ed985b71..d4d73373 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -15,7 +15,7 @@ categories = ["data-structures", "encoding", "rust-patterns"] members = ["native_model_macro"] [dependencies] -zerocopy = { version = "0.7.28", features = [ "derive"] } +zerocopy = { version = "0.7.29", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" native_model_macro = { version = "0.3.27", path = "native_model_macro" } From 9c2e3493dba9d91c451929f33274dfb1a4981a22 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 5 Dec 2023 20:20:49 +0000 Subject: [PATCH 089/316] chore: update version to 0.3.28 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index d4d73373..81ad804e 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.3.27" +version = "0.3.28" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.29", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.3.27", path = "native_model_macro" } +native_model_macro = { version = "0.3.28", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index ad75e0f4..5660cd8f 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.3.27" +version = "0.3.28" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 80c8b3b935c1ce7f94bbb718581e658a7814b392 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 8 Dec 2023 19:58:00 +0000 Subject: [PATCH 090/316] fix(deps): update rust crate zerocopy to 0.7.30 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 81ad804e..1b0c6270 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -15,7 +15,7 @@ categories = ["data-structures", "encoding", "rust-patterns"] members = ["native_model_macro"] [dependencies] -zerocopy = { version = "0.7.29", features = [ "derive"] } +zerocopy = { version = "0.7.30", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" native_model_macro = { version = "0.3.28", path = "native_model_macro" } From dfb270c16fd57e16f4b92ffaa8ba30a56cd172b3 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 8 Dec 2023 20:00:41 +0000 Subject: [PATCH 091/316] chore: update version to 0.3.29 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 1b0c6270..acbd66e3 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.3.28" +version = "0.3.29" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.30", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.3.28", path = "native_model_macro" } +native_model_macro = { version = "0.3.29", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 5660cd8f..51afda32 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.3.28" +version = "0.3.29" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From ccccfd22e880c89ef28ed221a7e1d16e8c1cba11 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 14 Dec 2023 02:02:02 +0000 Subject: [PATCH 092/316] fix(deps): update rust crate zerocopy to 0.7.31 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index acbd66e3..50ddef6c 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -15,7 +15,7 @@ categories = ["data-structures", "encoding", "rust-patterns"] members = ["native_model_macro"] [dependencies] -zerocopy = { version = "0.7.30", features = [ "derive"] } +zerocopy = { version = "0.7.31", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" native_model_macro = { version = "0.3.29", path = "native_model_macro" } From dc725a33802c04132dba4ceb8c3136687eb066b9 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 14 Dec 2023 02:04:40 +0000 Subject: [PATCH 093/316] chore: update version to 0.3.30 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 50ddef6c..6adc0f7d 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.3.29" +version = "0.3.30" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.31", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.3.29", path = "native_model_macro" } +native_model_macro = { version = "0.3.30", path = "native_model_macro" } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 51afda32..9042f197 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.3.29" +version = "0.3.30" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From fd5bbfd9644e38c570d98393459255cf5d3806de Mon Sep 17 00:00:00 2001 From: Vincent Herlemont Date: Sun, 29 Oct 2023 09:34:45 +0100 Subject: [PATCH 094/316] feat: add with macro option --- libraries/native_model/README.md | 32 +++++++----- libraries/native_model/README.md.skt.md | 52 ++++++++++++------- .../native_model_macro/src/lib.rs | 7 ++- .../src/method/decode_body.rs | 6 ++- .../src/method/encode_body.rs | 9 ++-- libraries/native_model/src/encode_decode.rs | 34 ++++++++++++ libraries/native_model/src/lib.rs | 2 + libraries/native_model/src/model.rs | 1 - .../tests/example/encode_decode/bincode.rs | 24 ++++----- .../example/encode_decode/bincode_serde.rs | 36 +++++++++---- .../tests/example/example_define_model.rs | 24 +++++---- .../tests/example/example_main.rs | 25 +++++---- libraries/native_model/tests/macro.rs | 22 +++++--- .../tests/macro_decode_decode_upgrade.rs | 24 ++++++--- .../native_model/tests/macro_encode_decode.rs | 20 ++++--- .../native_model/tests/native_model_from.rs | 21 +++++--- .../tests/native_model_try_from.rs | 21 +++++--- 17 files changed, 240 insertions(+), 120 deletions(-) create mode 100644 libraries/native_model/src/encode_decode.rs diff --git a/libraries/native_model/README.md b/libraries/native_model/README.md index e26268ff..2d569fc2 100644 --- a/libraries/native_model/README.md +++ b/libraries/native_model/README.md @@ -100,21 +100,28 @@ Under the hood, the native model is a thin wrapper around serialized data. The ` First, you need to set up your serialization format. You can use any serialization format. -Just define the following functions, so they must be imported in the scope where you use the native model. +Just define a struct with the name you want. This struct must implement [`native_model::Encode`](https://docs.rs/native_model/latest/native_model/trait.Encode.html) and [`native_model::Decode`](https://docs.rs/native_model/latest/native_model/trait.Decode.html) traits. -```rust,ignore -fn native_model_encode_body(obj: &T) -> Result, E> { - ... +In the below example we have created a struct `Bincode` that use the [bincode](https://docs.rs/bincode/latest/bincode/) crate: +```rust,skt-define-serilization-format +pub struct Bincode; + +impl native_model::Encode for Bincode { + type Error = bincode::error::EncodeError; + fn encode(obj: &T) -> Result, bincode::error::EncodeError> { + bincode::encode_to_vec(obj, bincode::config::standard()) + } } -fn native_model_decode_body(data: Vec) -> Result { - ... +impl native_model::Decode for Bincode { + type Error = bincode::error::DecodeError; + fn decode(data: Vec) -> Result { + bincode::decode_from_slice(&data, bincode::config::standard()).map(|(result, _)| result) + } } ``` -With `T` and `E` the type depending on the serialization format you use. Just `E` need to implement the `std::error::Error` trait. - -Examples: +Full examples: - [bincode with encode/decode](./tests/example/encode_decode/bincode.rs) - [bincode with serde](./tests/example/encode_decode/bincode_serde.rs) @@ -126,6 +133,7 @@ Define your model using the macro [`native_model`](file:///home/vincentherlemont Attributes: - `id = u32`: The unique identifier of the model. - `version = u32`: The version of the model. +- `with = type`: The serialization format that you use for the Encode/Decode implementation. Setup [here](#setup-your-serialization-format). - `from = type`: Optional, the previous version of the model. - `type`: The previous version of the model that you use for the From implementation. - `try_from = (type, error)`: Optional, the previous version of the model with error handling. @@ -136,11 +144,11 @@ Attributes: use native_model::native_model; #[derive(Encode, Decode, PartialEq, Debug)] -#[native_model(id = 1, version = 1)] +#[native_model(id = 1, version = 1, with = Bincode)] struct DotV1(u32, u32); #[derive(Encode, Decode, PartialEq, Debug)] -#[native_model(id = 1, version = 2, from = DotV1)] +#[native_model(id = 1, version = 2, with = Bincode, from = DotV1)] struct DotV2 { name: String, x: u64, @@ -150,7 +158,7 @@ struct DotV2 { // Implement the conversion between versions From for DotV2 and From for DotV1. #[derive(Encode, Decode, PartialEq, Debug)] -#[native_model(id = 1, version = 3, try_from = (DotV2, anyhow::Error))] +#[native_model(id = 1, version = 3, with = Bincode, try_from = (DotV2, anyhow::Error))] struct DotV3 { name: String, cord: Cord, diff --git a/libraries/native_model/README.md.skt.md b/libraries/native_model/README.md.skt.md index 969e1ffb..9cb43ea9 100644 --- a/libraries/native_model/README.md.skt.md +++ b/libraries/native_model/README.md.skt.md @@ -1,30 +1,30 @@ ```rust,skt-main use bincode; -use bincode::{{Decode, Encode}}; +use bincode::{{Decode, Encode, config}}; use native_model_macro::native_model; -fn native_model_encode_body( - model: &T, -) -> Result, bincode::error::EncodeError> {{ - {{ - bincode::encode_to_vec(model, bincode::config::standard()) +pub struct Bincode; + +impl native_model::Encode for Bincode {{ + type Error = bincode::error::EncodeError; + fn encode(obj: &T) -> Result, bincode::error::EncodeError> {{ + bincode::encode_to_vec(obj, config::standard()) }} }} -fn native_model_decode_body( - data: Vec, -) -> Result {{ - {{ - bincode::decode_from_slice(&data, bincode::config::standard()).map(|(result, _)| result) +impl native_model::Decode for Bincode {{ + type Error = bincode::error::DecodeError; + fn decode(data: Vec) -> Result {{ + bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) }} }} #[derive(Encode, Decode, PartialEq, Debug)] -#[native_model(id = 1, version = 1)] +#[native_model(id = 1, version = 1, with = Bincode)] struct DotV1(u32, u32); #[derive(Encode, Decode, PartialEq, Debug)] -#[native_model(id = 1, version = 2, from = DotV1)] +#[native_model(id = 1, version = 2, with = Bincode, from = DotV1)] struct DotV2 {{ name: String, x: u64, @@ -56,17 +56,22 @@ fn main() {{ ```rust,skt-define-models use bincode::{{config, Decode, Encode}}; -#[allow(dead_code)] -fn native_model_encode_body(obj: &T) -> Result, bincode::error::EncodeError> {{ - bincode::encode_to_vec(obj, config::standard()) +pub struct Bincode; + +impl native_model::Encode for Bincode {{ + type Error = bincode::error::EncodeError; + fn encode(obj: &T) -> Result, bincode::error::EncodeError> {{ + bincode::encode_to_vec(obj, config::standard()) + }} }} -#[allow(dead_code)] -fn native_model_decode_body(data: Vec) -> Result {{ - bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) +impl native_model::Decode for Bincode {{ + type Error = bincode::error::DecodeError; + fn decode(data: Vec) -> Result {{ + bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) + }} }} - {} impl From for DotV2 {{ @@ -137,4 +142,11 @@ fn main() {{ ); }} +``` + +```rust,skt-define-serilization-format +{} + +fn main() {{ +}} ``` \ No newline at end of file diff --git a/libraries/native_model/native_model_macro/src/lib.rs b/libraries/native_model/native_model_macro/src/lib.rs index a048b68a..2dc20be2 100644 --- a/libraries/native_model/native_model_macro/src/lib.rs +++ b/libraries/native_model/native_model_macro/src/lib.rs @@ -21,6 +21,8 @@ pub(crate) struct ModelAttributes { pub(crate) id: Option, pub(crate) version: Option, // type + pub(crate) with: Option, + // type pub(crate) from: Option, // (type, try_from::Error type) pub(crate) try_from: Option<(Path, Path)>, @@ -32,6 +34,8 @@ impl ModelAttributes { self.id = Some(meta.value()?.parse()?); } else if meta.path.is_ident("version") { self.version = Some(meta.value()?.parse()?); + } else if meta.path.is_ident("with") { + self.with = Some(meta.value()?.parse()?); } else if meta.path.is_ident("from") { self.from = Some(meta.value()?.parse()?); } else if meta.path.is_ident("try_from") { @@ -72,6 +76,7 @@ impl Parse for TupleTryFrom { /// Attributes: /// - `id = u32`: The unique identifier of the model. /// - `version = u32`: The version of the model. +/// - `with` = type: Required, the serialization/deserialization library that you use. Must implement `native_model::Encode` and `native_model::Decode`. /// - `from = type`: Optional, the previous version of the model. /// - `type`: The previous version of the model that you use for the From implementation. /// - `try_from = (type, error)`: Optional, the previous version of the model with error handling. @@ -92,7 +97,7 @@ pub fn native_model(args: TokenStream, input: TokenStream) -> TokenStream { let native_model_id_fn = generate_native_model_id(&attrs); let native_model_version_fn = generate_native_model_version(&attrs); - let native_model_encode_body_fn = generate_native_model_encode_body(); + let native_model_encode_body_fn = generate_native_model_encode_body(&attrs); let native_model_encode_downgrade_body_fn = generate_native_model_encode_downgrade_body(&attrs); let native_model_decode_body_fn = generate_native_model_decode_body(&attrs); let native_model_decode_upgrade_body_fn = generate_native_model_decode_upgrade_body(&attrs); diff --git a/libraries/native_model/native_model_macro/src/method/decode_body.rs b/libraries/native_model/native_model_macro/src/method/decode_body.rs index 97ad509b..3ff228da 100644 --- a/libraries/native_model/native_model_macro/src/method/decode_body.rs +++ b/libraries/native_model/native_model_macro/src/method/decode_body.rs @@ -3,7 +3,8 @@ use proc_macro2::TokenStream; use quote::quote; pub(crate) fn generate_native_model_decode_body(attrs: &ModelAttributes) -> TokenStream { - let id = attrs.id.clone().expect("id is required"); + let id = attrs.id.clone().expect("`id` is required"); + let with = attrs.with.clone().expect("`with` is required"); let gen = quote! { fn native_model_decode_body(data: Vec, id: u32) -> Result { println!("id: {}, {}", id, #id); @@ -11,7 +12,8 @@ pub(crate) fn generate_native_model_decode_body(attrs: &ModelAttributes) -> Toke return Err(native_model::DecodeBodyError::MismatchedModelId); } - native_model_decode_body(data).map_err(|e| native_model::DecodeBodyError::DecodeError { + use native_model::Decode; + #with::decode(data).map_err(|e| native_model::DecodeBodyError::DecodeError { msg: format!("{}", e), source: e.into(), }) diff --git a/libraries/native_model/native_model_macro/src/method/encode_body.rs b/libraries/native_model/native_model_macro/src/method/encode_body.rs index 2fa097fe..f756063e 100644 --- a/libraries/native_model/native_model_macro/src/method/encode_body.rs +++ b/libraries/native_model/native_model_macro/src/method/encode_body.rs @@ -1,10 +1,13 @@ +use crate::ModelAttributes; use proc_macro2::TokenStream; use quote::quote; -pub(crate) fn generate_native_model_encode_body() -> TokenStream { +pub(crate) fn generate_native_model_encode_body(attrs: &ModelAttributes) -> TokenStream { + let with = attrs.with.clone().expect("`with` is required"); let gen = quote! { fn native_model_encode_body(&self) -> Result, native_model::EncodeBodyError> { - native_model_encode_body(self).map_err(|e| native_model::EncodeBodyError { + use native_model::Encode; + #with::encode(self).map_err(|e| native_model::EncodeBodyError { msg: format!("{}", e), source: e.into(), }) @@ -12,4 +15,4 @@ pub(crate) fn generate_native_model_encode_body() -> TokenStream { }; gen.into() -} \ No newline at end of file +} diff --git a/libraries/native_model/src/encode_decode.rs b/libraries/native_model/src/encode_decode.rs new file mode 100644 index 00000000..da436f71 --- /dev/null +++ b/libraries/native_model/src/encode_decode.rs @@ -0,0 +1,34 @@ +/// Encode trait for your own encoding method. +/// +/// Example: +/// ```rust +/// pub struct Bincode; +/// +/// impl native_model::Encode for Bincode { +/// type Error = bincode::error::EncodeError; +/// fn encode(obj: &T) -> Result, bincode::error::EncodeError> { +/// bincode::encode_to_vec(obj, bincode::config::standard()) +/// } +/// } +/// ``` +pub trait Encode { + type Error; + fn encode(obj: &T) -> Result, Self::Error>; +} + +/// Decode trait for your own decoding method. +/// +/// Example: +/// ```rust +/// pub struct Bincode; +/// +/// impl native_model::Decode for Bincode { +/// type Error = bincode::error::DecodeError; +/// fn decode(data: Vec) -> Result { +/// bincode::decode_from_slice(&data, bincode::config::standard()).map(|(result, _)| result) +/// } +/// } +pub trait Decode { + type Error; + fn decode(data: Vec) -> Result; +} diff --git a/libraries/native_model/src/lib.rs b/libraries/native_model/src/lib.rs index 7fbbf7ce..6cfc382e 100644 --- a/libraries/native_model/src/lib.rs +++ b/libraries/native_model/src/lib.rs @@ -15,10 +15,12 @@ //! //! See examples in the [README.md](https://github.com/vincent-herlemont/native_model) file. +mod encode_decode; mod header; mod model; pub mod wrapper; +pub use encode_decode::*; pub use model::*; /// Macro to generate a [`native_model`] implementation for a struct. diff --git a/libraries/native_model/src/model.rs b/libraries/native_model/src/model.rs index 08a9351e..b8307492 100644 --- a/libraries/native_model/src/model.rs +++ b/libraries/native_model/src/model.rs @@ -5,7 +5,6 @@ pub trait Model: Sized { fn native_model_version() -> u32; // --------------- Decode --------------- - fn native_model_decode_body(data: Vec, id: u32) -> DecodeResult where Self: Sized; diff --git a/libraries/native_model/tests/example/encode_decode/bincode.rs b/libraries/native_model/tests/example/encode_decode/bincode.rs index d3b8ce3f..71507775 100644 --- a/libraries/native_model/tests/example/encode_decode/bincode.rs +++ b/libraries/native_model/tests/example/encode_decode/bincode.rs @@ -1,26 +1,26 @@ use bincode; -use bincode::{Decode, Encode}; +use bincode::{config, Decode, Encode}; -fn native_model_encode_body( - model: &T, -) -> Result, bincode::error::EncodeError> { - { - bincode::encode_to_vec(model, bincode::config::standard()) +pub struct Bincode; + +impl native_model::Encode for Bincode { + type Error = bincode::error::EncodeError; + fn encode(obj: &T) -> Result, bincode::error::EncodeError> { + bincode::encode_to_vec(obj, config::standard()) } } -fn native_model_decode_body( - data: Vec, -) -> Result { - { - bincode::decode_from_slice(&data, bincode::config::standard()).map(|(result, _)| result) +impl native_model::Decode for Bincode { + type Error = bincode::error::DecodeError; + fn decode(data: Vec) -> Result { + bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) } } use native_model_macro::native_model; #[derive(Encode, Decode, PartialEq, Debug)] -#[native_model(id = 1, version = 1)] +#[native_model(id = 1, version = 1, with = Bincode)] struct DotV1(u32, u32); #[test] diff --git a/libraries/native_model/tests/example/encode_decode/bincode_serde.rs b/libraries/native_model/tests/example/encode_decode/bincode_serde.rs index a4acd978..090bebd9 100644 --- a/libraries/native_model/tests/example/encode_decode/bincode_serde.rs +++ b/libraries/native_model/tests/example/encode_decode/bincode_serde.rs @@ -1,18 +1,34 @@ use bincode; use serde::{Deserialize, Serialize}; -fn native_model_encode_body( - model: &T, -) -> Result, bincode::error::EncodeError> { - { - bincode::serde::encode_to_vec(model, bincode::config::standard()) +// fn native_model_encode_body( +// model: &T, +// ) -> Result, bincode::error::EncodeError> { +// { +// bincode::serde::encode_to_vec(model, bincode::config::standard()) +// } +// } +// +// fn native_model_decode_body Deserialize<'a>>( +// data: Vec, +// ) -> Result { +// { +// Ok(bincode::serde::decode_from_slice(&data, bincode::config::standard())?.0) +// } +// } + +pub struct Bincode; + +impl native_model::Encode for Bincode { + type Error = bincode::error::EncodeError; + fn encode(obj: &T) -> Result, bincode::error::EncodeError> { + bincode::serde::encode_to_vec(obj, bincode::config::standard()) } } -fn native_model_decode_body Deserialize<'a>>( - data: Vec, -) -> Result { - { +impl Deserialize<'a>> native_model::Decode for Bincode { + type Error = bincode::error::DecodeError; + fn decode(data: Vec) -> Result { Ok(bincode::serde::decode_from_slice(&data, bincode::config::standard())?.0) } } @@ -20,7 +36,7 @@ fn native_model_decode_body Deserialize<'a>>( use native_model_macro::native_model; #[derive(Serialize, Deserialize, PartialEq, Debug)] -#[native_model(id = 1, version = 1)] +#[native_model(id = 1, version = 1, with = Bincode)] struct DotV1(u32, u32); #[test] diff --git a/libraries/native_model/tests/example/example_define_model.rs b/libraries/native_model/tests/example/example_define_model.rs index 6deae702..14b204b3 100644 --- a/libraries/native_model/tests/example/example_define_model.rs +++ b/libraries/native_model/tests/example/example_define_model.rs @@ -1,22 +1,28 @@ use bincode::{config, Decode, Encode}; use native_model_macro::native_model; -#[allow(dead_code)] -fn native_model_encode_body(obj: &T) -> Result, bincode::error::EncodeError> { - bincode::encode_to_vec(obj, config::standard()) +pub struct Bincode; + +impl native_model::Encode for Bincode { + type Error = bincode::error::EncodeError; + fn encode(obj: &T) -> Result, bincode::error::EncodeError> { + bincode::encode_to_vec(obj, config::standard()) + } } -#[allow(dead_code)] -fn native_model_decode_body(data: Vec) -> Result { - bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) +impl native_model::Decode for Bincode { + type Error = bincode::error::DecodeError; + fn decode(data: Vec) -> Result { + bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) + } } #[derive(Encode, Decode, PartialEq, Debug)] -#[native_model(id = 1, version = 1)] +#[native_model(id = 1, version = 1, with = Bincode)] struct DotV1(u32, u32); #[derive(Encode, Decode, PartialEq, Debug)] -#[native_model(id = 1, version = 2, from = DotV1)] +#[native_model(id = 1, version = 2, with = Bincode, from = DotV1)] struct DotV2 { name: String, x: u64, @@ -40,7 +46,7 @@ impl From for DotV1 { } #[derive(Encode, Decode, PartialEq, Debug)] -#[native_model(id = 1, version = 3, try_from = (DotV2, anyhow::Error))] +#[native_model(id = 1, version = 3, with = Bincode, try_from = (DotV2, anyhow::Error))] struct DotV3 { name: String, cord: Cord, diff --git a/libraries/native_model/tests/example/example_main.rs b/libraries/native_model/tests/example/example_main.rs index 5835c46b..d5374da2 100644 --- a/libraries/native_model/tests/example/example_main.rs +++ b/libraries/native_model/tests/example/example_main.rs @@ -1,29 +1,28 @@ use bincode; -use bincode::{Decode, Encode}; +use bincode::{config, Decode, Encode}; use native_model::native_model; -fn native_model_encode_body( - model: &T, -) -> Result, bincode::error::EncodeError> { - { - bincode::encode_to_vec(model, bincode::config::standard()) +pub struct Bincode; +impl native_model::Encode for Bincode { + type Error = bincode::error::EncodeError; + fn encode(obj: &T) -> Result, bincode::error::EncodeError> { + bincode::encode_to_vec(obj, config::standard()) } } -fn native_model_decode_body( - data: Vec, -) -> Result { - { - bincode::decode_from_slice(&data, bincode::config::standard()).map(|(result, _)| result) +impl native_model::Decode for Bincode { + type Error = bincode::error::DecodeError; + fn decode(data: Vec) -> Result { + bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) } } #[derive(Encode, Decode, PartialEq, Debug)] -#[native_model(id = 1, version = 1)] +#[native_model(id = 1, version = 1, with = Bincode)] struct DotV1(u32, u32); #[derive(Encode, Decode, PartialEq, Debug)] -#[native_model(id = 1, version = 2, from = DotV1)] +#[native_model(id = 1, version = 2, with = Bincode, from = DotV1)] struct DotV2 { name: String, x: u64, diff --git a/libraries/native_model/tests/macro.rs b/libraries/native_model/tests/macro.rs index 1b1f48b0..4b687701 100644 --- a/libraries/native_model/tests/macro.rs +++ b/libraries/native_model/tests/macro.rs @@ -2,24 +2,30 @@ use bincode::{config, Decode, Encode}; use native_model::Model; use native_model_macro::native_model; -#[allow(dead_code)] -fn native_model_encode_body(obj: &T) -> Result, bincode::error::EncodeError> { - bincode::encode_to_vec(obj, config::standard()) +pub struct Bincode; + +impl native_model::Encode for Bincode { + type Error = bincode::error::EncodeError; + fn encode(obj: &T) -> Result, bincode::error::EncodeError> { + bincode::encode_to_vec(obj, config::standard()) + } } -#[allow(dead_code)] -fn native_model_decode_body(data: Vec) -> Result { - bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) +impl native_model::Decode for Bincode { + type Error = bincode::error::DecodeError; + fn decode(data: Vec) -> Result { + bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) + } } #[derive(Debug, Encode, Decode)] -#[native_model(id = 1, version = 1)] +#[native_model(id = 1, version = 1, with = Bincode)] struct Foo1 { x: i32, } #[derive(Debug, Encode, Decode)] -#[native_model(id = 1, version = 2, from = Foo1)] +#[native_model(id = 1, version = 2, with = Bincode, from = Foo1)] struct Foo2 { x: i32, } diff --git a/libraries/native_model/tests/macro_decode_decode_upgrade.rs b/libraries/native_model/tests/macro_decode_decode_upgrade.rs index d007c1c4..a6e6aa71 100644 --- a/libraries/native_model/tests/macro_decode_decode_upgrade.rs +++ b/libraries/native_model/tests/macro_decode_decode_upgrade.rs @@ -2,22 +2,30 @@ use bincode::{config, Decode, Encode}; use native_model::Model; use native_model_macro::native_model; -fn native_model_encode_body(obj: &T) -> Result, bincode::error::EncodeError> { - bincode::encode_to_vec(obj, config::standard()) +pub struct Bincode; + +impl native_model::Encode for Bincode { + type Error = bincode::error::EncodeError; + fn encode(obj: &T) -> Result, bincode::error::EncodeError> { + bincode::encode_to_vec(obj, config::standard()) + } } -fn native_model_decode_body(data: Vec) -> Result { - bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) +impl native_model::Decode for Bincode { + type Error = bincode::error::DecodeError; + fn decode(data: Vec) -> Result { + bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) + } } #[derive(Debug, Encode, Decode, PartialEq)] -#[native_model(id = 1, version = 1)] +#[native_model(id = 1, version = 1, with = Bincode)] struct Foo1 { x: i32, } #[derive(Debug, Encode, Decode, PartialEq)] -#[native_model(id = 1, version = 2, from = Foo1)] +#[native_model(id = 1, version = 2, with = Bincode, from = Foo1)] struct Foo2 { x: String, } @@ -39,7 +47,7 @@ impl From for Foo1 { } #[derive(Debug, Encode, Decode, PartialEq)] -#[native_model(id = 1, version = 3, from = Foo2)] +#[native_model(id = 1, version = 3, with = Bincode, from = Foo2)] enum Foo3 { X(i32), } @@ -149,7 +157,7 @@ fn test_should_fail_decode_foo2_to_foo1() { } #[derive(Debug, Encode, Decode, PartialEq)] -#[native_model(id = 2, version = 1)] +#[native_model(id = 2, version = 1, with = Bincode)] struct Foo1Bis { x: i32, } diff --git a/libraries/native_model/tests/macro_encode_decode.rs b/libraries/native_model/tests/macro_encode_decode.rs index 37415c07..a2c42bab 100644 --- a/libraries/native_model/tests/macro_encode_decode.rs +++ b/libraries/native_model/tests/macro_encode_decode.rs @@ -2,22 +2,30 @@ use bincode::{config, Decode, Encode}; use native_model::Model; use native_model_macro::native_model; -fn native_model_encode_body(obj: &T) -> Result, bincode::error::EncodeError> { - bincode::encode_to_vec(obj, config::standard()) +pub struct Bincode; + +impl native_model::Encode for Bincode { + type Error = bincode::error::EncodeError; + fn encode(obj: &T) -> Result, bincode::error::EncodeError> { + bincode::encode_to_vec(obj, config::standard()) + } } -fn native_model_decode_body(data: Vec) -> Result { - bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) +impl native_model::Decode for Bincode { + type Error = bincode::error::DecodeError; + fn decode(data: Vec) -> Result { + bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) + } } #[derive(Debug, Encode, Decode, PartialEq)] -#[native_model(id = 1, version = 1)] +#[native_model(id = 1, version = 1, with = Bincode)] struct Foo1 { x: i32, } #[derive(Debug, Encode, Decode, PartialEq)] -#[native_model(id = 1, version = 2, from = Foo1)] +#[native_model(id = 1, version = 2, with = Bincode, from = Foo1)] struct Foo2 { x: i32, } diff --git a/libraries/native_model/tests/native_model_from.rs b/libraries/native_model/tests/native_model_from.rs index 6e0acf1f..4dd66ce4 100644 --- a/libraries/native_model/tests/native_model_from.rs +++ b/libraries/native_model/tests/native_model_from.rs @@ -1,22 +1,27 @@ use bincode::{config, Decode, Encode}; use native_model_macro::native_model; - -fn native_model_encode_body(obj: &T) -> Result, bincode::error::EncodeError> { - bincode::encode_to_vec(obj, config::standard()) +pub struct Bincode; +impl native_model::Encode for Bincode { + type Error = bincode::error::EncodeError; + fn encode(obj: &T) -> Result, bincode::error::EncodeError> { + bincode::encode_to_vec(obj, config::standard()) + } } -fn native_model_decode_body(data: Vec) -> Result { - bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) +impl native_model::Decode for Bincode { + type Error = bincode::error::DecodeError; + fn decode(data: Vec) -> Result { + bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) + } } - #[derive(Debug, Encode, Decode, PartialEq)] -#[native_model(id = 1, version = 1)] +#[native_model(id = 1, version = 1, with = Bincode)] struct Foo1 { x: i32, } #[derive(Debug, Encode, Decode, PartialEq)] -#[native_model(id = 1, version = 2, from = Foo1)] +#[native_model(id = 1, version = 2, with = Bincode, from = Foo1)] struct Foo2 { x: i32, c: char, diff --git a/libraries/native_model/tests/native_model_try_from.rs b/libraries/native_model/tests/native_model_try_from.rs index 8cea2743..c223d945 100644 --- a/libraries/native_model/tests/native_model_try_from.rs +++ b/libraries/native_model/tests/native_model_try_from.rs @@ -1,22 +1,29 @@ use bincode::{config, Decode, Encode}; use native_model_macro::native_model; -fn native_model_encode_body(obj: &T) -> Result, bincode::error::EncodeError> { - bincode::encode_to_vec(obj, config::standard()) +pub struct Bincode; + +impl native_model::Encode for Bincode { + type Error = bincode::error::EncodeError; + fn encode(obj: &T) -> Result, bincode::error::EncodeError> { + bincode::encode_to_vec(obj, config::standard()) + } } -fn native_model_decode_body(data: Vec) -> Result { - bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) +impl native_model::Decode for Bincode { + type Error = bincode::error::DecodeError; + fn decode(data: Vec) -> Result { + bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) + } } - #[derive(Debug, Encode, Decode, PartialEq)] -#[native_model(id = 1, version = 1)] +#[native_model(id = 1, version = 1, with = Bincode)] struct Foo1 { x: i32, } #[derive(Debug, Encode, Decode, PartialEq)] -#[native_model(id = 1, version = 2, try_from = (Foo1, anyhow::Error))] +#[native_model(id = 1, version = 2, with = Bincode, try_from = (Foo1, anyhow::Error))] struct Foo2 { x: i32, } From 789f09fa679b4ecfbf4ffa890abee33d7c03605c Mon Sep 17 00:00:00 2001 From: Vincent Herlemont Date: Sun, 29 Oct 2023 09:39:40 +0100 Subject: [PATCH 095/316] fix: unknown result on macro --- .../native_model/native_model_macro/src/method/decode_body.rs | 2 +- .../native_model/native_model_macro/src/method/encode_body.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/native_model/native_model_macro/src/method/decode_body.rs b/libraries/native_model/native_model_macro/src/method/decode_body.rs index 3ff228da..e229651c 100644 --- a/libraries/native_model/native_model_macro/src/method/decode_body.rs +++ b/libraries/native_model/native_model_macro/src/method/decode_body.rs @@ -6,7 +6,7 @@ pub(crate) fn generate_native_model_decode_body(attrs: &ModelAttributes) -> Toke let id = attrs.id.clone().expect("`id` is required"); let with = attrs.with.clone().expect("`with` is required"); let gen = quote! { - fn native_model_decode_body(data: Vec, id: u32) -> Result { + fn native_model_decode_body(data: Vec, id: u32) -> std::result::Result { println!("id: {}, {}", id, #id); if id != #id { return Err(native_model::DecodeBodyError::MismatchedModelId); diff --git a/libraries/native_model/native_model_macro/src/method/encode_body.rs b/libraries/native_model/native_model_macro/src/method/encode_body.rs index f756063e..36571369 100644 --- a/libraries/native_model/native_model_macro/src/method/encode_body.rs +++ b/libraries/native_model/native_model_macro/src/method/encode_body.rs @@ -5,7 +5,7 @@ use quote::quote; pub(crate) fn generate_native_model_encode_body(attrs: &ModelAttributes) -> TokenStream { let with = attrs.with.clone().expect("`with` is required"); let gen = quote! { - fn native_model_encode_body(&self) -> Result, native_model::EncodeBodyError> { + fn native_model_encode_body(&self) -> std::result::Result, native_model::EncodeBodyError> { use native_model::Encode; #with::encode(self).map_err(|e| native_model::EncodeBodyError { msg: format!("{}", e), From ac601f4c987b902287253f0affce6f207ac43ff3 Mon Sep 17 00:00:00 2001 From: Vincent Herlemont Date: Sun, 29 Oct 2023 09:40:24 +0100 Subject: [PATCH 096/316] refactor: rename encode_decode with codec --- libraries/native_model/src/{encode_decode.rs => codec/mod.rs} | 0 libraries/native_model/src/lib.rs | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) rename libraries/native_model/src/{encode_decode.rs => codec/mod.rs} (100%) diff --git a/libraries/native_model/src/encode_decode.rs b/libraries/native_model/src/codec/mod.rs similarity index 100% rename from libraries/native_model/src/encode_decode.rs rename to libraries/native_model/src/codec/mod.rs diff --git a/libraries/native_model/src/lib.rs b/libraries/native_model/src/lib.rs index 6cfc382e..42475a24 100644 --- a/libraries/native_model/src/lib.rs +++ b/libraries/native_model/src/lib.rs @@ -15,12 +15,12 @@ //! //! See examples in the [README.md](https://github.com/vincent-herlemont/native_model) file. -mod encode_decode; +mod codec; mod header; mod model; pub mod wrapper; -pub use encode_decode::*; +pub use codec::*; pub use model::*; /// Macro to generate a [`native_model`] implementation for a struct. From 383379fe1ea2739bba0d8810501fd5799822ef60 Mon Sep 17 00:00:00 2001 From: Vincent Herlemont Date: Sun, 29 Oct 2023 09:41:42 +0100 Subject: [PATCH 097/316] feat: default bincode 1.3.3 --- libraries/native_model/Cargo.toml | 7 ++++++- .../native_model/src/codec/bincode_1_3.rs | 19 +++++++++++++++++++ libraries/native_model/src/codec/mod.rs | 2 ++ libraries/native_model/src/lib.rs | 1 + .../bincode.rs | 0 .../bincode_serde.rs | 0 .../{encode_decode => custom_codec}/mod.rs | 0 .../example/default_codec/bincode_1_3.rs | 18 ++++++++++++++++++ .../tests/example/default_codec/mod.rs | 1 + libraries/native_model/tests/example/mod.rs | 2 +- libraries/native_model/tests/macro.rs | 1 - 11 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 libraries/native_model/src/codec/bincode_1_3.rs rename libraries/native_model/tests/example/{encode_decode => custom_codec}/bincode.rs (100%) rename libraries/native_model/tests/example/{encode_decode => custom_codec}/bincode_serde.rs (100%) rename libraries/native_model/tests/example/{encode_decode => custom_codec}/mod.rs (100%) create mode 100644 libraries/native_model/tests/example/default_codec/bincode_1_3.rs create mode 100644 libraries/native_model/tests/example/default_codec/mod.rs diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 6adc0f7d..7f0fdf6b 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -20,13 +20,18 @@ thiserror = "1.0" anyhow = "1.0" native_model_macro = { version = "0.3.30", path = "native_model_macro" } +serde = { version = "1.0", features = ["derive"], optional = true } +bincode_1_3 = { package = "bincode", version = "1.3", optional = true } + [dev-dependencies] -serde = { version = "1.0", features = ["derive"] } bincode = { version = "2.0.0-rc.3", features = ["serde"] } serde_json = "1.0" criterion = { version = "0.5.1" } skeptic = "0.13" +[features] +default = ["serde", "bincode_1_3"] + [[bench]] name = "overhead" harness = false diff --git a/libraries/native_model/src/codec/bincode_1_3.rs b/libraries/native_model/src/codec/bincode_1_3.rs new file mode 100644 index 00000000..a3fe397d --- /dev/null +++ b/libraries/native_model/src/codec/bincode_1_3.rs @@ -0,0 +1,19 @@ +use bincode_1_3::{deserialize, serialize, Error}; +use serde::{Deserialize, Serialize}; + +#[derive(Default)] +pub struct Bincode; + +impl super::Encode for Bincode { + type Error = Error; + fn encode(obj: &T) -> Result, Error> { + Ok(serialize(obj)?) + } +} + +impl Deserialize<'a>> super::Decode for Bincode { + type Error = Error; + fn decode(data: Vec) -> Result { + Ok(deserialize(&data[..])?) + } +} diff --git a/libraries/native_model/src/codec/mod.rs b/libraries/native_model/src/codec/mod.rs index da436f71..44f71edb 100644 --- a/libraries/native_model/src/codec/mod.rs +++ b/libraries/native_model/src/codec/mod.rs @@ -1,3 +1,5 @@ +pub mod bincode_1_3; + /// Encode trait for your own encoding method. /// /// Example: diff --git a/libraries/native_model/src/lib.rs b/libraries/native_model/src/lib.rs index 42475a24..eb78d1fe 100644 --- a/libraries/native_model/src/lib.rs +++ b/libraries/native_model/src/lib.rs @@ -16,6 +16,7 @@ //! See examples in the [README.md](https://github.com/vincent-herlemont/native_model) file. mod codec; +pub use codec::*; mod header; mod model; pub mod wrapper; diff --git a/libraries/native_model/tests/example/encode_decode/bincode.rs b/libraries/native_model/tests/example/custom_codec/bincode.rs similarity index 100% rename from libraries/native_model/tests/example/encode_decode/bincode.rs rename to libraries/native_model/tests/example/custom_codec/bincode.rs diff --git a/libraries/native_model/tests/example/encode_decode/bincode_serde.rs b/libraries/native_model/tests/example/custom_codec/bincode_serde.rs similarity index 100% rename from libraries/native_model/tests/example/encode_decode/bincode_serde.rs rename to libraries/native_model/tests/example/custom_codec/bincode_serde.rs diff --git a/libraries/native_model/tests/example/encode_decode/mod.rs b/libraries/native_model/tests/example/custom_codec/mod.rs similarity index 100% rename from libraries/native_model/tests/example/encode_decode/mod.rs rename to libraries/native_model/tests/example/custom_codec/mod.rs diff --git a/libraries/native_model/tests/example/default_codec/bincode_1_3.rs b/libraries/native_model/tests/example/default_codec/bincode_1_3.rs new file mode 100644 index 00000000..3f9b6a16 --- /dev/null +++ b/libraries/native_model/tests/example/default_codec/bincode_1_3.rs @@ -0,0 +1,18 @@ +use native_model::native_model; +use serde::Deserialize; +use serde::Serialize; + +#[derive(Serialize, Deserialize, PartialEq, Debug)] +#[native_model(id = 1, version = 1, with = native_model::bincode_1_3::Bincode)] +struct Example { + a: u32, + b: u32, +} + +#[test] +fn encode_decode() { + let example = Example { a: 1, b: 2 }; + let bytes = native_model::encode(&example).unwrap(); + let (example, _) = native_model::decode::(bytes).unwrap(); + assert_eq!(example, Example { a: 1, b: 2 }); +} diff --git a/libraries/native_model/tests/example/default_codec/mod.rs b/libraries/native_model/tests/example/default_codec/mod.rs new file mode 100644 index 00000000..6447aa6b --- /dev/null +++ b/libraries/native_model/tests/example/default_codec/mod.rs @@ -0,0 +1 @@ +mod bincode_1_3; diff --git a/libraries/native_model/tests/example/mod.rs b/libraries/native_model/tests/example/mod.rs index 1c591e28..20a38eda 100644 --- a/libraries/native_model/tests/example/mod.rs +++ b/libraries/native_model/tests/example/mod.rs @@ -1,3 +1,3 @@ -mod encode_decode; +mod default_codec; mod example_define_model; mod example_main; diff --git a/libraries/native_model/tests/macro.rs b/libraries/native_model/tests/macro.rs index 4b687701..3d6459ad 100644 --- a/libraries/native_model/tests/macro.rs +++ b/libraries/native_model/tests/macro.rs @@ -1,7 +1,6 @@ use bincode::{config, Decode, Encode}; use native_model::Model; use native_model_macro::native_model; - pub struct Bincode; impl native_model::Encode for Bincode { From 39466299eda0b1e5e8d7397329845189c98a1b84 Mon Sep 17 00:00:00 2001 From: Vincent Herlemont Date: Sun, 29 Oct 2023 09:42:30 +0100 Subject: [PATCH 098/316] feat: default bincode 2.0.0-rc.* --- libraries/native_model/Cargo.toml | 4 ++-- .../native_model/src/codec/bincode_2_rc.rs | 22 +++++++++++++++++++ libraries/native_model/src/codec/mod.rs | 1 + libraries/native_model/tests_crate/.gitignore | 2 ++ libraries/native_model/tests_crate/Cargo.toml | 13 +++++++++++ .../{ => tests_crate}/tests/_example.rs | 0 .../{ => tests_crate}/tests/_experiment.rs | 0 .../tests/example/custom_codec/bincode.rs | 2 +- .../example/custom_codec/bincode_serde.rs | 2 +- .../tests/example/custom_codec/mod.rs | 0 .../example/default_codec/bincode_1_3.rs | 0 .../example/default_codec/bincode_2_rc.rs | 18 +++++++++++++++ .../tests/example/default_codec/mod.rs | 1 + .../tests/example/example_define_model.rs | 2 +- .../tests/example/example_main.rs | 0 .../{ => tests_crate}/tests/example/mod.rs | 0 .../{ => tests_crate}/tests/macro.rs | 3 +-- .../tests/macro_decode_decode_upgrade.rs | 2 +- .../tests/macro_encode_decode.rs | 2 +- .../native_model/tests_crate/tests/mod.rs | 1 + .../tests/native_model_from.rs | 2 +- .../tests/native_model_try_from.rs | 2 +- 22 files changed, 68 insertions(+), 11 deletions(-) create mode 100644 libraries/native_model/src/codec/bincode_2_rc.rs create mode 100644 libraries/native_model/tests_crate/.gitignore create mode 100644 libraries/native_model/tests_crate/Cargo.toml rename libraries/native_model/{ => tests_crate}/tests/_example.rs (100%) rename libraries/native_model/{ => tests_crate}/tests/_experiment.rs (100%) rename libraries/native_model/{ => tests_crate}/tests/example/custom_codec/bincode.rs (96%) rename libraries/native_model/{ => tests_crate}/tests/example/custom_codec/bincode_serde.rs (97%) rename libraries/native_model/{ => tests_crate}/tests/example/custom_codec/mod.rs (100%) rename libraries/native_model/{ => tests_crate}/tests/example/default_codec/bincode_1_3.rs (100%) create mode 100644 libraries/native_model/tests_crate/tests/example/default_codec/bincode_2_rc.rs rename libraries/native_model/{ => tests_crate}/tests/example/default_codec/mod.rs (50%) rename libraries/native_model/{ => tests_crate}/tests/example/example_define_model.rs (98%) rename libraries/native_model/{ => tests_crate}/tests/example/example_main.rs (100%) rename libraries/native_model/{ => tests_crate}/tests/example/mod.rs (100%) rename libraries/native_model/{ => tests_crate}/tests/macro.rs (95%) rename libraries/native_model/{ => tests_crate}/tests/macro_decode_decode_upgrade.rs (99%) rename libraries/native_model/{ => tests_crate}/tests/macro_encode_decode.rs (97%) create mode 100644 libraries/native_model/tests_crate/tests/mod.rs rename libraries/native_model/{ => tests_crate}/tests/native_model_from.rs (98%) rename libraries/native_model/{ => tests_crate}/tests/native_model_try_from.rs (98%) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 7f0fdf6b..632312c7 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -22,15 +22,15 @@ native_model_macro = { version = "0.3.30", path = "native_model_macro" } serde = { version = "1.0", features = ["derive"], optional = true } bincode_1_3 = { package = "bincode", version = "1.3", optional = true } +bincode_2_rc = { package = "bincode", version = "2.0.0-rc.3", features = ["serde"], optional = true } [dev-dependencies] -bincode = { version = "2.0.0-rc.3", features = ["serde"] } serde_json = "1.0" criterion = { version = "0.5.1" } skeptic = "0.13" [features] -default = ["serde", "bincode_1_3"] +default = ["serde", "bincode_1_3", "bincode_2_rc"] [[bench]] name = "overhead" diff --git a/libraries/native_model/src/codec/bincode_2_rc.rs b/libraries/native_model/src/codec/bincode_2_rc.rs new file mode 100644 index 00000000..400bf405 --- /dev/null +++ b/libraries/native_model/src/codec/bincode_2_rc.rs @@ -0,0 +1,22 @@ +use bincode_2_rc::{ + config, + error::{DecodeError, EncodeError}, + serde::{decode_from_slice, encode_to_vec}, +}; +use serde::{Deserialize, Serialize}; + +pub struct Bincode; + +impl super::Encode for Bincode { + type Error = EncodeError; + fn encode(obj: &T) -> Result, EncodeError> { + encode_to_vec(obj, config::standard()) + } +} + +impl Deserialize<'a>> super::Decode for Bincode { + type Error = DecodeError; + fn decode(data: Vec) -> Result { + Ok(decode_from_slice(&data, config::standard())?.0) + } +} diff --git a/libraries/native_model/src/codec/mod.rs b/libraries/native_model/src/codec/mod.rs index 44f71edb..83691899 100644 --- a/libraries/native_model/src/codec/mod.rs +++ b/libraries/native_model/src/codec/mod.rs @@ -1,4 +1,5 @@ pub mod bincode_1_3; +pub mod bincode_2_rc; /// Encode trait for your own encoding method. /// diff --git a/libraries/native_model/tests_crate/.gitignore b/libraries/native_model/tests_crate/.gitignore new file mode 100644 index 00000000..2ebc5ea0 --- /dev/null +++ b/libraries/native_model/tests_crate/.gitignore @@ -0,0 +1,2 @@ +/target +/Cargo.lock \ No newline at end of file diff --git a/libraries/native_model/tests_crate/Cargo.toml b/libraries/native_model/tests_crate/Cargo.toml new file mode 100644 index 00000000..ac4fb18b --- /dev/null +++ b/libraries/native_model/tests_crate/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "tests_crate" +version = "0.1.0" +edition = "2021" + + +[workspace] + +[dev-dependencies] +native_model = { path = "../" } +serde = { version = "1.0", features = ["derive"] } +bincode = { version = "2.0.0-rc.3", features = ["serde"] } +anyhow = "1.0.44" \ No newline at end of file diff --git a/libraries/native_model/tests/_example.rs b/libraries/native_model/tests_crate/tests/_example.rs similarity index 100% rename from libraries/native_model/tests/_example.rs rename to libraries/native_model/tests_crate/tests/_example.rs diff --git a/libraries/native_model/tests/_experiment.rs b/libraries/native_model/tests_crate/tests/_experiment.rs similarity index 100% rename from libraries/native_model/tests/_experiment.rs rename to libraries/native_model/tests_crate/tests/_experiment.rs diff --git a/libraries/native_model/tests/example/custom_codec/bincode.rs b/libraries/native_model/tests_crate/tests/example/custom_codec/bincode.rs similarity index 96% rename from libraries/native_model/tests/example/custom_codec/bincode.rs rename to libraries/native_model/tests_crate/tests/example/custom_codec/bincode.rs index 71507775..9b1cadff 100644 --- a/libraries/native_model/tests/example/custom_codec/bincode.rs +++ b/libraries/native_model/tests_crate/tests/example/custom_codec/bincode.rs @@ -17,7 +17,7 @@ impl native_model::Decode for Bincode { } } -use native_model_macro::native_model; +use native_model::native_model; #[derive(Encode, Decode, PartialEq, Debug)] #[native_model(id = 1, version = 1, with = Bincode)] diff --git a/libraries/native_model/tests/example/custom_codec/bincode_serde.rs b/libraries/native_model/tests_crate/tests/example/custom_codec/bincode_serde.rs similarity index 97% rename from libraries/native_model/tests/example/custom_codec/bincode_serde.rs rename to libraries/native_model/tests_crate/tests/example/custom_codec/bincode_serde.rs index 090bebd9..8d239753 100644 --- a/libraries/native_model/tests/example/custom_codec/bincode_serde.rs +++ b/libraries/native_model/tests_crate/tests/example/custom_codec/bincode_serde.rs @@ -33,7 +33,7 @@ impl Deserialize<'a>> native_model::Decode for Bincode { } } -use native_model_macro::native_model; +use native_model::native_model; #[derive(Serialize, Deserialize, PartialEq, Debug)] #[native_model(id = 1, version = 1, with = Bincode)] diff --git a/libraries/native_model/tests/example/custom_codec/mod.rs b/libraries/native_model/tests_crate/tests/example/custom_codec/mod.rs similarity index 100% rename from libraries/native_model/tests/example/custom_codec/mod.rs rename to libraries/native_model/tests_crate/tests/example/custom_codec/mod.rs diff --git a/libraries/native_model/tests/example/default_codec/bincode_1_3.rs b/libraries/native_model/tests_crate/tests/example/default_codec/bincode_1_3.rs similarity index 100% rename from libraries/native_model/tests/example/default_codec/bincode_1_3.rs rename to libraries/native_model/tests_crate/tests/example/default_codec/bincode_1_3.rs diff --git a/libraries/native_model/tests_crate/tests/example/default_codec/bincode_2_rc.rs b/libraries/native_model/tests_crate/tests/example/default_codec/bincode_2_rc.rs new file mode 100644 index 00000000..3ee86804 --- /dev/null +++ b/libraries/native_model/tests_crate/tests/example/default_codec/bincode_2_rc.rs @@ -0,0 +1,18 @@ +use native_model::{native_model, bincode_2_rc}; +use serde::Deserialize; +use serde::Serialize; + +#[derive(Serialize, Deserialize, PartialEq, Debug)] +#[native_model(id = 1, version = 1, with = native_model::bincode_2_rc::Bincode)] +struct Example { + a: u32, + b: u32, +} + +#[test] +fn encode_decode() { + let example = Example { a: 1, b: 2 }; + let bytes = native_model::encode(&example).unwrap(); + let (example, _) = native_model::decode::(bytes).unwrap(); + assert_eq!(example, Example { a: 1, b: 2 }); +} diff --git a/libraries/native_model/tests/example/default_codec/mod.rs b/libraries/native_model/tests_crate/tests/example/default_codec/mod.rs similarity index 50% rename from libraries/native_model/tests/example/default_codec/mod.rs rename to libraries/native_model/tests_crate/tests/example/default_codec/mod.rs index 6447aa6b..b146d1f8 100644 --- a/libraries/native_model/tests/example/default_codec/mod.rs +++ b/libraries/native_model/tests_crate/tests/example/default_codec/mod.rs @@ -1 +1,2 @@ mod bincode_1_3; +mod bincode_2_rc; \ No newline at end of file diff --git a/libraries/native_model/tests/example/example_define_model.rs b/libraries/native_model/tests_crate/tests/example/example_define_model.rs similarity index 98% rename from libraries/native_model/tests/example/example_define_model.rs rename to libraries/native_model/tests_crate/tests/example/example_define_model.rs index 14b204b3..6556c8f6 100644 --- a/libraries/native_model/tests/example/example_define_model.rs +++ b/libraries/native_model/tests_crate/tests/example/example_define_model.rs @@ -1,5 +1,5 @@ use bincode::{config, Decode, Encode}; -use native_model_macro::native_model; +use native_model::native_model; pub struct Bincode; diff --git a/libraries/native_model/tests/example/example_main.rs b/libraries/native_model/tests_crate/tests/example/example_main.rs similarity index 100% rename from libraries/native_model/tests/example/example_main.rs rename to libraries/native_model/tests_crate/tests/example/example_main.rs diff --git a/libraries/native_model/tests/example/mod.rs b/libraries/native_model/tests_crate/tests/example/mod.rs similarity index 100% rename from libraries/native_model/tests/example/mod.rs rename to libraries/native_model/tests_crate/tests/example/mod.rs diff --git a/libraries/native_model/tests/macro.rs b/libraries/native_model/tests_crate/tests/macro.rs similarity index 95% rename from libraries/native_model/tests/macro.rs rename to libraries/native_model/tests_crate/tests/macro.rs index 3d6459ad..21ea3073 100644 --- a/libraries/native_model/tests/macro.rs +++ b/libraries/native_model/tests_crate/tests/macro.rs @@ -1,6 +1,5 @@ use bincode::{config, Decode, Encode}; -use native_model::Model; -use native_model_macro::native_model; +use native_model::{native_model, Model}; pub struct Bincode; impl native_model::Encode for Bincode { diff --git a/libraries/native_model/tests/macro_decode_decode_upgrade.rs b/libraries/native_model/tests_crate/tests/macro_decode_decode_upgrade.rs similarity index 99% rename from libraries/native_model/tests/macro_decode_decode_upgrade.rs rename to libraries/native_model/tests_crate/tests/macro_decode_decode_upgrade.rs index a6e6aa71..7cd81fa0 100644 --- a/libraries/native_model/tests/macro_decode_decode_upgrade.rs +++ b/libraries/native_model/tests_crate/tests/macro_decode_decode_upgrade.rs @@ -1,6 +1,6 @@ use bincode::{config, Decode, Encode}; +use native_model::native_model; use native_model::Model; -use native_model_macro::native_model; pub struct Bincode; diff --git a/libraries/native_model/tests/macro_encode_decode.rs b/libraries/native_model/tests_crate/tests/macro_encode_decode.rs similarity index 97% rename from libraries/native_model/tests/macro_encode_decode.rs rename to libraries/native_model/tests_crate/tests/macro_encode_decode.rs index a2c42bab..bd160f2b 100644 --- a/libraries/native_model/tests/macro_encode_decode.rs +++ b/libraries/native_model/tests_crate/tests/macro_encode_decode.rs @@ -1,6 +1,6 @@ use bincode::{config, Decode, Encode}; +use native_model::native_model; use native_model::Model; -use native_model_macro::native_model; pub struct Bincode; diff --git a/libraries/native_model/tests_crate/tests/mod.rs b/libraries/native_model/tests_crate/tests/mod.rs new file mode 100644 index 00000000..4fb02733 --- /dev/null +++ b/libraries/native_model/tests_crate/tests/mod.rs @@ -0,0 +1 @@ +mod example; diff --git a/libraries/native_model/tests/native_model_from.rs b/libraries/native_model/tests_crate/tests/native_model_from.rs similarity index 98% rename from libraries/native_model/tests/native_model_from.rs rename to libraries/native_model/tests_crate/tests/native_model_from.rs index 4dd66ce4..0ec5c1c4 100644 --- a/libraries/native_model/tests/native_model_from.rs +++ b/libraries/native_model/tests_crate/tests/native_model_from.rs @@ -1,5 +1,5 @@ use bincode::{config, Decode, Encode}; -use native_model_macro::native_model; +use native_model::native_model; pub struct Bincode; impl native_model::Encode for Bincode { type Error = bincode::error::EncodeError; diff --git a/libraries/native_model/tests/native_model_try_from.rs b/libraries/native_model/tests_crate/tests/native_model_try_from.rs similarity index 98% rename from libraries/native_model/tests/native_model_try_from.rs rename to libraries/native_model/tests_crate/tests/native_model_try_from.rs index c223d945..c84da6a8 100644 --- a/libraries/native_model/tests/native_model_try_from.rs +++ b/libraries/native_model/tests_crate/tests/native_model_try_from.rs @@ -1,5 +1,5 @@ use bincode::{config, Decode, Encode}; -use native_model_macro::native_model; +use native_model::native_model; pub struct Bincode; From f07922cdb4c91f6b58537207668275f81e4f2ca2 Mon Sep 17 00:00:00 2001 From: Vincent Herlemont Date: Sun, 29 Oct 2023 09:43:15 +0100 Subject: [PATCH 099/316] feat: default postcard 1.0 --- libraries/native_model/Cargo.toml | 3 ++- libraries/native_model/src/codec/mod.rs | 1 + .../native_model/src/codec/postcard_1_0.rs | 18 ++++++++++++++++++ libraries/native_model/tests_crate/Cargo.toml | 4 ++-- .../example/default_codec/bincode_2_rc.rs | 2 +- .../tests/example/default_codec/mod.rs | 3 ++- .../example/default_codec/postcard_1_0.rs | 18 ++++++++++++++++++ 7 files changed, 44 insertions(+), 5 deletions(-) create mode 100644 libraries/native_model/src/codec/postcard_1_0.rs create mode 100644 libraries/native_model/tests_crate/tests/example/default_codec/postcard_1_0.rs diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 632312c7..6987ecb4 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -23,6 +23,7 @@ native_model_macro = { version = "0.3.30", path = "native_model_macro" } serde = { version = "1.0", features = ["derive"], optional = true } bincode_1_3 = { package = "bincode", version = "1.3", optional = true } bincode_2_rc = { package = "bincode", version = "2.0.0-rc.3", features = ["serde"], optional = true } +postcard_1_0 = { package = "postcard", version = "1.0", features = ["alloc"], optional = true } [dev-dependencies] serde_json = "1.0" @@ -30,7 +31,7 @@ criterion = { version = "0.5.1" } skeptic = "0.13" [features] -default = ["serde", "bincode_1_3", "bincode_2_rc"] +default = ["serde", "bincode_1_3", "bincode_2_rc", "postcard_1_0"] [[bench]] name = "overhead" diff --git a/libraries/native_model/src/codec/mod.rs b/libraries/native_model/src/codec/mod.rs index 83691899..e58dccc1 100644 --- a/libraries/native_model/src/codec/mod.rs +++ b/libraries/native_model/src/codec/mod.rs @@ -1,5 +1,6 @@ pub mod bincode_1_3; pub mod bincode_2_rc; +pub mod postcard_1_0; /// Encode trait for your own encoding method. /// diff --git a/libraries/native_model/src/codec/postcard_1_0.rs b/libraries/native_model/src/codec/postcard_1_0.rs new file mode 100644 index 00000000..ddea1584 --- /dev/null +++ b/libraries/native_model/src/codec/postcard_1_0.rs @@ -0,0 +1,18 @@ +use postcard_1_0::{from_bytes, to_allocvec, Error}; +use serde::{Deserialize, Serialize}; + +pub struct PostCard; + +impl super::Encode for PostCard { + type Error = Error; + fn encode(obj: &T) -> Result, Error> { + Ok(to_allocvec(obj)?) + } +} + +impl Deserialize<'a>> super::Decode for PostCard { + type Error = Error; + fn decode(data: Vec) -> Result { + Ok(from_bytes(&data)?) + } +} diff --git a/libraries/native_model/tests_crate/Cargo.toml b/libraries/native_model/tests_crate/Cargo.toml index ac4fb18b..70237955 100644 --- a/libraries/native_model/tests_crate/Cargo.toml +++ b/libraries/native_model/tests_crate/Cargo.toml @@ -3,11 +3,11 @@ name = "tests_crate" version = "0.1.0" edition = "2021" - [workspace] [dev-dependencies] native_model = { path = "../" } serde = { version = "1.0", features = ["derive"] } bincode = { version = "2.0.0-rc.3", features = ["serde"] } -anyhow = "1.0.44" \ No newline at end of file +anyhow = "1.0" +postcard = { version = "1.0", features = ["alloc"] } \ No newline at end of file diff --git a/libraries/native_model/tests_crate/tests/example/default_codec/bincode_2_rc.rs b/libraries/native_model/tests_crate/tests/example/default_codec/bincode_2_rc.rs index 3ee86804..90580a53 100644 --- a/libraries/native_model/tests_crate/tests/example/default_codec/bincode_2_rc.rs +++ b/libraries/native_model/tests_crate/tests/example/default_codec/bincode_2_rc.rs @@ -1,4 +1,4 @@ -use native_model::{native_model, bincode_2_rc}; +use native_model::{native_model}; use serde::Deserialize; use serde::Serialize; diff --git a/libraries/native_model/tests_crate/tests/example/default_codec/mod.rs b/libraries/native_model/tests_crate/tests/example/default_codec/mod.rs index b146d1f8..eb9f386f 100644 --- a/libraries/native_model/tests_crate/tests/example/default_codec/mod.rs +++ b/libraries/native_model/tests_crate/tests/example/default_codec/mod.rs @@ -1,2 +1,3 @@ mod bincode_1_3; -mod bincode_2_rc; \ No newline at end of file +mod bincode_2_rc; +mod postcard_1_0; \ No newline at end of file diff --git a/libraries/native_model/tests_crate/tests/example/default_codec/postcard_1_0.rs b/libraries/native_model/tests_crate/tests/example/default_codec/postcard_1_0.rs new file mode 100644 index 00000000..a65867b6 --- /dev/null +++ b/libraries/native_model/tests_crate/tests/example/default_codec/postcard_1_0.rs @@ -0,0 +1,18 @@ +use native_model::{native_model}; +use serde::Deserialize; +use serde::Serialize; + +#[derive(Serialize, Deserialize, PartialEq, Debug)] +#[native_model(id = 1, version = 1, with = native_model::postcard_1_0::PostCard)] +struct Example { + a: u32, + b: u32, +} + +#[test] +fn encode_decode() { + let example = Example { a: 1, b: 2 }; + let bytes = native_model::encode(&example).unwrap(); + let (example, _) = native_model::decode::(bytes).unwrap(); + assert_eq!(example, Example { a: 1, b: 2 }); +} From 2f68d495c1fd6af558d371d3aa57e16272725e96 Mon Sep 17 00:00:00 2001 From: Vincent Herlemont Date: Sun, 29 Oct 2023 09:43:41 +0100 Subject: [PATCH 100/316] feat: bincode_1_3 by default --- .../native_model/native_model_macro/src/lib.rs | 13 ++++++++++++- .../src/method/decode_body.rs | 1 - .../tests/example/default_codec/default.rs | 18 ++++++++++++++++++ .../tests/example/default_codec/mod.rs | 1 + .../example/default_codec/postcard_1_0.rs | 3 ++- 5 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 libraries/native_model/tests_crate/tests/example/default_codec/default.rs diff --git a/libraries/native_model/native_model_macro/src/lib.rs b/libraries/native_model/native_model_macro/src/lib.rs index 2dc20be2..e11c9f10 100644 --- a/libraries/native_model/native_model_macro/src/lib.rs +++ b/libraries/native_model/native_model_macro/src/lib.rs @@ -16,7 +16,6 @@ use syn::token; use syn::{parse_macro_input, DeriveInput, LitInt, Path, Token}; // Inspiration: https://docs.rs/syn/2.0.29/syn/meta/fn.parser.html#example-1 -#[derive(Default)] pub(crate) struct ModelAttributes { pub(crate) id: Option, pub(crate) version: Option, @@ -28,6 +27,18 @@ pub(crate) struct ModelAttributes { pub(crate) try_from: Option<(Path, Path)>, } +impl Default for ModelAttributes { + fn default() -> Self { + ModelAttributes { + id: None, + version: None, + with: Some(syn::parse_str::("native_model::bincode_1_3::Bincode").unwrap()), + from: None, + try_from: None, + } + } +} + impl ModelAttributes { fn parse(&mut self, meta: ParseNestedMeta) -> Result<()> { if meta.path.is_ident("id") { diff --git a/libraries/native_model/native_model_macro/src/method/decode_body.rs b/libraries/native_model/native_model_macro/src/method/decode_body.rs index e229651c..474ca77d 100644 --- a/libraries/native_model/native_model_macro/src/method/decode_body.rs +++ b/libraries/native_model/native_model_macro/src/method/decode_body.rs @@ -7,7 +7,6 @@ pub(crate) fn generate_native_model_decode_body(attrs: &ModelAttributes) -> Toke let with = attrs.with.clone().expect("`with` is required"); let gen = quote! { fn native_model_decode_body(data: Vec, id: u32) -> std::result::Result { - println!("id: {}, {}", id, #id); if id != #id { return Err(native_model::DecodeBodyError::MismatchedModelId); } diff --git a/libraries/native_model/tests_crate/tests/example/default_codec/default.rs b/libraries/native_model/tests_crate/tests/example/default_codec/default.rs new file mode 100644 index 00000000..aade18bb --- /dev/null +++ b/libraries/native_model/tests_crate/tests/example/default_codec/default.rs @@ -0,0 +1,18 @@ +use native_model::native_model; +use serde::Deserialize; +use serde::Serialize; + +#[derive(Serialize, Deserialize, PartialEq, Debug)] +#[native_model(id = 1, version = 1)] +struct Example { + a: u32, + b: u32, +} + +#[test] +fn encode_decode() { + let example = Example { a: 1, b: 2 }; + let bytes = native_model::encode(&example).unwrap(); + let (example, _) = native_model::decode::(bytes).unwrap(); + assert_eq!(example, Example { a: 1, b: 2 }); +} diff --git a/libraries/native_model/tests_crate/tests/example/default_codec/mod.rs b/libraries/native_model/tests_crate/tests/example/default_codec/mod.rs index eb9f386f..b608d879 100644 --- a/libraries/native_model/tests_crate/tests/example/default_codec/mod.rs +++ b/libraries/native_model/tests_crate/tests/example/default_codec/mod.rs @@ -1,3 +1,4 @@ +mod default; mod bincode_1_3; mod bincode_2_rc; mod postcard_1_0; \ No newline at end of file diff --git a/libraries/native_model/tests_crate/tests/example/default_codec/postcard_1_0.rs b/libraries/native_model/tests_crate/tests/example/default_codec/postcard_1_0.rs index a65867b6..c5813129 100644 --- a/libraries/native_model/tests_crate/tests/example/default_codec/postcard_1_0.rs +++ b/libraries/native_model/tests_crate/tests/example/default_codec/postcard_1_0.rs @@ -2,7 +2,8 @@ use native_model::{native_model}; use serde::Deserialize; use serde::Serialize; -#[derive(Serialize, Deserialize, PartialEq, Debug)] +#[derive(Serialize)] +#[derive(Deserialize, PartialEq, Debug)] #[native_model(id = 1, version = 1, with = native_model::postcard_1_0::PostCard)] struct Example { a: u32, From 1b3ae4f5f1e8ea8b768b47e6347efeebda853adb Mon Sep 17 00:00:00 2001 From: Vincent Herlemont Date: Sun, 29 Oct 2023 09:44:24 +0100 Subject: [PATCH 101/316] test: refactor test --- libraries/native_model/Cargo.toml | 2 +- libraries/native_model/justfile | 54 +++ libraries/native_model/src/codec/mod.rs | 3 + libraries/native_model/src/lib.rs | 15 +- libraries/native_model/tests_crate/Cargo.toml | 17 +- .../tests_crate/tests/_experiment.rs | 344 ------------------ .../example/default_codec/bincode_1_3.rs | 1 + .../example/default_codec/bincode_2_rc.rs | 1 + .../tests/example/default_codec/default.rs | 1 + .../example/default_codec/postcard_1_0.rs | 1 + .../tests/example/example_define_model.rs | 1 + .../tests_crate/tests/example/example_main.rs | 27 +- .../native_model/tests_crate/tests/macro.rs | 27 +- .../tests/macro_decode_decode_upgrade.rs | 35 +- .../tests_crate/tests/macro_encode_decode.rs | 28 +- .../tests_crate/tests/native_model_from.rs | 35 +- .../tests/native_model_try_from.rs | 27 +- 17 files changed, 138 insertions(+), 481 deletions(-) create mode 100644 libraries/native_model/justfile delete mode 100644 libraries/native_model/tests_crate/tests/_experiment.rs diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 6987ecb4..63894fe5 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -31,7 +31,7 @@ criterion = { version = "0.5.1" } skeptic = "0.13" [features] -default = ["serde", "bincode_1_3", "bincode_2_rc", "postcard_1_0"] +default = ["serde", "bincode_1_3"] [[bench]] name = "overhead" diff --git a/libraries/native_model/justfile b/libraries/native_model/justfile new file mode 100644 index 00000000..d2f0920e --- /dev/null +++ b/libraries/native_model/justfile @@ -0,0 +1,54 @@ +set shell := ["nu", "-c"] + +default: + @just --list --unsorted; + +build_no_default: + cargo build --no-default-features + +build_default: + cargo build + +build_serde: + cargo build --no-default-features --features serde + +build_bincode_1_3: + cargo build --features bincode_1_3 + +build_no_default_bincode_1_3: + cargo build --no-default-features --features serde --features bincode_1_3 + +build_bincode_2_rc: + cargo build --features bincode_2_rc + +build_no_default_bincode_2_rc: + cargo build --no-default-features --features serde --features bincode_2_rc + +build_postcard_1_0: + cargo build --features postcard_1_0 + +build_no_default_postcard_1_0: + cargo build --no-default-features --features serde --features postcard_1_0 + +build_all: build_no_default build_default build_serde build_bincode_1_3 build_no_default_bincode_1_3 build_bincode_2_rc build_no_default_bincode_2_rc build_postcard_1_0 build_no_default_postcard_1_0 + +_tests_crate args='': + cd tests_crate; \ + cargo test {{args}} + +test_no_default: + @just _tests_crate '--no-default-features' + +test_default: + @just _tests_crate args='' + +test_bincode_1_3: + @just _tests_crate '--features bincode_1_3' + +test_bincode_2_rc: + @just _tests_crate '--features bincode_2_rc' + +test_postcard_1_0: + @just _tests_crate '--features postcard_1_0' + +test_all: test_no_default test_default test_bincode_1_3 test_bincode_2_rc test_postcard_1_0 \ No newline at end of file diff --git a/libraries/native_model/src/codec/mod.rs b/libraries/native_model/src/codec/mod.rs index e58dccc1..1f50b559 100644 --- a/libraries/native_model/src/codec/mod.rs +++ b/libraries/native_model/src/codec/mod.rs @@ -1,5 +1,8 @@ +#[cfg(all(feature = "serde", feature = "bincode_1_3"))] pub mod bincode_1_3; +#[cfg(all(feature = "serde", feature = "bincode_2_rc"))] pub mod bincode_2_rc; +#[cfg(all(feature = "serde", feature = "postcard_1_0"))] pub mod postcard_1_0; /// Encode trait for your own encoding method. diff --git a/libraries/native_model/src/lib.rs b/libraries/native_model/src/lib.rs index eb78d1fe..c3cf9a48 100644 --- a/libraries/native_model/src/lib.rs +++ b/libraries/native_model/src/lib.rs @@ -15,13 +15,26 @@ //! //! See examples in the [README.md](https://github.com/vincent-herlemont/native_model) file. + +#[cfg(any( + feature = "serde", + feature = "bincode_1_3", + feature = "bincode_2_rc", + feature = "postcard_1_0" +))] mod codec; + +#[cfg(any( + feature = "serde", + feature = "bincode_1_3", + feature = "bincode_2_rc", + feature = "postcard_1_0" +))] pub use codec::*; mod header; mod model; pub mod wrapper; -pub use codec::*; pub use model::*; /// Macro to generate a [`native_model`] implementation for a struct. diff --git a/libraries/native_model/tests_crate/Cargo.toml b/libraries/native_model/tests_crate/Cargo.toml index 70237955..c6d07850 100644 --- a/libraries/native_model/tests_crate/Cargo.toml +++ b/libraries/native_model/tests_crate/Cargo.toml @@ -5,9 +5,16 @@ edition = "2021" [workspace] -[dev-dependencies] -native_model = { path = "../" } -serde = { version = "1.0", features = ["derive"] } -bincode = { version = "2.0.0-rc.3", features = ["serde"] } +[dependencies] +native_model = { path = "../", no-default-features = true } +serde = { version = "1.0", features = ["derive"], optional = true } +bincode = { version = "2.0.0-rc.3", features = ["serde"] , optional = true } +postcard = { version = "1.0", features = ["alloc"], optional = true } anyhow = "1.0" -postcard = { version = "1.0", features = ["alloc"] } \ No newline at end of file + + +[features] +default = ["bincode_1_3"] +bincode_1_3 = ["serde", "native_model/bincode_1_3"] +bincode_2_rc = ["serde", "native_model/bincode_2_rc", "bincode"] +postcard_1_0 = ["serde", "native_model/postcard_1_0", "postcard"] diff --git a/libraries/native_model/tests_crate/tests/_experiment.rs b/libraries/native_model/tests_crate/tests/_experiment.rs deleted file mode 100644 index 9e7b71c5..00000000 --- a/libraries/native_model/tests_crate/tests/_experiment.rs +++ /dev/null @@ -1,344 +0,0 @@ -use bincode::{config, Decode, Encode}; -use native_model::Result; -use native_model::{DecodeBodyError, DecodeResult, EncodeBodyError, EncodeResult, Model}; -// Add this function to the macro for custom serialization -fn native_model_encode(obj: &T) -> anyhow::Result> { - let result = bincode::encode_to_vec(obj, config::standard())?; - Ok(result) -} - -// Add this function to the macro for custom deserialization -fn native_model_decode(data: Vec) -> anyhow::Result { - let (result, _) = - bincode::decode_from_slice(&data, config::standard()).map_err(|e| EncodeBodyError { - msg: format!("Decode error: {}", e), - source: e.into(), - })?; - Ok(result) -} - -#[derive(Debug, Encode, Decode)] -struct A {} -impl Model for A { - fn native_model_id() -> u32 { - 1 - } - - fn native_model_version() -> u32 { - 1 - } - - fn native_model_decode_upgrade_body(_data: Vec, _id: u32, version: u32) -> Result { - println!( - "A::deserialization_and_upgrade({}, {})", - version, - Self::native_model_version() - ); - if version == Self::native_model_version() { - Ok(Self {}) - } else if version < Self::native_model_version() { - panic!("The version {} not supported", version); - } else { - panic!("Not implemented"); - } - } - - fn native_model_encode_body(&self) -> EncodeResult> - where - Self: Sized, - { - native_model_encode(self).map_err(|e| EncodeBodyError { - msg: format!("{}", e), - source: e.into(), - }) - } - - fn native_model_decode_body(data: Vec, _id: u32) -> DecodeResult - where - Self: Sized, - { - native_model_decode(data).map_err(|e| DecodeBodyError::DecodeError { - msg: format!("{}", e), - source: e.into(), - }) - } - - fn native_model_encode_downgrade_body(self, version: u32) -> Result> - where - Self: Sized, - { - println!( - "A::serialization_and_downgrade({}, {})", - version, - Self::native_model_version() - ); - if version == Self::native_model_version() { - let result = self.native_model_encode_body()?; - Ok(result) - } else if version < Self::native_model_version() { - panic!("The version {} not supported", version); - } else { - panic!("Not implemented"); - } - } -} - -#[derive(Debug, Encode, Decode)] -struct B {} -impl Model for B { - fn native_model_id() -> u32 { - 1 - } - - fn native_model_version() -> u32 { - 2 - } - - fn native_model_decode_upgrade_body(_data: Vec, id: u32, version: u32) -> Result { - println!( - "B::deserialization_and_upgrade({}, {})", - version, - Self::native_model_version() - ); - if version == Self::native_model_version() { - Ok(Self {}) - } else if version < Self::native_model_version() { - A::native_model_decode_upgrade_body(_data, id, version).map(|a| a.into()) - } else { - panic!("Not implemented"); - } - } - - fn native_model_encode_body(&self) -> EncodeResult> - where - Self: Sized, - { - native_model_encode(self).map_err(|e| EncodeBodyError { - msg: format!("{}", e), - source: e.into(), - }) - } - - fn native_model_decode_body(data: Vec, _id: u32) -> DecodeResult - where - Self: Sized, - { - native_model_decode(data).map_err(|e| DecodeBodyError::DecodeError { - msg: format!("{}", e), - source: e.into(), - }) - } - - fn native_model_encode_downgrade_body(self, version: u32) -> Result> - where - Self: Sized, - { - println!( - "B::serialization_and_downgrade({}, {})", - version, - Self::native_model_version() - ); - if version == Self::native_model_version() { - let result = self.native_model_encode_body()?; - Ok(result) - } else if version < Self::native_model_version() { - A::native_model_encode_downgrade_body(self.into(), version) - } else { - panic!("Not implemented"); - } - } -} - -impl From for A { - fn from(_: B) -> Self { - Self {} - } -} - -impl From for B { - fn from(_: A) -> Self { - Self {} - } -} - -#[derive(Debug, Encode, Decode)] -struct C {} -impl Model for C { - fn native_model_id() -> u32 { - 1 - } - - fn native_model_version() -> u32 { - 3 - } - - fn native_model_decode_upgrade_body(_data: Vec, id: u32, version: u32) -> Result { - println!( - "C::deserialization_and_upgrade({}, {})", - version, - Self::native_model_version() - ); - if version == Self::native_model_version() { - Ok(Self {}) - } else if version < Self::native_model_version() { - let result = B::native_model_decode_upgrade_body(_data, id, version).map(|b| { - b.try_into() - .map_err(|e: anyhow::Error| native_model::UpgradeError { - msg: format!("{}", e), - source: e.into(), - }) - })??; - Ok(result) - } else { - panic!("Not implemented"); - } - } - - fn native_model_encode_body(&self) -> EncodeResult> - where - Self: Sized, - { - native_model_encode(self).map_err(|e| EncodeBodyError { - msg: format!("{}", e), - source: e.into(), - }) - } - - fn native_model_decode_body(data: Vec, _id: u32) -> DecodeResult - where - Self: Sized, - { - native_model_decode(data).map_err(|e| DecodeBodyError::DecodeError { - msg: format!("{}", e), - source: e.into(), - }) - } - - fn native_model_encode_downgrade_body(self, version: u32) -> Result> - where - Self: Sized, - { - println!( - "C::serialization_and_downgrade({}, {})", - version, - Self::native_model_version() - ); - if version == Self::native_model_version() { - let result = self.native_model_encode_body()?; - Ok(result) - } else if version < Self::native_model_version() { - let result = B::native_model_encode_downgrade_body( - self.try_into() - .map_err(|e: anyhow::Error| native_model::DowngradeError { - msg: format!("{}", e), - source: e.into(), - })?, - version, - )?; - Ok(result) - } else { - panic!("Not implemented"); - } - } -} - -impl TryFrom for B { - type Error = anyhow::Error; - - fn try_from(_: C) -> anyhow::Result { - Ok(Self {}) - } -} - -impl TryFrom for C { - type Error = anyhow::Error; - - fn try_from(_: B) -> anyhow::Result { - Ok(Self {}) - } -} - -/** -I want to manage the upgrade and downgrade of native types using From and Into traits. -Let see 3 model A,B,C of a model id 1. -A is the oldest version of the model and is the version 1. -B is the intermediate version of the model and is the version 2. -C is the most recent version of the model and is the version 3. - -We need to imagine that the data are serialized as a vector of bytes. The only things that we know -is the model id 1 and the version of the model. - -I need to found an elegant way to deserialize the data as the most recent version of the model. -**/ - -#[test] -fn test_encode_downgrade() { - let x = 3; - let result = C::native_model_encode_downgrade_body(C {}, x); - dbg!(&result); - - let x = 2; - let result = C::native_model_encode_downgrade_body(C {}, x); - dbg!(&result); - - let x = 1; - let result = C::native_model_encode_downgrade_body(C {}, x); - dbg!(&result); -} - -#[test] -fn test_decode_upgrade() { - let id = 1; - let version = 3; - let result = C::native_model_decode_upgrade_body(vec![], id, version); - dbg!(&result); - - let version = 2; - let result = C::native_model_decode_upgrade_body(vec![], id, version); - dbg!(&result); - - let version = 1; - let result = C::native_model_decode_upgrade_body(vec![], id, version); - dbg!(&result); -} - -fn native_model_decode_upgrade( - _data: Vec, - model_id: u32, - version: u32, -) -> native_model::Result -where - T: Model, -{ - if model_id == T::native_model_id() { - T::native_model_decode_upgrade_body(_data, model_id, version) - } else { - panic!("The model id {} not supported", model_id); - } -} - -#[test] -fn test_decode_upgrade_c() { - let x = 3; - let result: C = native_model_decode_upgrade(vec![], 1, x).unwrap(); - dbg!(&result); - - let x = 2; - let result: C = native_model_decode_upgrade(vec![], 1, x).unwrap(); - dbg!(&result); - - let x = 1; - let result: C = native_model_decode_upgrade(vec![], 1, x).unwrap(); - dbg!(&result); -} - -#[test] -fn test_decode_upgrade_b() { - let x = 2; - let result: B = native_model_decode_upgrade(vec![], 1, x).unwrap(); - dbg!(&result); - - // let x = 2; - // let result: B = native_model_decode_upgrade(vec![], 1, x).unwrap(); - // dbg!(&result); -} diff --git a/libraries/native_model/tests_crate/tests/example/default_codec/bincode_1_3.rs b/libraries/native_model/tests_crate/tests/example/default_codec/bincode_1_3.rs index 3f9b6a16..0472578e 100644 --- a/libraries/native_model/tests_crate/tests/example/default_codec/bincode_1_3.rs +++ b/libraries/native_model/tests_crate/tests/example/default_codec/bincode_1_3.rs @@ -1,3 +1,4 @@ +#![cfg(feature = "bincode_1_3")] use native_model::native_model; use serde::Deserialize; use serde::Serialize; diff --git a/libraries/native_model/tests_crate/tests/example/default_codec/bincode_2_rc.rs b/libraries/native_model/tests_crate/tests/example/default_codec/bincode_2_rc.rs index 90580a53..b9cc8686 100644 --- a/libraries/native_model/tests_crate/tests/example/default_codec/bincode_2_rc.rs +++ b/libraries/native_model/tests_crate/tests/example/default_codec/bincode_2_rc.rs @@ -1,3 +1,4 @@ +#![cfg(feature = "bincode_2_rc")] use native_model::{native_model}; use serde::Deserialize; use serde::Serialize; diff --git a/libraries/native_model/tests_crate/tests/example/default_codec/default.rs b/libraries/native_model/tests_crate/tests/example/default_codec/default.rs index aade18bb..a9d90bce 100644 --- a/libraries/native_model/tests_crate/tests/example/default_codec/default.rs +++ b/libraries/native_model/tests_crate/tests/example/default_codec/default.rs @@ -1,3 +1,4 @@ +#![cfg(feature = "bincode_1_3")] use native_model::native_model; use serde::Deserialize; use serde::Serialize; diff --git a/libraries/native_model/tests_crate/tests/example/default_codec/postcard_1_0.rs b/libraries/native_model/tests_crate/tests/example/default_codec/postcard_1_0.rs index c5813129..114d823f 100644 --- a/libraries/native_model/tests_crate/tests/example/default_codec/postcard_1_0.rs +++ b/libraries/native_model/tests_crate/tests/example/default_codec/postcard_1_0.rs @@ -1,3 +1,4 @@ +#![cfg(feature = "postcard_1_0")] use native_model::{native_model}; use serde::Deserialize; use serde::Serialize; diff --git a/libraries/native_model/tests_crate/tests/example/example_define_model.rs b/libraries/native_model/tests_crate/tests/example/example_define_model.rs index 6556c8f6..fb1d781d 100644 --- a/libraries/native_model/tests_crate/tests/example/example_define_model.rs +++ b/libraries/native_model/tests_crate/tests/example/example_define_model.rs @@ -1,3 +1,4 @@ +#![cfg(feature = "bincode")] use bincode::{config, Decode, Encode}; use native_model::native_model; diff --git a/libraries/native_model/tests_crate/tests/example/example_main.rs b/libraries/native_model/tests_crate/tests/example/example_main.rs index d5374da2..fb7fa69d 100644 --- a/libraries/native_model/tests_crate/tests/example/example_main.rs +++ b/libraries/native_model/tests_crate/tests/example/example_main.rs @@ -1,28 +1,13 @@ -use bincode; -use bincode::{config, Decode, Encode}; +#![cfg(feature = "bincode_1_3")] use native_model::native_model; +use serde::{Deserialize, Serialize}; -pub struct Bincode; -impl native_model::Encode for Bincode { - type Error = bincode::error::EncodeError; - fn encode(obj: &T) -> Result, bincode::error::EncodeError> { - bincode::encode_to_vec(obj, config::standard()) - } -} - -impl native_model::Decode for Bincode { - type Error = bincode::error::DecodeError; - fn decode(data: Vec) -> Result { - bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) - } -} - -#[derive(Encode, Decode, PartialEq, Debug)] -#[native_model(id = 1, version = 1, with = Bincode)] +#[derive(Serialize, Deserialize, PartialEq, Debug)] +#[native_model(id = 1, version = 1)] struct DotV1(u32, u32); -#[derive(Encode, Decode, PartialEq, Debug)] -#[native_model(id = 1, version = 2, with = Bincode, from = DotV1)] +#[derive(Serialize, Deserialize, PartialEq, Debug)] +#[native_model(id = 1, version = 2, from = DotV1)] struct DotV2 { name: String, x: u64, diff --git a/libraries/native_model/tests_crate/tests/macro.rs b/libraries/native_model/tests_crate/tests/macro.rs index 21ea3073..4216d103 100644 --- a/libraries/native_model/tests_crate/tests/macro.rs +++ b/libraries/native_model/tests_crate/tests/macro.rs @@ -1,29 +1,16 @@ -use bincode::{config, Decode, Encode}; +#![cfg(feature = "bincode_1_3")] + +use serde::{Deserialize, Serialize}; use native_model::{native_model, Model}; -pub struct Bincode; -impl native_model::Encode for Bincode { - type Error = bincode::error::EncodeError; - fn encode(obj: &T) -> Result, bincode::error::EncodeError> { - bincode::encode_to_vec(obj, config::standard()) - } -} - -impl native_model::Decode for Bincode { - type Error = bincode::error::DecodeError; - fn decode(data: Vec) -> Result { - bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) - } -} - -#[derive(Debug, Encode, Decode)] -#[native_model(id = 1, version = 1, with = Bincode)] +#[derive(Debug, Serialize, Deserialize)] +#[native_model(id = 1, version = 1)] struct Foo1 { x: i32, } -#[derive(Debug, Encode, Decode)] -#[native_model(id = 1, version = 2, with = Bincode, from = Foo1)] +#[derive(Debug, Serialize, Deserialize)] +#[native_model(id = 1, version = 2, from = Foo1)] struct Foo2 { x: i32, } diff --git a/libraries/native_model/tests_crate/tests/macro_decode_decode_upgrade.rs b/libraries/native_model/tests_crate/tests/macro_decode_decode_upgrade.rs index 7cd81fa0..d39e9022 100644 --- a/libraries/native_model/tests_crate/tests/macro_decode_decode_upgrade.rs +++ b/libraries/native_model/tests_crate/tests/macro_decode_decode_upgrade.rs @@ -1,31 +1,16 @@ -use bincode::{config, Decode, Encode}; +#![cfg(feature = "bincode_1_3")] use native_model::native_model; use native_model::Model; +use serde::{Deserialize, Serialize}; -pub struct Bincode; - -impl native_model::Encode for Bincode { - type Error = bincode::error::EncodeError; - fn encode(obj: &T) -> Result, bincode::error::EncodeError> { - bincode::encode_to_vec(obj, config::standard()) - } -} - -impl native_model::Decode for Bincode { - type Error = bincode::error::DecodeError; - fn decode(data: Vec) -> Result { - bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) - } -} - -#[derive(Debug, Encode, Decode, PartialEq)] -#[native_model(id = 1, version = 1, with = Bincode)] +#[derive(Debug, Serialize, Deserialize, PartialEq)] +#[native_model(id = 1, version = 1)] struct Foo1 { x: i32, } -#[derive(Debug, Encode, Decode, PartialEq)] -#[native_model(id = 1, version = 2, with = Bincode, from = Foo1)] +#[derive(Debug, Serialize, Deserialize, PartialEq)] +#[native_model(id = 1, version = 2, from = Foo1)] struct Foo2 { x: String, } @@ -46,8 +31,8 @@ impl From for Foo1 { } } -#[derive(Debug, Encode, Decode, PartialEq)] -#[native_model(id = 1, version = 3, with = Bincode, from = Foo2)] +#[derive(Debug, Serialize, Deserialize, PartialEq)] +#[native_model(id = 1, version = 3, from = Foo2)] enum Foo3 { X(i32), } @@ -156,8 +141,8 @@ fn test_should_fail_decode_foo2_to_foo1() { )); } -#[derive(Debug, Encode, Decode, PartialEq)] -#[native_model(id = 2, version = 1, with = Bincode)] +#[derive(Debug, Serialize, Deserialize, PartialEq)] +#[native_model(id = 2, version = 1)] struct Foo1Bis { x: i32, } diff --git a/libraries/native_model/tests_crate/tests/macro_encode_decode.rs b/libraries/native_model/tests_crate/tests/macro_encode_decode.rs index bd160f2b..af2eef10 100644 --- a/libraries/native_model/tests_crate/tests/macro_encode_decode.rs +++ b/libraries/native_model/tests_crate/tests/macro_encode_decode.rs @@ -1,31 +1,17 @@ -use bincode::{config, Decode, Encode}; +#![cfg(feature = "bincode_1_3")] + use native_model::native_model; use native_model::Model; +use serde::{Deserialize, Serialize}; -pub struct Bincode; - -impl native_model::Encode for Bincode { - type Error = bincode::error::EncodeError; - fn encode(obj: &T) -> Result, bincode::error::EncodeError> { - bincode::encode_to_vec(obj, config::standard()) - } -} - -impl native_model::Decode for Bincode { - type Error = bincode::error::DecodeError; - fn decode(data: Vec) -> Result { - bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) - } -} - -#[derive(Debug, Encode, Decode, PartialEq)] -#[native_model(id = 1, version = 1, with = Bincode)] +#[derive(Debug, Serialize, Deserialize, PartialEq)] +#[native_model(id = 1, version = 1)] struct Foo1 { x: i32, } -#[derive(Debug, Encode, Decode, PartialEq)] -#[native_model(id = 1, version = 2, with = Bincode, from = Foo1)] +#[derive(Debug, Serialize, Deserialize, PartialEq)] +#[native_model(id = 1, version = 2, from = Foo1)] struct Foo2 { x: i32, } diff --git a/libraries/native_model/tests_crate/tests/native_model_from.rs b/libraries/native_model/tests_crate/tests/native_model_from.rs index 0ec5c1c4..2c280e76 100644 --- a/libraries/native_model/tests_crate/tests/native_model_from.rs +++ b/libraries/native_model/tests_crate/tests/native_model_from.rs @@ -1,27 +1,16 @@ -use bincode::{config, Decode, Encode}; -use native_model::native_model; -pub struct Bincode; -impl native_model::Encode for Bincode { - type Error = bincode::error::EncodeError; - fn encode(obj: &T) -> Result, bincode::error::EncodeError> { - bincode::encode_to_vec(obj, config::standard()) - } -} +#![cfg(feature = "bincode_1_3")] -impl native_model::Decode for Bincode { - type Error = bincode::error::DecodeError; - fn decode(data: Vec) -> Result { - bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) - } -} -#[derive(Debug, Encode, Decode, PartialEq)] -#[native_model(id = 1, version = 1, with = Bincode)] +use native_model::native_model; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Serialize, Deserialize, PartialEq)] +#[native_model(id = 1, version = 1)] struct Foo1 { x: i32, } -#[derive(Debug, Encode, Decode, PartialEq)] -#[native_model(id = 1, version = 2, with = Bincode, from = Foo1)] +#[derive(Debug, Serialize, Deserialize, PartialEq)] +#[native_model(id = 1, version = 2, from = Foo1)] struct Foo2 { x: i32, c: char, @@ -65,11 +54,11 @@ fn test_decode_foo1_to_foo2() { fn test_encode_foo2_to_foo1() { let foo2 = Foo2 { x: 100, c: 'a' }; let foo2_packed = native_model::encode(&foo2).unwrap(); - assert_eq!(foo2_packed, vec![1, 0, 0, 0, 2, 0, 0, 0, 200, 97]); + assert_eq!(foo2_packed, vec![1, 0, 0, 0, 2, 0, 0, 0, 100, 0, 0, 0, 97]); let (foo2_decoded, _) = native_model::decode::(foo2_packed.clone()).unwrap(); assert_eq!(Foo2 { x: 100, c: 'a' }, foo2_decoded); let foo1_packed = native_model::encode_downgrade(foo2, 1).unwrap(); - assert_eq!(foo1_packed, vec![1, 0, 0, 0, 1, 0, 0, 0, 200]); + assert_eq!(foo1_packed, vec![1, 0, 0, 0, 1, 0, 0, 0, 100, 0, 0, 0]); let (foo1_decoded, _) = native_model::decode::(foo1_packed.clone()).unwrap(); assert_eq!(Foo1 { x: 100 }, foo1_decoded); } @@ -78,11 +67,11 @@ fn test_encode_foo2_to_foo1() { fn test_encode_foo1_to_foo1() { let foo1 = Foo1 { x: 100 }; let foo1_packed = native_model::encode(&foo1).unwrap(); - assert_eq!(foo1_packed, vec![1, 0, 0, 0, 1, 0, 0, 0, 200]); + assert_eq!(foo1_packed, vec![1, 0, 0, 0, 1, 0, 0, 0, 100, 0, 0, 0]); let (foo1_decoded, _) = native_model::decode::(foo1_packed.clone()).unwrap(); assert_eq!(Foo1 { x: 100 }, foo1_decoded); let foo1_packed = native_model::encode_downgrade(foo1, 1).unwrap(); - assert_eq!(foo1_packed, vec![1, 0, 0, 0, 1, 0, 0, 0, 200]); + assert_eq!(foo1_packed, vec![1, 0, 0, 0, 1, 0, 0, 0, 100, 0, 0, 0]); let (foo1_decoded, _) = native_model::decode::(foo1_packed.clone()).unwrap(); assert_eq!(Foo1 { x: 100 }, foo1_decoded); } diff --git a/libraries/native_model/tests_crate/tests/native_model_try_from.rs b/libraries/native_model/tests_crate/tests/native_model_try_from.rs index c84da6a8..04d05445 100644 --- a/libraries/native_model/tests_crate/tests/native_model_try_from.rs +++ b/libraries/native_model/tests_crate/tests/native_model_try_from.rs @@ -1,29 +1,16 @@ -use bincode::{config, Decode, Encode}; +#![cfg(feature = "bincode_1_3")] + use native_model::native_model; +use serde::{Deserialize, Serialize}; -pub struct Bincode; - -impl native_model::Encode for Bincode { - type Error = bincode::error::EncodeError; - fn encode(obj: &T) -> Result, bincode::error::EncodeError> { - bincode::encode_to_vec(obj, config::standard()) - } -} - -impl native_model::Decode for Bincode { - type Error = bincode::error::DecodeError; - fn decode(data: Vec) -> Result { - bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) - } -} -#[derive(Debug, Encode, Decode, PartialEq)] -#[native_model(id = 1, version = 1, with = Bincode)] +#[derive(Debug, Serialize, Deserialize, PartialEq)] +#[native_model(id = 1, version = 1)] struct Foo1 { x: i32, } -#[derive(Debug, Encode, Decode, PartialEq)] -#[native_model(id = 1, version = 2, with = Bincode, try_from = (Foo1, anyhow::Error))] +#[derive(Debug, Serialize, Deserialize, PartialEq)] +#[native_model(id = 1, version = 2, try_from = (Foo1, anyhow::Error))] struct Foo2 { x: i32, } From 954cfa322ef7bb08fcfdf7646ab0e772565dcc1d Mon Sep 17 00:00:00 2001 From: Vincent Herlemont Date: Sun, 29 Oct 2023 09:45:00 +0100 Subject: [PATCH 102/316] perf: refactor bench --- libraries/native_model/Cargo.toml | 8 -- libraries/native_model/benches/overhead.rs | 16 +--- .../benches/overhead_on_bincode.rs | 88 ------------------- .../native_model/benches/prepend_bytes.rs | 28 ------ libraries/native_model/justfile | 7 +- .../example/custom_codec/bincode_serde.rs | 16 ---- 6 files changed, 10 insertions(+), 153 deletions(-) delete mode 100644 libraries/native_model/benches/overhead_on_bincode.rs delete mode 100644 libraries/native_model/benches/prepend_bytes.rs diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 63894fe5..be9950b8 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -37,13 +37,5 @@ default = ["serde", "bincode_1_3"] name = "overhead" harness = false -[[bench]] -name = "overhead_on_bincode" -harness = false - -[[bench]] -name = "prepend_bytes" -harness = false - [build-dependencies] skeptic = "0.13" \ No newline at end of file diff --git a/libraries/native_model/benches/overhead.rs b/libraries/native_model/benches/overhead.rs index a21750fa..80d88628 100644 --- a/libraries/native_model/benches/overhead.rs +++ b/libraries/native_model/benches/overhead.rs @@ -1,16 +1,8 @@ -use bincode::{Decode, Encode}; use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion}; use native_model_macro::native_model; - -fn native_model_encode_body(obj: &T) -> Result, bincode::error::EncodeError> { - bincode::encode_to_vec(obj, bincode::config::standard()) -} - -fn native_model_decode_body(data: Vec) -> Result { - bincode::decode_from_slice(&data, bincode::config::standard()).map(|(result, _)| result) -} - -#[derive(Encode, Decode)] +use serde::{Deserialize, Serialize}; +use native_model::Model; +#[derive(Serialize, Deserialize)] #[native_model(id = 1, version = 1)] struct Data(Vec); @@ -31,7 +23,7 @@ fn criterion_benchmark(c: &mut Criterion) { // encode let data = Data(vec![1; nb_bytes]); - let mut encode_body = native_model_encode_body(&data).unwrap(); + let mut encode_body = data.native_model_encode_body().unwrap(); group.bench_function(BenchmarkId::new("encode", nb_bytes), |b| { b.iter(|| wrap(&mut encode_body)) }); diff --git a/libraries/native_model/benches/overhead_on_bincode.rs b/libraries/native_model/benches/overhead_on_bincode.rs deleted file mode 100644 index 48b1212a..00000000 --- a/libraries/native_model/benches/overhead_on_bincode.rs +++ /dev/null @@ -1,88 +0,0 @@ -use bincode::{Decode, Encode}; -use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use native_model_macro::native_model; - -#[derive(Encode, Decode)] -struct DataForBincode { - x: i32, - string: String, -} - -// Encode 1 data with bincode -fn native_model_encode_body(obj: &T) -> Result, bincode::error::EncodeError> { - bincode::encode_to_vec(obj, bincode::config::standard()) -} - -fn native_model_decode_body(data: Vec) -> Result { - bincode::decode_from_slice(&data, bincode::config::standard()).map(|(result, _)| result) -} - -fn encode_with_bincode(data: &DataForBincode) -> Vec { - native_model_encode_body(data).unwrap() -} - -fn decode_with_bincode(data: Vec) -> DataForBincode { - native_model_decode_body(data).unwrap() -} - -fn encode_decode_with_bincode(data: &DataForBincode) -> DataForBincode { - decode_with_bincode(encode_with_bincode(data)) -} - -#[derive(Encode, Decode)] -#[native_model(id = 1, version = 1)] -struct DataForNativeModel { - x: i32, - string: String, -} - -fn encode_with_native_model(data: &DataForNativeModel) -> Vec { - native_model::encode(data).unwrap() -} - -fn decode_with_native_model(data: Vec) -> DataForNativeModel { - let (data, _) = native_model::decode::(data).unwrap(); - data -} - -fn encode_decode_with_native_model(data: &DataForNativeModel) -> DataForNativeModel { - decode_with_native_model(encode_with_native_model(data)) -} - -fn criterion_benchmark(c: &mut Criterion) { - // Bincode - let data = DataForBincode { - x: 1, - // Set a very long string - string: "Hello".repeat(10000), - }; - c.bench_function("encode_with_bincode", |b| { - b.iter(|| encode_with_bincode(black_box(&data))) - }); - let encoded_data = encode_with_bincode(&data); - c.bench_function("decode_with_bincode", |b| { - b.iter(|| decode_with_bincode(black_box(encoded_data.clone()))) - }); - c.bench_function("encode_decode_with_bincode", |b| { - b.iter(|| encode_decode_with_bincode(black_box(&data))) - }); - - // Native model - let data = DataForNativeModel { - x: 1, - string: "Hello".repeat(10000), - }; - c.bench_function("encode_with_native_model", |b| { - b.iter(|| encode_with_native_model(black_box(&data))) - }); - let encoded_data = native_model::encode(&data).unwrap(); - c.bench_function("decode_with_native_model", |b| { - b.iter(|| decode_with_native_model(black_box(encoded_data.clone()))) - }); - c.bench_function("encode_decode_with_native_model", |b| { - b.iter(|| encode_decode_with_native_model(black_box(&data))) - }); -} - -criterion_group!(benches, criterion_benchmark); -criterion_main!(benches); diff --git a/libraries/native_model/benches/prepend_bytes.rs b/libraries/native_model/benches/prepend_bytes.rs deleted file mode 100644 index 7f77e371..00000000 --- a/libraries/native_model/benches/prepend_bytes.rs +++ /dev/null @@ -1,28 +0,0 @@ -/// Found a way to prepend bytes at the beginning of a Vec with a constant overhead. -use bincode::{Decode, Encode}; -use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion}; - -fn criterion_benchmark(c: &mut Criterion) { - let mut group = c.benchmark_group("encode"); - - // 1 byte, 1KB, 1MB, 10MB, 100MB - for nb_bytes in [1, 1024, 1024 * 1024, 10 * 1024 * 1024, 100 * 1024 * 1024].into_iter() { - group.throughput(criterion::Throughput::Bytes(nb_bytes as u64)); - - let header: Vec = vec![0; 4]; - let mut data: Vec = vec![1; nb_bytes]; - group.bench_function(BenchmarkId::new("prepend_bytes", nb_bytes), |b| { - b.iter(|| { - // Fastest way to prepend bytes to data - let mut header = header.clone(); - header.append(&mut data); - // prepend bytes to data - // let mut header = header.clone(); - // header.extend_from_slice(&data); - }); - }); - } -} - -criterion_group!(benches, criterion_benchmark); -criterion_main!(benches); diff --git a/libraries/native_model/justfile b/libraries/native_model/justfile index d2f0920e..e0c6eb6a 100644 --- a/libraries/native_model/justfile +++ b/libraries/native_model/justfile @@ -51,4 +51,9 @@ test_bincode_2_rc: test_postcard_1_0: @just _tests_crate '--features postcard_1_0' -test_all: test_no_default test_default test_bincode_1_3 test_bincode_2_rc test_postcard_1_0 \ No newline at end of file +test_all: test_no_default test_default test_bincode_1_3 test_bincode_2_rc test_postcard_1_0 + +bench_overhead: + cargo bench --bench overhead + +bench_all: bench_overhead \ No newline at end of file diff --git a/libraries/native_model/tests_crate/tests/example/custom_codec/bincode_serde.rs b/libraries/native_model/tests_crate/tests/example/custom_codec/bincode_serde.rs index 8d239753..b2ad9308 100644 --- a/libraries/native_model/tests_crate/tests/example/custom_codec/bincode_serde.rs +++ b/libraries/native_model/tests_crate/tests/example/custom_codec/bincode_serde.rs @@ -1,22 +1,6 @@ use bincode; use serde::{Deserialize, Serialize}; -// fn native_model_encode_body( -// model: &T, -// ) -> Result, bincode::error::EncodeError> { -// { -// bincode::serde::encode_to_vec(model, bincode::config::standard()) -// } -// } -// -// fn native_model_decode_body Deserialize<'a>>( -// data: Vec, -// ) -> Result { -// { -// Ok(bincode::serde::decode_from_slice(&data, bincode::config::standard())?.0) -// } -// } - pub struct Bincode; impl native_model::Encode for Bincode { From 1f0c387b82287fd675f34bf8e9210ef7901ff36c Mon Sep 17 00:00:00 2001 From: Vincent Herlemont Date: Sun, 29 Oct 2023 09:45:28 +0100 Subject: [PATCH 103/316] test: fix test readme --- libraries/native_model/README.md | 178 +++++++++++------------- libraries/native_model/README.md.skt.md | 45 +----- libraries/native_model/src/codec/mod.rs | 20 +-- 3 files changed, 100 insertions(+), 143 deletions(-) diff --git a/libraries/native_model/README.md b/libraries/native_model/README.md index 2d569fc2..7d19f18c 100644 --- a/libraries/native_model/README.md +++ b/libraries/native_model/README.md @@ -5,7 +5,7 @@ [![Documentation](https://docs.rs/native_model/badge.svg)](https://docs.rs/native_model) [![License](https://img.shields.io/crates/l/native_model)](LICENSE) -A thin wrapper around serialized data which add information of identity and version. +Add interoperability on the top of serialization formats like bincode, postcard etc. See [concepts](#concepts) for more details. @@ -20,12 +20,12 @@ See [concepts](#concepts) for more details. ## Usage ``` - Application 1 (DotV1) Application 2 (DotV1 and DotV2) - | | - Encode DotV1 |----------------------------------------> | Decode DotV1 to DotV2 - | | Modify DotV2 - Decode DotV1 | <----------------------------------------| Encode DotV2 back to DotV1 - | | + Application 1 (DotV1) Application 2 (DotV1 and DotV2) + | | + Encode DotV1 |--------------------------------> | Decode DotV1 to DotV2 + | | Modify DotV2 + Decode DotV1 | <--------------------------------| Encode DotV2 back to DotV1 + | | ``` @@ -56,20 +56,83 @@ let (dot, _) = native_model::decode::(bytes).unwrap(); assert_eq!(dot, DotV1(5, 2)); ``` -Full example [here](./tests/example/example_main.rs). + - Full example [here](./tests_crate/tests/example/example_main.rs). -When to use it? -- Your applications that interact with each other are written in Rust. -- Your applications evolve independently need to read serialized data coming from each other. -- Your applications store data locally and need to read it later by a newer version of the application. -- Your systems need to be upgraded incrementally. Instead of having to upgrade the entire system at once, individual - applications can be upgraded one at a time, while still being able to communicate with each other. +## Serialization format -When not to use it? -- Your applications that interact with each other are **not all** written in Rust. -- Your applications need to communicate with other systems that you don't control. -- You need to have a human-readable format. (You can use a human-readable format like JSON wrapped in a native model, - but you have to unwrap it to see the data correctly.) +You can use default serialization formats via the feature flags, like: + +```toml +[dependencies] +native_model = { version = "0.1", features = ["bincode_2_rc"] } +``` + +Each feature flag corresponds to a specific minor version of the serialization format. In order to avoid breaking +changes, the default serialization format is the oldest one. + +- `bincode_1_3`: [bincode](https://docs.rs/bincode/1.3.3/bincode/) v1.3 (default) +- `bincode_2_rc`: [bincode](https://docs.rs/bincode/2.0.0-rc.3/bincode/) v2.0.0-rc3 +- `postcard_1_0`: [postcard](https://docs.rs/postcard/1.0.0/postcard/) v1.0 + +### Custom serialization format + +Define a struct with the name you want. This struct must implement [`native_model::Encode`](https://docs.rs/native_model/latest/native_model/trait.Encode.html) and [`native_model::Decode`](https://docs.rs/native_model/latest/native_model/trait.Decode.html) traits. + +Full examples: +- [bincode with encode/decode](./tests_crate/tests/example/encode_decode/bincode.rs) +- [bincode with serde](./tests_crate/tests/example/encode_decode/bincode_serde.rs) + +Others examples, see the default implementations: +- [bincode v1.3](./src/codec/bincode_1_3.rs) +- [bincode v2.0 (rc)](./src/codec/bincode_2_rc.rs) +- [postcard v1.0](./src/codec/postcard_1_0.rs) + +## Data model + +Define your model using the macro [`native_model`](file:///home/vincentherlemont/IdeaProjects/native_model/target/doc/native_model/attr.native_model.html). + +Attributes: +- `id = u32`: The unique identifier of the model. +- `version = u32`: The version of the model. +- `with = type`: The serialization format that you use for the Encode/Decode implementation. Setup [here](#setup-your-serialization-format). +- `from = type`: Optional, the previous version of the model. + - `type`: The previous version of the model that you use for the From implementation. +- `try_from = (type, error)`: Optional, the previous version of the model with error handling. + - `type`: The previous version of the model that you use for the TryFrom implementation. + - `error`: The error type that you use for the TryFrom implementation. + +```rust,skt-define-models +use native_model::native_model; + +#[derive(Deserialize, Serialize, PartialEq, Debug)] +#[native_model(id = 1, version = 1)] +struct DotV1(u32, u32); + +#[derive(Deserialize, Serialize, PartialEq, Debug)] +#[native_model(id = 1, version = 2, from = DotV1)] +struct DotV2 { + name: String, + x: u64, + y: u64, +} + +// Implement the conversion between versions From for DotV2 and From for DotV1. + +#[derive(Deserialize, Serialize, PartialEq, Debug)] +#[native_model(id = 1, version = 3, try_from = (DotV2, anyhow::Error))] +struct DotV3 { + name: String, + cord: Cord, +} + +#[derive(Deserialize, Serialize, PartialEq, Debug)] +struct Cord { + x: u64, + y: u64, +} + +// Implement the conversion between versions From for DotV3 and From for DotV2. +``` ## Status @@ -96,83 +159,6 @@ Under the hood, the native model is a thin wrapper around serialized data. The ` +------------------+------------------+------------------------------------+ ``` -## Setup your serialization format - -First, you need to set up your serialization format. You can use any serialization format. - -Just define a struct with the name you want. This struct must implement [`native_model::Encode`](https://docs.rs/native_model/latest/native_model/trait.Encode.html) and [`native_model::Decode`](https://docs.rs/native_model/latest/native_model/trait.Decode.html) traits. - -In the below example we have created a struct `Bincode` that use the [bincode](https://docs.rs/bincode/latest/bincode/) crate: -```rust,skt-define-serilization-format -pub struct Bincode; - -impl native_model::Encode for Bincode { - type Error = bincode::error::EncodeError; - fn encode(obj: &T) -> Result, bincode::error::EncodeError> { - bincode::encode_to_vec(obj, bincode::config::standard()) - } -} - -impl native_model::Decode for Bincode { - type Error = bincode::error::DecodeError; - fn decode(data: Vec) -> Result { - bincode::decode_from_slice(&data, bincode::config::standard()).map(|(result, _)| result) - } -} -``` - -Full examples: -- [bincode with encode/decode](./tests/example/encode_decode/bincode.rs) -- [bincode with serde](./tests/example/encode_decode/bincode_serde.rs) - - -## Setup your data model - -Define your model using the macro [`native_model`](file:///home/vincentherlemont/IdeaProjects/native_model/target/doc/native_model/attr.native_model.html). - -Attributes: -- `id = u32`: The unique identifier of the model. -- `version = u32`: The version of the model. -- `with = type`: The serialization format that you use for the Encode/Decode implementation. Setup [here](#setup-your-serialization-format). -- `from = type`: Optional, the previous version of the model. - - `type`: The previous version of the model that you use for the From implementation. -- `try_from = (type, error)`: Optional, the previous version of the model with error handling. - - `type`: The previous version of the model that you use for the TryFrom implementation. - - `error`: The error type that you use for the TryFrom implementation. - -```rust,skt-define-models -use native_model::native_model; - -#[derive(Encode, Decode, PartialEq, Debug)] -#[native_model(id = 1, version = 1, with = Bincode)] -struct DotV1(u32, u32); - -#[derive(Encode, Decode, PartialEq, Debug)] -#[native_model(id = 1, version = 2, with = Bincode, from = DotV1)] -struct DotV2 { - name: String, - x: u64, - y: u64, -} - -// Implement the conversion between versions From for DotV2 and From for DotV1. - -#[derive(Encode, Decode, PartialEq, Debug)] -#[native_model(id = 1, version = 3, with = Bincode, try_from = (DotV2, anyhow::Error))] -struct DotV3 { - name: String, - cord: Cord, -} - -#[derive(Encode, Decode, PartialEq, Debug)] -struct Cord { - x: u64, - y: u64, -} - -// Implement the conversion between versions From for DotV3 and From for DotV2. -``` - Full example [here](tests/example/example_define_model.rs). ## Performance diff --git a/libraries/native_model/README.md.skt.md b/libraries/native_model/README.md.skt.md index 9cb43ea9..a8ab5d47 100644 --- a/libraries/native_model/README.md.skt.md +++ b/libraries/native_model/README.md.skt.md @@ -1,30 +1,13 @@ ```rust,skt-main -use bincode; -use bincode::{{Decode, Encode, config}}; use native_model_macro::native_model; +use serde::{{Deserialize, Serialize}}; -pub struct Bincode; - -impl native_model::Encode for Bincode {{ - type Error = bincode::error::EncodeError; - fn encode(obj: &T) -> Result, bincode::error::EncodeError> {{ - bincode::encode_to_vec(obj, config::standard()) - }} -}} - -impl native_model::Decode for Bincode {{ - type Error = bincode::error::DecodeError; - fn decode(data: Vec) -> Result {{ - bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) - }} -}} - -#[derive(Encode, Decode, PartialEq, Debug)] -#[native_model(id = 1, version = 1, with = Bincode)] +#[derive(Deserialize, Serialize, PartialEq, Debug)] +#[native_model(id = 1, version = 1)] struct DotV1(u32, u32); -#[derive(Encode, Decode, PartialEq, Debug)] -#[native_model(id = 1, version = 2, with = Bincode, from = DotV1)] +#[derive(Deserialize, Serialize, PartialEq, Debug)] +#[native_model(id = 1, version = 2, from = DotV1)] struct DotV2 {{ name: String, x: u64, @@ -54,23 +37,7 @@ fn main() {{ ``` ```rust,skt-define-models -use bincode::{{config, Decode, Encode}}; - -pub struct Bincode; - -impl native_model::Encode for Bincode {{ - type Error = bincode::error::EncodeError; - fn encode(obj: &T) -> Result, bincode::error::EncodeError> {{ - bincode::encode_to_vec(obj, config::standard()) - }} -}} - -impl native_model::Decode for Bincode {{ - type Error = bincode::error::DecodeError; - fn decode(data: Vec) -> Result {{ - bincode::decode_from_slice(&data, config::standard()).map(|(result, _)| result) - }} -}} +use serde::{{Deserialize, Serialize}}; {} diff --git a/libraries/native_model/src/codec/mod.rs b/libraries/native_model/src/codec/mod.rs index 1f50b559..7d9a73c2 100644 --- a/libraries/native_model/src/codec/mod.rs +++ b/libraries/native_model/src/codec/mod.rs @@ -9,12 +9,14 @@ pub mod postcard_1_0; /// /// Example: /// ```rust +/// use bincode_2_rc::{error::EncodeError,serde::encode_to_vec, config::standard}; +/// use serde::Serialize; /// pub struct Bincode; /// -/// impl native_model::Encode for Bincode { -/// type Error = bincode::error::EncodeError; -/// fn encode(obj: &T) -> Result, bincode::error::EncodeError> { -/// bincode::encode_to_vec(obj, bincode::config::standard()) +/// impl native_model::Encode for Bincode { +/// type Error = EncodeError; +/// fn encode(obj: &T) -> Result, EncodeError> { +/// Ok(encode_to_vec(&obj, standard())?) /// } /// } /// ``` @@ -27,12 +29,14 @@ pub trait Encode { /// /// Example: /// ```rust +/// use bincode_2_rc::{error::DecodeError,serde::decode_from_slice, config::standard}; +/// use serde::Deserialize; /// pub struct Bincode; /// -/// impl native_model::Decode for Bincode { -/// type Error = bincode::error::DecodeError; -/// fn decode(data: Vec) -> Result { -/// bincode::decode_from_slice(&data, bincode::config::standard()).map(|(result, _)| result) +/// impl Deserialize<'a>> native_model::Decode for Bincode { +/// type Error = DecodeError; +/// fn decode(data: Vec) -> Result { +/// Ok(decode_from_slice(&data, standard())?.0) /// } /// } pub trait Decode { From 8db7fe752100f7153541ae185be9c1422540dff9 Mon Sep 17 00:00:00 2001 From: Vincent Herlemont Date: Sun, 29 Oct 2023 20:03:27 +0100 Subject: [PATCH 104/316] ci: update build_test_common_os --- .../workflows/build_and_test_release.yml | 22 ++++--------------- 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/libraries/native_model/.github/workflows/build_and_test_release.yml b/libraries/native_model/.github/workflows/build_and_test_release.yml index 722e585b..f6bc8d18 100644 --- a/libraries/native_model/.github/workflows/build_and_test_release.yml +++ b/libraries/native_model/.github/workflows/build_and_test_release.yml @@ -14,7 +14,6 @@ jobs: matrix: os: [ubuntu-latest, windows-latest, macOS-latest] toolchain: [stable] - feature: [ no_feature ] steps: - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4 - name: Setup Rust @@ -22,24 +21,11 @@ jobs: with: toolchain: ${{ matrix.toolchain }} override: true - - name: Setup Feature Args - shell: bash - run: | - if [[ "${{ matrix.feature }}" == "no_feature" ]]; then - echo "FEATURE_ARGS=" >> $GITHUB_ENV - else - echo "FEATURE_ARGS=-F ${{ matrix.feature }}" >> $GITHUB_ENV - fi + - uses: extractions/setup-just@v1 + - name: Ls + run: ls -al - name: Build - uses: actions-rs/cargo@v1 - with: - command: build - args: ${{ env.FEATURE_ARGS }} - - name: Run tests - uses: actions-rs/cargo@v1 - with: - command: test - args: ${{ env.FEATURE_ARGS }} + run: just release: name: Release runs-on: ubuntu-latest From 052c003c92d2a22e85437481f24d285e497d08ae Mon Sep 17 00:00:00 2001 From: Vincent Herlemont Date: Sun, 29 Oct 2023 20:09:30 +0100 Subject: [PATCH 105/316] ci: update build_test_common_os --- .../.github/workflows/build_and_test_release.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/.github/workflows/build_and_test_release.yml b/libraries/native_model/.github/workflows/build_and_test_release.yml index f6bc8d18..a9ec41f2 100644 --- a/libraries/native_model/.github/workflows/build_and_test_release.yml +++ b/libraries/native_model/.github/workflows/build_and_test_release.yml @@ -22,10 +22,13 @@ jobs: toolchain: ${{ matrix.toolchain }} override: true - uses: extractions/setup-just@v1 - - name: Ls - run: ls -al + - uses: hustcer/setup-nu@v3.7 + with: + version: '0.85' + - name: Just version + run: just --version - name: Build - run: just + run: just build_all release: name: Release runs-on: ubuntu-latest From 07c8900ddef7fd2292466636feb16eb73550f683 Mon Sep 17 00:00:00 2001 From: Vincent Herlemont Date: Sun, 29 Oct 2023 20:25:26 +0100 Subject: [PATCH 106/316] ci: update build_test_common_os --- .../native_model/.github/workflows/build_and_test_release.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries/native_model/.github/workflows/build_and_test_release.yml b/libraries/native_model/.github/workflows/build_and_test_release.yml index a9ec41f2..ee0cf9fa 100644 --- a/libraries/native_model/.github/workflows/build_and_test_release.yml +++ b/libraries/native_model/.github/workflows/build_and_test_release.yml @@ -29,6 +29,8 @@ jobs: run: just --version - name: Build run: just build_all + - name: Test + run: just test_all release: name: Release runs-on: ubuntu-latest From 003d1f3b1d0586b4fdc0f381d7c0ab1a330c636b Mon Sep 17 00:00:00 2001 From: Vincent Herlemont Date: Sun, 17 Dec 2023 10:37:38 +0100 Subject: [PATCH 107/316] feat: add native_model_id_str and native_model_version_str --- .../native_model/native_model_macro/src/method/id.rs | 4 ++++ .../native_model_macro/src/method/version.rs | 4 ++++ libraries/native_model/src/model.rs | 2 ++ libraries/native_model/tests_crate/tests/macro.rs | 11 ++++++++++- 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/libraries/native_model/native_model_macro/src/method/id.rs b/libraries/native_model/native_model_macro/src/method/id.rs index 6257e434..bc697d9f 100644 --- a/libraries/native_model/native_model_macro/src/method/id.rs +++ b/libraries/native_model/native_model_macro/src/method/id.rs @@ -8,6 +8,10 @@ pub(crate) fn generate_native_model_id(model_attributes: &ModelAttributes) -> To fn native_model_id() -> u32 { #native_model_id } + + fn native_model_id_str() -> &'static str { + stringify!(#native_model_id) + } }; gen } diff --git a/libraries/native_model/native_model_macro/src/method/version.rs b/libraries/native_model/native_model_macro/src/method/version.rs index fd10d829..f4dac013 100644 --- a/libraries/native_model/native_model_macro/src/method/version.rs +++ b/libraries/native_model/native_model_macro/src/method/version.rs @@ -8,6 +8,10 @@ pub(crate) fn generate_native_model_version(model_attributes: &ModelAttributes) fn native_model_version() -> u32 { #native_model_version } + + fn native_model_version_str() -> &'static str { + stringify!(#native_model_version) + } }; gen } diff --git a/libraries/native_model/src/model.rs b/libraries/native_model/src/model.rs index b8307492..fa813184 100644 --- a/libraries/native_model/src/model.rs +++ b/libraries/native_model/src/model.rs @@ -2,7 +2,9 @@ use crate::{DecodeResult, EncodeResult, Result}; pub trait Model: Sized { fn native_model_id() -> u32; + fn native_model_id_str() -> &'static str; fn native_model_version() -> u32; + fn native_model_version_str() -> &'static str; // --------------- Decode --------------- fn native_model_decode_body(data: Vec, id: u32) -> DecodeResult diff --git a/libraries/native_model/tests_crate/tests/macro.rs b/libraries/native_model/tests_crate/tests/macro.rs index 4216d103..4f7f4cc1 100644 --- a/libraries/native_model/tests_crate/tests/macro.rs +++ b/libraries/native_model/tests_crate/tests/macro.rs @@ -28,10 +28,19 @@ impl From for Foo1 { } #[test] -fn test_simple() { +fn get_id_version_int() { assert_eq!(Foo1::native_model_id(), 1); assert_eq!(Foo1::native_model_version(), 1); assert_eq!(Foo2::native_model_id(), 1); assert_eq!(Foo2::native_model_version(), 2); } + +#[test] +fn get_id_version_str() { + assert_eq!(Foo1::native_model_id_str(), "1"); + assert_eq!(Foo1::native_model_version_str(), "1"); + + assert_eq!(Foo2::native_model_id_str(), "1"); + assert_eq!(Foo2::native_model_version_str(), "2"); +} From f7430422c963b011ab0afe6dca4b88a5d823ac4e Mon Sep 17 00:00:00 2001 From: Vincent Herlemont Date: Sun, 17 Dec 2023 10:37:51 +0100 Subject: [PATCH 108/316] ci: cargo test --- libraries/native_model/justfile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libraries/native_model/justfile b/libraries/native_model/justfile index e0c6eb6a..44203d59 100644 --- a/libraries/native_model/justfile +++ b/libraries/native_model/justfile @@ -51,7 +51,10 @@ test_bincode_2_rc: test_postcard_1_0: @just _tests_crate '--features postcard_1_0' -test_all: test_no_default test_default test_bincode_1_3 test_bincode_2_rc test_postcard_1_0 +test_docs: + cargo test --doc --features bincode_2_rc + +test_all: test_docs test_no_default test_default test_bincode_1_3 test_bincode_2_rc test_postcard_1_0 bench_overhead: cargo bench --bench overhead From ce0676e4b4eac810ac9ef8fa24cb6b0e5366bbaa Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 17 Dec 2023 09:45:07 +0000 Subject: [PATCH 109/316] chore(deps): update hustcer/setup-nu action to v3.8 --- .../native_model/.github/workflows/build_and_test_release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/.github/workflows/build_and_test_release.yml b/libraries/native_model/.github/workflows/build_and_test_release.yml index ee0cf9fa..5ca38eee 100644 --- a/libraries/native_model/.github/workflows/build_and_test_release.yml +++ b/libraries/native_model/.github/workflows/build_and_test_release.yml @@ -22,7 +22,7 @@ jobs: toolchain: ${{ matrix.toolchain }} override: true - uses: extractions/setup-just@v1 - - uses: hustcer/setup-nu@v3.7 + - uses: hustcer/setup-nu@v3.8 with: version: '0.85' - name: Just version From 86008b388d5b529a13a5791e564611eb57307dfc Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 17 Dec 2023 09:48:54 +0000 Subject: [PATCH 110/316] chore: update version to 0.4.0 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index be9950b8..2492094e 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.3.30" +version = "0.4.0" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.31", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.3.30", path = "native_model_macro" } +native_model_macro = { version = "0.4.0", path = "native_model_macro" } serde = { version = "1.0", features = ["derive"], optional = true } bincode_1_3 = { package = "bincode", version = "1.3", optional = true } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 9042f197..d9e93393 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.3.30" +version = "0.4.0" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 6e31a2413bb967c8a6fdb88eba5c496f76596a71 Mon Sep 17 00:00:00 2001 From: Vincent Herlemont Date: Sun, 17 Dec 2023 18:30:11 +0100 Subject: [PATCH 111/316] fix: re-export model trait --- libraries/native_model/src/lib.rs | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/libraries/native_model/src/lib.rs b/libraries/native_model/src/lib.rs index c3cf9a48..4ae50aa8 100644 --- a/libraries/native_model/src/lib.rs +++ b/libraries/native_model/src/lib.rs @@ -15,29 +15,29 @@ //! //! See examples in the [README.md](https://github.com/vincent-herlemont/native_model) file. - #[cfg(any( - feature = "serde", - feature = "bincode_1_3", - feature = "bincode_2_rc", - feature = "postcard_1_0" + feature = "serde", + feature = "bincode_1_3", + feature = "bincode_2_rc", + feature = "postcard_1_0" ))] mod codec; #[cfg(any( - feature = "serde", - feature = "bincode_1_3", - feature = "bincode_2_rc", - feature = "postcard_1_0" + feature = "serde", + feature = "bincode_1_3", + feature = "bincode_2_rc", + feature = "postcard_1_0" ))] pub use codec::*; mod header; -mod model; +pub mod model; pub mod wrapper; +// Re-export pub use model::*; -/// Macro to generate a [`native_model`] implementation for a struct. +// Macro to generate a [`native_model`] implementation for a struct. pub use native_model_macro::*; use wrapper::*; @@ -114,7 +114,7 @@ pub struct DowngradeError { /// See examples: /// - [README.md](https://github.com/vincent-herlemont/native_model) file. /// - other [examples](https://github.com/vincent-herlemont/native_model/tree/master/tests/example) -pub fn encode(model: &T) -> Result> { +pub fn encode(model: &T) -> Result> { T::native_model_encode(model) } @@ -122,7 +122,7 @@ pub fn encode(model: &T) -> Result> { /// See examples: /// - [README.md](https://github.com/vincent-herlemont/native_model) file. /// - other [examples](https://github.com/vincent-herlemont/native_model/tree/master/tests/example) -pub fn encode_downgrade(model: T, version: u32) -> Result> { +pub fn encode_downgrade(model: T, version: u32) -> Result> { T::native_model_encode_downgrade(model, version) } @@ -130,6 +130,6 @@ pub fn encode_downgrade(model: T, version: u32) -> Result> { /// See examples: /// - [README.md](https://github.com/vincent-herlemont/native_model) file. /// - other [examples](https://github.com/vincent-herlemont/native_model/tree/master/tests/example) -pub fn decode(data: Vec) -> Result<(T, u32)> { +pub fn decode(data: Vec) -> Result<(T, u32)> { T::native_model_decode(data) } From b3398c6dadae54ac09806a17186cbd3e823014d6 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 17 Dec 2023 17:33:03 +0000 Subject: [PATCH 112/316] chore: update version to 0.4.1 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 2492094e..481dc354 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.4.0" +version = "0.4.1" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.31", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.4.0", path = "native_model_macro" } +native_model_macro = { version = "0.4.1", path = "native_model_macro" } serde = { version = "1.0", features = ["derive"], optional = true } bincode_1_3 = { package = "bincode", version = "1.3", optional = true } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index d9e93393..838684bf 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.4.0" +version = "0.4.1" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 1de674301713891af39ffddbc06974c0c5dda9db Mon Sep 17 00:00:00 2001 From: Vincent Herlemont Date: Sun, 17 Dec 2023 18:45:29 +0100 Subject: [PATCH 113/316] fix: move model trait to lib module --- libraries/native_model/src/lib.rs | 68 +++++++++++++++++++++++++++-- libraries/native_model/src/model.rs | 65 --------------------------- 2 files changed, 64 insertions(+), 69 deletions(-) delete mode 100644 libraries/native_model/src/model.rs diff --git a/libraries/native_model/src/lib.rs b/libraries/native_model/src/lib.rs index 4ae50aa8..8b68b606 100644 --- a/libraries/native_model/src/lib.rs +++ b/libraries/native_model/src/lib.rs @@ -31,12 +31,8 @@ mod codec; ))] pub use codec::*; mod header; -pub mod model; pub mod wrapper; -// Re-export -pub use model::*; - // Macro to generate a [`native_model`] implementation for a struct. pub use native_model_macro::*; @@ -133,3 +129,67 @@ pub fn encode_downgrade(model: T, version: u32) -> Result(data: Vec) -> Result<(T, u32)> { T::native_model_decode(data) } + +pub trait Model: Sized { + fn native_model_id() -> u32; + fn native_model_id_str() -> &'static str; + fn native_model_version() -> u32; + fn native_model_version_str() -> &'static str; + + // --------------- Decode --------------- + fn native_model_decode_body(data: Vec, id: u32) -> DecodeResult + where + Self: Sized; + + fn native_model_decode_upgrade_body(data: Vec, id: u32, version: u32) -> Result + where + Self: Sized; + + fn native_model_decode(data: Vec) -> Result<(Self, u32)> + where + Self: Sized, + { + let native_model = crate::Wrapper::deserialize(&data[..]).unwrap(); + let source_id = native_model.get_id(); + let source_version = native_model.get_version(); + let result = Self::native_model_decode_upgrade_body( + native_model.value().to_vec(), + source_id, + source_version, + )?; + Ok((result, source_version)) + } + + // --------------- Encode --------------- + + fn native_model_encode_body(&self) -> EncodeResult> + where + Self: Sized; + + fn native_model_encode_downgrade_body(self, version: u32) -> Result> + where + Self: Sized; + + fn native_model_encode(&self) -> Result> + where + Self: Sized, + { + let mut data = self.native_model_encode_body()?; + let data = crate::native_model_encode( + &mut data, + Self::native_model_id(), + Self::native_model_version(), + ); + Ok(data) + } + + fn native_model_encode_downgrade(self, version: u32) -> Result> + where + Self: Sized, + { + let version = version.clone(); + let mut data = self.native_model_encode_downgrade_body(version)?; + let data = crate::native_model_encode(&mut data, Self::native_model_id(), version); + Ok(data) + } +} diff --git a/libraries/native_model/src/model.rs b/libraries/native_model/src/model.rs deleted file mode 100644 index fa813184..00000000 --- a/libraries/native_model/src/model.rs +++ /dev/null @@ -1,65 +0,0 @@ -use crate::{DecodeResult, EncodeResult, Result}; - -pub trait Model: Sized { - fn native_model_id() -> u32; - fn native_model_id_str() -> &'static str; - fn native_model_version() -> u32; - fn native_model_version_str() -> &'static str; - - // --------------- Decode --------------- - fn native_model_decode_body(data: Vec, id: u32) -> DecodeResult - where - Self: Sized; - - fn native_model_decode_upgrade_body(data: Vec, id: u32, version: u32) -> Result - where - Self: Sized; - - fn native_model_decode(data: Vec) -> Result<(Self, u32)> - where - Self: Sized, - { - let native_model = crate::Wrapper::deserialize(&data[..]).unwrap(); - let source_id = native_model.get_id(); - let source_version = native_model.get_version(); - let result = Self::native_model_decode_upgrade_body( - native_model.value().to_vec(), - source_id, - source_version, - )?; - Ok((result, source_version)) - } - - // --------------- Encode --------------- - - fn native_model_encode_body(&self) -> EncodeResult> - where - Self: Sized; - - fn native_model_encode_downgrade_body(self, version: u32) -> Result> - where - Self: Sized; - - fn native_model_encode(&self) -> Result> - where - Self: Sized, - { - let mut data = self.native_model_encode_body()?; - let data = crate::native_model_encode( - &mut data, - Self::native_model_id(), - Self::native_model_version(), - ); - Ok(data) - } - - fn native_model_encode_downgrade(self, version: u32) -> Result> - where - Self: Sized, - { - let version = version.clone(); - let mut data = self.native_model_encode_downgrade_body(version)?; - let data = crate::native_model_encode(&mut data, Self::native_model_id(), version); - Ok(data) - } -} From 63e5c33d8fd01f4f575c36eb149b589a321ec53d Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 17 Dec 2023 17:49:22 +0000 Subject: [PATCH 114/316] chore: update version to 0.4.2 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 481dc354..74f258f6 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.4.1" +version = "0.4.2" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.31", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.4.1", path = "native_model_macro" } +native_model_macro = { version = "0.4.2", path = "native_model_macro" } serde = { version = "1.0", features = ["derive"], optional = true } bincode_1_3 = { package = "bincode", version = "1.3", optional = true } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 838684bf..322ac675 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.4.1" +version = "0.4.2" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 5374dd66291e66f4dae77559fd8beec6b990af2e Mon Sep 17 00:00:00 2001 From: Michael Martin Date: Tue, 19 Dec 2023 09:46:17 -0800 Subject: [PATCH 115/316] docs: fix typo in README s/wood/hood/ --- libraries/native_model/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/README.md b/libraries/native_model/README.md index 7d19f18c..0aaf9599 100644 --- a/libraries/native_model/README.md +++ b/libraries/native_model/README.md @@ -165,7 +165,7 @@ Full example [here](tests/example/example_define_model.rs). Native model has been designed to have a minimal and constant overhead. That means that the overhead is the same -whatever the size of the data. Under the wood we use the [zerocopy](https://docs.rs/zerocopy/latest/zerocopy/) crate +whatever the size of the data. Under the hood we use the [zerocopy](https://docs.rs/zerocopy/latest/zerocopy/) crate to avoid unnecessary copies. 👉 To know the total time of the encode/decode, you need to add the time of your serialization format. From e73e0ab4312ddfc46fbab3eeb382d148fcb51bfe Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 19 Dec 2023 18:17:26 +0000 Subject: [PATCH 116/316] chore: update version to 0.4.3 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 74f258f6..8ba533dc 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.4.2" +version = "0.4.3" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.31", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.4.2", path = "native_model_macro" } +native_model_macro = { version = "0.4.3", path = "native_model_macro" } serde = { version = "1.0", features = ["derive"], optional = true } bincode_1_3 = { package = "bincode", version = "1.3", optional = true } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 322ac675..d7d469ed 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.4.2" +version = "0.4.3" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From fa34f384420d8416b68d2e4d9aa45703e09c51ed Mon Sep 17 00:00:00 2001 From: Vincent Herlemont Date: Wed, 20 Dec 2023 19:46:49 +0100 Subject: [PATCH 117/316] docs: links for custom serialization examples --- libraries/native_model/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/native_model/README.md b/libraries/native_model/README.md index 0aaf9599..d102d5fe 100644 --- a/libraries/native_model/README.md +++ b/libraries/native_model/README.md @@ -79,8 +79,8 @@ changes, the default serialization format is the oldest one. Define a struct with the name you want. This struct must implement [`native_model::Encode`](https://docs.rs/native_model/latest/native_model/trait.Encode.html) and [`native_model::Decode`](https://docs.rs/native_model/latest/native_model/trait.Decode.html) traits. Full examples: -- [bincode with encode/decode](./tests_crate/tests/example/encode_decode/bincode.rs) -- [bincode with serde](./tests_crate/tests/example/encode_decode/bincode_serde.rs) +- [bincode with encode/decode](./tests_crate/tests/example/custom_codec/bincode.rs) +- [bincode with serde](./tests_crate/tests/example/custom_codec/bincode_serde.rs) Others examples, see the default implementations: - [bincode v1.3](./src/codec/bincode_1_3.rs) From ec23f3ae00822cffe6703dbaedee9a595118b3a6 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 20 Dec 2023 18:51:14 +0000 Subject: [PATCH 118/316] chore: update version to 0.4.4 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 8ba533dc..a2203219 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.4.3" +version = "0.4.4" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.31", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.4.3", path = "native_model_macro" } +native_model_macro = { version = "0.4.4", path = "native_model_macro" } serde = { version = "1.0", features = ["derive"], optional = true } bincode_1_3 = { package = "bincode", version = "1.3", optional = true } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index d7d469ed..e5d3c9a7 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.4.3" +version = "0.4.4" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 1ccaa9bfe7f328045ad72525879f690253df3ddf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 21 Dec 2023 16:40:39 +0000 Subject: [PATCH 119/316] fix(deps): update rust crate zerocopy to 0.7.32 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index a2203219..7193f0cb 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -15,7 +15,7 @@ categories = ["data-structures", "encoding", "rust-patterns"] members = ["native_model_macro"] [dependencies] -zerocopy = { version = "0.7.31", features = [ "derive"] } +zerocopy = { version = "0.7.32", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" native_model_macro = { version = "0.4.4", path = "native_model_macro" } From 49357b4354dc2b47d84caae9ba7127006f50ad30 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 21 Dec 2023 16:44:59 +0000 Subject: [PATCH 120/316] chore: update version to 0.4.5 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 7193f0cb..f13b8fbe 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.4.4" +version = "0.4.5" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.32", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.4.4", path = "native_model_macro" } +native_model_macro = { version = "0.4.5", path = "native_model_macro" } serde = { version = "1.0", features = ["derive"], optional = true } bincode_1_3 = { package = "bincode", version = "1.3", optional = true } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index e5d3c9a7..e88d14b2 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.4.4" +version = "0.4.5" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 7ad4613e793b9173277b5a8dff3854fd24674fac Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 21 Dec 2023 20:12:21 +0000 Subject: [PATCH 121/316] fix(deps): update rust crate proc-macro2 to 1.0.71 --- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index e88d14b2..42502bd4 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -16,4 +16,4 @@ proc-macro = true [dependencies] syn = { version = "2.0", features = ["full"] } quote = "1.0" -proc-macro2 = "1.0.70" +proc-macro2 = "1.0.71" From 7241c36fe37b2d806bbde4c477c340bb9366f8fa Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 21 Dec 2023 20:16:02 +0000 Subject: [PATCH 122/316] chore: update version to 0.4.6 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index f13b8fbe..09039992 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.4.5" +version = "0.4.6" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.32", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.4.5", path = "native_model_macro" } +native_model_macro = { version = "0.4.6", path = "native_model_macro" } serde = { version = "1.0", features = ["derive"], optional = true } bincode_1_3 = { package = "bincode", version = "1.3", optional = true } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 42502bd4..e524a37b 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.4.5" +version = "0.4.6" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 11c7a88a0a3cc83a86180975e84198835c61a1ed Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 31 Dec 2023 05:00:04 +0000 Subject: [PATCH 123/316] fix(deps): update rust crate proc-macro2 to 1.0.72 --- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index e524a37b..6592f062 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -16,4 +16,4 @@ proc-macro = true [dependencies] syn = { version = "2.0", features = ["full"] } quote = "1.0" -proc-macro2 = "1.0.71" +proc-macro2 = "1.0.72" From 168467a9812c6f95e3578225c762ec0130412a27 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 1 Jan 2024 01:43:28 +0000 Subject: [PATCH 124/316] fix(deps): update rust crate proc-macro2 to 1.0.73 --- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 6592f062..df7ddaa9 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -16,4 +16,4 @@ proc-macro = true [dependencies] syn = { version = "2.0", features = ["full"] } quote = "1.0" -proc-macro2 = "1.0.72" +proc-macro2 = "1.0.73" From cc4029e285ace40f249b931fb38813814075e7df Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 1 Jan 2024 01:46:40 +0000 Subject: [PATCH 125/316] chore: update version to 0.4.7 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 09039992..2e6ff0c1 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.4.6" +version = "0.4.7" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.32", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.4.6", path = "native_model_macro" } +native_model_macro = { version = "0.4.7", path = "native_model_macro" } serde = { version = "1.0", features = ["derive"], optional = true } bincode_1_3 = { package = "bincode", version = "1.3", optional = true } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index df7ddaa9..4037997f 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.4.6" +version = "0.4.7" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From b2c122d4fa72dcad256cd8e1b4a7d945c14d0ad7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 2 Jan 2024 06:27:58 +0000 Subject: [PATCH 126/316] fix(deps): update rust crate proc-macro2 to 1.0.74 --- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 4037997f..e2d514ab 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -16,4 +16,4 @@ proc-macro = true [dependencies] syn = { version = "2.0", features = ["full"] } quote = "1.0" -proc-macro2 = "1.0.73" +proc-macro2 = "1.0.74" From e964fba15bc9552f5635210630590550a7397409 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 2 Jan 2024 06:31:33 +0000 Subject: [PATCH 127/316] chore: update version to 0.4.8 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 2e6ff0c1..7cd1af7c 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.4.7" +version = "0.4.8" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.32", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.4.7", path = "native_model_macro" } +native_model_macro = { version = "0.4.8", path = "native_model_macro" } serde = { version = "1.0", features = ["derive"], optional = true } bincode_1_3 = { package = "bincode", version = "1.3", optional = true } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index e2d514ab..540ba2ea 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.4.7" +version = "0.4.8" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From ddfa6fd4d1058661516be351401207635fc21a62 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 4 Jan 2024 00:36:14 +0000 Subject: [PATCH 128/316] fix(deps): update rust crate proc-macro2 to 1.0.75 --- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 540ba2ea..8b564aed 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -16,4 +16,4 @@ proc-macro = true [dependencies] syn = { version = "2.0", features = ["full"] } quote = "1.0" -proc-macro2 = "1.0.74" +proc-macro2 = "1.0.75" From f3c56c1f2f44624b4f093e5c2a7d3b5dc29f8661 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 4 Jan 2024 00:39:29 +0000 Subject: [PATCH 129/316] chore: update version to 0.4.9 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 7cd1af7c..2ba88085 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.4.8" +version = "0.4.9" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.32", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.4.8", path = "native_model_macro" } +native_model_macro = { version = "0.4.9", path = "native_model_macro" } serde = { version = "1.0", features = ["derive"], optional = true } bincode_1_3 = { package = "bincode", version = "1.3", optional = true } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 8b564aed..0f6b81d4 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.4.8" +version = "0.4.9" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 9b72e0728f04928ec6539a7126f50302eeb41b3a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 6 Jan 2024 06:08:45 +0000 Subject: [PATCH 130/316] fix(deps): update rust crate proc-macro2 to 1.0.76 --- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 0f6b81d4..08d79c8c 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -16,4 +16,4 @@ proc-macro = true [dependencies] syn = { version = "2.0", features = ["full"] } quote = "1.0" -proc-macro2 = "1.0.75" +proc-macro2 = "1.0.76" From 5058898c7ee2f8dee7dd5f1f783676af75e5cff8 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 6 Jan 2024 06:12:35 +0000 Subject: [PATCH 131/316] chore: update version to 0.4.10 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 2ba88085..07803c00 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.4.9" +version = "0.4.10" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.32", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.4.9", path = "native_model_macro" } +native_model_macro = { version = "0.4.10", path = "native_model_macro" } serde = { version = "1.0", features = ["derive"], optional = true } bincode_1_3 = { package = "bincode", version = "1.3", optional = true } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 08d79c8c..4a5bc95f 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.4.9" +version = "0.4.10" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From ebc53cc231ec02450339cc3a54963105d14c2ab2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 21 Jan 2024 03:35:45 +0000 Subject: [PATCH 132/316] fix(deps): update rust crate proc-macro2 to 1.0.78 --- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 4a5bc95f..4f3204eb 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -16,4 +16,4 @@ proc-macro = true [dependencies] syn = { version = "2.0", features = ["full"] } quote = "1.0" -proc-macro2 = "1.0.76" +proc-macro2 = "1.0.78" From 62ef6db5ea30ab001b5b1223604d3ad8364befa6 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 21 Jan 2024 03:39:40 +0000 Subject: [PATCH 133/316] chore: update version to 0.4.11 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 07803c00..42d7fa5f 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.4.10" +version = "0.4.11" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.32", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.4.10", path = "native_model_macro" } +native_model_macro = { version = "0.4.11", path = "native_model_macro" } serde = { version = "1.0", features = ["derive"], optional = true } bincode_1_3 = { package = "bincode", version = "1.3", optional = true } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 4f3204eb..acb64b5c 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.4.10" +version = "0.4.11" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 1c50a0ab5ead13e1c0a14c47205f1272a4a3cfa1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 26 Jan 2024 16:18:13 +0000 Subject: [PATCH 134/316] chore(deps): update webiny/action-conventional-commits action to v1.3.0 --- .../native_model/.github/workflows/conventional_commits.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/.github/workflows/conventional_commits.yml b/libraries/native_model/.github/workflows/conventional_commits.yml index 019525e6..61740185 100644 --- a/libraries/native_model/.github/workflows/conventional_commits.yml +++ b/libraries/native_model/.github/workflows/conventional_commits.yml @@ -10,4 +10,4 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4 - - uses: webiny/action-conventional-commits@v1.2.0 \ No newline at end of file + - uses: webiny/action-conventional-commits@v1.3.0 \ No newline at end of file From 7931ef2d227ce4be3e8915927406470dbdc5e533 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 7 Feb 2024 06:39:22 +0000 Subject: [PATCH 135/316] chore(deps): update hustcer/setup-nu action to v3.9 --- .../native_model/.github/workflows/build_and_test_release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/.github/workflows/build_and_test_release.yml b/libraries/native_model/.github/workflows/build_and_test_release.yml index 5ca38eee..e1f04a8c 100644 --- a/libraries/native_model/.github/workflows/build_and_test_release.yml +++ b/libraries/native_model/.github/workflows/build_and_test_release.yml @@ -22,7 +22,7 @@ jobs: toolchain: ${{ matrix.toolchain }} override: true - uses: extractions/setup-just@v1 - - uses: hustcer/setup-nu@v3.8 + - uses: hustcer/setup-nu@v3.9 with: version: '0.85' - name: Just version From 50b25154ef6c71bff052243d159ecb849aa0208a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 28 Feb 2024 04:53:03 +0000 Subject: [PATCH 136/316] chore(deps): update extractions/setup-just action to v2 --- .../native_model/.github/workflows/build_and_test_release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/.github/workflows/build_and_test_release.yml b/libraries/native_model/.github/workflows/build_and_test_release.yml index e1f04a8c..486de655 100644 --- a/libraries/native_model/.github/workflows/build_and_test_release.yml +++ b/libraries/native_model/.github/workflows/build_and_test_release.yml @@ -21,7 +21,7 @@ jobs: with: toolchain: ${{ matrix.toolchain }} override: true - - uses: extractions/setup-just@v1 + - uses: extractions/setup-just@v2 - uses: hustcer/setup-nu@v3.9 with: version: '0.85' From 3fdeb797bb82d5d598e31f6de80a7f095ca4fbda Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 12 Mar 2024 05:18:50 +0000 Subject: [PATCH 137/316] fix(deps): update rust crate proc-macro2 to 1.0.79 --- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index acb64b5c..96fb7d66 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -16,4 +16,4 @@ proc-macro = true [dependencies] syn = { version = "2.0", features = ["full"] } quote = "1.0" -proc-macro2 = "1.0.78" +proc-macro2 = "1.0.79" From 0c70af183fe6e391e751d791d3caa7ad7e26a10d Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 12 Mar 2024 05:23:00 +0000 Subject: [PATCH 138/316] chore: update version to 0.4.12 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 42d7fa5f..6e172aed 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.4.11" +version = "0.4.12" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.32", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.4.11", path = "native_model_macro" } +native_model_macro = { version = "0.4.12", path = "native_model_macro" } serde = { version = "1.0", features = ["derive"], optional = true } bincode_1_3 = { package = "bincode", version = "1.3", optional = true } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 96fb7d66..87b785fd 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.4.11" +version = "0.4.12" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 46a643350abaa7276f18d58b2d818b4e89d50abc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 15 Apr 2024 00:51:15 +0000 Subject: [PATCH 139/316] fix(deps): update rust crate proc-macro2 to 1.0.80 --- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 87b785fd..656bd400 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -16,4 +16,4 @@ proc-macro = true [dependencies] syn = { version = "2.0", features = ["full"] } quote = "1.0" -proc-macro2 = "1.0.79" +proc-macro2 = "1.0.80" From 8965cac2b26094d2642c85e9b1cf8e270d172272 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 15 Apr 2024 00:55:50 +0000 Subject: [PATCH 140/316] chore: update version to 0.4.13 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 6e172aed..b527d063 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.4.12" +version = "0.4.13" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.32", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.4.12", path = "native_model_macro" } +native_model_macro = { version = "0.4.13", path = "native_model_macro" } serde = { version = "1.0", features = ["derive"], optional = true } bincode_1_3 = { package = "bincode", version = "1.3", optional = true } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 656bd400..4db5ed33 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.4.12" +version = "0.4.13" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 62d7821f96186c2713a55c067eaecc0f71beda0f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 Apr 2024 04:04:28 +0000 Subject: [PATCH 141/316] fix(deps): update rust crate proc-macro2 to 1.0.81 --- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 4db5ed33..4a341551 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -16,4 +16,4 @@ proc-macro = true [dependencies] syn = { version = "2.0", features = ["full"] } quote = "1.0" -proc-macro2 = "1.0.80" +proc-macro2 = "1.0.81" From 56ab66d4a41ff8f34d3d30658f8abfb6a762bafe Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 17 Apr 2024 04:09:18 +0000 Subject: [PATCH 142/316] chore: update version to 0.4.14 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index b527d063..69d9eff2 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.4.13" +version = "0.4.14" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.32", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0" -native_model_macro = { version = "0.4.13", path = "native_model_macro" } +native_model_macro = { version = "0.4.14", path = "native_model_macro" } serde = { version = "1.0", features = ["derive"], optional = true } bincode_1_3 = { package = "bincode", version = "1.3", optional = true } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 4a341551..0fba57c1 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.4.13" +version = "0.4.14" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 9520b2c862c52ef1278e4ab0823064f82879b727 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 27 Apr 2024 01:45:54 +0000 Subject: [PATCH 143/316] chore(deps): update hustcer/setup-nu action to v3.10 --- .../native_model/.github/workflows/build_and_test_release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/.github/workflows/build_and_test_release.yml b/libraries/native_model/.github/workflows/build_and_test_release.yml index 486de655..32808b10 100644 --- a/libraries/native_model/.github/workflows/build_and_test_release.yml +++ b/libraries/native_model/.github/workflows/build_and_test_release.yml @@ -22,7 +22,7 @@ jobs: toolchain: ${{ matrix.toolchain }} override: true - uses: extractions/setup-just@v2 - - uses: hustcer/setup-nu@v3.9 + - uses: hustcer/setup-nu@v3.10 with: version: '0.85' - name: Just version From 01fcb55425081e5e5cdf869bcc57970a9bb36828 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 1 May 2024 10:44:00 +0000 Subject: [PATCH 144/316] chore(deps): update rust crate serde_json to 1.0.116 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 69d9eff2..7b3c4a40 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -26,7 +26,7 @@ bincode_2_rc = { package = "bincode", version = "2.0.0-rc.3", features = ["serde postcard_1_0 = { package = "postcard", version = "1.0", features = ["alloc"], optional = true } [dev-dependencies] -serde_json = "1.0" +serde_json = "1.0.116" criterion = { version = "0.5.1" } skeptic = "0.13" From 013ddef8f2f7e77bb931b46a1089dcc9c22502d6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 1 May 2024 10:44:05 +0000 Subject: [PATCH 145/316] chore(deps): update rust crate skeptic to 0.13.7 --- libraries/native_model/Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 7b3c4a40..ac0675b2 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -28,7 +28,7 @@ postcard_1_0 = { package = "postcard", version = "1.0", features = ["alloc"], op [dev-dependencies] serde_json = "1.0.116" criterion = { version = "0.5.1" } -skeptic = "0.13" +skeptic = "0.13.7" [features] default = ["serde", "bincode_1_3"] @@ -38,4 +38,4 @@ name = "overhead" harness = false [build-dependencies] -skeptic = "0.13" \ No newline at end of file +skeptic = "0.13.7" \ No newline at end of file From 71b332d8a020de10c961c0af32c434c2cd7506e6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 1 May 2024 13:55:32 +0000 Subject: [PATCH 146/316] fix(deps): update rust crate bincode_1_3 to 1.3.3 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index ac0675b2..3617d65a 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -21,7 +21,7 @@ anyhow = "1.0" native_model_macro = { version = "0.4.14", path = "native_model_macro" } serde = { version = "1.0", features = ["derive"], optional = true } -bincode_1_3 = { package = "bincode", version = "1.3", optional = true } +bincode_1_3 = { package = "bincode", version = "1.3.3", optional = true } bincode_2_rc = { package = "bincode", version = "2.0.0-rc.3", features = ["serde"], optional = true } postcard_1_0 = { package = "postcard", version = "1.0", features = ["alloc"], optional = true } From 1d15dce922bbee486280711e9f97ca1940617a94 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 1 May 2024 13:55:27 +0000 Subject: [PATCH 147/316] fix(deps): update rust crate anyhow to 1.0.82 --- libraries/native_model/Cargo.toml | 2 +- libraries/native_model/tests_crate/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 3617d65a..3d7767b2 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -17,7 +17,7 @@ members = ["native_model_macro"] [dependencies] zerocopy = { version = "0.7.32", features = [ "derive"] } thiserror = "1.0" -anyhow = "1.0" +anyhow = "1.0.82" native_model_macro = { version = "0.4.14", path = "native_model_macro" } serde = { version = "1.0", features = ["derive"], optional = true } diff --git a/libraries/native_model/tests_crate/Cargo.toml b/libraries/native_model/tests_crate/Cargo.toml index c6d07850..9bea9e1b 100644 --- a/libraries/native_model/tests_crate/Cargo.toml +++ b/libraries/native_model/tests_crate/Cargo.toml @@ -10,7 +10,7 @@ native_model = { path = "../", no-default-features = true } serde = { version = "1.0", features = ["derive"], optional = true } bincode = { version = "2.0.0-rc.3", features = ["serde"] , optional = true } postcard = { version = "1.0", features = ["alloc"], optional = true } -anyhow = "1.0" +anyhow = "1.0.82" [features] From d4cfedee9ea5c67ac99592b9887b78ad5142d14f Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 1 May 2024 13:59:25 +0000 Subject: [PATCH 148/316] chore: update version to 0.4.15 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 3d7767b2..6f1b6810 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.4.14" +version = "0.4.15" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.32", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0.82" -native_model_macro = { version = "0.4.14", path = "native_model_macro" } +native_model_macro = { version = "0.4.15", path = "native_model_macro" } serde = { version = "1.0", features = ["derive"], optional = true } bincode_1_3 = { package = "bincode", version = "1.3.3", optional = true } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 0fba57c1..9c18ae47 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.4.14" +version = "0.4.15" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 2c8a0ee8d6b1a842c8f0598b9b9109f8bb3a451b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 1 May 2024 15:26:38 +0000 Subject: [PATCH 149/316] fix(deps): update rust crate postcard_1_0 to 1.0.8 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 6f1b6810..19ff9042 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -23,7 +23,7 @@ native_model_macro = { version = "0.4.15", path = "native_model_macro" } serde = { version = "1.0", features = ["derive"], optional = true } bincode_1_3 = { package = "bincode", version = "1.3.3", optional = true } bincode_2_rc = { package = "bincode", version = "2.0.0-rc.3", features = ["serde"], optional = true } -postcard_1_0 = { package = "postcard", version = "1.0", features = ["alloc"], optional = true } +postcard_1_0 = { package = "postcard", version = "1.0.8", features = ["alloc"], optional = true } [dev-dependencies] serde_json = "1.0.116" From 231200d13f69dc9c0a3c5abe1c3e3b1192b50b82 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 1 May 2024 15:26:34 +0000 Subject: [PATCH 150/316] fix(deps): update rust crate postcard to 1.0.8 --- libraries/native_model/tests_crate/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/tests_crate/Cargo.toml b/libraries/native_model/tests_crate/Cargo.toml index 9bea9e1b..9d15b9df 100644 --- a/libraries/native_model/tests_crate/Cargo.toml +++ b/libraries/native_model/tests_crate/Cargo.toml @@ -9,7 +9,7 @@ edition = "2021" native_model = { path = "../", no-default-features = true } serde = { version = "1.0", features = ["derive"], optional = true } bincode = { version = "2.0.0-rc.3", features = ["serde"] , optional = true } -postcard = { version = "1.0", features = ["alloc"], optional = true } +postcard = { version = "1.0.8", features = ["alloc"], optional = true } anyhow = "1.0.82" From 0db39143980c7f08f8f67c33d32198bc80f10d16 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 1 May 2024 15:30:24 +0000 Subject: [PATCH 151/316] chore: update version to 0.4.16 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 19ff9042..85415a83 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.4.15" +version = "0.4.16" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.32", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0.82" -native_model_macro = { version = "0.4.15", path = "native_model_macro" } +native_model_macro = { version = "0.4.16", path = "native_model_macro" } serde = { version = "1.0", features = ["derive"], optional = true } bincode_1_3 = { package = "bincode", version = "1.3.3", optional = true } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 9c18ae47..ba9976bc 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.4.15" +version = "0.4.16" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 591c8f28f2de052b6749b0540fbcd1db5bfd71b6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 1 May 2024 19:10:56 +0000 Subject: [PATCH 152/316] fix(deps): update rust crate quote to 1.0.36 --- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index ba9976bc..e84d8924 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -15,5 +15,5 @@ proc-macro = true [dependencies] syn = { version = "2.0", features = ["full"] } -quote = "1.0" +quote = "1.0.36" proc-macro2 = "1.0.81" From fd6bdb1df42fcb90e0d01c8acefcdef2a7fd6259 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 1 May 2024 19:11:00 +0000 Subject: [PATCH 153/316] fix(deps): update rust crate serde to 1.0.200 --- libraries/native_model/Cargo.toml | 2 +- libraries/native_model/tests_crate/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 85415a83..a1813133 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -20,7 +20,7 @@ thiserror = "1.0" anyhow = "1.0.82" native_model_macro = { version = "0.4.16", path = "native_model_macro" } -serde = { version = "1.0", features = ["derive"], optional = true } +serde = { version = "1.0.200", features = ["derive"], optional = true } bincode_1_3 = { package = "bincode", version = "1.3.3", optional = true } bincode_2_rc = { package = "bincode", version = "2.0.0-rc.3", features = ["serde"], optional = true } postcard_1_0 = { package = "postcard", version = "1.0.8", features = ["alloc"], optional = true } diff --git a/libraries/native_model/tests_crate/Cargo.toml b/libraries/native_model/tests_crate/Cargo.toml index 9d15b9df..4e9359d5 100644 --- a/libraries/native_model/tests_crate/Cargo.toml +++ b/libraries/native_model/tests_crate/Cargo.toml @@ -7,7 +7,7 @@ edition = "2021" [dependencies] native_model = { path = "../", no-default-features = true } -serde = { version = "1.0", features = ["derive"], optional = true } +serde = { version = "1.0.200", features = ["derive"], optional = true } bincode = { version = "2.0.0-rc.3", features = ["serde"] , optional = true } postcard = { version = "1.0.8", features = ["alloc"], optional = true } anyhow = "1.0.82" From 012fd6cc328455a4d3a16353f28109a1fb1cccd6 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 1 May 2024 19:15:17 +0000 Subject: [PATCH 154/316] chore: update version to 0.4.17 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index a1813133..170a5770 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.4.16" +version = "0.4.17" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.32", features = [ "derive"] } thiserror = "1.0" anyhow = "1.0.82" -native_model_macro = { version = "0.4.16", path = "native_model_macro" } +native_model_macro = { version = "0.4.17", path = "native_model_macro" } serde = { version = "1.0.200", features = ["derive"], optional = true } bincode_1_3 = { package = "bincode", version = "1.3.3", optional = true } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index e84d8924..31b10731 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.4.16" +version = "0.4.17" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 75ca2fb5b1c5e3001a4f39138229f9c8878b08fa Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 1 May 2024 22:47:24 +0000 Subject: [PATCH 155/316] fix(deps): update rust crate syn to 2.0.60 --- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 31b10731..61e82834 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -14,6 +14,6 @@ path = "src/lib.rs" proc-macro = true [dependencies] -syn = { version = "2.0", features = ["full"] } +syn = { version = "2.0.60", features = ["full"] } quote = "1.0.36" proc-macro2 = "1.0.81" From 7d3ede941b057d64e3038914f0f7e23b3d8fe067 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 1 May 2024 22:47:27 +0000 Subject: [PATCH 156/316] fix(deps): update rust crate thiserror to 1.0.59 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 170a5770..a70933c5 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -16,7 +16,7 @@ members = ["native_model_macro"] [dependencies] zerocopy = { version = "0.7.32", features = [ "derive"] } -thiserror = "1.0" +thiserror = "1.0.59" anyhow = "1.0.82" native_model_macro = { version = "0.4.17", path = "native_model_macro" } From c5ed0db762cffd44107f96880d5c594b8d2fc238 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 1 May 2024 22:50:55 +0000 Subject: [PATCH 157/316] chore: update version to 0.4.18 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index a70933c5..9af93657 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.4.17" +version = "0.4.18" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.32", features = [ "derive"] } thiserror = "1.0.59" anyhow = "1.0.82" -native_model_macro = { version = "0.4.17", path = "native_model_macro" } +native_model_macro = { version = "0.4.18", path = "native_model_macro" } serde = { version = "1.0.200", features = ["derive"], optional = true } bincode_1_3 = { package = "bincode", version = "1.3.3", optional = true } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 61e82834..86cb845a 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.4.17" +version = "0.4.18" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 60d38784ac97dad4e05a494c1a470dad0c5ff840 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 4 May 2024 22:49:26 +0000 Subject: [PATCH 158/316] fix(deps): update rust crate zerocopy to 0.7.33 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 9af93657..ec0d040c 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -15,7 +15,7 @@ categories = ["data-structures", "encoding", "rust-patterns"] members = ["native_model_macro"] [dependencies] -zerocopy = { version = "0.7.32", features = [ "derive"] } +zerocopy = { version = "0.7.33", features = [ "derive"] } thiserror = "1.0.59" anyhow = "1.0.82" native_model_macro = { version = "0.4.18", path = "native_model_macro" } From d62eddb2ae705a5987752537adc6f5b554ef5c5e Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 4 May 2024 22:52:20 +0000 Subject: [PATCH 159/316] chore: update version to 0.4.19 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index ec0d040c..98cdfa59 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.4.18" +version = "0.4.19" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.7.33", features = [ "derive"] } thiserror = "1.0.59" anyhow = "1.0.82" -native_model_macro = { version = "0.4.18", path = "native_model_macro" } +native_model_macro = { version = "0.4.19", path = "native_model_macro" } serde = { version = "1.0.200", features = ["derive"], optional = true } bincode_1_3 = { package = "bincode", version = "1.3.3", optional = true } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 86cb845a..4d08b45a 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.4.18" +version = "0.4.19" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 938a0d654cf52f32a34cd591a2bf03e01856122a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 29 May 2024 09:46:42 +0000 Subject: [PATCH 160/316] chore(deps): update hustcer/setup-nu action to v3.11 --- .../native_model/.github/workflows/build_and_test_release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/.github/workflows/build_and_test_release.yml b/libraries/native_model/.github/workflows/build_and_test_release.yml index 32808b10..d8d18686 100644 --- a/libraries/native_model/.github/workflows/build_and_test_release.yml +++ b/libraries/native_model/.github/workflows/build_and_test_release.yml @@ -22,7 +22,7 @@ jobs: toolchain: ${{ matrix.toolchain }} override: true - uses: extractions/setup-just@v2 - - uses: hustcer/setup-nu@v3.10 + - uses: hustcer/setup-nu@v3.11 with: version: '0.85' - name: Just version From 9b594afc2bd603639e017bd13df474d51b11c295 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 29 Jun 2024 07:37:17 +0000 Subject: [PATCH 161/316] chore(deps): update hustcer/setup-nu action to v3.12 --- .../native_model/.github/workflows/build_and_test_release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/.github/workflows/build_and_test_release.yml b/libraries/native_model/.github/workflows/build_and_test_release.yml index d8d18686..705d91c4 100644 --- a/libraries/native_model/.github/workflows/build_and_test_release.yml +++ b/libraries/native_model/.github/workflows/build_and_test_release.yml @@ -22,7 +22,7 @@ jobs: toolchain: ${{ matrix.toolchain }} override: true - uses: extractions/setup-just@v2 - - uses: hustcer/setup-nu@v3.11 + - uses: hustcer/setup-nu@v3.12 with: version: '0.85' - name: Just version From b32e231e31755f349fca9e221670e9494c0ce430 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 7 Sep 2024 17:12:19 +0000 Subject: [PATCH 162/316] chore(deps): update hustcer/setup-nu action to v3.13 --- .../native_model/.github/workflows/build_and_test_release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/.github/workflows/build_and_test_release.yml b/libraries/native_model/.github/workflows/build_and_test_release.yml index 705d91c4..409f6153 100644 --- a/libraries/native_model/.github/workflows/build_and_test_release.yml +++ b/libraries/native_model/.github/workflows/build_and_test_release.yml @@ -22,7 +22,7 @@ jobs: toolchain: ${{ matrix.toolchain }} override: true - uses: extractions/setup-just@v2 - - uses: hustcer/setup-nu@v3.12 + - uses: hustcer/setup-nu@v3.13 with: version: '0.85' - name: Just version From 83de7d88cdc5d8710e4f2f93dc32c164939698f7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 4 Oct 2024 00:25:37 +0000 Subject: [PATCH 163/316] fix(deps): update rust crate zerocopy to 0.8.0 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 98cdfa59..484366c5 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -15,7 +15,7 @@ categories = ["data-structures", "encoding", "rust-patterns"] members = ["native_model_macro"] [dependencies] -zerocopy = { version = "0.7.33", features = [ "derive"] } +zerocopy = { version = "0.8.0", features = [ "derive"] } thiserror = "1.0.59" anyhow = "1.0.82" native_model_macro = { version = "0.4.19", path = "native_model_macro" } From 9a284d2942e792bf28b8f4417f4e0a00f809051b Mon Sep 17 00:00:00 2001 From: vincent-herlemont Date: Sat, 5 Oct 2024 10:25:13 +0200 Subject: [PATCH 164/316] fix: update zerocopy usage in header and wrapper modules to use new traits --- libraries/native_model/src/header.rs | 4 ++-- libraries/native_model/src/wrapper.rs | 13 ++++++------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/libraries/native_model/src/header.rs b/libraries/native_model/src/header.rs index db836feb..d2bee226 100644 --- a/libraries/native_model/src/header.rs +++ b/libraries/native_model/src/header.rs @@ -1,7 +1,7 @@ use zerocopy::little_endian::U32; -use zerocopy::{AsBytes, FromBytes, FromZeroes}; +use zerocopy::{FromBytes, Immutable, IntoBytes, KnownLayout}; -#[derive(FromZeroes, FromBytes, AsBytes, Debug)] +#[derive(FromBytes, IntoBytes, Immutable, KnownLayout, Debug)] #[repr(C)] pub struct Header { pub(crate) id: U32, diff --git a/libraries/native_model/src/wrapper.rs b/libraries/native_model/src/wrapper.rs index 5b13443d..c60c036e 100644 --- a/libraries/native_model/src/wrapper.rs +++ b/libraries/native_model/src/wrapper.rs @@ -1,16 +1,15 @@ use crate::header::Header; use zerocopy::little_endian::U32; -use zerocopy::{AsBytes, ByteSlice, ByteSliceMut, Ref}; +use zerocopy::{SplitByteSlice, SplitByteSliceMut, Ref, IntoBytes}; -#[derive(Debug)] -pub struct Wrapper { - header: Ref, // Deprecated: Rename LayoutVerified to Ref #203 +pub struct Wrapper { + header: Ref, value: T, } -impl Wrapper { +impl Wrapper { pub fn deserialize(packed: T) -> Option { - let (header_lv, rest) = Ref::<_, Header>::new_from_prefix(packed)?; + let (header_lv, rest) = Ref::<_, Header>::from_prefix(packed).ok()?; let native_model = Self { header: header_lv, value: rest, @@ -35,7 +34,7 @@ impl Wrapper { } } -impl Wrapper { +impl Wrapper { pub fn set_type_id(&mut self, type_id: u32) { self.header.id = U32::new(type_id); } From c35c40630ba4d88537c722631a88ee823e7df67e Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 5 Oct 2024 08:28:13 +0000 Subject: [PATCH 165/316] chore: update version to 0.4.20 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 484366c5..d89fb2cf 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.4.19" +version = "0.4.20" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.8.0", features = [ "derive"] } thiserror = "1.0.59" anyhow = "1.0.82" -native_model_macro = { version = "0.4.19", path = "native_model_macro" } +native_model_macro = { version = "0.4.20", path = "native_model_macro" } serde = { version = "1.0.200", features = ["derive"], optional = true } bincode_1_3 = { package = "bincode", version = "1.3.3", optional = true } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 4d08b45a..627bcc1f 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.4.19" +version = "0.4.20" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 736eb712f43617e4fd5543b0e5c368f873fe3d35 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 25 Oct 2024 09:21:06 +0000 Subject: [PATCH 166/316] chore(deps): update hustcer/setup-nu action to v3.15 --- .../native_model/.github/workflows/build_and_test_release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/.github/workflows/build_and_test_release.yml b/libraries/native_model/.github/workflows/build_and_test_release.yml index 409f6153..e89d7153 100644 --- a/libraries/native_model/.github/workflows/build_and_test_release.yml +++ b/libraries/native_model/.github/workflows/build_and_test_release.yml @@ -22,7 +22,7 @@ jobs: toolchain: ${{ matrix.toolchain }} override: true - uses: extractions/setup-just@v2 - - uses: hustcer/setup-nu@v3.13 + - uses: hustcer/setup-nu@v3.15 with: version: '0.85' - name: Just version From 646673efda9030b66422dffb338f29222d0155ac Mon Sep 17 00:00:00 2001 From: Dylan Bowker Date: Sun, 12 May 2024 08:18:10 -0600 Subject: [PATCH 167/316] feat: add support for `rmp-serde` --- libraries/native_model/Cargo.toml | 3 +- .../native_model/src/codec/bincode_1_3.rs | 49 +++++++++++---- .../native_model/src/codec/bincode_2_rc.rs | 59 ++++++++++++++----- libraries/native_model/src/codec/mod.rs | 11 +++- .../native_model/src/codec/postcard_1_0.rs | 50 ++++++++++++---- .../native_model/src/codec/rmp_serde_1_3.rs | 41 +++++++++++++ libraries/native_model/src/lib.rs | 13 +++- 7 files changed, 184 insertions(+), 42 deletions(-) create mode 100644 libraries/native_model/src/codec/rmp_serde_1_3.rs diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index d89fb2cf..b91fa456 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -24,6 +24,7 @@ serde = { version = "1.0.200", features = ["derive"], optional = true } bincode_1_3 = { package = "bincode", version = "1.3.3", optional = true } bincode_2_rc = { package = "bincode", version = "2.0.0-rc.3", features = ["serde"], optional = true } postcard_1_0 = { package = "postcard", version = "1.0.8", features = ["alloc"], optional = true } +rmp_serde_1_3 = { package = "rmp-serde", version = "1.3", optional = true } [dev-dependencies] serde_json = "1.0.116" @@ -38,4 +39,4 @@ name = "overhead" harness = false [build-dependencies] -skeptic = "0.13.7" \ No newline at end of file +skeptic = "0.13.7" diff --git a/libraries/native_model/src/codec/bincode_1_3.rs b/libraries/native_model/src/codec/bincode_1_3.rs index a3fe397d..dc598e8f 100644 --- a/libraries/native_model/src/codec/bincode_1_3.rs +++ b/libraries/native_model/src/codec/bincode_1_3.rs @@ -1,19 +1,48 @@ -use bincode_1_3::{deserialize, serialize, Error}; -use serde::{Deserialize, Serialize}; +//! ⚠️ [`Read the docs before using`](crate::bincode_1_3::Bincode#warning). +//! Annotate your type with `native_model::bincode_1_3::Bincode` to use the +//! bincode 1.3 crate for serializing & deserializing. +/// Used to specify the [bincode](https://crates.io/crates/bincode/1.3.3) `1.3` +/// crate for serialization & deserialization. +/// +/// # Warning +/// +/// `bincode` [does not implement](https://github.com/bincode-org/bincode/issues/548) +/// all [serde](https://crates.io/crates/serde) features. Errors may be +/// encountered when using this with some types. +/// +/// # Basic usage +/// +/// Use the [`with`](crate::native_model) attribute on your type to instruct +/// `native_model` to use `Bincode` for serialization & deserialization. +/// +/// Example: +/// +/// ```rust +/// #[native_model(id = 1, version = 1, with = native_model::bincode_1_3::Bincode)] +/// struct MyStruct { +/// my_string: String +/// } +/// ``` + +#[doc(cfg(all(feature = "serde", feature = "bincode_1_3")))] #[derive(Default)] pub struct Bincode; -impl super::Encode for Bincode { - type Error = Error; - fn encode(obj: &T) -> Result, Error> { - Ok(serialize(obj)?) +#[cfg(all(feature = "serde", feature = "bincode_1_3"))] +impl super::Encode for Bincode { + type Error = bincode_1_3::Error; + /// Serializes a type into bytes using the `bincode` `1.3` crate. + fn encode(obj: &T) -> Result, Self::Error> { + bincode_1_3::serialize(obj) } } -impl Deserialize<'a>> super::Decode for Bincode { - type Error = Error; - fn decode(data: Vec) -> Result { - Ok(deserialize(&data[..])?) +#[cfg(all(feature = "serde", feature = "bincode_1_3"))] +impl serde::Deserialize<'de>> super::Decode for Bincode { + type Error = bincode_1_3::Error; + /// Deserializes a type from bytes using the `bincode` `1.3` crate. + fn decode(data: Vec) -> Result { + bincode_1_3::deserialize(&data[..]) } } diff --git a/libraries/native_model/src/codec/bincode_2_rc.rs b/libraries/native_model/src/codec/bincode_2_rc.rs index 400bf405..80597947 100644 --- a/libraries/native_model/src/codec/bincode_2_rc.rs +++ b/libraries/native_model/src/codec/bincode_2_rc.rs @@ -1,22 +1,53 @@ -use bincode_2_rc::{ - config, - error::{DecodeError, EncodeError}, - serde::{decode_from_slice, encode_to_vec}, -}; -use serde::{Deserialize, Serialize}; +//! ⚠️ [`Read the docs before using`](crate::bincode_2_rc::Bincode#warning). +//! Annotate your type with `native_model::bincode_2_rc::Bincode` to use +//! the bincode 2.0.0-rc.3 crate for serializing & deserializing. +/// Used to specify the [bincode](https://crates.io/crates/bincode/2.0.0-rc.3) +/// `2.0.0-rc.3` crate for serialization & deserialization. +/// +/// # Warning +/// +/// `bincode` [does not implement](https://docs.rs/bincode/2.0.0-rc.3/bincode/serde/index.html#known-issues) +/// all [serde](https://crates.io/crates/serde) features. Errors may be +/// encountered when using this with some types. +/// +/// # Basic usage +/// +/// Use the [`with`](crate::native_model) attribute on your type to instruct +/// `native_model` to use `Bincode` for serialization & deserialization. +/// +/// Example: +/// +/// ```rust +/// #[native_model(id = 1, version = 1, with = native_model::bincode_2_rc::Bincode)] +/// struct MyStruct { +/// my_string: String +/// } +/// ``` + +#[doc(cfg(all(feature = "serde", feature = "bincode_2_rc")))] pub struct Bincode; -impl super::Encode for Bincode { - type Error = EncodeError; - fn encode(obj: &T) -> Result, EncodeError> { - encode_to_vec(obj, config::standard()) +#[cfg(all(feature = "serde", feature = "bincode_2_rc"))] +impl super::Encode for Bincode { + type Error = bincode_2_rc::error::EncodeError; + /// Serializes a type into bytes using the `bincode` `2.0.0-rc.3` crate. + fn encode(obj: &T) -> Result, Self::Error> { + bincode_2_rc::serde::encode_to_vec( + obj, + bincode_2_rc::config::standard() + ) } } -impl Deserialize<'a>> super::Decode for Bincode { - type Error = DecodeError; - fn decode(data: Vec) -> Result { - Ok(decode_from_slice(&data, config::standard())?.0) +#[cfg(all(feature = "serde", feature = "bincode_2_rc"))] +impl serde::Deserialize<'de>> super::Decode for Bincode { + type Error = bincode_2_rc::error::DecodeError; + /// Deserializes a type from bytes using the `bincode` `2.0.0-rc.3` crate. + fn decode(data: Vec) -> Result { + Ok(bincode_2_rc::serde::decode_from_slice( + &data, + bincode_2_rc::config::standard() + )?.0) } } diff --git a/libraries/native_model/src/codec/mod.rs b/libraries/native_model/src/codec/mod.rs index 7d9a73c2..24c47f6d 100644 --- a/libraries/native_model/src/codec/mod.rs +++ b/libraries/native_model/src/codec/mod.rs @@ -1,9 +1,14 @@ -#[cfg(all(feature = "serde", feature = "bincode_1_3"))] +//! Traits and implementations for encoding types into a series of bytes and +//! decoding bytes back into types. + +#[cfg(any(all(feature = "serde", feature = "bincode_1_3"), doc))] pub mod bincode_1_3; -#[cfg(all(feature = "serde", feature = "bincode_2_rc"))] +#[cfg(any(all(feature = "serde", feature = "bincode_2_rc"), doc))] pub mod bincode_2_rc; -#[cfg(all(feature = "serde", feature = "postcard_1_0"))] +#[cfg(any(all(feature = "serde", feature = "postcard_1_0"), doc))] pub mod postcard_1_0; +#[cfg(any(all(feature = "serde", feature = "rmp_serde_1_3"), doc))] +pub mod rmp_serde_1_3; /// Encode trait for your own encoding method. /// diff --git a/libraries/native_model/src/codec/postcard_1_0.rs b/libraries/native_model/src/codec/postcard_1_0.rs index ddea1584..b37c7d0a 100644 --- a/libraries/native_model/src/codec/postcard_1_0.rs +++ b/libraries/native_model/src/codec/postcard_1_0.rs @@ -1,18 +1,46 @@ -use postcard_1_0::{from_bytes, to_allocvec, Error}; -use serde::{Deserialize, Serialize}; +//! ⚠️ [`Read the docs before using`](crate::postcard_1_0::PostCard#warning). +//! Annotate your type with `native_model::postcard_1_0::PostCard` to +//! use the postcard 1.0 crate for serializing & deserializing. +/// Used to specify the [postcard](https://crates.io/crates/postcard/1.0.8) +/// `1.0` crate for serialization & deserialization. +/// +/// # Warning +/// +/// `postcard` does not implement all [serde](https://crates.io/crates/serde) +/// features. Errors may be encountered when using this with some types. +/// +/// # Basic usage +/// +/// Use the [`with`](crate::native_model) attribute on your type to instruct +/// `native_model` to use `PostCard` for serialization & deserialization. +/// +/// Example: +/// +/// ```rust +/// #[native_model(id = 1, version = 1, with = native_model::postcard_1_0::PostCard)] +/// struct MyStruct { +/// my_string: String +/// } +/// ``` + +#[doc(cfg(all(feature = "serde", feature = "postcard_1_0")))] pub struct PostCard; -impl super::Encode for PostCard { - type Error = Error; - fn encode(obj: &T) -> Result, Error> { - Ok(to_allocvec(obj)?) +#[cfg(all(feature = "serde", feature = "postcard_1_0"))] +impl super::Encode for PostCard { + type Error = postcard_1_0::Error; + /// Serializes a type into bytes using the `postcard` `1.0` crate. + fn encode(obj: &T) -> Result, Self::Error> { + postcard_1_0::to_allocvec(obj) } } -impl Deserialize<'a>> super::Decode for PostCard { - type Error = Error; - fn decode(data: Vec) -> Result { - Ok(from_bytes(&data)?) +#[cfg(all(feature = "serde", feature = "postcard_1_0"))] +impl serde::Deserialize<'de>> super::Decode for PostCard { + type Error = postcard_1_0::Error; + /// Deserializes a type from bytes using the `postcard` `1.0` crate. + fn decode(data: Vec) -> Result { + postcard_1_0::from_bytes(&data) } -} +} \ No newline at end of file diff --git a/libraries/native_model/src/codec/rmp_serde_1_3.rs b/libraries/native_model/src/codec/rmp_serde_1_3.rs new file mode 100644 index 00000000..ec5cee77 --- /dev/null +++ b/libraries/native_model/src/codec/rmp_serde_1_3.rs @@ -0,0 +1,41 @@ +//! [`Annotate your type`](crate::native_model) with +//! `native_model::rmp_serde_1_3::RmpSerde` to use the rmp-serde 1.3 crate for +//! serializing & deserializing. + +/// Used to specify the [rmp-serde](https://crates.io/crates/rmp-serde/1.3.0) +/// `1.3` crate for serialization & deserialization. +/// +/// # Basic usage +/// +/// Use the [`with`](crate::native_model) attribute on your type to instruct +/// `native_model` to use `RmpSerde` for serialization & deserialization. +/// +/// Example: +/// +/// ```rust +/// #[native_model(id = 1, version = 1, with = native_model::rmp_serde_1_3::RmpSerde)] +/// struct MyStruct { +/// my_string: String +/// } +/// ``` + +#[doc(cfg(all(feature = "serde", feature = "rmp_serde_1_3")))] +pub struct RmpSerde; + +#[cfg(all(feature = "serde", feature = "rmp_serde_1_3"))] +impl crate::Encode for RmpSerde { + type Error = rmp_serde_1_3::encode::Error; + /// Serializes a type into bytes using the `rmp-serde` `1.3` crate. + fn encode(obj: &T) -> Result, Self::Error> { + rmp_serde_1_3::encode::to_vec(obj) + } +} + +#[cfg(all(feature = "serde", feature = "rmp_serde_1_3"))] +impl serde::Deserialize<'de>> crate::Decode for RmpSerde { + type Error = rmp_serde_1_3::decode::Error; + /// Deserializes a type from bytes using the `rmp-serde` `1.3` crate. + fn decode(data: Vec) -> Result { + rmp_serde_1_3::decode::from_slice(&data) + } +} \ No newline at end of file diff --git a/libraries/native_model/src/lib.rs b/libraries/native_model/src/lib.rs index 8b68b606..0079b626 100644 --- a/libraries/native_model/src/lib.rs +++ b/libraries/native_model/src/lib.rs @@ -14,12 +14,19 @@ //! - The crate is in early development, and performance is expected to improve over time. //! //! See examples in the [README.md](https://github.com/vincent-herlemont/native_model) file. +//! +//! You may also want to check [David Koloski](https://github.com/djkoloski)'s +//! [Rust serialization benchmarks](https://github.com/djkoloski/rust_serialization_benchmark) +//! for help selecting the codec right for your project. + +#![feature(doc_cfg)] #[cfg(any( feature = "serde", feature = "bincode_1_3", feature = "bincode_2_rc", - feature = "postcard_1_0" + feature = "postcard_1_0", + doc ))] mod codec; @@ -27,7 +34,8 @@ mod codec; feature = "serde", feature = "bincode_1_3", feature = "bincode_2_rc", - feature = "postcard_1_0" + feature = "postcard_1_0", + doc ))] pub use codec::*; mod header; @@ -187,7 +195,6 @@ pub trait Model: Sized { where Self: Sized, { - let version = version.clone(); let mut data = self.native_model_encode_downgrade_body(version)?; let data = crate::native_model_encode(&mut data, Self::native_model_id(), version); Ok(data) From dac9ddb4c04a9bb28d95097f44a980a602595fde Mon Sep 17 00:00:00 2001 From: Dylan Bowker Date: Sun, 12 May 2024 08:39:41 -0600 Subject: [PATCH 168/316] chore: some docs clean-up --- libraries/native_model/Cargo.toml | 3 +- .../native_model/src/codec/bincode_1_3.rs | 2 +- .../native_model/src/codec/bincode_2_rc.rs | 2 +- libraries/native_model/src/codec/mod.rs | 14 +++++- .../native_model/src/codec/postcard_1_0.rs | 2 +- libraries/native_model/src/lib.rs | 46 +++++++++---------- libraries/native_model/src/wrapper.rs | 2 +- 7 files changed, 40 insertions(+), 31 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index b91fa456..d20878e1 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -32,7 +32,8 @@ criterion = { version = "0.5.1" } skeptic = "0.13.7" [features] -default = ["serde", "bincode_1_3"] +# default = ["serde", "bincode_1_3"] +default = ["serde", "bincode_1_3", "bincode_2_rc", "postcard_1_0", "rmp_serde_1_3"] [[bench]] name = "overhead" diff --git a/libraries/native_model/src/codec/bincode_1_3.rs b/libraries/native_model/src/codec/bincode_1_3.rs index dc598e8f..65ba1379 100644 --- a/libraries/native_model/src/codec/bincode_1_3.rs +++ b/libraries/native_model/src/codec/bincode_1_3.rs @@ -1,4 +1,4 @@ -//! ⚠️ [`Read the docs before using`](crate::bincode_1_3::Bincode#warning). +//! ⚠️ [`Read the docs before using`](crate::bincode_1_3::Bincode#warning) - //! Annotate your type with `native_model::bincode_1_3::Bincode` to use the //! bincode 1.3 crate for serializing & deserializing. diff --git a/libraries/native_model/src/codec/bincode_2_rc.rs b/libraries/native_model/src/codec/bincode_2_rc.rs index 80597947..a49fde6e 100644 --- a/libraries/native_model/src/codec/bincode_2_rc.rs +++ b/libraries/native_model/src/codec/bincode_2_rc.rs @@ -1,4 +1,4 @@ -//! ⚠️ [`Read the docs before using`](crate::bincode_2_rc::Bincode#warning). +//! ⚠️ [`Read the docs before using`](crate::bincode_2_rc::Bincode#warning) - //! Annotate your type with `native_model::bincode_2_rc::Bincode` to use //! the bincode 2.0.0-rc.3 crate for serializing & deserializing. diff --git a/libraries/native_model/src/codec/mod.rs b/libraries/native_model/src/codec/mod.rs index 24c47f6d..4aa57086 100644 --- a/libraries/native_model/src/codec/mod.rs +++ b/libraries/native_model/src/codec/mod.rs @@ -14,7 +14,7 @@ pub mod rmp_serde_1_3; /// /// Example: /// ```rust -/// use bincode_2_rc::{error::EncodeError,serde::encode_to_vec, config::standard}; +/// use bincode_2_rc::{error::EncodeError,serde::encode_to_vec, config::standard}; /// use serde::Serialize; /// pub struct Bincode; /// @@ -27,6 +27,12 @@ pub mod rmp_serde_1_3; /// ``` pub trait Encode { type Error; + /// Encodes a `T` type into a series of bytes. + /// + /// # Errors + /// + /// The errors returned from this function depend on the trait implementor + /// (the serializer), i.e. `bincode_2_rc`. fn encode(obj: &T) -> Result, Self::Error>; } @@ -46,5 +52,11 @@ pub trait Encode { /// } pub trait Decode { type Error; + /// Decodes a series of bytes back into a `T` type. + /// + /// # Errors + /// + /// The errors returned from this function depend on the trait implementor + /// (the deserializer), i.e. `bincode_2_rc`. fn decode(data: Vec) -> Result; } diff --git a/libraries/native_model/src/codec/postcard_1_0.rs b/libraries/native_model/src/codec/postcard_1_0.rs index b37c7d0a..0cc9789d 100644 --- a/libraries/native_model/src/codec/postcard_1_0.rs +++ b/libraries/native_model/src/codec/postcard_1_0.rs @@ -1,4 +1,4 @@ -//! ⚠️ [`Read the docs before using`](crate::postcard_1_0::PostCard#warning). +//! ⚠️ [`Read the docs before using`](crate::postcard_1_0::PostCard#warning) - //! Annotate your type with `native_model::postcard_1_0::PostCard` to //! use the postcard 1.0 crate for serializing & deserializing. diff --git a/libraries/native_model/src/lib.rs b/libraries/native_model/src/lib.rs index 0079b626..a68032c7 100644 --- a/libraries/native_model/src/lib.rs +++ b/libraries/native_model/src/lib.rs @@ -17,7 +17,8 @@ //! //! You may also want to check [David Koloski](https://github.com/djkoloski)'s //! [Rust serialization benchmarks](https://github.com/djkoloski/rust_serialization_benchmark) -//! for help selecting the codec right for your project. +//! for help selecting the codec (i.e. `bincode_1_3`, `rmp_serde_1_3`, etc.) +//! that's best for your project. #![feature(doc_cfg)] @@ -26,6 +27,7 @@ feature = "bincode_1_3", feature = "bincode_2_rc", feature = "postcard_1_0", + feature = "rmp_serde_1_3", doc ))] mod codec; @@ -35,6 +37,7 @@ mod codec; feature = "bincode_1_3", feature = "bincode_2_rc", feature = "postcard_1_0", + feature = "rmp_serde_1_3", doc ))] pub use codec::*; @@ -118,6 +121,11 @@ pub struct DowngradeError { /// See examples: /// - [README.md](https://github.com/vincent-herlemont/native_model) file. /// - other [examples](https://github.com/vincent-herlemont/native_model/tree/master/tests/example) +/// +/// # Errors +/// +/// The errors returned from this function depend on the [`Encode`] trait +/// implementor (the serializer), i.e. `bincode_2_rc`. pub fn encode(model: &T) -> Result> { T::native_model_encode(model) } @@ -134,6 +142,11 @@ pub fn encode_downgrade(model: T, version: u32) -> Result(data: Vec) -> Result<(T, u32)> { T::native_model_decode(data) } @@ -145,18 +158,11 @@ pub trait Model: Sized { fn native_model_version_str() -> &'static str; // --------------- Decode --------------- - fn native_model_decode_body(data: Vec, id: u32) -> DecodeResult - where - Self: Sized; + fn native_model_decode_body(data: Vec, id: u32) -> DecodeResult; - fn native_model_decode_upgrade_body(data: Vec, id: u32, version: u32) -> Result - where - Self: Sized; + fn native_model_decode_upgrade_body(data: Vec, id: u32, version: u32) -> Result; - fn native_model_decode(data: Vec) -> Result<(Self, u32)> - where - Self: Sized, - { + fn native_model_decode(data: Vec) -> Result<(Self, u32)> { let native_model = crate::Wrapper::deserialize(&data[..]).unwrap(); let source_id = native_model.get_id(); let source_version = native_model.get_version(); @@ -170,18 +176,11 @@ pub trait Model: Sized { // --------------- Encode --------------- - fn native_model_encode_body(&self) -> EncodeResult> - where - Self: Sized; + fn native_model_encode_body(&self) -> EncodeResult>; - fn native_model_encode_downgrade_body(self, version: u32) -> Result> - where - Self: Sized; + fn native_model_encode_downgrade_body(self, version: u32) -> Result>; - fn native_model_encode(&self) -> Result> - where - Self: Sized, - { + fn native_model_encode(&self) -> Result> { let mut data = self.native_model_encode_body()?; let data = crate::native_model_encode( &mut data, @@ -191,10 +190,7 @@ pub trait Model: Sized { Ok(data) } - fn native_model_encode_downgrade(self, version: u32) -> Result> - where - Self: Sized, - { + fn native_model_encode_downgrade(self, version: u32) -> Result> { let mut data = self.native_model_encode_downgrade_body(version)?; let data = crate::native_model_encode(&mut data, Self::native_model_id(), version); Ok(data) diff --git a/libraries/native_model/src/wrapper.rs b/libraries/native_model/src/wrapper.rs index c60c036e..8d07ac68 100644 --- a/libraries/native_model/src/wrapper.rs +++ b/libraries/native_model/src/wrapper.rs @@ -17,7 +17,7 @@ impl Wrapper { Some(native_model) } - pub fn value(&self) -> &T { + pub const fn value(&self) -> &T { &self.value } From 95e68f235e8cac86cbceccc946a0252f5d130bef Mon Sep 17 00:00:00 2001 From: Dylan Bowker Date: Sun, 12 May 2024 08:42:09 -0600 Subject: [PATCH 169/316] chore: re-instated original default features --- libraries/native_model/Cargo.toml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index d20878e1..b91fa456 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -32,8 +32,7 @@ criterion = { version = "0.5.1" } skeptic = "0.13.7" [features] -# default = ["serde", "bincode_1_3"] -default = ["serde", "bincode_1_3", "bincode_2_rc", "postcard_1_0", "rmp_serde_1_3"] +default = ["serde", "bincode_1_3"] [[bench]] name = "overhead" From 2196af7a828908cba59b462e8cc79428c56005e6 Mon Sep 17 00:00:00 2001 From: Dylan Bowker Date: Sun, 12 May 2024 14:12:05 -0600 Subject: [PATCH 170/316] fix: removed `#![feature(doc_cfg)]` nightly feature --- .../native_model/src/codec/bincode_1_3.rs | 11 ++-- .../native_model/src/codec/bincode_2_rc.rs | 15 +++-- .../native_model/src/codec/postcard_1_0.rs | 15 +++-- .../native_model/src/codec/rmp_serde_1_3.rs | 14 +++-- libraries/native_model/src/lib.rs | 58 ++++++++++++++++++- 5 files changed, 90 insertions(+), 23 deletions(-) diff --git a/libraries/native_model/src/codec/bincode_1_3.rs b/libraries/native_model/src/codec/bincode_1_3.rs index 65ba1379..b3d748a8 100644 --- a/libraries/native_model/src/codec/bincode_1_3.rs +++ b/libraries/native_model/src/codec/bincode_1_3.rs @@ -1,6 +1,6 @@ //! ⚠️ [`Read the docs before using`](crate::bincode_1_3::Bincode#warning) - -//! Annotate your type with `native_model::bincode_1_3::Bincode` to use the -//! bincode 1.3 crate for serializing & deserializing. +//! Annotate your type with `native_model::bincode_1_3::Bincode` to have +//! `native_db` use the bincode 1.3 crate for serializing & deserializing. /// Used to specify the [bincode](https://crates.io/crates/bincode/1.3.3) `1.3` /// crate for serialization & deserialization. @@ -11,21 +11,24 @@ /// all [serde](https://crates.io/crates/serde) features. Errors may be /// encountered when using this with some types. /// +/// If you are encountering errors when using this codec on your types, try +/// using the `rmp_serde_1_3` codec instead. +/// /// # Basic usage /// /// Use the [`with`](crate::native_model) attribute on your type to instruct /// `native_model` to use `Bincode` for serialization & deserialization. /// -/// Example: +/// Example usage: /// /// ```rust +/// #[derive(Clone, Default, serde::Deserialize, serde::Serialize)] /// #[native_model(id = 1, version = 1, with = native_model::bincode_1_3::Bincode)] /// struct MyStruct { /// my_string: String /// } /// ``` -#[doc(cfg(all(feature = "serde", feature = "bincode_1_3")))] #[derive(Default)] pub struct Bincode; diff --git a/libraries/native_model/src/codec/bincode_2_rc.rs b/libraries/native_model/src/codec/bincode_2_rc.rs index a49fde6e..5ad31a83 100644 --- a/libraries/native_model/src/codec/bincode_2_rc.rs +++ b/libraries/native_model/src/codec/bincode_2_rc.rs @@ -1,6 +1,7 @@ //! ⚠️ [`Read the docs before using`](crate::bincode_2_rc::Bincode#warning) - -//! Annotate your type with `native_model::bincode_2_rc::Bincode` to use -//! the bincode 2.0.0-rc.3 crate for serializing & deserializing. +//! Enable the `bincode_2_rc` feature and annotate your type with +//! `native_model::bincode_2_rc::Bincode` to have `native_db` use the bincode +//! 2.0.0-rc.3 crate for serializing & deserializing. /// Used to specify the [bincode](https://crates.io/crates/bincode/2.0.0-rc.3) /// `2.0.0-rc.3` crate for serialization & deserialization. @@ -11,21 +12,25 @@ /// all [serde](https://crates.io/crates/serde) features. Errors may be /// encountered when using this with some types. /// +/// If you are encountering errors when using this codec on your types, try +/// using the `rmp_serde_1_3` codec instead. +/// /// # Basic usage /// -/// Use the [`with`](crate::native_model) attribute on your type to instruct +/// After enabling the `bincode_2_rc` feature in your `Cargo.toml`, use the +/// [`with`](crate::native_model) attribute on your type to instruct /// `native_model` to use `Bincode` for serialization & deserialization. /// -/// Example: +/// Example usage: /// /// ```rust +/// #[derive(Clone, Default, serde::Deserialize, serde::Serialize)] /// #[native_model(id = 1, version = 1, with = native_model::bincode_2_rc::Bincode)] /// struct MyStruct { /// my_string: String /// } /// ``` -#[doc(cfg(all(feature = "serde", feature = "bincode_2_rc")))] pub struct Bincode; #[cfg(all(feature = "serde", feature = "bincode_2_rc"))] diff --git a/libraries/native_model/src/codec/postcard_1_0.rs b/libraries/native_model/src/codec/postcard_1_0.rs index 0cc9789d..0b3c7f35 100644 --- a/libraries/native_model/src/codec/postcard_1_0.rs +++ b/libraries/native_model/src/codec/postcard_1_0.rs @@ -1,6 +1,7 @@ //! ⚠️ [`Read the docs before using`](crate::postcard_1_0::PostCard#warning) - -//! Annotate your type with `native_model::postcard_1_0::PostCard` to -//! use the postcard 1.0 crate for serializing & deserializing. +//! Enable the `postcard_1_0` feature and annotate your type with +//! `native_model::postcard_1_0::PostCard` to have `native_db` use the postcard +//! 1.0 crate for serializing & deserializing. /// Used to specify the [postcard](https://crates.io/crates/postcard/1.0.8) /// `1.0` crate for serialization & deserialization. @@ -10,21 +11,25 @@ /// `postcard` does not implement all [serde](https://crates.io/crates/serde) /// features. Errors may be encountered when using this with some types. /// +/// If you are encountering errors when using this codec on your types, try +/// using the `rmp_serde_1_3` codec instead. +/// /// # Basic usage /// -/// Use the [`with`](crate::native_model) attribute on your type to instruct +/// After enabling the `postcard_1_0` feature in your `Cargo.toml`, use the +/// [`with`](crate::native_model) attribute on your type to instruct /// `native_model` to use `PostCard` for serialization & deserialization. /// -/// Example: +/// Example usage: /// /// ```rust +/// #[derive(Clone, Default, serde::Deserialize, serde::Serialize)] /// #[native_model(id = 1, version = 1, with = native_model::postcard_1_0::PostCard)] /// struct MyStruct { /// my_string: String /// } /// ``` -#[doc(cfg(all(feature = "serde", feature = "postcard_1_0")))] pub struct PostCard; #[cfg(all(feature = "serde", feature = "postcard_1_0"))] diff --git a/libraries/native_model/src/codec/rmp_serde_1_3.rs b/libraries/native_model/src/codec/rmp_serde_1_3.rs index ec5cee77..da3a2bea 100644 --- a/libraries/native_model/src/codec/rmp_serde_1_3.rs +++ b/libraries/native_model/src/codec/rmp_serde_1_3.rs @@ -1,25 +1,27 @@ -//! [`Annotate your type`](crate::native_model) with -//! `native_model::rmp_serde_1_3::RmpSerde` to use the rmp-serde 1.3 crate for -//! serializing & deserializing. +//! Enable the `rmp_serde_1_3` feature and +//! [`annotate your type`](crate::native_model) with +//! `native_model::rmp_serde_1_3::RmpSerde` to have `native_db` use the +//! rmp-serde 1.3 crate for serializing & deserializing. /// Used to specify the [rmp-serde](https://crates.io/crates/rmp-serde/1.3.0) /// `1.3` crate for serialization & deserialization. /// /// # Basic usage /// -/// Use the [`with`](crate::native_model) attribute on your type to instruct +/// After enabling the `rmp_serde_1_3` feature in your `Cargo.toml`, use the +/// [`with`](crate::native_model) attribute on your type to instruct /// `native_model` to use `RmpSerde` for serialization & deserialization. /// -/// Example: +/// Example usage: /// /// ```rust +/// #[derive(Clone, Default, serde::Deserialize, serde::Serialize)] /// #[native_model(id = 1, version = 1, with = native_model::rmp_serde_1_3::RmpSerde)] /// struct MyStruct { /// my_string: String /// } /// ``` -#[doc(cfg(all(feature = "serde", feature = "rmp_serde_1_3")))] pub struct RmpSerde; #[cfg(all(feature = "serde", feature = "rmp_serde_1_3"))] diff --git a/libraries/native_model/src/lib.rs b/libraries/native_model/src/lib.rs index a68032c7..30f7d950 100644 --- a/libraries/native_model/src/lib.rs +++ b/libraries/native_model/src/lib.rs @@ -15,13 +15,65 @@ //! //! See examples in the [README.md](https://github.com/vincent-herlemont/native_model) file. //! -//! You may also want to check [David Koloski](https://github.com/djkoloski)'s +//! # Codecs +//! +//! `native_model` comes with several optional built-in serializer features +//! available: +//! +//! - [bincode](https://crates.io/crates/bincode/1.3.3) `1.3` · +//! [`Annotate your type`](crate::native_model) with +//! `native_model::bincode_1_3::Bincode` to have `native_db` use this default +//! codec for serializing & deserializing. **Warning: This codec may not work +//! with all serde-derived types.** +//! +//! - [bincode](https://crates.io/crates/bincode/2.0.0-rc.3) `2.0.0-rc.3` · +//! Enable the `bincode_2_rc` feature and use the +//! `native_model::bincode_2_rc::Bincode` attribute to have `native_db` use this +//! crate. **Warning: This codec may not work with all serde-derived types.** +//! +//! - [postcard](https://crates.io/crates/postcard/1.0.8) `1.0` · +//! Enable the `postcard_1_0` feature and use the +//! `native_model::postcard_1_0::PostCard` attribute. **Warning: This codec may +//! not work with all serde-derived types.** +//! +//! - [rmp-serde](https://crates.io/crates/rmp-serde/1.3.0) `1.3` · +//! Enable the `rmp_serde_1_3` feature and use the +//! `native_model::rmp_serde_1_3::RmpSerde` attribute. +//! +//! ###### Codec example: +//! +//! As example, to use `rmp-serde`: +//! +//! 1. In your project's `Cargo.toml` file, enable the `rmp_serde_1_3` feature +//! for the `native_model` dependency. Check +//! [crates.io](https://crates.io/crates/native_model) for the most recent +//! version number. +//! +//! ```toml +//! [dependencies] +//! serde = { version = "1.0", features = [ "derive" ] } +//! native_model = { version = "0.4", features = [ "rmp_serde_1_3" ] } +//! ``` +//! +//! 2. Assign the `rmp_serde_1_3` codec to your type using the `with` attribute: +//! +//! ```rust +//! #[derive(Clone, Default, serde::Deserialize, serde::Serialize)] +//! #[native_model(id = 1, version = 1, with = native_model::rmp_serde_1_3::RmpSerde)] +//! struct MyStruct { +//! my_string: String, +//! // etc. +//! } +//! ``` +//! +//! ###### Additional reading +//! +//! You may also want to check out +//! [David Koloski](https://github.com/djkoloski)'s //! [Rust serialization benchmarks](https://github.com/djkoloski/rust_serialization_benchmark) //! for help selecting the codec (i.e. `bincode_1_3`, `rmp_serde_1_3`, etc.) //! that's best for your project. -#![feature(doc_cfg)] - #[cfg(any( feature = "serde", feature = "bincode_1_3", From ac150841b0cc5d4f7d0166a670b1142365b55d60 Mon Sep 17 00:00:00 2001 From: Dylan Bowker Date: Sun, 12 May 2024 14:16:07 -0600 Subject: [PATCH 171/316] docs: update to docs on codecs --- libraries/native_model/src/lib.rs | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/libraries/native_model/src/lib.rs b/libraries/native_model/src/lib.rs index 30f7d950..706872c4 100644 --- a/libraries/native_model/src/lib.rs +++ b/libraries/native_model/src/lib.rs @@ -20,11 +20,9 @@ //! `native_model` comes with several optional built-in serializer features //! available: //! -//! - [bincode](https://crates.io/crates/bincode/1.3.3) `1.3` · -//! [`Annotate your type`](crate::native_model) with -//! `native_model::bincode_1_3::Bincode` to have `native_db` use this default -//! codec for serializing & deserializing. **Warning: This codec may not work -//! with all serde-derived types.** +//! - [bincode](https://crates.io/crates/bincode/1.3.3) `1.3` · This is the +//! default codec. **Warning: This codec may not work with all serde-derived +//! types.** //! //! - [bincode](https://crates.io/crates/bincode/2.0.0-rc.3) `2.0.0-rc.3` · //! Enable the `bincode_2_rc` feature and use the @@ -45,9 +43,9 @@ //! As example, to use `rmp-serde`: //! //! 1. In your project's `Cargo.toml` file, enable the `rmp_serde_1_3` feature -//! for the `native_model` dependency. Check -//! [crates.io](https://crates.io/crates/native_model) for the most recent -//! version number. +//! for the `native_model` dependency. Be sure to check `crates.io` for the most +//! recent [`native_model`](https://crates.io/crates/native_model) version +//! number. //! //! ```toml //! [dependencies] From b85d4ce554b8e9195f412cbfafc06f576a534cf4 Mon Sep 17 00:00:00 2001 From: Dylan Bowker Date: Sun, 12 May 2024 14:19:52 -0600 Subject: [PATCH 172/316] docs: update to docs on codecs --- libraries/native_model/src/lib.rs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/libraries/native_model/src/lib.rs b/libraries/native_model/src/lib.rs index 706872c4..1bfd8d7c 100644 --- a/libraries/native_model/src/lib.rs +++ b/libraries/native_model/src/lib.rs @@ -20,21 +20,22 @@ //! `native_model` comes with several optional built-in serializer features //! available: //! -//! - [bincode](https://crates.io/crates/bincode/1.3.3) `1.3` · This is the +//! - [bincode 1.3](https://crates.io/crates/bincode/1.3.3) · This is the //! default codec. **Warning: This codec may not work with all serde-derived //! types.** //! -//! - [bincode](https://crates.io/crates/bincode/2.0.0-rc.3) `2.0.0-rc.3` · +//! - [bincode 2.0.0-rc.3](https://crates.io/crates/bincode/2.0.0-rc.3) · //! Enable the `bincode_2_rc` feature and use the //! `native_model::bincode_2_rc::Bincode` attribute to have `native_db` use this -//! crate. **Warning: This codec may not work with all serde-derived types.** +//! crate for serializing & deserializing. **Warning: This codec may not work +//! with all serde-derived types.** //! -//! - [postcard](https://crates.io/crates/postcard/1.0.8) `1.0` · +//! - [postcard 1.0](https://crates.io/crates/postcard/1.0.8) · //! Enable the `postcard_1_0` feature and use the //! `native_model::postcard_1_0::PostCard` attribute. **Warning: This codec may //! not work with all serde-derived types.** //! -//! - [rmp-serde](https://crates.io/crates/rmp-serde/1.3.0) `1.3` · +//! - [rmp-serde 1.3](https://crates.io/crates/rmp-serde/1.3.0) · //! Enable the `rmp_serde_1_3` feature and use the //! `native_model::rmp_serde_1_3::RmpSerde` attribute. //! @@ -53,7 +54,8 @@ //! native_model = { version = "0.4", features = [ "rmp_serde_1_3" ] } //! ``` //! -//! 2. Assign the `rmp_serde_1_3` codec to your type using the `with` attribute: +//! 2. Assign the `rmp_serde_1_3` codec to your `struct` using the `with` +//! attribute: //! //! ```rust //! #[derive(Clone, Default, serde::Deserialize, serde::Serialize)] From a21b7d0aa030bf719d146a0561fec1295b0f66fa Mon Sep 17 00:00:00 2001 From: Dylan Bowker Date: Sun, 12 May 2024 14:32:32 -0600 Subject: [PATCH 173/316] docs: moved notes on codecs to `README.md` --- libraries/native_model/README.md | 47 ++++++++++++++++++++++++ libraries/native_model/src/lib.rs | 59 ------------------------------- 2 files changed, 47 insertions(+), 59 deletions(-) diff --git a/libraries/native_model/README.md b/libraries/native_model/README.md index d102d5fe..9699c9e5 100644 --- a/libraries/native_model/README.md +++ b/libraries/native_model/README.md @@ -134,6 +134,53 @@ struct Cord { // Implement the conversion between versions From for DotV3 and From for DotV2. ``` +## Codecs + +`native_model` comes with several optional built-in serializer features available: + +- [bincode 1.3](https://crates.io/crates/bincode/1.3.3) + - This is the default codec. + - **Warning: This codec may not work with all serde-derived types.** + +- [bincode 2.0.0-rc.3](https://crates.io/crates/bincode/2.0.0-rc.3) + - Enable the `bincode_2_rc` feature and use the `native_model::bincode_2_rc::Bincode` attribute to have `native_db` use this crate for serializing & deserializing. + - **Warning: This codec may not work with all serde-derived types.** + +- [postcard 1.0](https://crates.io/crates/postcard/1.0.8) + - Enable the `postcard_1_0` feature and use the `native_model::postcard_1_0::PostCard` attribute. + - **Warning: This codec may not work with all serde-derived types.** + +- [rmp-serde 1.3](https://crates.io/crates/rmp-serde/1.3.0) + - Enable the `rmp_serde_1_3` feature and use the `native_model::rmp_serde_1_3::RmpSerde` attribute. + +###### Codec example: + +As example, to use `rmp-serde`: + +1. In your project's `Cargo.toml` file, enable the `rmp_serde_1_3` feature for the `native_model` dependency. + - Be sure to check `crates.io` for the most recent [`native_model`](https://crates.io/crates/native_model) version number. + +```toml +[dependencies] +serde = { version = "1.0", features = [ "derive" ] } +native_model = { version = "0.4", features = [ "rmp_serde_1_3" ] } +``` + +2. Assign the `rmp_serde_1_3` codec to your `struct` using the `with` attribute: + +```rust +#[derive(Clone, Default, serde::Deserialize, serde::Serialize)] +#[native_model(id = 1, version = 1, with = native_model::rmp_serde_1_3::RmpSerde)] +struct MyStruct { + my_string: String, + // etc. +} +``` + +###### Additional reading + +You may also want to check out [David Koloski](https://github.com/djkoloski)'s [Rust serialization benchmarks](https://github.com/djkoloski/rust_serialization_benchmark) for help selecting the codec (i.e. `bincode_1_3`, `rmp_serde_1_3`, etc.) that's best for your project. + ## Status Early development. Not ready for production. diff --git a/libraries/native_model/src/lib.rs b/libraries/native_model/src/lib.rs index 1bfd8d7c..d4fd5be6 100644 --- a/libraries/native_model/src/lib.rs +++ b/libraries/native_model/src/lib.rs @@ -14,65 +14,6 @@ //! - The crate is in early development, and performance is expected to improve over time. //! //! See examples in the [README.md](https://github.com/vincent-herlemont/native_model) file. -//! -//! # Codecs -//! -//! `native_model` comes with several optional built-in serializer features -//! available: -//! -//! - [bincode 1.3](https://crates.io/crates/bincode/1.3.3) · This is the -//! default codec. **Warning: This codec may not work with all serde-derived -//! types.** -//! -//! - [bincode 2.0.0-rc.3](https://crates.io/crates/bincode/2.0.0-rc.3) · -//! Enable the `bincode_2_rc` feature and use the -//! `native_model::bincode_2_rc::Bincode` attribute to have `native_db` use this -//! crate for serializing & deserializing. **Warning: This codec may not work -//! with all serde-derived types.** -//! -//! - [postcard 1.0](https://crates.io/crates/postcard/1.0.8) · -//! Enable the `postcard_1_0` feature and use the -//! `native_model::postcard_1_0::PostCard` attribute. **Warning: This codec may -//! not work with all serde-derived types.** -//! -//! - [rmp-serde 1.3](https://crates.io/crates/rmp-serde/1.3.0) · -//! Enable the `rmp_serde_1_3` feature and use the -//! `native_model::rmp_serde_1_3::RmpSerde` attribute. -//! -//! ###### Codec example: -//! -//! As example, to use `rmp-serde`: -//! -//! 1. In your project's `Cargo.toml` file, enable the `rmp_serde_1_3` feature -//! for the `native_model` dependency. Be sure to check `crates.io` for the most -//! recent [`native_model`](https://crates.io/crates/native_model) version -//! number. -//! -//! ```toml -//! [dependencies] -//! serde = { version = "1.0", features = [ "derive" ] } -//! native_model = { version = "0.4", features = [ "rmp_serde_1_3" ] } -//! ``` -//! -//! 2. Assign the `rmp_serde_1_3` codec to your `struct` using the `with` -//! attribute: -//! -//! ```rust -//! #[derive(Clone, Default, serde::Deserialize, serde::Serialize)] -//! #[native_model(id = 1, version = 1, with = native_model::rmp_serde_1_3::RmpSerde)] -//! struct MyStruct { -//! my_string: String, -//! // etc. -//! } -//! ``` -//! -//! ###### Additional reading -//! -//! You may also want to check out -//! [David Koloski](https://github.com/djkoloski)'s -//! [Rust serialization benchmarks](https://github.com/djkoloski/rust_serialization_benchmark) -//! for help selecting the codec (i.e. `bincode_1_3`, `rmp_serde_1_3`, etc.) -//! that's best for your project. #[cfg(any( feature = "serde", From a653f3f8265f850e8b4b0771e213ee93b1d79cb8 Mon Sep 17 00:00:00 2001 From: Dylan Bowker Date: Sun, 12 May 2024 14:43:51 -0600 Subject: [PATCH 174/316] docs: simplified docs on codecs --- libraries/native_model/src/codec/bincode_1_3.rs | 10 +++++----- libraries/native_model/src/codec/bincode_2_rc.rs | 11 ++++++----- libraries/native_model/src/codec/postcard_1_0.rs | 9 ++++----- libraries/native_model/src/codec/rmp_serde_1_3.rs | 9 +++++---- 4 files changed, 20 insertions(+), 19 deletions(-) diff --git a/libraries/native_model/src/codec/bincode_1_3.rs b/libraries/native_model/src/codec/bincode_1_3.rs index b3d748a8..48c3f4c7 100644 --- a/libraries/native_model/src/codec/bincode_1_3.rs +++ b/libraries/native_model/src/codec/bincode_1_3.rs @@ -1,9 +1,9 @@ -//! ⚠️ [`Read the docs before using`](crate::bincode_1_3::Bincode#warning) - -//! Annotate your type with `native_model::bincode_1_3::Bincode` to have -//! `native_db` use the bincode 1.3 crate for serializing & deserializing. +//! [bincode 1.3](https://crates.io/crates/bincode/1.3.3) · +//! The default codec for serializing & deserializing. -/// Used to specify the [bincode](https://crates.io/crates/bincode/1.3.3) `1.3` -/// crate for serialization & deserialization. +/// Used to specify that the +/// [bincode 1.3](https://crates.io/crates/bincode/1.3.3) crate is to be used +/// for serialization & deserialization. /// /// # Warning /// diff --git a/libraries/native_model/src/codec/bincode_2_rc.rs b/libraries/native_model/src/codec/bincode_2_rc.rs index 5ad31a83..78d01d71 100644 --- a/libraries/native_model/src/codec/bincode_2_rc.rs +++ b/libraries/native_model/src/codec/bincode_2_rc.rs @@ -1,10 +1,11 @@ -//! ⚠️ [`Read the docs before using`](crate::bincode_2_rc::Bincode#warning) - +//! [bincode 2.0.0-rc.3](https://crates.io/crates/bincode/2.0.0-rc.3) · //! Enable the `bincode_2_rc` feature and annotate your type with -//! `native_model::bincode_2_rc::Bincode` to have `native_db` use the bincode -//! 2.0.0-rc.3 crate for serializing & deserializing. +//! `native_model::bincode_2_rc::Bincode` to have `native_db` use this crate for +//! serializing & deserializing. -/// Used to specify the [bincode](https://crates.io/crates/bincode/2.0.0-rc.3) -/// `2.0.0-rc.3` crate for serialization & deserialization. +/// Used to specify the +/// [bincode 2.0.0-rc.3](https://crates.io/crates/bincode/2.0.0-rc.3) +/// crate for serialization & deserialization. /// /// # Warning /// diff --git a/libraries/native_model/src/codec/postcard_1_0.rs b/libraries/native_model/src/codec/postcard_1_0.rs index 0b3c7f35..ae0a8a12 100644 --- a/libraries/native_model/src/codec/postcard_1_0.rs +++ b/libraries/native_model/src/codec/postcard_1_0.rs @@ -1,10 +1,9 @@ -//! ⚠️ [`Read the docs before using`](crate::postcard_1_0::PostCard#warning) - +//! [postcard 1.0](https://crates.io/crates/postcard/1.0.8) · //! Enable the `postcard_1_0` feature and annotate your type with -//! `native_model::postcard_1_0::PostCard` to have `native_db` use the postcard -//! 1.0 crate for serializing & deserializing. +//! `native_model::postcard_1_0::PostCard` to have `native_db` use this crate. -/// Used to specify the [postcard](https://crates.io/crates/postcard/1.0.8) -/// `1.0` crate for serialization & deserialization. +/// Used to specify the [postcard 1.0](https://crates.io/crates/postcard/1.0.8) +/// crate for serialization & deserialization. /// /// # Warning /// diff --git a/libraries/native_model/src/codec/rmp_serde_1_3.rs b/libraries/native_model/src/codec/rmp_serde_1_3.rs index da3a2bea..26cd7f82 100644 --- a/libraries/native_model/src/codec/rmp_serde_1_3.rs +++ b/libraries/native_model/src/codec/rmp_serde_1_3.rs @@ -1,10 +1,11 @@ +//! [rmp-serde 1.3](https://crates.io/crates/rmp-serde/1.3.0) · //! Enable the `rmp_serde_1_3` feature and //! [`annotate your type`](crate::native_model) with -//! `native_model::rmp_serde_1_3::RmpSerde` to have `native_db` use the -//! rmp-serde 1.3 crate for serializing & deserializing. +//! `native_model::rmp_serde_1_3::RmpSerde` to have `native_db` use this crate. -/// Used to specify the [rmp-serde](https://crates.io/crates/rmp-serde/1.3.0) -/// `1.3` crate for serialization & deserialization. +/// Used to specify the +/// [rmp-serde 1.3](https://crates.io/crates/rmp-serde/1.3.0) +/// crate for serialization & deserialization. /// /// # Basic usage /// From 028ae2d0c8f5609bc6aa74f74869eeb13cc9920c Mon Sep 17 00:00:00 2001 From: Dylan Bowker Date: Sun, 12 May 2024 15:28:30 -0600 Subject: [PATCH 175/316] chore: added rust msrv to `Cargo.toml` --- libraries/native_model/Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index b91fa456..087dfc7d 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -10,6 +10,7 @@ readme = "README.md" build = "build.rs" keywords = ["serialization", "interoperability", "data-consistency", "flexibility", "performance"] categories = ["data-structures", "encoding", "rust-patterns"] +rust-version = "1.73.0" [workspace] members = ["native_model_macro"] From d932be10aca725c733e1867457af20f9d95dde51 Mon Sep 17 00:00:00 2001 From: Luca Barbato Date: Tue, 12 Nov 2024 14:11:23 +0100 Subject: [PATCH 176/316] fix: Unbreak the doctests --- libraries/native_model/justfile | 4 ++-- libraries/native_model/src/codec/bincode_1_3.rs | 1 + libraries/native_model/src/codec/bincode_2_rc.rs | 11 +++-------- libraries/native_model/src/codec/postcard_1_0.rs | 3 ++- libraries/native_model/src/codec/rmp_serde_1_3.rs | 3 ++- 5 files changed, 10 insertions(+), 12 deletions(-) diff --git a/libraries/native_model/justfile b/libraries/native_model/justfile index 44203d59..c30e9597 100644 --- a/libraries/native_model/justfile +++ b/libraries/native_model/justfile @@ -52,11 +52,11 @@ test_postcard_1_0: @just _tests_crate '--features postcard_1_0' test_docs: - cargo test --doc --features bincode_2_rc + cargo test --doc --all-features test_all: test_docs test_no_default test_default test_bincode_1_3 test_bincode_2_rc test_postcard_1_0 bench_overhead: cargo bench --bench overhead -bench_all: bench_overhead \ No newline at end of file +bench_all: bench_overhead diff --git a/libraries/native_model/src/codec/bincode_1_3.rs b/libraries/native_model/src/codec/bincode_1_3.rs index 48c3f4c7..5010422d 100644 --- a/libraries/native_model/src/codec/bincode_1_3.rs +++ b/libraries/native_model/src/codec/bincode_1_3.rs @@ -22,6 +22,7 @@ /// Example usage: /// /// ```rust +/// # use native_model::*; /// #[derive(Clone, Default, serde::Deserialize, serde::Serialize)] /// #[native_model(id = 1, version = 1, with = native_model::bincode_1_3::Bincode)] /// struct MyStruct { diff --git a/libraries/native_model/src/codec/bincode_2_rc.rs b/libraries/native_model/src/codec/bincode_2_rc.rs index 78d01d71..8cdb1256 100644 --- a/libraries/native_model/src/codec/bincode_2_rc.rs +++ b/libraries/native_model/src/codec/bincode_2_rc.rs @@ -25,6 +25,7 @@ /// Example usage: /// /// ```rust +/// # use native_model::*; /// #[derive(Clone, Default, serde::Deserialize, serde::Serialize)] /// #[native_model(id = 1, version = 1, with = native_model::bincode_2_rc::Bincode)] /// struct MyStruct { @@ -39,10 +40,7 @@ impl super::Encode for Bincode { type Error = bincode_2_rc::error::EncodeError; /// Serializes a type into bytes using the `bincode` `2.0.0-rc.3` crate. fn encode(obj: &T) -> Result, Self::Error> { - bincode_2_rc::serde::encode_to_vec( - obj, - bincode_2_rc::config::standard() - ) + bincode_2_rc::serde::encode_to_vec(obj, bincode_2_rc::config::standard()) } } @@ -51,9 +49,6 @@ impl serde::Deserialize<'de>> super::Decode for Bincode { type Error = bincode_2_rc::error::DecodeError; /// Deserializes a type from bytes using the `bincode` `2.0.0-rc.3` crate. fn decode(data: Vec) -> Result { - Ok(bincode_2_rc::serde::decode_from_slice( - &data, - bincode_2_rc::config::standard() - )?.0) + Ok(bincode_2_rc::serde::decode_from_slice(&data, bincode_2_rc::config::standard())?.0) } } diff --git a/libraries/native_model/src/codec/postcard_1_0.rs b/libraries/native_model/src/codec/postcard_1_0.rs index ae0a8a12..a44b16dc 100644 --- a/libraries/native_model/src/codec/postcard_1_0.rs +++ b/libraries/native_model/src/codec/postcard_1_0.rs @@ -22,6 +22,7 @@ /// Example usage: /// /// ```rust +/// # use native_model::*; /// #[derive(Clone, Default, serde::Deserialize, serde::Serialize)] /// #[native_model(id = 1, version = 1, with = native_model::postcard_1_0::PostCard)] /// struct MyStruct { @@ -47,4 +48,4 @@ impl serde::Deserialize<'de>> super::Decode for PostCard { fn decode(data: Vec) -> Result { postcard_1_0::from_bytes(&data) } -} \ No newline at end of file +} diff --git a/libraries/native_model/src/codec/rmp_serde_1_3.rs b/libraries/native_model/src/codec/rmp_serde_1_3.rs index 26cd7f82..22c4b504 100644 --- a/libraries/native_model/src/codec/rmp_serde_1_3.rs +++ b/libraries/native_model/src/codec/rmp_serde_1_3.rs @@ -16,6 +16,7 @@ /// Example usage: /// /// ```rust +/// # use native_model::*; /// #[derive(Clone, Default, serde::Deserialize, serde::Serialize)] /// #[native_model(id = 1, version = 1, with = native_model::rmp_serde_1_3::RmpSerde)] /// struct MyStruct { @@ -41,4 +42,4 @@ impl serde::Deserialize<'de>> crate::Decode for RmpSerde { fn decode(data: Vec) -> Result { rmp_serde_1_3::decode::from_slice(&data) } -} \ No newline at end of file +} From 56a1387f8bc75f0d6acc29785d876595bd9cc791 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 6 Nov 2024 03:57:21 +0000 Subject: [PATCH 177/316] fix(deps): update rust crate thiserror to v2 --- libraries/native_model/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 087dfc7d..e5cdb81b 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -17,7 +17,7 @@ members = ["native_model_macro"] [dependencies] zerocopy = { version = "0.8.0", features = [ "derive"] } -thiserror = "1.0.59" +thiserror = "2.0.0" anyhow = "1.0.82" native_model_macro = { version = "0.4.20", path = "native_model_macro" } From f539da2a5260bc3f15a6dfa8198becc599137cba Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 23 Oct 2024 17:23:47 +0000 Subject: [PATCH 178/316] chore(deps): update actions/checkout digest to 11bd719 --- .../native_model/.github/workflows/build_and_test_release.yml | 4 ++-- .../native_model/.github/workflows/conventional_commits.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/.github/workflows/build_and_test_release.yml b/libraries/native_model/.github/workflows/build_and_test_release.yml index e89d7153..5b57daaf 100644 --- a/libraries/native_model/.github/workflows/build_and_test_release.yml +++ b/libraries/native_model/.github/workflows/build_and_test_release.yml @@ -15,7 +15,7 @@ jobs: os: [ubuntu-latest, windows-latest, macOS-latest] toolchain: [stable] steps: - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - name: Setup Rust uses: actions-rs/toolchain@v1 with: @@ -41,7 +41,7 @@ jobs: packages: write steps: - name: Checkout code - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 with: ref: main diff --git a/libraries/native_model/.github/workflows/conventional_commits.yml b/libraries/native_model/.github/workflows/conventional_commits.yml index 61740185..713ef223 100644 --- a/libraries/native_model/.github/workflows/conventional_commits.yml +++ b/libraries/native_model/.github/workflows/conventional_commits.yml @@ -9,5 +9,5 @@ jobs: name: Conventional Commits runs-on: ubuntu-latest steps: - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - uses: webiny/action-conventional-commits@v1.3.0 \ No newline at end of file From 9cd037a857dd3fba1cafcede9c6082773b776136 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 12 Nov 2024 22:51:31 +0000 Subject: [PATCH 179/316] chore: update version to 0.5.0 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index e5cdb81b..be955344 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.4.20" +version = "0.5.0" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -19,7 +19,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.8.0", features = [ "derive"] } thiserror = "2.0.0" anyhow = "1.0.82" -native_model_macro = { version = "0.4.20", path = "native_model_macro" } +native_model_macro = { version = "0.5.0", path = "native_model_macro" } serde = { version = "1.0.200", features = ["derive"], optional = true } bincode_1_3 = { package = "bincode", version = "1.3.3", optional = true } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 627bcc1f..8207eff8 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.4.20" +version = "0.5.0" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From e75e945383318d676b303bfba89c03e84fa566d5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 13 Nov 2024 06:36:04 +0000 Subject: [PATCH 180/316] chore(deps): update hustcer/setup-nu action to v3.16 --- .../native_model/.github/workflows/build_and_test_release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/.github/workflows/build_and_test_release.yml b/libraries/native_model/.github/workflows/build_and_test_release.yml index 5b57daaf..9ac324ba 100644 --- a/libraries/native_model/.github/workflows/build_and_test_release.yml +++ b/libraries/native_model/.github/workflows/build_and_test_release.yml @@ -22,7 +22,7 @@ jobs: toolchain: ${{ matrix.toolchain }} override: true - uses: extractions/setup-just@v2 - - uses: hustcer/setup-nu@v3.15 + - uses: hustcer/setup-nu@v3.16 with: version: '0.85' - name: Just version From 28d41a41e9cba30bddc327a8ed0d5bb43504013b Mon Sep 17 00:00:00 2001 From: Luca Barbato Date: Wed, 13 Nov 2024 13:09:34 +0100 Subject: [PATCH 181/316] chore: Remove trailing whitespaces --- libraries/native_model/README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/libraries/native_model/README.md b/libraries/native_model/README.md index 9699c9e5..ac309d37 100644 --- a/libraries/native_model/README.md +++ b/libraries/native_model/README.md @@ -11,7 +11,7 @@ See [concepts](#concepts) for more details. ## Goals -- **Interoperability**: Allows different applications to work together, even if they are using different +- **Interoperability**: Allows different applications to work together, even if they are using different versions of the data model. - **Data Consistency**: Ensure that we process the data expected model. - **Flexibility**: You can use any serialization format you want. More details [here](#setup-your-serialization-format). @@ -39,10 +39,10 @@ let bytes = native_model::encode(&dot).unwrap(); // Application 2 // We are able to decode the bytes directly into a new type DotV2 (upgrade). let (mut dot, source_version) = native_model::decode::(bytes).unwrap(); -assert_eq!(dot, DotV2 { - name: "".to_string(), - x: 1, - y: 2 +assert_eq!(dot, DotV2 { + name: "".to_string(), + x: 1, + y: 2 }); dot.name = "Dot".to_string(); dot.x = 5; @@ -78,7 +78,7 @@ changes, the default serialization format is the oldest one. Define a struct with the name you want. This struct must implement [`native_model::Encode`](https://docs.rs/native_model/latest/native_model/trait.Encode.html) and [`native_model::Decode`](https://docs.rs/native_model/latest/native_model/trait.Decode.html) traits. -Full examples: +Full examples: - [bincode with encode/decode](./tests_crate/tests/example/custom_codec/bincode.rs) - [bincode with serde](./tests_crate/tests/example/custom_codec/bincode_serde.rs) @@ -189,9 +189,9 @@ Early development. Not ready for production. In order to understand how the native model works, you need to understand the following concepts. -- **Identity**(`id`): The identity is the unique identifier of the model. It is used to identify the model and +- **Identity**(`id`): The identity is the unique identifier of the model. It is used to identify the model and prevent to decode a model into the wrong Rust type. -- **Version**(`version`) The version is the version of the model. It is used to check the compatibility between two +- **Version**(`version`) The version is the version of the model. It is used to check the compatibility between two models. - **Encode**: The encode is the process of converting a model into a byte array. - **Decode**: The decode is the process of converting a byte array into a model. @@ -212,7 +212,7 @@ Full example [here](tests/example/example_define_model.rs). Native model has been designed to have a minimal and constant overhead. That means that the overhead is the same -whatever the size of the data. Under the hood we use the [zerocopy](https://docs.rs/zerocopy/latest/zerocopy/) crate +whatever the size of the data. Under the hood we use the [zerocopy](https://docs.rs/zerocopy/latest/zerocopy/) crate to avoid unnecessary copies. 👉 To know the total time of the encode/decode, you need to add the time of your serialization format. From b543e30216e000e34fe722ce18b7a31b450a64fd Mon Sep 17 00:00:00 2001 From: Luca Barbato Date: Wed, 13 Nov 2024 13:09:53 +0100 Subject: [PATCH 182/316] docs: Document rmp-serde existence And warn about metadata-less formats and serde advanced features. --- libraries/native_model/README.md | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/libraries/native_model/README.md b/libraries/native_model/README.md index ac309d37..92b74858 100644 --- a/libraries/native_model/README.md +++ b/libraries/native_model/README.md @@ -73,6 +73,7 @@ changes, the default serialization format is the oldest one. - `bincode_1_3`: [bincode](https://docs.rs/bincode/1.3.3/bincode/) v1.3 (default) - `bincode_2_rc`: [bincode](https://docs.rs/bincode/2.0.0-rc.3/bincode/) v2.0.0-rc3 - `postcard_1_0`: [postcard](https://docs.rs/postcard/1.0.0/postcard/) v1.0 +- `rpm_serde_1_3`: [rmp-serde](https://docs.rs/rmp-serde/1.3.0/rmp_serde/) v1.3 ### Custom serialization format @@ -84,8 +85,25 @@ Full examples: Others examples, see the default implementations: - [bincode v1.3](./src/codec/bincode_1_3.rs) -- [bincode v2.0 (rc)](./src/codec/bincode_2_rc.rs) -- [postcard v1.0](./src/codec/postcard_1_0.rs) +- [bincode v2.0 (rc)](./src/codec/bincode_2_rc.rs) +- [postcard v1.0](./src/codec/postcard_1_0.rs) +- [rmp-serde v1.3](./src/codec/rmp_serde_1_3.rs) + +### Notice +`native_model` provides implementations that rely on metadata-less formats and `serde`. +There are known issues with some `serde` advanced features such as: + +- `#[serde(flatten)]` +- `#[serde(skip)]` +- `#[serde(skip_deserializing)]` +- `#[serde(skip_serializing)]` +- `#[serde(skip_serializing_if = "path")]` +- `#[serde(tag = "...")]` +- `#[serde(untagged)]` + +Or types implementing similar strategies such as [`serde_json::Value`][serde_json_value]. + +[serde_json_value]: https://docs.rs/serde_json/latest/serde_json/enum.Value.html ## Data model From 021ea5c54c69f86aed69a3a35f50ac976154b2e6 Mon Sep 17 00:00:00 2001 From: Luca Barbato Date: Thu, 14 Nov 2024 11:08:31 +0100 Subject: [PATCH 183/316] feat: Add a named variant for rmp_serde_1_3 And advise to use it if advanced serde features are in use. --- libraries/native_model/README.md | 2 + .../native_model/src/codec/rmp_serde_1_3.rs | 50 ++++++++++++++++++- 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/libraries/native_model/README.md b/libraries/native_model/README.md index 92b74858..08f7eaf4 100644 --- a/libraries/native_model/README.md +++ b/libraries/native_model/README.md @@ -103,6 +103,8 @@ There are known issues with some `serde` advanced features such as: Or types implementing similar strategies such as [`serde_json::Value`][serde_json_value]. +The `rmp-serde` serialization format can optionally support them serializing structs as maps, the `RmpSerdeNamed` struct is provided to support this use-case. + [serde_json_value]: https://docs.rs/serde_json/latest/serde_json/enum.Value.html ## Data model diff --git a/libraries/native_model/src/codec/rmp_serde_1_3.rs b/libraries/native_model/src/codec/rmp_serde_1_3.rs index 22c4b504..8cbba4a3 100644 --- a/libraries/native_model/src/codec/rmp_serde_1_3.rs +++ b/libraries/native_model/src/codec/rmp_serde_1_3.rs @@ -1,11 +1,15 @@ //! [rmp-serde 1.3](https://crates.io/crates/rmp-serde/1.3.0) · //! Enable the `rmp_serde_1_3` feature and //! [`annotate your type`](crate::native_model) with -//! `native_model::rmp_serde_1_3::RmpSerde` to have `native_db` use this crate. +//! `native_model::rmp_serde_1_3::RmpSerde` or `native_model::rmp_serde_1_3::RmpSerdeNamed` +//! to have `native_db` use this crate. /// Used to specify the /// [rmp-serde 1.3](https://crates.io/crates/rmp-serde/1.3.0) -/// crate for serialization & deserialization. +/// crate for serialization & deserialization, using arrays to serialize structs. +/// +/// Do not use this if you plan to use serde features that skip serializing fields, +/// use [RmpSerdeNamed] instead. /// /// # Basic usage /// @@ -43,3 +47,45 @@ impl serde::Deserialize<'de>> crate::Decode for RmpSerde { rmp_serde_1_3::decode::from_slice(&data) } } + +/// Used to specify the +/// [rmp-serde 1.3](https://crates.io/crates/rmp-serde/1.3.0) +/// crate for serialization & deserialization, using maps to serialize structs. +/// +/// # Basic usage +/// +/// After enabling the `rmp_serde_1_3` feature in your `Cargo.toml`, use the +/// [`with`](crate::native_model) attribute on your type to instruct +/// `native_model` to use `RmpSerdeNamed` for serialization & deserialization. +/// +/// Example usage: +/// +/// ```rust +/// # use native_model::*; +/// #[derive(Clone, Default, serde::Deserialize, serde::Serialize)] +/// #[native_model(id = 1, version = 1, with = native_model::rmp_serde_1_3::RmpSerdeNamed)] +/// struct MyStruct { +/// #[serde(skip_serializing_if = "String::is_empty")] +/// my_string: String +/// } +/// ``` + +pub struct RmpSerdeNamed; + +#[cfg(all(feature = "serde", feature = "rmp_serde_1_3"))] +impl crate::Encode for RmpSerdeNamed { + type Error = rmp_serde_1_3::encode::Error; + /// Serializes a type into bytes using the `rmp-serde` `1.3` crate. + fn encode(obj: &T) -> Result, Self::Error> { + rmp_serde_1_3::encode::to_vec_named(obj) + } +} + +#[cfg(all(feature = "serde", feature = "rmp_serde_1_3"))] +impl serde::Deserialize<'de>> crate::Decode for RmpSerdeNamed { + type Error = rmp_serde_1_3::decode::Error; + /// Deserializes a type from bytes using the `rmp-serde` `1.3` crate. + fn decode(data: Vec) -> Result { + rmp_serde_1_3::decode::from_slice(&data) + } +} From 537b207aef9f5472e5b92f2ea6b6dce38e760e70 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 14 Nov 2024 13:42:17 +0000 Subject: [PATCH 184/316] chore: update version to 0.6.0 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index be955344..bd60504a 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.5.0" +version = "0.6.0" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -19,7 +19,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.8.0", features = [ "derive"] } thiserror = "2.0.0" anyhow = "1.0.82" -native_model_macro = { version = "0.5.0", path = "native_model_macro" } +native_model_macro = { version = "0.6.0", path = "native_model_macro" } serde = { version = "1.0.200", features = ["derive"], optional = true } bincode_1_3 = { package = "bincode", version = "1.3.3", optional = true } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index 8207eff8..aa4ae760 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.5.0" +version = "0.6.0" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 79cda8ef05b790f1bd80b28533b7662219f643a4 Mon Sep 17 00:00:00 2001 From: Luca Barbato Date: Thu, 14 Nov 2024 11:11:22 +0100 Subject: [PATCH 185/316] fix: Remove skeptic It is unmaintained and fails to build tests. Same as https://github.com/vincent-herlemont/native_db/pull/286. --- libraries/native_model/Cargo.toml | 6 +- libraries/native_model/README.md | 84 ++++++++++++++++- libraries/native_model/README.md.skt.md | 119 ------------------------ libraries/native_model/build.rs | 11 --- libraries/native_model/src/lib.rs | 9 ++ libraries/native_model/tests/skeptic.rs | 1 - 6 files changed, 89 insertions(+), 141 deletions(-) delete mode 100644 libraries/native_model/README.md.skt.md delete mode 100644 libraries/native_model/build.rs delete mode 100644 libraries/native_model/tests/skeptic.rs diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index bd60504a..0abc1a7b 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -7,7 +7,6 @@ description = "A thin wrapper around serialized data which add information of id license = "MIT" repository = "https://github.com/vincent-herlemont/native_model" readme = "README.md" -build = "build.rs" keywords = ["serialization", "interoperability", "data-consistency", "flexibility", "performance"] categories = ["data-structures", "encoding", "rust-patterns"] rust-version = "1.73.0" @@ -26,11 +25,11 @@ bincode_1_3 = { package = "bincode", version = "1.3.3", optional = true } bincode_2_rc = { package = "bincode", version = "2.0.0-rc.3", features = ["serde"], optional = true } postcard_1_0 = { package = "postcard", version = "1.0.8", features = ["alloc"], optional = true } rmp_serde_1_3 = { package = "rmp-serde", version = "1.3", optional = true } +doc-comment = "0.3.3" [dev-dependencies] serde_json = "1.0.116" criterion = { version = "0.5.1" } -skeptic = "0.13.7" [features] default = ["serde", "bincode_1_3"] @@ -38,6 +37,3 @@ default = ["serde", "bincode_1_3"] [[bench]] name = "overhead" harness = false - -[build-dependencies] -skeptic = "0.13.7" diff --git a/libraries/native_model/README.md b/libraries/native_model/README.md index 08f7eaf4..f7e0dab6 100644 --- a/libraries/native_model/README.md +++ b/libraries/native_model/README.md @@ -19,7 +19,7 @@ See [concepts](#concepts) for more details. ## Usage -``` +```text Application 1 (DotV1) Application 2 (DotV1 and DotV2) | | Encode DotV1 |--------------------------------> | Decode DotV1 to DotV2 @@ -29,7 +29,38 @@ See [concepts](#concepts) for more details. ``` -```rust,skt-main +```rust +use native_model::native_model; +use serde::{Deserialize, Serialize}; + +#[derive(Deserialize, Serialize, PartialEq, Debug)] +#[native_model(id = 1, version = 1)] +struct DotV1(u32, u32); + +#[derive(Deserialize, Serialize, PartialEq, Debug)] +#[native_model(id = 1, version = 2, from = DotV1)] +struct DotV2 { + name: String, + x: u64, + y: u64, +} + +impl From for DotV2 { + fn from(dot: DotV1) -> Self { + DotV2 { + name: "".to_string(), + x: dot.0 as u64, + y: dot.1 as u64, + } + } +} + +impl From for DotV1 { + fn from(dot: DotV2) -> Self { + DotV1(dot.x as u32, dot.y as u32) + } +} + // Application 1 let dot = DotV1(1, 2); let bytes = native_model::encode(&dot).unwrap(); @@ -54,7 +85,7 @@ let bytes = native_model::encode_downgrade(dot, source_version).unwrap(); // Application 1 let (dot, _) = native_model::decode::(bytes).unwrap(); assert_eq!(dot, DotV1(5, 2)); - ``` +``` - Full example [here](./tests_crate/tests/example/example_main.rs). @@ -121,8 +152,9 @@ Attributes: - `type`: The previous version of the model that you use for the TryFrom implementation. - `error`: The error type that you use for the TryFrom implementation. -```rust,skt-define-models +```rust use native_model::native_model; +use serde::{Deserialize, Serialize}; #[derive(Deserialize, Serialize, PartialEq, Debug)] #[native_model(id = 1, version = 1)] @@ -138,6 +170,22 @@ struct DotV2 { // Implement the conversion between versions From for DotV2 and From for DotV1. +impl From for DotV2 { + fn from(dot: DotV1) -> Self { + DotV2 { + name: "".to_string(), + x: dot.0 as u64, + y: dot.1 as u64, + } + } +} + +impl From for DotV1 { + fn from(dot: DotV2) -> Self { + DotV1(dot.x as u32, dot.y as u32) + } +} + #[derive(Deserialize, Serialize, PartialEq, Debug)] #[native_model(id = 1, version = 3, try_from = (DotV2, anyhow::Error))] struct DotV3 { @@ -152,6 +200,30 @@ struct Cord { } // Implement the conversion between versions From for DotV3 and From for DotV2. + +impl TryFrom for DotV3 { + type Error = anyhow::Error; + + fn try_from(dot: DotV2) -> Result { + Ok(DotV3 { + name: dot.name, + cord: Cord { x: dot.x, y: dot.y }, + }) + } +} + +impl TryFrom for DotV2 { + type Error = anyhow::Error; + + fn try_from(dot: DotV3) -> Result { + Ok(DotV2 { + name: dot.name, + x: dot.cord.x, + y: dot.cord.y, + }) + } +} + ``` ## Codecs @@ -189,6 +261,8 @@ native_model = { version = "0.4", features = [ "rmp_serde_1_3" ] } 2. Assign the `rmp_serde_1_3` codec to your `struct` using the `with` attribute: ```rust +use native_model::native_model; + #[derive(Clone, Default, serde::Deserialize, serde::Serialize)] #[native_model(id = 1, version = 1, with = native_model::rmp_serde_1_3::RmpSerde)] struct MyStruct { @@ -220,7 +294,7 @@ In order to understand how the native model works, you need to understand the fo Under the hood, the native model is a thin wrapper around serialized data. The `id` and the `version` are twice encoded with a [`little_endian::U32`](https://docs.rs/zerocopy/latest/zerocopy/byteorder/little_endian/type.U32.html). That represents 8 bytes, that are added at the beginning of the data. -``` +``` text +------------------+------------------+------------------------------------+ | ID (4 bytes) | Version (4 bytes)| Data (indeterminate-length bytes) | +------------------+------------------+------------------------------------+ diff --git a/libraries/native_model/README.md.skt.md b/libraries/native_model/README.md.skt.md deleted file mode 100644 index a8ab5d47..00000000 --- a/libraries/native_model/README.md.skt.md +++ /dev/null @@ -1,119 +0,0 @@ -```rust,skt-main -use native_model_macro::native_model; -use serde::{{Deserialize, Serialize}}; - -#[derive(Deserialize, Serialize, PartialEq, Debug)] -#[native_model(id = 1, version = 1)] -struct DotV1(u32, u32); - -#[derive(Deserialize, Serialize, PartialEq, Debug)] -#[native_model(id = 1, version = 2, from = DotV1)] -struct DotV2 {{ - name: String, - x: u64, - y: u64, -}} - -impl From for DotV2 {{ - fn from(dot: DotV1) -> Self {{ - DotV2 {{ - name: "".to_string(), - x: dot.0 as u64, - y: dot.1 as u64, - }} - }} -}} - -impl From for DotV1 {{ - fn from(dot: DotV2) -> Self {{ - DotV1(dot.x as u32, dot.y as u32) - }} -}} - - -fn main() {{ - {} -}} -``` - -```rust,skt-define-models -use serde::{{Deserialize, Serialize}}; - -{} - -impl From for DotV2 {{ - fn from(dot: DotV1) -> Self {{ - DotV2 {{ - name: "".to_string(), - x: dot.0 as u64, - y: dot.1 as u64, - }} - }} -}} - -impl From for DotV1 {{ - fn from(dot: DotV2) -> Self {{ - DotV1(dot.x as u32, dot.y as u32) - }} -}} - -impl TryFrom for DotV3 {{ - type Error = anyhow::Error; - - fn try_from(dot: DotV2) -> Result {{ - Ok(DotV3 {{ - name: dot.name, - cord: Cord {{ x: dot.x, y: dot.y }}, - }}) - }} -}} - -impl TryFrom for DotV2 {{ - type Error = anyhow::Error; - - fn try_from(dot: DotV3) -> Result {{ - Ok(DotV2 {{ - name: dot.name, - x: dot.cord.x, - y: dot.cord.y, - }}) - }} -}} - - - -fn main() {{ - let dot = DotV1(1, 2); - let bytes = native_model::encode(&dot).unwrap(); - - let (dot_decoded, _) = native_model::decode::(bytes.clone()).unwrap(); - assert_eq!(dot, dot_decoded); - - let (dot_decoded, _) = native_model::decode::(bytes.clone()).unwrap(); - assert_eq!( - DotV2 {{ - name: "".to_string(), - x: 1, - y: 2 - }}, - dot_decoded - ); - - let (dot_decoded, _) = native_model::decode::(bytes.clone()).unwrap(); - assert_eq!( - DotV3 {{ - name: "".to_string(), - cord: Cord {{ x: 1, y: 2 }} - }}, - dot_decoded - ); -}} - -``` - -```rust,skt-define-serilization-format -{} - -fn main() {{ -}} -``` \ No newline at end of file diff --git a/libraries/native_model/build.rs b/libraries/native_model/build.rs deleted file mode 100644 index 5be349fc..00000000 --- a/libraries/native_model/build.rs +++ /dev/null @@ -1,11 +0,0 @@ -extern crate skeptic; - -use skeptic::{generate_doc_tests, markdown_files_of_directory}; - -fn main() { - { - let mut mdbook_files = markdown_files_of_directory("doc/"); - mdbook_files.push("README.md".into()); - generate_doc_tests(&mdbook_files); - } -} diff --git a/libraries/native_model/src/lib.rs b/libraries/native_model/src/lib.rs index d4fd5be6..bcddfc57 100644 --- a/libraries/native_model/src/lib.rs +++ b/libraries/native_model/src/lib.rs @@ -15,6 +15,15 @@ //! //! See examples in the [README.md](https://github.com/vincent-herlemont/native_model) file. +#[cfg(doctest)] +#[macro_use] +extern crate doc_comment; + +#[cfg(doctest)] +doc_comment! { + include_str!("../README.md") +} + #[cfg(any( feature = "serde", feature = "bincode_1_3", diff --git a/libraries/native_model/tests/skeptic.rs b/libraries/native_model/tests/skeptic.rs deleted file mode 100644 index ff46c9c0..00000000 --- a/libraries/native_model/tests/skeptic.rs +++ /dev/null @@ -1 +0,0 @@ -include!(concat!(env!("OUT_DIR"), "/skeptic-tests.rs")); From 5e34dd593f4ca91a75f773f1fd071a9e42c21870 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 14 Nov 2024 16:02:20 +0000 Subject: [PATCH 186/316] chore: update version to 0.6.1 --- libraries/native_model/Cargo.toml | 4 ++-- libraries/native_model/native_model_macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 0abc1a7b..5b53eb26 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model" -version = "0.6.0" +version = "0.6.1" authors = ["Vincent Herlemont "] edition = "2021" description = "A thin wrapper around serialized data which add information of identity and version." @@ -18,7 +18,7 @@ members = ["native_model_macro"] zerocopy = { version = "0.8.0", features = [ "derive"] } thiserror = "2.0.0" anyhow = "1.0.82" -native_model_macro = { version = "0.6.0", path = "native_model_macro" } +native_model_macro = { version = "0.6.1", path = "native_model_macro" } serde = { version = "1.0.200", features = ["derive"], optional = true } bincode_1_3 = { package = "bincode", version = "1.3.3", optional = true } diff --git a/libraries/native_model/native_model_macro/Cargo.toml b/libraries/native_model/native_model_macro/Cargo.toml index aa4ae760..56d3a104 100644 --- a/libraries/native_model/native_model_macro/Cargo.toml +++ b/libraries/native_model/native_model_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "native_model_macro" -version = "0.6.0" +version = "0.6.1" authors = ["Vincent Herlemont "] edition = "2018" description = "A procedural macro for native_model" From 63f40f35f04b14cf90cc3935136d3196dd7c0bdf Mon Sep 17 00:00:00 2001 From: DecDuck Date: Tue, 24 Dec 2024 08:43:49 +1100 Subject: [PATCH 187/316] feat(add modal stack): created modal stack and confirmation --- base/.editorconfig | 12 + base/.gitignore | 24 + base/.npmrc | 2 + base/.nuxtrc | 1 + base/.playground/nuxt.config.ts | 15 + base/README.md | 3 + base/app.vue | 27 + base/components/ConfirmationModal.vue | 93 + base/components/LoadingButton.vue | 31 + base/components/ModalStack.vue | 31 + base/composables/modal-stack.ts | 52 + base/eslint.config.js | 3 + base/nuxt.config.ts | 6 + base/package.json | 27 + base/tailwind.config.js | 9 + base/tsconfig.json | 3 + base/yarn.lock | 6804 +++++++++++++++++++++++++ 17 files changed, 7143 insertions(+) create mode 100644 base/.editorconfig create mode 100644 base/.gitignore create mode 100644 base/.npmrc create mode 100644 base/.nuxtrc create mode 100644 base/.playground/nuxt.config.ts create mode 100644 base/README.md create mode 100644 base/app.vue create mode 100644 base/components/ConfirmationModal.vue create mode 100644 base/components/LoadingButton.vue create mode 100644 base/components/ModalStack.vue create mode 100644 base/composables/modal-stack.ts create mode 100644 base/eslint.config.js create mode 100644 base/nuxt.config.ts create mode 100644 base/package.json create mode 100644 base/tailwind.config.js create mode 100644 base/tsconfig.json create mode 100644 base/yarn.lock diff --git a/base/.editorconfig b/base/.editorconfig new file mode 100644 index 00000000..007463b4 --- /dev/null +++ b/base/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_size = 2 +indent_style = space +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/base/.gitignore b/base/.gitignore new file mode 100644 index 00000000..259809b4 --- /dev/null +++ b/base/.gitignore @@ -0,0 +1,24 @@ +node_modules +*.log +.nuxt +nuxt.d.ts +.output +.data +.env +package-lock.json +framework +dist +.DS_Store + +# Yarn +.yarn/cache +.yarn/*state* + +# Local History +.history + +# VSCode +.vscode/ + +# JetBrains/WebStorm +.idea/ diff --git a/base/.npmrc b/base/.npmrc new file mode 100644 index 00000000..cf040424 --- /dev/null +++ b/base/.npmrc @@ -0,0 +1,2 @@ +shamefully-hoist=true +strict-peer-dependencies=false diff --git a/base/.nuxtrc b/base/.nuxtrc new file mode 100644 index 00000000..9eb49a5d --- /dev/null +++ b/base/.nuxtrc @@ -0,0 +1 @@ +typescript.includeWorkspace = true diff --git a/base/.playground/nuxt.config.ts b/base/.playground/nuxt.config.ts new file mode 100644 index 00000000..a1cab198 --- /dev/null +++ b/base/.playground/nuxt.config.ts @@ -0,0 +1,15 @@ +import { fileURLToPath } from 'node:url' + +export default defineNuxtConfig({ + extends: ['..'], + modules: ['@nuxt/eslint'], + + eslint: { + config: { + // Use the generated ESLint config for lint root project as well + rootDir: fileURLToPath(new URL('..', import.meta.url)) + } + }, + + compatibilityDate: '2024-12-24' +}) \ No newline at end of file diff --git a/base/README.md b/base/README.md new file mode 100644 index 00000000..01fd32be --- /dev/null +++ b/base/README.md @@ -0,0 +1,3 @@ +# Drop Frontend Base + +A repository of shared libraries for Drop apps diff --git a/base/app.vue b/base/app.vue new file mode 100644 index 00000000..19e7d915 --- /dev/null +++ b/base/app.vue @@ -0,0 +1,27 @@ + + + diff --git a/base/components/ConfirmationModal.vue b/base/components/ConfirmationModal.vue new file mode 100644 index 00000000..1c500cf8 --- /dev/null +++ b/base/components/ConfirmationModal.vue @@ -0,0 +1,93 @@ + + + diff --git a/base/components/LoadingButton.vue b/base/components/LoadingButton.vue new file mode 100644 index 00000000..ec0adfac --- /dev/null +++ b/base/components/LoadingButton.vue @@ -0,0 +1,31 @@ + + + diff --git a/base/components/ModalStack.vue b/base/components/ModalStack.vue new file mode 100644 index 00000000..fa523bb6 --- /dev/null +++ b/base/components/ModalStack.vue @@ -0,0 +1,31 @@ + + + diff --git a/base/composables/modal-stack.ts b/base/composables/modal-stack.ts new file mode 100644 index 00000000..c0b04c0a --- /dev/null +++ b/base/composables/modal-stack.ts @@ -0,0 +1,52 @@ +import type { Component } from "vue"; +import ConfirmationModal from "../components/ConfirmationModal.vue"; + +export type ModalCallbackType = ( + event: ModalEvents[T], + close: () => void +) => Promise | void; + +export interface ModalStackElement { + component: Component; + type: T; + callback: ModalCallbackType; + loading: Ref; + data: ModalDatas[T]; +} + +export enum ModalType { + Confirmation, +} + +export type ModalEvents = { + [ModalType.Confirmation]: "confirm" | "cancel"; +}; + +export type ModalDatas = { + [ModalType.Confirmation]: { + title: string; + description: string; + }; +}; + +const modalComponents: { [key in ModalType]: Component } = { + [ModalType.Confirmation]: ConfirmationModal, +}; + +export function createModal( + type: T, + data: ModalDatas[T], + callback: ModalCallbackType +) { + const modalStack = useModalStack(); + modalStack.value.push({ + type, + component: modalComponents[type], + data, + callback, + loading: ref(false), + }); +} + +export const useModalStack = () => + useState>>("modal-stack", () => []); diff --git a/base/eslint.config.js b/base/eslint.config.js new file mode 100644 index 00000000..be2024e2 --- /dev/null +++ b/base/eslint.config.js @@ -0,0 +1,3 @@ +import withNuxt from './.playground/.nuxt/eslint.config.mjs' + +export default withNuxt() diff --git a/base/nuxt.config.ts b/base/nuxt.config.ts new file mode 100644 index 00000000..2a32e3c0 --- /dev/null +++ b/base/nuxt.config.ts @@ -0,0 +1,6 @@ +// https://nuxt.com/docs/api/configuration/nuxt-config +export default defineNuxtConfig({ + devtools: { enabled: true }, + modules: ["@nuxtjs/tailwindcss"], + ssr: false, +}); diff --git a/base/package.json b/base/package.json new file mode 100644 index 00000000..2c812ade --- /dev/null +++ b/base/package.json @@ -0,0 +1,27 @@ +{ + "name": "my-nuxt-layer", + "type": "module", + "version": "0.0.1", + "main": "./nuxt.config.ts", + "scripts": { + "dev": "nuxi dev .playground", + "dev:prepare": "nuxt prepare .playground", + "build": "nuxt build .playground", + "generate": "nuxt generate .playground", + "preview": "nuxt preview .playground", + "lint": "eslint ." + }, + "devDependencies": { + "@nuxt/eslint": "latest", + "@nuxtjs/tailwindcss": "6.12.2", + "eslint": "^9.17.0", + "nuxt": "^3.14.1592", + "typescript": "^5.7.2", + "vue": "latest" + }, + "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e", + "dependencies": { + "@headlessui/vue": "^1.7.23", + "@heroicons/vue": "^2.2.0" + } +} diff --git a/base/tailwind.config.js b/base/tailwind.config.js new file mode 100644 index 00000000..c189a4a5 --- /dev/null +++ b/base/tailwind.config.js @@ -0,0 +1,9 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: [], + theme: { + extend: {}, + }, + plugins: [], +} + diff --git a/base/tsconfig.json b/base/tsconfig.json new file mode 100644 index 00000000..1d746c1a --- /dev/null +++ b/base/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./.playground/.nuxt/tsconfig.json" +} diff --git a/base/yarn.lock b/base/yarn.lock new file mode 100644 index 00000000..a0e6b7c7 --- /dev/null +++ b/base/yarn.lock @@ -0,0 +1,6804 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@alloc/quick-lru@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" + integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== + +"@ampproject/remapping@^2.2.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@antfu/install-pkg@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@antfu/install-pkg/-/install-pkg-0.5.0.tgz#37357c16a962266c0a8811ee29b3ea1354d952d9" + integrity sha512-dKnk2xlAyC7rvTkpkHmu+Qy/2Zc3Vm/l8PtNyIOGDBtXPY3kThfU4ORNEp3V7SXw5XSOb+tOJaUYpfquPzL/Tg== + dependencies: + package-manager-detector "^0.2.5" + tinyexec "^0.3.1" + +"@antfu/utils@^0.7.10": + version "0.7.10" + resolved "https://registry.yarnpkg.com/@antfu/utils/-/utils-0.7.10.tgz#ae829f170158e297a9b6a28f161a8e487d00814d" + integrity sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww== + +"@apidevtools/json-schema-ref-parser@^11.7.0": + version "11.7.3" + resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.7.3.tgz#83ce7bd236fa5ea50f01a122054592df05890998" + integrity sha512-WApSdLdXEBb/1FUPca2lteASewEfpjEYJ8oXZP+0gExK5qSfsEKBKcA+WjY6Q4wvXwyv0+W6Kvc372pSceib9w== + dependencies: + "@jsdevtools/ono" "^7.1.3" + "@types/json-schema" "^7.0.15" + js-yaml "^4.1.0" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.24.7", "@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== + dependencies: + "@babel/helper-validator-identifier" "^7.25.9" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/compat-data@^7.25.9": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.3.tgz#99488264a56b2aded63983abd6a417f03b92ed02" + integrity sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g== + +"@babel/core@^7.23.0", "@babel/core@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.0.tgz#d78b6023cc8f3114ccf049eb219613f74a747b40" + integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.26.0" + "@babel/generator" "^7.26.0" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helpers" "^7.26.0" + "@babel/parser" "^7.26.0" + "@babel/template" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.26.0" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.26.0", "@babel/generator@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.3.tgz#ab8d4360544a425c90c248df7059881f4b2ce019" + integrity sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ== + dependencies: + "@babel/parser" "^7.26.3" + "@babel/types" "^7.26.3" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^3.0.2" + +"@babel/helper-annotate-as-pure@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz#d8eac4d2dc0d7b6e11fa6e535332e0d3184f06b4" + integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g== + dependencies: + "@babel/types" "^7.25.9" + +"@babel/helper-compilation-targets@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz#55af025ce365be3cdc0c1c1e56c6af617ce88875" + integrity sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ== + dependencies: + "@babel/compat-data" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz#7644147706bb90ff613297d49ed5266bde729f83" + integrity sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/traverse" "^7.25.9" + semver "^6.3.1" + +"@babel/helper-member-expression-to-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3" + integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-module-imports@^7.24.7", "@babel/helper-module-imports@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" + integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-module-transforms@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" + integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/helper-optimise-call-expression@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz#3324ae50bae7e2ab3c33f60c9a877b6a0146b54e" + integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ== + dependencies: + "@babel/types" "^7.25.9" + +"@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.24.8", "@babel/helper-plugin-utils@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz#9cbdd63a9443a2c92a725cca7ebca12cc8dd9f46" + integrity sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw== + +"@babel/helper-replace-supers@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz#ba447224798c3da3f8713fc272b145e33da6a5c5" + integrity sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/helper-skip-transparent-expression-wrappers@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9" + integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-string-parser@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" + integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== + +"@babel/helper-validator-identifier@^7.24.7", "@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== + +"@babel/helper-validator-option@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" + integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== + +"@babel/helpers@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.0.tgz#30e621f1eba5aa45fe6f4868d2e9154d884119a4" + integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw== + dependencies: + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.0" + +"@babel/parser@^7.25.3", "@babel/parser@^7.25.4", "@babel/parser@^7.25.6", "@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.2", "@babel/parser@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.3.tgz#8c51c5db6ddf08134af1ddbacf16aaab48bac234" + integrity sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA== + dependencies: + "@babel/types" "^7.26.3" + +"@babel/plugin-proposal-decorators@^7.23.0": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.9.tgz#8680707f943d1a3da2cd66b948179920f097e254" + integrity sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-syntax-decorators" "^7.25.9" + +"@babel/plugin-syntax-decorators@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.9.tgz#986b4ca8b7b5df3f67cee889cedeffc2e2bf14b3" + integrity sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-syntax-import-attributes@^7.22.5": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" + integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-syntax-import-meta@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-jsx@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz#a34313a178ea56f1951599b929c1ceacee719290" + integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-syntax-typescript@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399" + integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-typescript@^7.22.15", "@babel/plugin-transform-typescript@^7.25.9": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.3.tgz#3d6add9c78735623317387ee26d5ada540eee3fd" + integrity sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/plugin-syntax-typescript" "^7.25.9" + +"@babel/standalone@^7.26.4": + version "7.26.4" + resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.26.4.tgz#440d8046929174b463e2c6294fc8f6d49fdea550" + integrity sha512-SF+g7S2mhTT1b7CHyfNjDkPU1corxg4LPYsyP0x5KuCl+EbtBQHRLqr9N3q7e7+x7NQ5LYxQf8mJ2PmzebLr0A== + +"@babel/template@^7.25.0", "@babel/template@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" + integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== + dependencies: + "@babel/code-frame" "^7.25.9" + "@babel/parser" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/traverse@^7.25.6", "@babel/traverse@^7.25.9": + version "7.26.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.4.tgz#ac3a2a84b908dde6d463c3bfa2c5fdc1653574bd" + integrity sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.3" + "@babel/parser" "^7.26.3" + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.3" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.25.4", "@babel/types@^7.25.6", "@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.3.tgz#37e79830f04c2b5687acc77db97fbc75fb81f3c0" + integrity sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA== + dependencies: + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + +"@clack/core@0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@clack/core/-/core-0.4.0.tgz#4708ba868808b7316069568137413e9a1ba0c673" + integrity sha512-YJCYBsyJfNDaTbvDUVSJ3SgSuPrcujarRgkJ5NLjexDZKvaOiVVJvAQYx8lIgG0qRT8ff0fPgqyBCVivanIZ+A== + dependencies: + picocolors "^1.0.0" + sisteransi "^1.0.5" + +"@clack/prompts@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@clack/prompts/-/prompts-0.9.0.tgz#3e8a5741a12e052fa9a51c2365bd0ad5424792ee" + integrity sha512-nGsytiExgUr4FL0pR/LeqxA28nz3E0cW7eLTSh3Iod9TGrbBt8Y7BHbV3mmkNC4G0evdYyQ3ZsbiBkk7ektArA== + dependencies: + "@clack/core" "0.4.0" + picocolors "^1.0.0" + sisteransi "^1.0.5" + +"@cloudflare/kv-asset-handler@^0.3.4": + version "0.3.4" + resolved "https://registry.yarnpkg.com/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.3.4.tgz#5cc152847c8ae4d280ec5d7f4f6ba8c976b585c3" + integrity sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q== + dependencies: + mime "^3.0.0" + +"@csstools/selector-resolve-nested@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.0.0.tgz#704a9b637975680e025e069a4c58b3beb3e2752a" + integrity sha512-ZoK24Yku6VJU1gS79a5PFmC8yn3wIapiKmPgun0hZgEI5AOqgH2kiPRsPz1qkGv4HL+wuDLH83yQyk6inMYrJQ== + +"@csstools/selector-specificity@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz#037817b574262134cabd68fc4ec1a454f168407b" + integrity sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw== + +"@es-joy/jsdoccomment@~0.49.0": + version "0.49.0" + resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.49.0.tgz#e5ec1eda837c802eca67d3b29e577197f14ba1db" + integrity sha512-xjZTSFgECpb9Ohuk5yMX5RhUEbfeQcuOp8IF60e+wyzWEF0M5xeSgqsfLtvPEX8BIyOX9saZqzuGPmZ8oWc+5Q== + dependencies: + comment-parser "1.4.1" + esquery "^1.6.0" + jsdoc-type-pratt-parser "~4.1.0" + +"@esbuild/aix-ppc64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f" + integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ== + +"@esbuild/aix-ppc64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz#38848d3e25afe842a7943643cbcd387cc6e13461" + integrity sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA== + +"@esbuild/android-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052" + integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A== + +"@esbuild/android-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz#f592957ae8b5643129fa889c79e69cd8669bb894" + integrity sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg== + +"@esbuild/android-arm@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28" + integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg== + +"@esbuild/android-arm@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.24.2.tgz#72d8a2063aa630308af486a7e5cbcd1e134335b3" + integrity sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q== + +"@esbuild/android-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e" + integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA== + +"@esbuild/android-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.24.2.tgz#9a7713504d5f04792f33be9c197a882b2d88febb" + integrity sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw== + +"@esbuild/darwin-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a" + integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ== + +"@esbuild/darwin-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz#02ae04ad8ebffd6e2ea096181b3366816b2b5936" + integrity sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA== + +"@esbuild/darwin-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22" + integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw== + +"@esbuild/darwin-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz#9ec312bc29c60e1b6cecadc82bd504d8adaa19e9" + integrity sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA== + +"@esbuild/freebsd-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e" + integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g== + +"@esbuild/freebsd-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz#5e82f44cb4906d6aebf24497d6a068cfc152fa00" + integrity sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg== + +"@esbuild/freebsd-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261" + integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ== + +"@esbuild/freebsd-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz#3fb1ce92f276168b75074b4e51aa0d8141ecce7f" + integrity sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q== + +"@esbuild/linux-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b" + integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q== + +"@esbuild/linux-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz#856b632d79eb80aec0864381efd29de8fd0b1f43" + integrity sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg== + +"@esbuild/linux-arm@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9" + integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA== + +"@esbuild/linux-arm@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz#c846b4694dc5a75d1444f52257ccc5659021b736" + integrity sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA== + +"@esbuild/linux-ia32@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2" + integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg== + +"@esbuild/linux-ia32@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz#f8a16615a78826ccbb6566fab9a9606cfd4a37d5" + integrity sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw== + +"@esbuild/linux-loong64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df" + integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg== + +"@esbuild/linux-loong64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz#1c451538c765bf14913512c76ed8a351e18b09fc" + integrity sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ== + +"@esbuild/linux-mips64el@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe" + integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg== + +"@esbuild/linux-mips64el@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz#0846edeefbc3d8d50645c51869cc64401d9239cb" + integrity sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw== + +"@esbuild/linux-ppc64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4" + integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w== + +"@esbuild/linux-ppc64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz#8e3fc54505671d193337a36dfd4c1a23b8a41412" + integrity sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw== + +"@esbuild/linux-riscv64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc" + integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA== + +"@esbuild/linux-riscv64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz#6a1e92096d5e68f7bb10a0d64bb5b6d1daf9a694" + integrity sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q== + +"@esbuild/linux-s390x@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de" + integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A== + +"@esbuild/linux-s390x@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz#ab18e56e66f7a3c49cb97d337cd0a6fea28a8577" + integrity sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw== + +"@esbuild/linux-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0" + integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== + +"@esbuild/linux-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz#8140c9b40da634d380b0b29c837a0b4267aff38f" + integrity sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q== + +"@esbuild/netbsd-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz#65f19161432bafb3981f5f20a7ff45abb2e708e6" + integrity sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw== + +"@esbuild/netbsd-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047" + integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg== + +"@esbuild/netbsd-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz#7a3a97d77abfd11765a72f1c6f9b18f5396bcc40" + integrity sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw== + +"@esbuild/openbsd-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz#58b00238dd8f123bfff68d3acc53a6ee369af89f" + integrity sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A== + +"@esbuild/openbsd-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70" + integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow== + +"@esbuild/openbsd-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz#0ac843fda0feb85a93e288842936c21a00a8a205" + integrity sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA== + +"@esbuild/sunos-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b" + integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg== + +"@esbuild/sunos-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz#8b7aa895e07828d36c422a4404cc2ecf27fb15c6" + integrity sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig== + +"@esbuild/win32-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d" + integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A== + +"@esbuild/win32-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz#c023afb647cabf0c3ed13f0eddfc4f1d61c66a85" + integrity sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ== + +"@esbuild/win32-ia32@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b" + integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA== + +"@esbuild/win32-ia32@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz#96c356132d2dda990098c8b8b951209c3cd743c2" + integrity sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA== + +"@esbuild/win32-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" + integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== + +"@esbuild/win32-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz#34aa0b52d0fbb1a654b596acfa595f0c7b77a77b" + integrity sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg== + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56" + integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA== + dependencies: + eslint-visitor-keys "^3.4.3" + +"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.11.0", "@eslint-community/regexpp@^4.12.1", "@eslint-community/regexpp@^4.8.0": + version "4.12.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== + +"@eslint/compat@^1.1.1": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@eslint/compat/-/compat-1.2.4.tgz#b69b0d76ce73fe66d7f8633c406acea151f5c559" + integrity sha512-S8ZdQj/N69YAtuqFt7653jwcvuUj131+6qGLUyDqfDg1OIoBQ66OCuXC473YQfO2AaxITTutiRQiDwoo7ZLYyg== + +"@eslint/config-array@^0.19.0", "@eslint/config-array@^0.19.1": + version "0.19.1" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.19.1.tgz#734aaea2c40be22bbb1f2a9dac687c57a6a4c984" + integrity sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA== + dependencies: + "@eslint/object-schema" "^2.1.5" + debug "^4.3.1" + minimatch "^3.1.2" + +"@eslint/config-inspector@^0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@eslint/config-inspector/-/config-inspector-0.6.0.tgz#fab4aa6d305e83d47cddc623592302236995ca42" + integrity sha512-sN+ddom8AjUC5Zc/0uUVf11lpVudN+4cGVxA0ET6TsqE7Gezeug7NN6M8zonTpqsVSnaexGApwGUo0+6MsWfQQ== + dependencies: + "@eslint/config-array" "^0.19.1" + "@voxpelli/config-array-find-files" "^1.2.1" + bundle-require "^5.0.0" + cac "^6.7.14" + chokidar "^4.0.1" + esbuild "^0.24.0" + fast-glob "^3.3.2" + find-up "^7.0.0" + get-port-please "^3.1.2" + h3 "^1.13.0" + minimatch "^9.0.5" + mlly "^1.7.3" + mrmime "^2.0.0" + open "^10.1.0" + picocolors "^1.1.1" + ws "^8.18.0" + +"@eslint/core@^0.9.0": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.9.1.tgz#31763847308ef6b7084a4505573ac9402c51f9d1" + integrity sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q== + dependencies: + "@types/json-schema" "^7.0.15" + +"@eslint/eslintrc@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.2.0.tgz#57470ac4e2e283a6bf76044d63281196e370542c" + integrity sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w== + 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" + +"@eslint/js@9.17.0", "@eslint/js@^9.16.0": + version "9.17.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.17.0.tgz#1523e586791f80376a6f8398a3964455ecc651ec" + integrity sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w== + +"@eslint/object-schema@^2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.5.tgz#8670a8f6258a2be5b2c620ff314a1d984c23eb2e" + integrity sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ== + +"@eslint/plugin-kit@^0.2.3": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.2.4.tgz#2b78e7bb3755784bb13faa8932a1d994d6537792" + integrity sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg== + dependencies: + levn "^0.4.1" + +"@headlessui/vue@^1.7.23": + version "1.7.23" + resolved "https://registry.yarnpkg.com/@headlessui/vue/-/vue-1.7.23.tgz#7fe19dbeca35de9e6270c82c78c4864e6a6f7391" + integrity sha512-JzdCNqurrtuu0YW6QaDtR2PIYCKPUWq28csDyMvN4zmGccmE7lz40Is6hc3LA4HFeCI7sekZ/PQMTNmn9I/4Wg== + dependencies: + "@tanstack/vue-virtual" "^3.0.0-beta.60" + +"@heroicons/vue@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@heroicons/vue/-/vue-2.2.0.tgz#d81f14eed448eec9859849ed63facd3f29bca2b3" + integrity sha512-G3dbSxoeEKqbi/DFalhRxJU4mTXJn7GwZ7ae8NuEQzd1bqdd0jAbdaBZlHPcvPD2xI1iGzNVB4k20Un2AguYPw== + +"@humanfs/core@^0.19.1": + version "0.19.1" + resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77" + integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== + +"@humanfs/node@^0.16.6": + version "0.16.6" + resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.6.tgz#ee2a10eaabd1131987bf0488fd9b820174cd765e" + integrity sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw== + dependencies: + "@humanfs/core" "^0.19.1" + "@humanwhocodes/retry" "^0.3.0" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/retry@^0.3.0": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.1.tgz#c72a5c76a9fbaf3488e231b13dc52c0da7bab42a" + integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA== + +"@humanwhocodes/retry@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.1.tgz#9a96ce501bc62df46c4031fbd970e3cc6b10f07b" + integrity sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA== + +"@ioredis/commands@^1.1.1": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ioredis/commands/-/commands-1.2.0.tgz#6d61b3097470af1fdbbe622795b8921d42018e11" + integrity sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@isaacs/fs-minipass@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz#2d59ae3ab4b38fb4270bfa23d30f8e2e86c7fe32" + integrity sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w== + dependencies: + minipass "^7.0.4" + +"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.8" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142" + integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/source-map@^0.3.3": + version "0.3.6" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" + integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@jsdevtools/ono@^7.1.3": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" + integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== + +"@koa/router@^12.0.1": + version "12.0.2" + resolved "https://registry.yarnpkg.com/@koa/router/-/router-12.0.2.tgz#286d51959ed611255faa944818a112e35567835a" + integrity sha512-sYcHglGKTxGF+hQ6x67xDfkE9o+NhVlRHBqq6gLywaMc6CojK/5vFZByphdonKinYlMLkEkacm+HEse9HzwgTA== + dependencies: + debug "^4.3.4" + http-errors "^2.0.0" + koa-compose "^4.1.0" + methods "^1.1.2" + path-to-regexp "^6.3.0" + +"@kwsites/file-exists@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@kwsites/file-exists/-/file-exists-1.1.1.tgz#ad1efcac13e1987d8dbaf235ef3be5b0d96faa99" + integrity sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw== + dependencies: + debug "^4.1.1" + +"@kwsites/promise-deferred@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz#8ace5259254426ccef57f3175bc64ed7095ed919" + integrity sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw== + +"@mapbox/node-pre-gyp@^2.0.0-rc.0": + version "2.0.0-rc.0" + resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-2.0.0-rc.0.tgz#4390439d79e30bba0a4dccb230723e359505c8b7" + integrity sha512-nhSMNprz3WmeRvd8iUs5JqkKr0Ncx46JtPxM3AhXes84XpSJfmIwKeWXRpsr53S7kqPkQfPhzrMFUxSNb23qSA== + dependencies: + consola "^3.2.3" + detect-libc "^2.0.0" + https-proxy-agent "^7.0.5" + node-fetch "^2.6.7" + nopt "^8.0.0" + semver "^7.5.3" + tar "^7.4.0" + +"@netlify/functions@^2.8.2": + version "2.8.2" + resolved "https://registry.yarnpkg.com/@netlify/functions/-/functions-2.8.2.tgz#653395b901a74a6189e913a089f9cb90083ca6ce" + integrity sha512-DeoAQh8LuNPvBE4qsKlezjKj0PyXDryOFJfJKo3Z1qZLKzQ21sT314KQKPVjfvw6knqijj+IO+0kHXy/TJiqNA== + dependencies: + "@netlify/serverless-functions-api" "1.26.1" + +"@netlify/node-cookies@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@netlify/node-cookies/-/node-cookies-0.1.0.tgz#dda912ba618527695cf519fafa221c5e6777c612" + integrity sha512-OAs1xG+FfLX0LoRASpqzVntVV/RpYkgpI0VrUnw2u0Q1qiZUzcPffxRK8HF3gc4GjuhG5ahOEMJ9bswBiZPq0g== + +"@netlify/serverless-functions-api@1.26.1": + version "1.26.1" + resolved "https://registry.yarnpkg.com/@netlify/serverless-functions-api/-/serverless-functions-api-1.26.1.tgz#6d2792a7fdbb3a6b852c219e4fb13622b30a9ec5" + integrity sha512-q3L9i3HoNfz0SGpTIS4zTcKBbRkxzCRpd169eyiTuk3IwcPC3/85mzLHranlKo2b+HYT0gu37YxGB45aD8A3Tw== + dependencies: + "@netlify/node-cookies" "^0.1.0" + urlpattern-polyfill "8.0.2" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.scandir@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-3.0.0.tgz#91c0a33e1aeaedcd4bab2bf31be5d1962a55d2a7" + integrity sha512-ktI9+PxfHYtKjF3cLTUAh2N+b8MijCRPNwKJNqTVdL0gB0QxLU2rIRaZ1t71oEa3YBDE6bukH1sR0+CDnpp/Mg== + dependencies: + "@nodelib/fs.stat" "3.0.0" + run-parallel "^1.2.0" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.stat@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-3.0.0.tgz#ef6c829f2b05f42595d88854ebd777d4335ff0a9" + integrity sha512-2tQOI38s19P9i7X/Drt0v8iMA+KMsgdhB/dyPER+e+2Y8L1Z7QvnuRdW/uLuf5YRFUYmnj4bMA6qCuZHFI1GDQ== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@nodelib/fs.walk@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-2.0.0.tgz#10499ac2210f6399770b465ba728adafc7d44bb1" + integrity sha512-54voNDBobGdMl3BUXSu7UaDh1P85PGHWlJ5e0XhPugo1JulOyCtp2I+5ri4wplGDJ8QGwPEQW7/x3yTLU7yF1A== + dependencies: + "@nodelib/fs.scandir" "3.0.0" + fastq "^1.15.0" + +"@nuxt/devalue@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@nuxt/devalue/-/devalue-2.0.2.tgz#5749f04df13bda4c863338d8dabaf370f45ef7c7" + integrity sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA== + +"@nuxt/devtools-kit@1.6.4", "@nuxt/devtools-kit@^1.6.4": + version "1.6.4" + resolved "https://registry.yarnpkg.com/@nuxt/devtools-kit/-/devtools-kit-1.6.4.tgz#23b678cfc0929c22c6544b2b69bff28b510925ce" + integrity sha512-jpLYrXFm8T74j8ZjU6lheghe3gdr7PcNluvh/KOl+t6l7AtsQilkTmCZ4YoaiaWLM+5c5mkc72qd7ECgZb0tCw== + dependencies: + "@nuxt/kit" "^3.14.1592" + "@nuxt/schema" "^3.14.1592" + execa "^7.2.0" + +"@nuxt/devtools-wizard@1.6.4": + version "1.6.4" + resolved "https://registry.yarnpkg.com/@nuxt/devtools-wizard/-/devtools-wizard-1.6.4.tgz#7896b57ca26a9c69b51069204981b98215d5342a" + integrity sha512-YTInHKL3SnRjczZDIhN8kXaiYf8+ddBMU5nwShPxmutcaVQZ8FMiJHRIzyWnS10AxayPKGVzJh3fLF/BiUwgcg== + dependencies: + consola "^3.2.3" + diff "^7.0.0" + execa "^7.2.0" + global-directory "^4.0.1" + magicast "^0.3.5" + pathe "^1.1.2" + pkg-types "^1.2.1" + prompts "^2.4.2" + rc9 "^2.1.2" + semver "^7.6.3" + +"@nuxt/devtools@^1.6.0": + version "1.6.4" + resolved "https://registry.yarnpkg.com/@nuxt/devtools/-/devtools-1.6.4.tgz#9bcf071885cfd9f70521443b220738a9f0cc3c67" + integrity sha512-uzHFXVEQnmxcbtbcpXjDEyILMp/jJNF1DN2/wSBm0r7UD82qaD2Aa66gX7dTY2+E0HG6aSNkZky3Ck8ehSk8nQ== + dependencies: + "@antfu/utils" "^0.7.10" + "@nuxt/devtools-kit" "1.6.4" + "@nuxt/devtools-wizard" "1.6.4" + "@nuxt/kit" "^3.14.1592" + "@vue/devtools-core" "7.6.8" + "@vue/devtools-kit" "7.6.8" + birpc "^0.2.19" + consola "^3.2.3" + cronstrue "^2.52.0" + destr "^2.0.3" + error-stack-parser-es "^0.1.5" + execa "^7.2.0" + fast-npm-meta "^0.2.2" + flatted "^3.3.2" + get-port-please "^3.1.2" + hookable "^5.5.3" + image-meta "^0.2.1" + is-installed-globally "^1.0.0" + launch-editor "^2.9.1" + local-pkg "^0.5.1" + magicast "^0.3.5" + nypm "^0.4.1" + ohash "^1.1.4" + pathe "^1.1.2" + perfect-debounce "^1.0.0" + pkg-types "^1.2.1" + rc9 "^2.1.2" + scule "^1.3.0" + semver "^7.6.3" + simple-git "^3.27.0" + sirv "^3.0.0" + tinyglobby "^0.2.10" + unimport "^3.14.5" + vite-plugin-inspect "~0.8.9" + vite-plugin-vue-inspector "5.1.3" + which "^3.0.1" + ws "^8.18.0" + +"@nuxt/eslint-config@0.7.4": + version "0.7.4" + resolved "https://registry.yarnpkg.com/@nuxt/eslint-config/-/eslint-config-0.7.4.tgz#9cd2552a9c7b015aa6d9cc7c70106fbf35cdabe8" + integrity sha512-pjwzS04KxmWgWs2HwYftyojBJss3xvI9YTQ3x/5sSH3u3yQtUJPhLiD2nvfeat2DKJLcoYaUZKK+32v9EfaHDQ== + dependencies: + "@antfu/install-pkg" "^0.5.0" + "@clack/prompts" "^0.9.0" + "@eslint/js" "^9.16.0" + "@nuxt/eslint-plugin" "0.7.4" + "@stylistic/eslint-plugin" "^2.12.1" + "@typescript-eslint/eslint-plugin" "^8.18.1" + "@typescript-eslint/parser" "^8.18.1" + eslint-config-flat-gitignore "0.2.0" + eslint-flat-config-utils "^0.4.0" + eslint-merge-processors "^0.1.0" + eslint-plugin-import-x "^4.6.1" + eslint-plugin-jsdoc "^50.6.1" + eslint-plugin-regexp "^2.7.0" + eslint-plugin-unicorn "^56.0.1" + eslint-plugin-vue "^9.32.0" + eslint-processor-vue-blocks "^0.1.2" + globals "^15.14.0" + local-pkg "^0.5.1" + pathe "^1.1.2" + vue-eslint-parser "^9.4.3" + +"@nuxt/eslint-plugin@0.7.4": + version "0.7.4" + resolved "https://registry.yarnpkg.com/@nuxt/eslint-plugin/-/eslint-plugin-0.7.4.tgz#91ce4a1f7189c96efeeafd43a394980a97ddc80e" + integrity sha512-bMTEDVLF8rLVgr8y+GZ3IHOiRljokZrPdHvzBYKKajtPIKr9AGS3bka5KLXdt6XHPpZbUDIe76LycjAkiUcyqA== + dependencies: + "@typescript-eslint/types" "^8.18.1" + "@typescript-eslint/utils" "^8.18.1" + +"@nuxt/eslint@latest": + version "0.7.4" + resolved "https://registry.yarnpkg.com/@nuxt/eslint/-/eslint-0.7.4.tgz#78e04aa90f31e59d2214befffcfb5c384488dcc3" + integrity sha512-9J/g7KHfhcYLjZRy5Ri7Y9pTZsltK9zYyhBkQLdS9EQBOfTL4eE0SS3tXWsvYK6oiAxXc4MskWEMuklwRyAp/w== + dependencies: + "@eslint/config-inspector" "^0.6.0" + "@nuxt/devtools-kit" "^1.6.4" + "@nuxt/eslint-config" "0.7.4" + "@nuxt/eslint-plugin" "0.7.4" + "@nuxt/kit" "^3.14.1592" + chokidar "^4.0.3" + eslint-flat-config-utils "^0.4.0" + eslint-typegen "^0.3.2" + find-up "^7.0.0" + get-port-please "^3.1.2" + mlly "^1.7.3" + pathe "^1.1.2" + unimport "^3.14.5" + +"@nuxt/kit@3.14.1592", "@nuxt/kit@^3.13.2", "@nuxt/kit@^3.14.1592": + version "3.14.1592" + resolved "https://registry.yarnpkg.com/@nuxt/kit/-/kit-3.14.1592.tgz#f959a269424c1ee313585a46112e474b6ccab3bc" + integrity sha512-r9r8bISBBisvfcNgNL3dSIQHSBe0v5YkX5zwNblIC2T0CIEgxEVoM5rq9O5wqgb5OEydsHTtT2hL57vdv6VT2w== + dependencies: + "@nuxt/schema" "3.14.1592" + c12 "^2.0.1" + consola "^3.2.3" + defu "^6.1.4" + destr "^2.0.3" + globby "^14.0.2" + hash-sum "^2.0.0" + ignore "^6.0.2" + jiti "^2.4.0" + klona "^2.0.6" + knitwork "^1.1.0" + mlly "^1.7.3" + pathe "^1.1.2" + pkg-types "^1.2.1" + scule "^1.3.0" + semver "^7.6.3" + ufo "^1.5.4" + unctx "^2.3.1" + unimport "^3.13.2" + untyped "^1.5.1" + +"@nuxt/schema@3.14.1592", "@nuxt/schema@^3.14.1592": + version "3.14.1592" + resolved "https://registry.yarnpkg.com/@nuxt/schema/-/schema-3.14.1592.tgz#38c5c0af51d0b95e011db6c332f578aac97c8c82" + integrity sha512-A1d/08ueX8stTXNkvGqnr1eEXZgvKn+vj6s7jXhZNWApUSqMgItU4VK28vrrdpKbjIPwq2SwhnGOHUYvN9HwCQ== + dependencies: + c12 "^2.0.1" + compatx "^0.1.8" + consola "^3.2.3" + defu "^6.1.4" + hookable "^5.5.3" + pathe "^1.1.2" + pkg-types "^1.2.1" + scule "^1.3.0" + std-env "^3.8.0" + ufo "^1.5.4" + uncrypto "^0.1.3" + unimport "^3.13.2" + untyped "^1.5.1" + +"@nuxt/telemetry@^2.6.0": + version "2.6.2" + resolved "https://registry.yarnpkg.com/@nuxt/telemetry/-/telemetry-2.6.2.tgz#83e6ff976389097ff5b506cf1e6ce582f7663944" + integrity sha512-UReyqp35ZFcsyMuP+DmDj/0W/odANCuObdqYyAIR+/Z/9yDHtBO6Cc/wWbjjhrt41yhhco7/+vILELPHWD+wxg== + dependencies: + "@nuxt/kit" "^3.14.1592" + citty "^0.1.6" + consola "^3.3.0" + destr "^2.0.3" + dotenv "^16.4.7" + git-url-parse "^16.0.0" + is-docker "^3.0.0" + jiti "^2.4.2" + ofetch "^1.4.1" + package-manager-detector "^0.2.7" + parse-git-config "^3.0.0" + pathe "^1.1.2" + rc9 "^2.1.2" + std-env "^3.8.0" + +"@nuxt/vite-builder@3.14.1592": + version "3.14.1592" + resolved "https://registry.yarnpkg.com/@nuxt/vite-builder/-/vite-builder-3.14.1592.tgz#ed143efaf267920f0f1cda5584b811bb017c0e82" + integrity sha512-GVS7vkBJAGv13ghmjgGrS2QVyzoqxQ5+cAUrMeMjKbY7GnRY7/uOkoLmznYx8E/U9HBUyHQa+wSN2ZfcSiEytQ== + dependencies: + "@nuxt/kit" "3.14.1592" + "@rollup/plugin-replace" "^6.0.1" + "@vitejs/plugin-vue" "^5.2.0" + "@vitejs/plugin-vue-jsx" "^4.1.0" + autoprefixer "^10.4.20" + clear "^0.1.0" + consola "^3.2.3" + cssnano "^7.0.6" + defu "^6.1.4" + esbuild "^0.24.0" + escape-string-regexp "^5.0.0" + estree-walker "^3.0.3" + externality "^1.0.2" + get-port-please "^3.1.2" + h3 "^1.13.0" + jiti "^2.4.0" + knitwork "^1.1.0" + magic-string "^0.30.13" + mlly "^1.7.3" + ohash "^1.1.4" + pathe "^1.1.2" + perfect-debounce "^1.0.0" + pkg-types "^1.2.1" + postcss "^8.4.49" + rollup-plugin-visualizer "^5.12.0" + std-env "^3.8.0" + strip-literal "^2.1.0" + ufo "^1.5.4" + unenv "^1.10.0" + unplugin "^1.16.0" + vite "^5.4.11" + vite-node "^2.1.5" + vite-plugin-checker "^0.8.0" + vue-bundle-renderer "^2.1.1" + +"@nuxtjs/tailwindcss@6.12.2": + version "6.12.2" + resolved "https://registry.yarnpkg.com/@nuxtjs/tailwindcss/-/tailwindcss-6.12.2.tgz#3fa41b0b9361cd69ec14934f800e66225b3c9e1f" + integrity sha512-qPJiFH67CkTj/2kBGBzqXihOD1rQXMsbVS4vdQvfBxOBLPfGhU1yw7AATdhPl2BBjO2krjJLuZj39t7dnDYOwg== + dependencies: + "@nuxt/kit" "^3.13.2" + autoprefixer "^10.4.20" + consola "^3.2.3" + defu "^6.1.4" + h3 "^1.13.0" + klona "^2.0.6" + pathe "^1.1.2" + postcss "^8.4.47" + postcss-nesting "^13.0.0" + tailwind-config-viewer "^2.0.4" + tailwindcss "~3.4.13" + ufo "^1.5.4" + unctx "^2.3.1" + +"@parcel/watcher-android-arm64@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.0.tgz#e32d3dda6647791ee930556aee206fcd5ea0fb7a" + integrity sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ== + +"@parcel/watcher-darwin-arm64@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.0.tgz#0d9e680b7e9ec1c8f54944f1b945aa8755afb12f" + integrity sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw== + +"@parcel/watcher-darwin-x64@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.0.tgz#f9f1d5ce9d5878d344f14ef1856b7a830c59d1bb" + integrity sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA== + +"@parcel/watcher-freebsd-x64@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.0.tgz#2b77f0c82d19e84ff4c21de6da7f7d096b1a7e82" + integrity sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw== + +"@parcel/watcher-linux-arm-glibc@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.0.tgz#92ed322c56dbafa3d2545dcf2803334aee131e42" + integrity sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA== + +"@parcel/watcher-linux-arm-musl@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.0.tgz#cd48e9bfde0cdbbd2ecd9accfc52967e22f849a4" + integrity sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA== + +"@parcel/watcher-linux-arm64-glibc@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.0.tgz#7b81f6d5a442bb89fbabaf6c13573e94a46feb03" + integrity sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA== + +"@parcel/watcher-linux-arm64-musl@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.0.tgz#dcb8ff01077cdf59a18d9e0a4dff7a0cfe5fd732" + integrity sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q== + +"@parcel/watcher-linux-x64-glibc@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.0.tgz#2e254600fda4e32d83942384d1106e1eed84494d" + integrity sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw== + +"@parcel/watcher-linux-x64-musl@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.0.tgz#01fcea60fedbb3225af808d3f0a7b11229792eef" + integrity sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA== + +"@parcel/watcher-wasm@^2.4.1": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-wasm/-/watcher-wasm-2.5.0.tgz#81fad1e10957f08a532eb4fc0d4c353cd8901a50" + integrity sha512-Z4ouuR8Pfggk1EYYbTaIoxc+Yv4o7cGQnH0Xy8+pQ+HbiW+ZnwhcD2LPf/prfq1nIWpAxjOkQ8uSMFWMtBLiVQ== + dependencies: + is-glob "^4.0.3" + micromatch "^4.0.5" + napi-wasm "^1.1.0" + +"@parcel/watcher-win32-arm64@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.0.tgz#87cdb16e0783e770197e52fb1dc027bb0c847154" + integrity sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig== + +"@parcel/watcher-win32-ia32@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.0.tgz#778c39b56da33e045ba21c678c31a9f9d7c6b220" + integrity sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA== + +"@parcel/watcher-win32-x64@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.0.tgz#33873876d0bbc588aacce38e90d1d7480ce81cb7" + integrity sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw== + +"@parcel/watcher@^2.4.1": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.5.0.tgz#5c88818b12b8de4307a9d3e6dc3e28eba0dfbd10" + integrity sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ== + dependencies: + detect-libc "^1.0.3" + is-glob "^4.0.3" + micromatch "^4.0.5" + node-addon-api "^7.0.0" + optionalDependencies: + "@parcel/watcher-android-arm64" "2.5.0" + "@parcel/watcher-darwin-arm64" "2.5.0" + "@parcel/watcher-darwin-x64" "2.5.0" + "@parcel/watcher-freebsd-x64" "2.5.0" + "@parcel/watcher-linux-arm-glibc" "2.5.0" + "@parcel/watcher-linux-arm-musl" "2.5.0" + "@parcel/watcher-linux-arm64-glibc" "2.5.0" + "@parcel/watcher-linux-arm64-musl" "2.5.0" + "@parcel/watcher-linux-x64-glibc" "2.5.0" + "@parcel/watcher-linux-x64-musl" "2.5.0" + "@parcel/watcher-win32-arm64" "2.5.0" + "@parcel/watcher-win32-ia32" "2.5.0" + "@parcel/watcher-win32-x64" "2.5.0" + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@pkgr/core@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" + integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== + +"@polka/url@^1.0.0-next.24": + version "1.0.0-next.28" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.28.tgz#d45e01c4a56f143ee69c54dd6b12eade9e270a73" + integrity sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw== + +"@redocly/ajv@^8.11.2": + version "8.11.2" + resolved "https://registry.yarnpkg.com/@redocly/ajv/-/ajv-8.11.2.tgz#46e1bf321ec0ac1e0fd31dea41a3d1fcbdcda0b5" + integrity sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js-replace "^1.0.1" + +"@redocly/config@^0.17.0": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@redocly/config/-/config-0.17.1.tgz#2def04cecf440dd78c0f102f53f3444fac050768" + integrity sha512-CEmvaJuG7pm2ylQg53emPmtgm4nW2nxBgwXzbVEHpGas/lGnMyN8Zlkgiz6rPw0unASg6VW3wlz27SOL5XFHYQ== + +"@redocly/openapi-core@^1.25.9": + version "1.26.1" + resolved "https://registry.yarnpkg.com/@redocly/openapi-core/-/openapi-core-1.26.1.tgz#d84299f09a3b4f8ca59bafcada7b4d4a040cf26b" + integrity sha512-xRuVZqMVRFzqjbUCpOTra4tbnmQMWsya996omZMV3WgD084Z6OWB3FXflhAp93E/yAmbWlWZpddw758AyoaLSw== + dependencies: + "@redocly/ajv" "^8.11.2" + "@redocly/config" "^0.17.0" + colorette "^1.2.0" + https-proxy-agent "^7.0.4" + js-levenshtein "^1.1.6" + js-yaml "^4.1.0" + minimatch "^5.0.1" + node-fetch "^2.6.1" + pluralize "^8.0.0" + yaml-ast-parser "0.0.43" + +"@rollup/plugin-alias@^5.1.1": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-alias/-/plugin-alias-5.1.1.tgz#53601d88cda8b1577aa130b4a6e452283605bf26" + integrity sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ== + +"@rollup/plugin-commonjs@^28.0.1": + version "28.0.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.2.tgz#193d7a86470f112b56927c1d821ee45951a819ea" + integrity sha512-BEFI2EDqzl+vA1rl97IDRZ61AIwGH093d9nz8+dThxJNH8oSoB7MjWvPCX3dkaK1/RCJ/1v/R1XB15FuSs0fQw== + dependencies: + "@rollup/pluginutils" "^5.0.1" + commondir "^1.0.1" + estree-walker "^2.0.2" + fdir "^6.2.0" + is-reference "1.2.1" + magic-string "^0.30.3" + picomatch "^4.0.2" + +"@rollup/plugin-inject@^5.0.5": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@rollup/plugin-inject/-/plugin-inject-5.0.5.tgz#616f3a73fe075765f91c5bec90176608bed277a3" + integrity sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg== + dependencies: + "@rollup/pluginutils" "^5.0.1" + estree-walker "^2.0.2" + magic-string "^0.30.3" + +"@rollup/plugin-json@^6.1.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-6.1.0.tgz#fbe784e29682e9bb6dee28ea75a1a83702e7b805" + integrity sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA== + dependencies: + "@rollup/pluginutils" "^5.1.0" + +"@rollup/plugin-node-resolve@^15.3.0": + version "15.3.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz#66008953c2524be786aa319d49e32f2128296a78" + integrity sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA== + dependencies: + "@rollup/pluginutils" "^5.0.1" + "@types/resolve" "1.20.2" + deepmerge "^4.2.2" + is-module "^1.0.0" + resolve "^1.22.1" + +"@rollup/plugin-replace@^6.0.1": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-6.0.2.tgz#2f565d312d681e4570ff376c55c5c08eb6f1908d" + integrity sha512-7QaYCf8bqF04dOy7w/eHmJeNExxTYwvKAmlSAH/EaWWUzbT0h5sbF6bktFoX/0F/0qwng5/dWFMyf3gzaM8DsQ== + dependencies: + "@rollup/pluginutils" "^5.0.1" + magic-string "^0.30.3" + +"@rollup/plugin-terser@^0.4.4": + version "0.4.4" + resolved "https://registry.yarnpkg.com/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz#15dffdb3f73f121aa4fbb37e7ca6be9aeea91962" + integrity sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A== + dependencies: + serialize-javascript "^6.0.1" + smob "^1.0.0" + terser "^5.17.4" + +"@rollup/pluginutils@^5.0.1", "@rollup/pluginutils@^5.1.0", "@rollup/pluginutils@^5.1.2", "@rollup/pluginutils@^5.1.3": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.4.tgz#bb94f1f9eaaac944da237767cdfee6c5b2262d4a" + integrity sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^4.0.2" + +"@rollup/rollup-android-arm-eabi@4.29.1": + version "4.29.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.29.1.tgz#9bd38df6a29afb7f0336d988bc8112af0c8816c0" + integrity sha512-ssKhA8RNltTZLpG6/QNkCSge+7mBQGUqJRisZ2MDQcEGaK93QESEgWK2iOpIDZ7k9zPVkG5AS3ksvD5ZWxmItw== + +"@rollup/rollup-android-arm64@4.29.1": + version "4.29.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.29.1.tgz#bd1a98390e15b76eeef907175a37c5f0f9e4d214" + integrity sha512-CaRfrV0cd+NIIcVVN/jx+hVLN+VRqnuzLRmfmlzpOzB87ajixsN/+9L5xNmkaUUvEbI5BmIKS+XTwXsHEb65Ew== + +"@rollup/rollup-darwin-arm64@4.29.1": + version "4.29.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.29.1.tgz#bc6fa8a2cc77b5f367424e5e994e3537524e6879" + integrity sha512-2ORr7T31Y0Mnk6qNuwtyNmy14MunTAMx06VAPI6/Ju52W10zk1i7i5U3vlDRWjhOI5quBcrvhkCHyF76bI7kEw== + +"@rollup/rollup-darwin-x64@4.29.1": + version "4.29.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.29.1.tgz#76059c91f06b17406347b127df10f065283b2e61" + integrity sha512-j/Ej1oanzPjmN0tirRd5K2/nncAhS9W6ICzgxV+9Y5ZsP0hiGhHJXZ2JQ53iSSjj8m6cRY6oB1GMzNn2EUt6Ng== + +"@rollup/rollup-freebsd-arm64@4.29.1": + version "4.29.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.29.1.tgz#83178315c0be4b4c8c1fd835e1952d2dc1eb4e6e" + integrity sha512-91C//G6Dm/cv724tpt7nTyP+JdN12iqeXGFM1SqnljCmi5yTXriH7B1r8AD9dAZByHpKAumqP1Qy2vVNIdLZqw== + +"@rollup/rollup-freebsd-x64@4.29.1": + version "4.29.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.29.1.tgz#1ef24fa0576bf7899a0a0a649156606dbd7a0d46" + integrity sha512-hEioiEQ9Dec2nIRoeHUP6hr1PSkXzQaCUyqBDQ9I9ik4gCXQZjJMIVzoNLBRGet+hIUb3CISMh9KXuCcWVW/8w== + +"@rollup/rollup-linux-arm-gnueabihf@4.29.1": + version "4.29.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.29.1.tgz#443a6f5681bf4611caae42988994a6d8ee676216" + integrity sha512-Py5vFd5HWYN9zxBv3WMrLAXY3yYJ6Q/aVERoeUFwiDGiMOWsMs7FokXihSOaT/PMWUty/Pj60XDQndK3eAfE6A== + +"@rollup/rollup-linux-arm-musleabihf@4.29.1": + version "4.29.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.29.1.tgz#9738b27184102228637a683e5f35b22ea352394f" + integrity sha512-RiWpGgbayf7LUcuSNIbahr0ys2YnEERD4gYdISA06wa0i8RALrnzflh9Wxii7zQJEB2/Eh74dX4y/sHKLWp5uQ== + +"@rollup/rollup-linux-arm64-gnu@4.29.1": + version "4.29.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.29.1.tgz#b5e9d5e30ff36a19bedd29c715ba18a1889ff269" + integrity sha512-Z80O+taYxTQITWMjm/YqNoe9d10OX6kDh8X5/rFCMuPqsKsSyDilvfg+vd3iXIqtfmp+cnfL1UrYirkaF8SBZA== + +"@rollup/rollup-linux-arm64-musl@4.29.1": + version "4.29.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.29.1.tgz#1d8f68f0829b57f746ec03432ad046f1af014a98" + integrity sha512-fOHRtF9gahwJk3QVp01a/GqS4hBEZCV1oKglVVq13kcK3NeVlS4BwIFzOHDbmKzt3i0OuHG4zfRP0YoG5OF/rA== + +"@rollup/rollup-linux-loongarch64-gnu@4.29.1": + version "4.29.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.29.1.tgz#07027feb883408e74a3002c8e50caaedd288ae38" + integrity sha512-5a7q3tnlbcg0OodyxcAdrrCxFi0DgXJSoOuidFUzHZ2GixZXQs6Tc3CHmlvqKAmOs5eRde+JJxeIf9DonkmYkw== + +"@rollup/rollup-linux-powerpc64le-gnu@4.29.1": + version "4.29.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.29.1.tgz#544ce1b0847a9c1240425e86f33daceac7ec4e12" + integrity sha512-9b4Mg5Yfz6mRnlSPIdROcfw1BU22FQxmfjlp/CShWwO3LilKQuMISMTtAu/bxmmrE6A902W2cZJuzx8+gJ8e9w== + +"@rollup/rollup-linux-riscv64-gnu@4.29.1": + version "4.29.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.29.1.tgz#64be13d51852ec1e2dfbd25d997ed5f42f35ea6d" + integrity sha512-G5pn0NChlbRM8OJWpJFMX4/i8OEU538uiSv0P6roZcbpe/WfhEO+AT8SHVKfp8qhDQzaz7Q+1/ixMy7hBRidnQ== + +"@rollup/rollup-linux-s390x-gnu@4.29.1": + version "4.29.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.29.1.tgz#31f51e1e05c6264552d03875d9e2e673f0fd86e3" + integrity sha512-WM9lIkNdkhVwiArmLxFXpWndFGuOka4oJOZh8EP3Vb8q5lzdSCBuhjavJsw68Q9AKDGeOOIHYzYm4ZFvmWez5g== + +"@rollup/rollup-linux-x64-gnu@4.29.1": + version "4.29.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.29.1.tgz#f4c95b26f4ad69ebdb64b42f0ae4da2a0f617958" + integrity sha512-87xYCwb0cPGZFoGiErT1eDcssByaLX4fc0z2nRM6eMtV9njAfEE6OW3UniAoDhX4Iq5xQVpE6qO9aJbCFumKYQ== + +"@rollup/rollup-linux-x64-musl@4.29.1": + version "4.29.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.29.1.tgz#ab7be89192f72beb9ea6e2386186fefde4f69d82" + integrity sha512-xufkSNppNOdVRCEC4WKvlR1FBDyqCSCpQeMMgv9ZyXqqtKBfkw1yfGMTUTs9Qsl6WQbJnsGboWCp7pJGkeMhKA== + +"@rollup/rollup-win32-arm64-msvc@4.29.1": + version "4.29.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.29.1.tgz#7f12efb8240b238346951559998802722944421e" + integrity sha512-F2OiJ42m77lSkizZQLuC+jiZ2cgueWQL5YC9tjo3AgaEw+KJmVxHGSyQfDUoYR9cci0lAywv2Clmckzulcq6ig== + +"@rollup/rollup-win32-ia32-msvc@4.29.1": + version "4.29.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.29.1.tgz#353d14d6eee943004d129796e4feddd3aa260921" + integrity sha512-rYRe5S0FcjlOBZQHgbTKNrqxCBUmgDJem/VQTCcTnA2KCabYSWQDrytOzX7avb79cAAweNmMUb/Zw18RNd4mng== + +"@rollup/rollup-win32-x64-msvc@4.29.1": + version "4.29.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.29.1.tgz#c82f04a09ba481e13857d6f2516e072aaa51b7f4" + integrity sha512-+10CMg9vt1MoHj6x1pxyjPSMjHTIlqs8/tBztXvPAx24SKs9jwVnKqHJumlH/IzhaPUaj3T6T6wfZr8okdXaIg== + +"@sindresorhus/merge-streams@^2.1.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz#719df7fb41766bc143369eaa0dd56d8dc87c9958" + integrity sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg== + +"@stylistic/eslint-plugin@^2.12.1": + version "2.12.1" + resolved "https://registry.yarnpkg.com/@stylistic/eslint-plugin/-/eslint-plugin-2.12.1.tgz#e341beb4e4315084d8be20bceeeda7d8a46f079f" + integrity sha512-fubZKIHSPuo07FgRTn6S4Nl0uXPRPYVNpyZzIDGfp7Fny6JjNus6kReLD7NI380JXi4HtUTSOZ34LBuNPO1XLQ== + dependencies: + "@typescript-eslint/utils" "^8.13.0" + eslint-visitor-keys "^4.2.0" + espree "^10.3.0" + estraverse "^5.3.0" + picomatch "^4.0.2" + +"@tanstack/virtual-core@3.11.2": + version "3.11.2" + resolved "https://registry.yarnpkg.com/@tanstack/virtual-core/-/virtual-core-3.11.2.tgz#00409e743ac4eea9afe5b7708594d5fcebb00212" + integrity sha512-vTtpNt7mKCiZ1pwU9hfKPhpdVO2sVzFQsxoVBGtOSHxlrRRzYr8iQ2TlwbAcRYCcEiZ9ECAM8kBzH0v2+VzfKw== + +"@tanstack/vue-virtual@^3.0.0-beta.60": + version "3.11.2" + resolved "https://registry.yarnpkg.com/@tanstack/vue-virtual/-/vue-virtual-3.11.2.tgz#c1a7f1a3e20cb1eee7a81c58b5b21f6a381cbaab" + integrity sha512-y0b1p1FTlzxcSt/ZdGWY1AZ52ddwSU69pvFRYAELUSdLLxV8QOPe9dyT/KATO43UCb3DAwiyzi96h2IoYstBOQ== + dependencies: + "@tanstack/virtual-core" "3.11.2" + +"@trysound/sax@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" + integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== + +"@types/doctrine@^0.0.9": + version "0.0.9" + resolved "https://registry.yarnpkg.com/@types/doctrine/-/doctrine-0.0.9.tgz#d86a5f452a15e3e3113b99e39616a9baa0f9863f" + integrity sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA== + +"@types/estree@*", "@types/estree@1.0.6", "@types/estree@^1.0.0", "@types/estree@^1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" + integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== + +"@types/http-proxy@^1.17.15": + version "1.17.15" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.15.tgz#12118141ce9775a6499ecb4c01d02f90fc839d36" + integrity sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ== + dependencies: + "@types/node" "*" + +"@types/json-schema@^7.0.15": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/node@*": + version "22.10.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.2.tgz#a485426e6d1fdafc7b0d4c7b24e2c78182ddabb9" + integrity sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ== + dependencies: + undici-types "~6.20.0" + +"@types/normalize-package-data@^2.4.0": + version "2.4.4" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" + integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== + +"@types/parse-path@^7.0.0": + version "7.0.3" + resolved "https://registry.yarnpkg.com/@types/parse-path/-/parse-path-7.0.3.tgz#cec2da2834ab58eb2eb579122d9a1fc13bd7ef36" + integrity sha512-LriObC2+KYZD3FzCrgWGv/qufdUy4eXrxcLgQMfYXgPbLIecKIsVBaQgUPmxSSLcjmYbDTQbMgr6qr6l/eb7Bg== + +"@types/resolve@1.20.2": + version "1.20.2" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" + integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== + +"@typescript-eslint/eslint-plugin@^8.18.1": + version "8.18.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.18.2.tgz#c78e363ab5fe3b21dd1c90d8be9581534417f78e" + integrity sha512-adig4SzPLjeQ0Tm+jvsozSGiCliI2ajeURDGHjZ2llnA+A67HihCQ+a3amtPhUakd1GlwHxSRvzOZktbEvhPPg== + dependencies: + "@eslint-community/regexpp" "^4.10.0" + "@typescript-eslint/scope-manager" "8.18.2" + "@typescript-eslint/type-utils" "8.18.2" + "@typescript-eslint/utils" "8.18.2" + "@typescript-eslint/visitor-keys" "8.18.2" + graphemer "^1.4.0" + ignore "^5.3.1" + natural-compare "^1.4.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/parser@^8.18.1": + version "8.18.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.18.2.tgz#0379a2e881d51d8fcf7ebdfa0dd18eee79182ce2" + integrity sha512-y7tcq4StgxQD4mDr9+Jb26dZ+HTZ/SkfqpXSiqeUXZHxOUyjWDKsmwKhJ0/tApR08DgOhrFAoAhyB80/p3ViuA== + dependencies: + "@typescript-eslint/scope-manager" "8.18.2" + "@typescript-eslint/types" "8.18.2" + "@typescript-eslint/typescript-estree" "8.18.2" + "@typescript-eslint/visitor-keys" "8.18.2" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@8.18.2", "@typescript-eslint/scope-manager@^8.1.0": + version "8.18.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.18.2.tgz#d193c200d61eb0ddec5987c8e48c9d4e1c0510bd" + integrity sha512-YJFSfbd0CJjy14r/EvWapYgV4R5CHzptssoag2M7y3Ra7XNta6GPAJPPP5KGB9j14viYXyrzRO5GkX7CRfo8/g== + dependencies: + "@typescript-eslint/types" "8.18.2" + "@typescript-eslint/visitor-keys" "8.18.2" + +"@typescript-eslint/type-utils@8.18.2": + version "8.18.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.18.2.tgz#5ad07e09002eee237591881df674c1c0c91ca52f" + integrity sha512-AB/Wr1Lz31bzHfGm/jgbFR0VB0SML/hd2P1yxzKDM48YmP7vbyJNHRExUE/wZsQj2wUCvbWH8poNHFuxLqCTnA== + dependencies: + "@typescript-eslint/typescript-estree" "8.18.2" + "@typescript-eslint/utils" "8.18.2" + debug "^4.3.4" + ts-api-utils "^1.3.0" + +"@typescript-eslint/types@8.18.2", "@typescript-eslint/types@^8.18.1": + version "8.18.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.18.2.tgz#5ebad5b384c8aa1c0f86cee1c61bcdbe7511f547" + integrity sha512-Z/zblEPp8cIvmEn6+tPDIHUbRu/0z5lqZ+NvolL5SvXWT5rQy7+Nch83M0++XzO0XrWRFWECgOAyE8bsJTl1GQ== + +"@typescript-eslint/typescript-estree@8.18.2": + version "8.18.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.2.tgz#fffb85527f8304e29bfbbdc712f4515da9f8b47c" + integrity sha512-WXAVt595HjpmlfH4crSdM/1bcsqh+1weFRWIa9XMTx/XHZ9TCKMcr725tLYqWOgzKdeDrqVHxFotrvWcEsk2Tg== + dependencies: + "@typescript-eslint/types" "8.18.2" + "@typescript-eslint/visitor-keys" "8.18.2" + 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 "^1.3.0" + +"@typescript-eslint/utils@8.18.2", "@typescript-eslint/utils@^8.1.0", "@typescript-eslint/utils@^8.13.0", "@typescript-eslint/utils@^8.18.1": + version "8.18.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.18.2.tgz#a2635f71904a84f9e47fe1b6f65a6d944ff1adf9" + integrity sha512-Cr4A0H7DtVIPkauj4sTSXVl+VBWewE9/o40KcF3TV9aqDEOWoXF3/+oRXNby3DYzZeCATvbdksYsGZzplwnK/Q== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@typescript-eslint/scope-manager" "8.18.2" + "@typescript-eslint/types" "8.18.2" + "@typescript-eslint/typescript-estree" "8.18.2" + +"@typescript-eslint/visitor-keys@8.18.2": + version "8.18.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.2.tgz#b3e434b701f086b10a7c82416ebc56899d27ef2f" + integrity sha512-zORcwn4C3trOWiCqFQP1x6G3xTRyZ1LYydnj51cRnJ6hxBlr/cKPckk+PKPUw/fXmvfKTcw7bwY3w9izgx5jZw== + dependencies: + "@typescript-eslint/types" "8.18.2" + eslint-visitor-keys "^4.2.0" + +"@unhead/dom@1.11.14", "@unhead/dom@^1.11.11": + version "1.11.14" + resolved "https://registry.yarnpkg.com/@unhead/dom/-/dom-1.11.14.tgz#30e39d9848c964e5038c98e2de0de8bd0737d77a" + integrity sha512-FaHCWo9JR4h7PCpSRaXuMC6ifXOuBzlI0PD1MmUcxND2ayDl1d6DauIbN8TUf9TDRxNkrK1Ehb0OCXjC1ZJtrg== + dependencies: + "@unhead/schema" "1.11.14" + "@unhead/shared" "1.11.14" + +"@unhead/schema@1.11.14": + version "1.11.14" + resolved "https://registry.yarnpkg.com/@unhead/schema/-/schema-1.11.14.tgz#fec0c3947144001c12d68c96a8585abaa6771f1b" + integrity sha512-V9W9u5tF1/+TiLqxu+Qvh1ShoMDkPEwHoEo4DKdDG6ko7YlbzFfDxV6el9JwCren45U/4Vy/4Xi7j8OH02wsiA== + dependencies: + hookable "^5.5.3" + zhead "^2.2.4" + +"@unhead/shared@1.11.14", "@unhead/shared@^1.11.11": + version "1.11.14" + resolved "https://registry.yarnpkg.com/@unhead/shared/-/shared-1.11.14.tgz#b001403cfbdb35c8a12a9231f0734a91d2460213" + integrity sha512-41Qt4PJKYVrEGOTXgBJLRYrEu3S7n5stoB4TFC6312CIBVedXqg7voHQurn32LVDjpfJftjLa2ggCjpqdqoRDw== + dependencies: + "@unhead/schema" "1.11.14" + +"@unhead/ssr@^1.11.11": + version "1.11.14" + resolved "https://registry.yarnpkg.com/@unhead/ssr/-/ssr-1.11.14.tgz#06ad1b0ed04ba84e61fbfd8175a8402e1e38b980" + integrity sha512-JBF2f5PWPtpqBx/dan+4vL/dartSp8Nmd011zkT9qPYmizxO+/fsB1WQalbis1KszkfFatb6c4rO+hm0d6acOA== + dependencies: + "@unhead/schema" "1.11.14" + "@unhead/shared" "1.11.14" + +"@unhead/vue@^1.11.11": + version "1.11.14" + resolved "https://registry.yarnpkg.com/@unhead/vue/-/vue-1.11.14.tgz#8d534bb7101882a70e2c0db1c49aefa3cea216d1" + integrity sha512-6nfi7FsZ936gscmj+1nUB1pybiFMFbnuEFo7B/OY2klpLWsYDUOVvpsJhbu7C3u7wkTlJXglmAk6jdd8I7WgZA== + dependencies: + "@unhead/schema" "1.11.14" + "@unhead/shared" "1.11.14" + defu "^6.1.4" + hookable "^5.5.3" + unhead "1.11.14" + +"@vercel/nft@^0.27.5": + version "0.27.10" + resolved "https://registry.yarnpkg.com/@vercel/nft/-/nft-0.27.10.tgz#f51c391674cdc285cdd004fa1c3822374b739eb8" + integrity sha512-zbaF9Wp/NsZtKLE4uVmL3FyfFwlpDyuymQM1kPbeT0mVOHKDQQNjnnfslB3REg3oZprmNFJuh3pkHBk2qAaizg== + dependencies: + "@mapbox/node-pre-gyp" "^2.0.0-rc.0" + "@rollup/pluginutils" "^5.1.3" + acorn "^8.6.0" + acorn-import-attributes "^1.9.5" + async-sema "^3.1.1" + bindings "^1.4.0" + estree-walker "2.0.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + node-gyp-build "^4.2.2" + picomatch "^4.0.2" + resolve-from "^5.0.0" + +"@vitejs/plugin-vue-jsx@^4.1.0": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-4.1.1.tgz#180eef4d4ca42e9b46a2150caa605c9ae2272be7" + integrity sha512-uMJqv/7u1zz/9NbWAD3XdjaY20tKTf17XVfQ9zq4wY1BjsB/PjpJPMe2xiG39QpP4ZdhYNhm4Hvo66uJrykNLA== + dependencies: + "@babel/core" "^7.26.0" + "@babel/plugin-transform-typescript" "^7.25.9" + "@vue/babel-plugin-jsx" "^1.2.5" + +"@vitejs/plugin-vue@^5.2.0": + version "5.2.1" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-5.2.1.tgz#d1491f678ee3af899f7ae57d9c21dc52a65c7133" + integrity sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ== + +"@voxpelli/config-array-find-files@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@voxpelli/config-array-find-files/-/config-array-find-files-1.2.1.tgz#ef92708b7400c9022c6d83be86446b289da33248" + integrity sha512-mRqVGLcK+yU+fQyaHAL9Xbhw633spi+VGurX1+gwSiZS8SzX63WzOmGi3qXO7mn4cozJcExyzIC5WmbUFJWQOw== + dependencies: + "@nodelib/fs.walk" "^2.0.0" + +"@vue-macros/common@^1.15.0": + version "1.15.1" + resolved "https://registry.yarnpkg.com/@vue-macros/common/-/common-1.15.1.tgz#cfb607cbfae49b344492bdc93c072dbe51e38f89" + integrity sha512-O0ZXaladWXwHplQnSjxLbB/G1KpdWCUNJPNYVHIxHonGex1BGpoB4fBZZLgddHgAiy18VZG/Iu5L0kwG+SV7JQ== + dependencies: + "@babel/types" "^7.26.3" + "@rollup/pluginutils" "^5.1.3" + "@vue/compiler-sfc" "^3.5.13" + ast-kit "^1.3.2" + local-pkg "^0.5.1" + magic-string-ast "^0.6.3" + +"@vue/babel-helper-vue-transform-on@1.2.5": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.5.tgz#b9e195b92bfa8d15d5aa9581ca01cb702dbcc19d" + integrity sha512-lOz4t39ZdmU4DJAa2hwPYmKc8EsuGa2U0L9KaZaOJUt0UwQNjNA3AZTq6uEivhOKhhG1Wvy96SvYBoFmCg3uuw== + +"@vue/babel-plugin-jsx@^1.1.5", "@vue/babel-plugin-jsx@^1.2.5": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.5.tgz#77f4f9f189d00c24ebd587ab84ae615dfa1c3abb" + integrity sha512-zTrNmOd4939H9KsRIGmmzn3q2zvv1mjxkYZHgqHZgDrXz5B1Q3WyGEjO2f+JrmKghvl1JIRcvo63LgM1kH5zFg== + dependencies: + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/plugin-syntax-jsx" "^7.24.7" + "@babel/template" "^7.25.0" + "@babel/traverse" "^7.25.6" + "@babel/types" "^7.25.6" + "@vue/babel-helper-vue-transform-on" "1.2.5" + "@vue/babel-plugin-resolve-type" "1.2.5" + html-tags "^3.3.1" + svg-tags "^1.0.0" + +"@vue/babel-plugin-resolve-type@1.2.5": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.5.tgz#f6ed0d39987fe0158370659b73156c55e80d17b5" + integrity sha512-U/ibkQrf5sx0XXRnUZD1mo5F7PkpKyTbfXM3a3rC4YnUz6crHEz9Jg09jzzL6QYlXNto/9CePdOg/c87O4Nlfg== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/parser" "^7.25.6" + "@vue/compiler-sfc" "^3.5.3" + +"@vue/compiler-core@3.5.13": + version "3.5.13" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.5.13.tgz#b0ae6c4347f60c03e849a05d34e5bf747c9bda05" + integrity sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q== + dependencies: + "@babel/parser" "^7.25.3" + "@vue/shared" "3.5.13" + entities "^4.5.0" + estree-walker "^2.0.2" + source-map-js "^1.2.0" + +"@vue/compiler-dom@3.5.13", "@vue/compiler-dom@^3.3.4": + version "3.5.13" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz#bb1b8758dbc542b3658dda973b98a1c9311a8a58" + integrity sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA== + dependencies: + "@vue/compiler-core" "3.5.13" + "@vue/shared" "3.5.13" + +"@vue/compiler-sfc@3.5.13", "@vue/compiler-sfc@^3.5.13", "@vue/compiler-sfc@^3.5.3": + version "3.5.13" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz#461f8bd343b5c06fac4189c4fef8af32dea82b46" + integrity sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ== + dependencies: + "@babel/parser" "^7.25.3" + "@vue/compiler-core" "3.5.13" + "@vue/compiler-dom" "3.5.13" + "@vue/compiler-ssr" "3.5.13" + "@vue/shared" "3.5.13" + estree-walker "^2.0.2" + magic-string "^0.30.11" + postcss "^8.4.48" + source-map-js "^1.2.0" + +"@vue/compiler-ssr@3.5.13": + version "3.5.13" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz#e771adcca6d3d000f91a4277c972a996d07f43ba" + integrity sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA== + dependencies: + "@vue/compiler-dom" "3.5.13" + "@vue/shared" "3.5.13" + +"@vue/devtools-api@^6.6.4": + version "6.6.4" + resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz#cbe97fe0162b365edc1dba80e173f90492535343" + integrity sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g== + +"@vue/devtools-core@7.6.8": + version "7.6.8" + resolved "https://registry.yarnpkg.com/@vue/devtools-core/-/devtools-core-7.6.8.tgz#3b5552e0d71b5f6598c9db9ef8c8f4558577fcc1" + integrity sha512-8X4roysTwzQ94o7IobjVcOd1aZF5iunikrMrHPI2uUdigZCi2kFTQc7ffYiFiTNaLElCpjOhCnM7bo7aK1yU7A== + dependencies: + "@vue/devtools-kit" "^7.6.8" + "@vue/devtools-shared" "^7.6.8" + mitt "^3.0.1" + nanoid "^5.0.9" + pathe "^1.1.2" + vite-hot-client "^0.2.4" + +"@vue/devtools-kit@7.6.8", "@vue/devtools-kit@^7.6.8": + version "7.6.8" + resolved "https://registry.yarnpkg.com/@vue/devtools-kit/-/devtools-kit-7.6.8.tgz#c9e98470f327d93d8d6cec8aa34cf071a1ad949b" + integrity sha512-JhJ8M3sPU+v0P2iZBF2DkdmR9L0dnT5RXJabJqX6o8KtFs3tebdvfoXV2Dm3BFuqeECuMJIfF1aCzSt+WQ4wrw== + dependencies: + "@vue/devtools-shared" "^7.6.8" + birpc "^0.2.19" + hookable "^5.5.3" + mitt "^3.0.1" + perfect-debounce "^1.0.0" + speakingurl "^14.0.1" + superjson "^2.2.1" + +"@vue/devtools-shared@^7.6.8": + version "7.6.8" + resolved "https://registry.yarnpkg.com/@vue/devtools-shared/-/devtools-shared-7.6.8.tgz#ddff5e3678353a286c733df5b26d058479d521f1" + integrity sha512-9MBPO5Z3X1nYGFqTJyohl6Gmf/J7UNN1oicHdyzBVZP4jnhZ4c20MgtaHDIzWmHDHCMYVS5bwKxT3jxh7gOOKA== + dependencies: + rfdc "^1.4.1" + +"@vue/reactivity@3.5.13": + version "3.5.13" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.5.13.tgz#b41ff2bb865e093899a22219f5b25f97b6fe155f" + integrity sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg== + dependencies: + "@vue/shared" "3.5.13" + +"@vue/runtime-core@3.5.13": + version "3.5.13" + resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.5.13.tgz#1fafa4bf0b97af0ebdd9dbfe98cd630da363a455" + integrity sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw== + dependencies: + "@vue/reactivity" "3.5.13" + "@vue/shared" "3.5.13" + +"@vue/runtime-dom@3.5.13": + version "3.5.13" + resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz#610fc795de9246300e8ae8865930d534e1246215" + integrity sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog== + dependencies: + "@vue/reactivity" "3.5.13" + "@vue/runtime-core" "3.5.13" + "@vue/shared" "3.5.13" + csstype "^3.1.3" + +"@vue/server-renderer@3.5.13": + version "3.5.13" + resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.5.13.tgz#429ead62ee51de789646c22efe908e489aad46f7" + integrity sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA== + dependencies: + "@vue/compiler-ssr" "3.5.13" + "@vue/shared" "3.5.13" + +"@vue/shared@3.5.13", "@vue/shared@^3.5.13": + version "3.5.13" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.5.13.tgz#87b309a6379c22b926e696893237826f64339b6f" + integrity sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ== + +abbrev@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" + integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== + +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + +accepts@^1.3.5: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-import-attributes@^1.9.5: + version "1.9.5" + resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef" + integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ== + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@8.14.0, acorn@^8.14.0, acorn@^8.6.0, acorn@^8.8.2, acorn@^8.9.0: + version "8.14.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" + integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== + +agent-base@^7.1.2: + version "7.1.3" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.3.tgz#29435eb821bc4194633a5b89e5bc4703bafc25a1" + integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw== + +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-colors@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" + integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + +anymatch@^3.1.3, anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +archiver-utils@^5.0.0, archiver-utils@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-5.0.2.tgz#63bc719d951803efc72cf961a56ef810760dd14d" + integrity sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA== + dependencies: + glob "^10.0.0" + graceful-fs "^4.2.0" + is-stream "^2.0.1" + lazystream "^1.0.0" + lodash "^4.17.15" + normalize-path "^3.0.0" + readable-stream "^4.0.0" + +archiver@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-7.0.1.tgz#c9d91c350362040b8927379c7aa69c0655122f61" + integrity sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ== + dependencies: + archiver-utils "^5.0.2" + async "^3.2.4" + buffer-crc32 "^1.0.0" + readable-stream "^4.0.0" + readdir-glob "^1.1.2" + tar-stream "^3.0.0" + zip-stream "^6.0.1" + +are-docs-informative@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/are-docs-informative/-/are-docs-informative-0.0.2.tgz#387f0e93f5d45280373d387a59d34c96db321963" + integrity sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig== + +arg@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +ast-kit@^1.0.1, ast-kit@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/ast-kit/-/ast-kit-1.3.2.tgz#181f90e4f95e02cb013d3ac516230deef553cd2e" + integrity sha512-gdvX700WVC6sHCJQ7bJGfDvtuKAh6Sa6weIZROxfzUZKP7BjvB8y0SMlM/o4omSQ3L60PQSJROBJsb0vEViVnA== + dependencies: + "@babel/parser" "^7.26.2" + pathe "^1.1.2" + +ast-walker-scope@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/ast-walker-scope/-/ast-walker-scope-0.6.2.tgz#b827e8949c129802f76fe0f142e95fd7efda57dc" + integrity sha512-1UWOyC50xI3QZkRuDj6PqDtpm1oHWtYs+NQGwqL/2R11eN3Q81PHAHPM0SWW3BNQm53UDwS//Jv8L4CCVLM1bQ== + dependencies: + "@babel/parser" "^7.25.3" + ast-kit "^1.0.1" + +async-sema@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/async-sema/-/async-sema-3.1.1.tgz#e527c08758a0f8f6f9f15f799a173ff3c40ea808" + integrity sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg== + +async@^2.6.4: + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== + dependencies: + lodash "^4.17.14" + +async@^3.2.4: + version "3.2.6" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +autoprefixer@^10.4.20: + version "10.4.20" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.20.tgz#5caec14d43976ef42e32dcb4bd62878e96be5b3b" + integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g== + dependencies: + browserslist "^4.23.3" + caniuse-lite "^1.0.30001646" + fraction.js "^4.3.7" + normalize-range "^0.1.2" + picocolors "^1.0.1" + postcss-value-parser "^4.2.0" + +b4a@^1.6.4: + version "1.6.7" + resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.7.tgz#a99587d4ebbfbd5a6e3b21bdb5d5fa385767abe4" + integrity sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +bare-events@^2.2.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.5.0.tgz#305b511e262ffd8b9d5616b056464f8e1b3329cc" + integrity sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A== + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + +bindings@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +birpc@^0.2.19: + version "0.2.19" + resolved "https://registry.yarnpkg.com/birpc/-/birpc-0.2.19.tgz#cdd183a4a70ba103127d49765b4a71349da5a0ca" + integrity sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ== + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.3, braces@~3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +browserslist@^4.0.0, browserslist@^4.23.3, browserslist@^4.24.0, browserslist@^4.24.2: + version "4.24.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.3.tgz#5fc2725ca8fb3c1432e13dac278c7cc103e026d2" + integrity sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA== + dependencies: + caniuse-lite "^1.0.30001688" + electron-to-chromium "^1.5.73" + node-releases "^2.0.19" + update-browserslist-db "^1.1.1" + +buffer-crc32@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-1.0.0.tgz#a10993b9055081d55304bd9feb4a072de179f405" + integrity sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w== + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +builtin-modules@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== + +bundle-name@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889" + integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== + dependencies: + run-applescript "^7.0.0" + +bundle-require@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/bundle-require/-/bundle-require-5.1.0.tgz#8db66f41950da3d77af1ef3322f4c3e04009faee" + integrity sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA== + dependencies: + load-tsconfig "^0.2.3" + +c12@2.0.1, c12@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/c12/-/c12-2.0.1.tgz#5702d280b31a08abba39833494c9b1202f0f5aec" + integrity sha512-Z4JgsKXHG37C6PYUtIxCfLJZvo6FyhHJoClwwb9ftUkLpPSkuYqn6Tr+vnaN8hymm0kIbcg6Ey3kv/Q71k5w/A== + dependencies: + chokidar "^4.0.1" + confbox "^0.1.7" + defu "^6.1.4" + dotenv "^16.4.5" + giget "^1.2.3" + jiti "^2.3.0" + mlly "^1.7.1" + ohash "^1.1.4" + pathe "^1.1.2" + perfect-debounce "^1.0.0" + pkg-types "^1.2.0" + rc9 "^2.1.2" + +cac@^6.7.14: + version "6.7.14" + resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" + integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== + +cache-content-type@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-content-type/-/cache-content-type-1.0.1.tgz#035cde2b08ee2129f4a8315ea8f00a00dba1453c" + integrity sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA== + dependencies: + mime-types "^2.1.18" + ylru "^1.2.0" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase-css@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001688: + version "1.0.30001690" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001690.tgz#f2d15e3aaf8e18f76b2b8c1481abde063b8104c8" + integrity sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w== + +chalk@^4.0.0, chalk@^4.1.1, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +change-case@^5.4.4: + version "5.4.4" + resolved "https://registry.yarnpkg.com/change-case/-/change-case-5.4.4.tgz#0d52b507d8fb8f204343432381d1a6d7bff97a02" + integrity sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w== + +chokidar@^3.5.1, chokidar@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chokidar@^4.0.1, chokidar@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30" + integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== + dependencies: + readdirp "^4.0.1" + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +chownr@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-3.0.0.tgz#9855e64ecd240a9cc4267ce8a4aa5d24a1da15e4" + integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g== + +ci-info@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.1.0.tgz#92319d2fa29d2620180ea5afed31f589bc98cf83" + integrity sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A== + +citty@^0.1.5, citty@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/citty/-/citty-0.1.6.tgz#0f7904da1ed4625e1a9ea7e0fa780981aab7c5e4" + integrity sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ== + dependencies: + consola "^3.2.3" + +clean-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clean-regexp/-/clean-regexp-1.0.0.tgz#8df7c7aae51fd36874e8f8d05b9180bc11a3fed7" + integrity sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw== + dependencies: + escape-string-regexp "^1.0.5" + +clear@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/clear/-/clear-0.1.0.tgz#b81b1e03437a716984fd7ac97c87d73bdfe7048a" + integrity sha512-qMjRnoL+JDPJHeLePZJuao6+8orzHMGP04A8CdwCNsKhRbOnKRjefxONR7bwILT3MHecxKBjHkKL/tkZ8r4Uzw== + +clipboardy@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-4.0.0.tgz#e73ced93a76d19dd379ebf1f297565426dffdca1" + integrity sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w== + dependencies: + execa "^8.0.1" + is-wsl "^3.1.0" + is64bit "^2.0.0" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +cluster-key-slot@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" + integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colord@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" + integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== + +colorette@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" + integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +commander@^6.0.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" + integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== + +commander@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commander@^8.0.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +comment-parser@1.4.1, comment-parser@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.4.1.tgz#bdafead37961ac079be11eb7ec65c4d021eaf9cc" + integrity sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +compatx@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/compatx/-/compatx-0.1.8.tgz#af6f61910ade6ce1073c0fdff23c786bcd75c026" + integrity sha512-jcbsEAR81Bt5s1qOFymBufmCbXCXbk0Ql+K5ouj6gCyx2yHlu6AgmGIi9HxfKixpUDO5bCFJUHQ5uM6ecbTebw== + +compress-commons@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-6.0.2.tgz#26d31251a66b9d6ba23a84064ecd3a6a71d2609e" + integrity sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg== + dependencies: + crc-32 "^1.2.0" + crc32-stream "^6.0.0" + is-stream "^2.0.1" + normalize-path "^3.0.0" + readable-stream "^4.0.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +confbox@^0.1.7, confbox@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.8.tgz#820d73d3b3c82d9bd910652c5d4d599ef8ff8b06" + integrity sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w== + +consola@^3.2.3, consola@^3.3.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/consola/-/consola-3.3.1.tgz#e60b4bfcd9e36cd766cc9afe2c93c14fe64c9356" + integrity sha512-GyKnPG3/I+a4RtJxgHquJXWr70g9I3c4NT3dvqh0LPHQP2nZFQBOBszb7a5u/pGzqr40AKplQA6UxM1BSynSXg== + +content-disposition@~0.5.2: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +cookie-es@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cookie-es/-/cookie-es-1.2.2.tgz#18ceef9eb513cac1cb6c14bcbf8bdb2679b34821" + integrity sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg== + +cookies@~0.9.0: + version "0.9.1" + resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.9.1.tgz#3ffed6f60bb4fb5f146feeedba50acc418af67e3" + integrity sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw== + dependencies: + depd "~2.0.0" + keygrip "~1.1.0" + +copy-anything@^3.0.2: + version "3.0.5" + resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-3.0.5.tgz#2d92dce8c498f790fa7ad16b01a1ae5a45b020a0" + integrity sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w== + dependencies: + is-what "^4.1.8" + +core-js-compat@^3.38.1: + version "3.39.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.39.0.tgz#b12dccb495f2601dc860bdbe7b4e3ffa8ba63f61" + integrity sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw== + dependencies: + browserslist "^4.24.2" + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +crc-32@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + +crc32-stream@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-6.0.0.tgz#8529a3868f8b27abb915f6c3617c0fadedbf9430" + integrity sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g== + dependencies: + crc-32 "^1.2.0" + readable-stream "^4.0.0" + +croner@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/croner/-/croner-9.0.0.tgz#1db62160142cf32eb22622e9ae27ba29156883f7" + integrity sha512-onMB0OkDjkXunhdW9htFjEhqrD54+M94i6ackoUkjHKbRnXdyEyKRelp4nJ1kAz32+s27jP1FsebpJCVl0BsvA== + +cronstrue@^2.52.0: + version "2.52.0" + resolved "https://registry.yarnpkg.com/cronstrue/-/cronstrue-2.52.0.tgz#00af1a8dcf76a1dece149e4416db823105b28cdb" + integrity sha512-NKgHbWkSZXJUcaBHSsyzC8eegD6bBd4O0oCI6XMIJ+y4Bq3v4w7sY3wfWoKPuVlq9pQHRB6od0lmKpIqi8TlKA== + +cross-spawn@^7.0.0, cross-spawn@^7.0.3, cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +"crossws@>=0.2.0 <0.4.0", crossws@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/crossws/-/crossws-0.3.1.tgz#7980e0b6688fe23286661c3ab8deeccbaa05ca86" + integrity sha512-HsZgeVYaG+b5zA+9PbIPGq4+J/CJynJuearykPsXx4V/eMhyQ5EDVg3Ak2FBZtVXCiOLu/U7IiwDHTr9MA+IKw== + dependencies: + uncrypto "^0.1.3" + +css-declaration-sorter@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz#6dec1c9523bc4a643e088aab8f09e67a54961024" + integrity sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow== + +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + +css-tree@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" + integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== + dependencies: + mdn-data "2.0.30" + source-map-js "^1.0.1" + +css-tree@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032" + integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA== + dependencies: + mdn-data "2.0.28" + source-map-js "^1.0.1" + +css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-default@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-7.0.6.tgz#0220fa7507478369aa2a226bac03e1204cd024c1" + integrity sha512-ZzrgYupYxEvdGGuqL+JKOY70s7+saoNlHSCK/OGn1vB2pQK8KSET8jvenzItcY+kA7NoWvfbb/YhlzuzNKjOhQ== + dependencies: + browserslist "^4.23.3" + css-declaration-sorter "^7.2.0" + cssnano-utils "^5.0.0" + postcss-calc "^10.0.2" + postcss-colormin "^7.0.2" + postcss-convert-values "^7.0.4" + postcss-discard-comments "^7.0.3" + postcss-discard-duplicates "^7.0.1" + postcss-discard-empty "^7.0.0" + postcss-discard-overridden "^7.0.0" + postcss-merge-longhand "^7.0.4" + postcss-merge-rules "^7.0.4" + postcss-minify-font-values "^7.0.0" + postcss-minify-gradients "^7.0.0" + postcss-minify-params "^7.0.2" + postcss-minify-selectors "^7.0.4" + postcss-normalize-charset "^7.0.0" + postcss-normalize-display-values "^7.0.0" + postcss-normalize-positions "^7.0.0" + postcss-normalize-repeat-style "^7.0.0" + postcss-normalize-string "^7.0.0" + postcss-normalize-timing-functions "^7.0.0" + postcss-normalize-unicode "^7.0.2" + postcss-normalize-url "^7.0.0" + postcss-normalize-whitespace "^7.0.0" + postcss-ordered-values "^7.0.1" + postcss-reduce-initial "^7.0.2" + postcss-reduce-transforms "^7.0.0" + postcss-svgo "^7.0.1" + postcss-unique-selectors "^7.0.3" + +cssnano-utils@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-5.0.0.tgz#b53a0343dd5d21012911882db6ae7d2eae0e3687" + integrity sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ== + +cssnano@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-7.0.6.tgz#63d54fd42bc017f6aaed69e47d9aaef85b7850ec" + integrity sha512-54woqx8SCbp8HwvNZYn68ZFAepuouZW4lTwiMVnBErM3VkO7/Sd4oTOt3Zz3bPx3kxQ36aISppyXj2Md4lg8bw== + dependencies: + cssnano-preset-default "^7.0.6" + lilconfig "^3.1.2" + +csso@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6" + integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ== + dependencies: + css-tree "~2.2.0" + +csstype@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + +db0@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/db0/-/db0-0.2.1.tgz#be1454ab48e3bb3c93b8b8ae7623a95169474bba" + integrity sha512-BWSFmLaCkfyqbSEZBQINMVNjCVfrogi7GQ2RSy1tmtfK9OXlsup6lUMwLsqSD7FbAjD04eWFdXowSHHUp6SE/Q== + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@^4.3.6, debug@^4.3.7: + version "4.4.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== + dependencies: + ms "^2.1.3" + +debug@^3.1.0, debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +deep-equal@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + integrity sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw== + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +default-browser-id@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.0.tgz#a1d98bf960c15082d8a3fa69e83150ccccc3af26" + integrity sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA== + +default-browser@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.2.1.tgz#7b7ba61204ff3e425b556869ae6d3e9d9f1712cf" + integrity sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg== + dependencies: + bundle-name "^4.1.0" + default-browser-id "^5.0.0" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-lazy-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" + integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== + +defu@^6.1.4: + version "6.1.4" + resolved "https://registry.yarnpkg.com/defu/-/defu-6.1.4.tgz#4e0c9cf9ff68fe5f3d7f2765cc1a012dfdcb0479" + integrity sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg== + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +denque@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" + integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== + +depd@2.0.0, depd@^2.0.0, depd@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +destr@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/destr/-/destr-2.0.3.tgz#7f9e97cb3d16dbdca7be52aca1644ce402cfe449" + integrity sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ== + +destroy@1.2.0, destroy@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-libc@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== + +detect-libc@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" + integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== + +devalue@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/devalue/-/devalue-5.1.1.tgz#a71887ac0f354652851752654e4bd435a53891ae" + integrity sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw== + +didyoumean@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" + integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== + +diff@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-7.0.0.tgz#3fb34d387cd76d803f6eebea67b921dab0182a9a" + integrity sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw== + +dlv@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" + integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" + integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + +dot-prop@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-9.0.0.tgz#bae5982fe6dc6b8fddb92efef4f2ddff26779e92" + integrity sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ== + dependencies: + type-fest "^4.18.2" + +dotenv@^16.4.5, dotenv@^16.4.7: + version "16.4.7" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26" + integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ== + +duplexer@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-to-chromium@^1.5.73: + version "1.5.76" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.76.tgz#db20295c5061b68f07c8ea4dfcbd701485d94a3d" + integrity sha512-CjVQyG7n7Sr+eBXE86HIulnL5N8xZY1sgmOPGuq/F0Rr0FJq63lg0kEtOIDfZBk44FnDLf6FUJ+dsJcuiUDdDQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +encodeurl@^1.0.2, encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + +enhanced-resolve@^5.14.1, enhanced-resolve@^5.17.1: + version "5.18.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.0.tgz#91eb1db193896b9801251eeff1c6980278b1e404" + integrity sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +entities@^4.2.0, entities@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +error-stack-parser-es@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/error-stack-parser-es/-/error-stack-parser-es-0.1.5.tgz#15b50b67bea4b6ed6596976ee07c7867ae25bb1c" + integrity sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg== + +errx@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/errx/-/errx-0.1.0.tgz#4881e411d90a3b1e1620a07604f50081dd59f3aa" + integrity sha512-fZmsRiDNv07K6s2KkKFTiD2aIvECa7++PKyD5NC32tpRw46qZA3sOz+aM+/V9V0GDHxVTKLziveV4JhzBHDp9Q== + +es-module-lexer@^1.5.3, es-module-lexer@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.4.tgz#a8efec3a3da991e60efa6b633a7cad6ab8d26b78" + integrity sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw== + +esbuild@^0.21.3: + version "0.21.5" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d" + integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw== + optionalDependencies: + "@esbuild/aix-ppc64" "0.21.5" + "@esbuild/android-arm" "0.21.5" + "@esbuild/android-arm64" "0.21.5" + "@esbuild/android-x64" "0.21.5" + "@esbuild/darwin-arm64" "0.21.5" + "@esbuild/darwin-x64" "0.21.5" + "@esbuild/freebsd-arm64" "0.21.5" + "@esbuild/freebsd-x64" "0.21.5" + "@esbuild/linux-arm" "0.21.5" + "@esbuild/linux-arm64" "0.21.5" + "@esbuild/linux-ia32" "0.21.5" + "@esbuild/linux-loong64" "0.21.5" + "@esbuild/linux-mips64el" "0.21.5" + "@esbuild/linux-ppc64" "0.21.5" + "@esbuild/linux-riscv64" "0.21.5" + "@esbuild/linux-s390x" "0.21.5" + "@esbuild/linux-x64" "0.21.5" + "@esbuild/netbsd-x64" "0.21.5" + "@esbuild/openbsd-x64" "0.21.5" + "@esbuild/sunos-x64" "0.21.5" + "@esbuild/win32-arm64" "0.21.5" + "@esbuild/win32-ia32" "0.21.5" + "@esbuild/win32-x64" "0.21.5" + +esbuild@^0.24.0: + version "0.24.2" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.24.2.tgz#b5b55bee7de017bff5fb8a4e3e44f2ebe2c3567d" + integrity sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA== + optionalDependencies: + "@esbuild/aix-ppc64" "0.24.2" + "@esbuild/android-arm" "0.24.2" + "@esbuild/android-arm64" "0.24.2" + "@esbuild/android-x64" "0.24.2" + "@esbuild/darwin-arm64" "0.24.2" + "@esbuild/darwin-x64" "0.24.2" + "@esbuild/freebsd-arm64" "0.24.2" + "@esbuild/freebsd-x64" "0.24.2" + "@esbuild/linux-arm" "0.24.2" + "@esbuild/linux-arm64" "0.24.2" + "@esbuild/linux-ia32" "0.24.2" + "@esbuild/linux-loong64" "0.24.2" + "@esbuild/linux-mips64el" "0.24.2" + "@esbuild/linux-ppc64" "0.24.2" + "@esbuild/linux-riscv64" "0.24.2" + "@esbuild/linux-s390x" "0.24.2" + "@esbuild/linux-x64" "0.24.2" + "@esbuild/netbsd-arm64" "0.24.2" + "@esbuild/netbsd-x64" "0.24.2" + "@esbuild/openbsd-arm64" "0.24.2" + "@esbuild/openbsd-x64" "0.24.2" + "@esbuild/sunos-x64" "0.24.2" + "@esbuild/win32-arm64" "0.24.2" + "@esbuild/win32-ia32" "0.24.2" + "@esbuild/win32-x64" "0.24.2" + +escalade@^3.1.1, escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-html@^1.0.3, escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escape-string-regexp@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" + integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== + +eslint-config-flat-gitignore@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eslint-config-flat-gitignore/-/eslint-config-flat-gitignore-0.2.0.tgz#9c896bfd35e1895a49092dbe75f1ad9b16ada35d" + integrity sha512-s4lsQLYX+76FCt3PZPwdLwWlqssa5SLufl2gopFmCo3PETOLY3OW5IrD3/l2R0FfYEJvd9BRJ19yJ+yfc5oW3g== + dependencies: + "@eslint/compat" "^1.1.1" + find-up-simple "^1.0.0" + +eslint-flat-config-utils@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/eslint-flat-config-utils/-/eslint-flat-config-utils-0.4.0.tgz#fc0a38341f155278b5d3e93e5411ca15770eebc6" + integrity sha512-kfd5kQZC+BMO0YwTol6zxjKX1zAsk8JfSAopbKjKqmENTJcew+yBejuvccAg37cvOrN0Mh+DVbeyznuNWEjt4A== + dependencies: + pathe "^1.1.2" + +eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== + dependencies: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +eslint-merge-processors@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/eslint-merge-processors/-/eslint-merge-processors-0.1.0.tgz#30ac4c59725a63d12a9677de7d2b2ec2a09fb779" + integrity sha512-IvRXXtEajLeyssvW4wJcZ2etxkR9mUf4zpNwgI+m/Uac9RfXHskuJefkHUcawVzePnd6xp24enp5jfgdHzjRdQ== + +eslint-plugin-import-x@^4.6.1: + version "4.6.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import-x/-/eslint-plugin-import-x-4.6.1.tgz#2fdb9a25addd92247f5d9b198bfa654eeaea2f52" + integrity sha512-wluSUifMIb7UfwWXqx7Yx0lE/SGCcGXECLx/9bCmbY2nneLwvAZ4vkd1IXDjPKFvdcdUgr1BaRnaRpx3k2+Pfw== + dependencies: + "@types/doctrine" "^0.0.9" + "@typescript-eslint/scope-manager" "^8.1.0" + "@typescript-eslint/utils" "^8.1.0" + debug "^4.3.4" + doctrine "^3.0.0" + enhanced-resolve "^5.17.1" + eslint-import-resolver-node "^0.3.9" + get-tsconfig "^4.7.3" + is-glob "^4.0.3" + minimatch "^9.0.3" + semver "^7.6.3" + stable-hash "^0.0.4" + tslib "^2.6.3" + +eslint-plugin-jsdoc@^50.6.1: + version "50.6.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.6.1.tgz#791a668fd4b0700a759e9a16a741a6a805f5b95c" + integrity sha512-UWyaYi6iURdSfdVVqvfOs2vdCVz0J40O/z/HTsv2sFjdjmdlUI/qlKLOTmwbPQ2tAfQnE5F9vqx+B+poF71DBQ== + dependencies: + "@es-joy/jsdoccomment" "~0.49.0" + are-docs-informative "^0.0.2" + comment-parser "1.4.1" + debug "^4.3.6" + escape-string-regexp "^4.0.0" + espree "^10.1.0" + esquery "^1.6.0" + parse-imports "^2.1.1" + semver "^7.6.3" + spdx-expression-parse "^4.0.0" + synckit "^0.9.1" + +eslint-plugin-regexp@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-regexp/-/eslint-plugin-regexp-2.7.0.tgz#84fa2d2b122e343f596cfb83ed8a5517a1dfef2a" + integrity sha512-U8oZI77SBtH8U3ulZ05iu0qEzIizyEDXd+BWHvyVxTOjGwcDcvy/kEpgFG4DYca2ByRLiVPFZ2GeH7j1pdvZTA== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.11.0" + comment-parser "^1.4.0" + jsdoc-type-pratt-parser "^4.0.0" + refa "^0.12.1" + regexp-ast-analysis "^0.7.1" + scslre "^0.3.0" + +eslint-plugin-unicorn@^56.0.1: + version "56.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-unicorn/-/eslint-plugin-unicorn-56.0.1.tgz#d10a3df69ba885939075bdc95a65a0c872e940d4" + integrity sha512-FwVV0Uwf8XPfVnKSGpMg7NtlZh0G0gBarCaFcMUOoqPxXryxdYxTRRv4kH6B9TFCVIrjRXG+emcxIk2ayZilog== + dependencies: + "@babel/helper-validator-identifier" "^7.24.7" + "@eslint-community/eslint-utils" "^4.4.0" + ci-info "^4.0.0" + clean-regexp "^1.0.0" + core-js-compat "^3.38.1" + esquery "^1.6.0" + globals "^15.9.0" + indent-string "^4.0.0" + is-builtin-module "^3.2.1" + jsesc "^3.0.2" + pluralize "^8.0.0" + read-pkg-up "^7.0.1" + regexp-tree "^0.1.27" + regjsparser "^0.10.0" + semver "^7.6.3" + strip-indent "^3.0.0" + +eslint-plugin-vue@^9.32.0: + version "9.32.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.32.0.tgz#2b558e827886b567dfaa156cc1cad0f596461fab" + integrity sha512-b/Y05HYmnB/32wqVcjxjHZzNpwxj1onBOvqW89W+V+XNG1dRuaFbNd3vT9CLbr2LXjEoq+3vn8DanWf7XU22Ug== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + globals "^13.24.0" + natural-compare "^1.4.0" + nth-check "^2.1.1" + postcss-selector-parser "^6.0.15" + semver "^7.6.3" + vue-eslint-parser "^9.4.3" + xml-name-validator "^4.0.0" + +eslint-processor-vue-blocks@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/eslint-processor-vue-blocks/-/eslint-processor-vue-blocks-0.1.2.tgz#d472e0a5efe15e9eab5c3f2e2518c9a121097805" + integrity sha512-PfpJ4uKHnqeL/fXUnzYkOax3aIenlwewXRX8jFinA1a2yCFnLgMuiH3xvCgvHHUlV2xJWQHbCTdiJWGwb3NqpQ== + +eslint-scope@^7.1.1: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-scope@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.2.0.tgz#377aa6f1cb5dc7592cfd0b7f892fd0cf352ce442" + integrity sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-typegen@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/eslint-typegen/-/eslint-typegen-0.3.2.tgz#21d9343f0fcc0279b17856120d669a7b33bcc023" + integrity sha512-YD/flDDDYoBszomo6wVAJ01HcEWTLfOb04+Mwir8/oR66t2bnajw+qUI6JfBoBQO3HbebcCmEtgjKgWVB67ggQ== + dependencies: + json-schema-to-typescript-lite "^14.1.0" + ohash "^1.1.3" + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint-visitor-keys@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45" + integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== + +eslint@^9.17.0: + version "9.17.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.17.0.tgz#faa1facb5dd042172fdc520106984b5c2421bb0c" + integrity sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.12.1" + "@eslint/config-array" "^0.19.0" + "@eslint/core" "^0.9.0" + "@eslint/eslintrc" "^3.2.0" + "@eslint/js" "9.17.0" + "@eslint/plugin-kit" "^0.2.3" + "@humanfs/node" "^0.16.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@humanwhocodes/retry" "^0.4.1" + "@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" + +espree@^10.0.1, espree@^10.1.0, espree@^10.3.0: + version "10.3.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-10.3.0.tgz#29267cf5b0cb98735b65e64ba07e0ed49d1eed8a" + integrity sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg== + dependencies: + acorn "^8.14.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^4.2.0" + +espree@^9.3.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esquery@^1.4.0, esquery@^1.5.0, esquery@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +estree-walker@2.0.2, estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +estree-walker@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" + integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== + dependencies: + "@types/estree" "^1.0.0" + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@^1.8.1, etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +events@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +execa@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" + integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^4.3.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^3.0.7" + strip-final-newline "^3.0.0" + +execa@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" + integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^8.0.1" + human-signals "^5.0.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^4.1.0" + strip-final-newline "^3.0.0" + +externality@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/externality/-/externality-1.0.2.tgz#a027f8cfd995c42fd35a8d794cfc224d4a5840c0" + integrity sha512-LyExtJWKxtgVzmgtEHyQtLFpw1KFhQphF9nTG8TpAIVkiI/xQ3FJh75tRFLYl4hkn7BNIIdLJInuDAavX35pMw== + dependencies: + enhanced-resolve "^5.14.1" + mlly "^1.3.0" + pathe "^1.1.1" + ufo "^1.1.2" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-fifo@^1.2.0, fast-fifo@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" + integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== + +fast-glob@^3.2.7, fast-glob@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fast-npm-meta@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/fast-npm-meta/-/fast-npm-meta-0.2.2.tgz#619e4ab6b71f4ce19d9fad48bba6ffa8164b7361" + integrity sha512-E+fdxeaOQGo/CMWc9f4uHFfgUPJRAu7N3uB8GBvB3SDPAIWJK4GKyYhkAGFq+GYrcbKNfQIz5VVQyJnDuPPCrg== + +fastq@^1.15.0, fastq@^1.6.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.18.0.tgz#d631d7e25faffea81887fe5ea8c9010e1b36fee0" + integrity sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw== + dependencies: + reusify "^1.0.4" + +fdir@^6.2.0, fdir@^6.4.2: + version "6.4.2" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.2.tgz#ddaa7ce1831b161bc3657bb99cb36e1622702689" + integrity sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ== + +file-entry-cache@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" + integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== + dependencies: + flat-cache "^4.0.0" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +find-up-simple@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/find-up-simple/-/find-up-simple-1.0.0.tgz#21d035fde9fdbd56c8f4d2f63f32fd93a1cfc368" + integrity sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw== + +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +find-up@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-7.0.0.tgz#e8dec1455f74f78d888ad65bf7ca13dd2b4e66fb" + integrity sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g== + dependencies: + locate-path "^7.2.0" + path-exists "^5.0.0" + unicorn-magic "^0.1.0" + +flat-cache@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" + integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.4" + +flatted@^3.2.9, flatted@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.2.tgz#adba1448a9841bec72b42c532ea23dbbedef1a27" + integrity sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA== + +foreground-child@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" + integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + +fraction.js@^4.3.7: + version "4.3.7" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" + integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== + +fresh@0.5.2, fresh@~0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-extra@^11.1.0, fs-extra@^11.2.0: + version "11.2.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2, fsevents@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-port-please@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/get-port-please/-/get-port-please-3.1.2.tgz#502795e56217128e4183025c89a48c71652f4e49" + integrity sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ== + +get-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-stream@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" + integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== + +get-tsconfig@^4.7.3: + version "4.8.1" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.8.1.tgz#8995eb391ae6e1638d251118c7b56de7eb425471" + integrity sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg== + dependencies: + resolve-pkg-maps "^1.0.0" + +giget@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/giget/-/giget-1.2.3.tgz#ef6845d1140e89adad595f7f3bb60aa31c672cb6" + integrity sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA== + dependencies: + citty "^0.1.6" + consola "^3.2.3" + defu "^6.1.4" + node-fetch-native "^1.6.3" + nypm "^0.3.8" + ohash "^1.1.3" + pathe "^1.1.2" + tar "^6.2.0" + +git-config-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/git-config-path/-/git-config-path-2.0.0.tgz#62633d61af63af4405a5024efd325762f58a181b" + integrity sha512-qc8h1KIQbJpp+241id3GuAtkdyJ+IK+LIVtkiFTRKRrmddDzs3SI9CvP1QYmWBFvm1I/PWRwj//of8bgAc0ltA== + +git-up@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/git-up/-/git-up-8.0.0.tgz#674d398f95c4f70b4193f3f3d87c73cf28c2bee1" + integrity sha512-uBI8Zdt1OZlrYfGcSVroLJKgyNNXlgusYFzHk614lTasz35yg2PVpL1RMy0LOO2dcvF9msYW3pRfUSmafZNrjg== + dependencies: + is-ssh "^1.4.0" + parse-url "^9.2.0" + +git-url-parse@^16.0.0: + version "16.0.0" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-16.0.0.tgz#04dcc54197ad9aa2c92795b32be541d217c11f70" + integrity sha512-Y8iAF0AmCaqXc6a5GYgPQW9ESbncNLOL+CeQAJRhmWUOmnPkKpBYeWYp4mFd3LA5j53CdGDdslzX12yEBVHQQg== + dependencies: + git-up "^8.0.0" + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@^10.0.0, glob@^10.3.10, glob@^10.3.7: + version "10.4.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" + integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" + +glob@^7.1.3, glob@^7.2.0: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-directory@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/global-directory/-/global-directory-4.0.1.tgz#4d7ac7cfd2cb73f304c53b8810891748df5e361e" + integrity sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q== + dependencies: + ini "4.1.1" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.24.0: + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + dependencies: + type-fest "^0.20.2" + +globals@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" + integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== + +globals@^15.14.0, globals@^15.9.0: + version "15.14.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-15.14.0.tgz#b8fd3a8941ff3b4d38f3319d433b61bbb482e73f" + integrity sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig== + +globby@^14.0.2: + version "14.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-14.0.2.tgz#06554a54ccfe9264e5a9ff8eded46aa1e306482f" + integrity sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw== + dependencies: + "@sindresorhus/merge-streams" "^2.1.0" + fast-glob "^3.3.2" + ignore "^5.2.4" + path-type "^5.0.0" + slash "^5.1.0" + unicorn-magic "^0.1.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +gzip-size@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-7.0.0.tgz#9f9644251f15bc78460fccef4055ae5a5562ac60" + integrity sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA== + dependencies: + duplexer "^0.1.2" + +h3@^1.12.0, h3@^1.13.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/h3/-/h3-1.13.0.tgz#b5347a8936529794b6754b440e26c0ab8a60dceb" + integrity sha512-vFEAu/yf8UMUcB4s43OaDaigcqpQd14yanmOsn+NcRX3/guSKncyE2rOYhq8RIchgJrPSs/QiIddnTTR1ddiAg== + dependencies: + cookie-es "^1.2.2" + crossws ">=0.2.0 <0.4.0" + defu "^6.1.4" + destr "^2.0.3" + iron-webcrypto "^1.2.1" + ohash "^1.1.4" + radix3 "^1.1.2" + ufo "^1.5.4" + uncrypto "^0.1.3" + unenv "^1.10.0" + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.3: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hash-sum@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a" + integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg== + +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +hookable@^5.5.3: + version "5.5.3" + resolved "https://registry.yarnpkg.com/hookable/-/hookable-5.5.3.tgz#6cfc358984a1ef991e2518cb9ed4a778bbd3215d" + integrity sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ== + +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +html-tags@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce" + integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== + +http-assert@^1.3.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/http-assert/-/http-assert-1.5.0.tgz#c389ccd87ac16ed2dfa6246fd73b926aa00e6b8f" + integrity sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w== + dependencies: + deep-equal "~1.0.1" + http-errors "~1.8.0" + +http-errors@2.0.0, http-errors@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-errors@^1.6.3, http-errors@^1.7.3, http-errors@~1.8.0: + version "1.8.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" + integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.1" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-shutdown@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/http-shutdown/-/http-shutdown-1.2.2.tgz#41bc78fc767637c4c95179bc492f312c0ae64c5f" + integrity sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw== + +https-proxy-agent@^7.0.4, https-proxy-agent@^7.0.5: + version "7.0.6" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" + integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== + dependencies: + agent-base "^7.1.2" + debug "4" + +httpxy@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/httpxy/-/httpxy-0.1.5.tgz#fd2401206e0b5d919aeda25e967ece0f1a6c8569" + integrity sha512-hqLDO+rfststuyEUTWObQK6zHEEmZ/kaIP2/zclGGZn6X8h/ESTWg+WKecQ/e5k4nPswjzZD+q2VqZIbr15CoQ== + +human-signals@^4.3.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" + integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== + +human-signals@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" + integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== + +ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.2.0, ignore@^5.2.4, ignore@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== + +ignore@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-6.0.2.tgz#77cccb72a55796af1b6d2f9eb14fa326d24f4283" + integrity sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A== + +image-meta@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/image-meta/-/image-meta-0.2.1.tgz#3a9eb9f0bfd2f767ca2b0720623c2e03742aa29f" + integrity sha512-K6acvFaelNxx8wc2VjbIzXKDVB0Khs0QT35U6NkGfTdCmjLNcO2945m7RFNR9/RPVFm48hq7QPzK8uGH18HCGw== + +import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +impound@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/impound/-/impound-0.2.0.tgz#d24d6dd8330f380e8e71c254e8b29d3a2c4fe520" + integrity sha512-gXgeSyp9Hf7qG2/PLKmywHXyQf2xFrw+mJGpoj9DsAB9L7/MIKn+DeEx98UryWXdmbv8wUUPdcQof6qXnZoCGg== + dependencies: + "@rollup/pluginutils" "^5.1.2" + mlly "^1.7.2" + pathe "^1.1.2" + unenv "^1.10.0" + unplugin "^1.14.1" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +index-to-position@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/index-to-position/-/index-to-position-0.1.2.tgz#e11bfe995ca4d8eddb1ec43274488f3c201a7f09" + integrity sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== + +ini@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.1.tgz#d95b3d843b1e906e56d6747d5447904ff50ce7a1" + integrity sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g== + +ini@^1.3.5: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +ioredis@^5.4.1: + version "5.4.2" + resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.4.2.tgz#ebb6f1a10b825b2c0fb114763d7e82114a0bee6c" + integrity sha512-0SZXGNGZ+WzISQ67QDyZ2x0+wVxjjUndtD8oSeik/4ajifeiRufed8fCb8QW8VMyi4MXcS+UO1k/0NGhvq1PAg== + dependencies: + "@ioredis/commands" "^1.1.1" + cluster-key-slot "^1.1.0" + debug "^4.3.4" + denque "^2.1.0" + lodash.defaults "^4.2.0" + lodash.isarguments "^3.1.0" + redis-errors "^1.2.0" + redis-parser "^3.0.0" + standard-as-callback "^2.1.0" + +iron-webcrypto@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz#aa60ff2aa10550630f4c0b11fd2442becdb35a6f" + integrity sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-builtin-module@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" + integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== + dependencies: + builtin-modules "^3.3.0" + +is-core-module@^2.13.0, is-core-module@^2.16.0: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== + dependencies: + hasown "^2.0.2" + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-docker@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-function@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-inside-container@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== + dependencies: + is-docker "^3.0.0" + +is-installed-globally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-1.0.0.tgz#08952c43758c33d815692392f7f8437b9e436d5a" + integrity sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ== + dependencies: + global-directory "^4.0.1" + is-path-inside "^4.0.0" + +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-inside@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-4.0.0.tgz#805aeb62c47c1b12fc3fd13bfb3ed1e7430071db" + integrity sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA== + +is-reference@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" + integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== + dependencies: + "@types/estree" "*" + +is-ssh@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" + integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== + dependencies: + protocols "^2.0.1" + +is-stream@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + +is-what@^4.1.8: + version "4.1.16" + resolved "https://registry.yarnpkg.com/is-what/-/is-what-4.1.16.tgz#1ad860a19da8b4895ad5495da3182ce2acdd7a6f" + integrity sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A== + +is-wsl@^2.1.1, is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +is-wsl@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2" + integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== + dependencies: + is-inside-container "^1.0.0" + +is64bit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is64bit/-/is64bit-2.0.0.tgz#198c627cbcb198bbec402251f88e5e1a51236c07" + integrity sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw== + dependencies: + system-architecture "^0.1.0" + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +jackspeak@^3.1.2: + version "3.4.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jiti@^1.21.6: + version "1.21.7" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.7.tgz#9dd81043424a3d28458b193d965f0d18a2300ba9" + integrity sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A== + +jiti@^2.1.2, jiti@^2.3.0, jiti@^2.4.0, jiti@^2.4.1, jiti@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.4.2.tgz#d19b7732ebb6116b06e2038da74a55366faef560" + integrity sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A== + +js-levenshtein@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" + integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-tokens@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-9.0.1.tgz#2ec43964658435296f6761b34e10671c2d9527f4" + integrity sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsdoc-type-pratt-parser@^4.0.0, jsdoc-type-pratt-parser@~4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz#ff6b4a3f339c34a6c188cbf50a16087858d22113" + integrity sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg== + +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-to-typescript-lite@^14.1.0: + version "14.1.0" + resolved "https://registry.yarnpkg.com/json-schema-to-typescript-lite/-/json-schema-to-typescript-lite-14.1.0.tgz#a35624a2d783e5e125631a3d25ac4c2fb96dd191" + integrity sha512-b8K6P3aiLgiYKYcHacgZKrwPXPyjekqRPV5vkNfBt0EoohcOSXEbcuGzgi6KQmsAhuy5Mh2KMxofXodRhMxURA== + dependencies: + "@apidevtools/json-schema-ref-parser" "^11.7.0" + "@types/json-schema" "^7.0.15" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +keygrip@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/keygrip/-/keygrip-1.1.0.tgz#871b1681d5e159c62a445b0c74b615e0917e7226" + integrity sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ== + dependencies: + tsscmp "1.0.6" + +keyv@^4.5.4: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +klona@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" + integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== + +knitwork@^1.0.0, knitwork@^1.1.0, knitwork@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/knitwork/-/knitwork-1.2.0.tgz#3cc92e76249aeb35449cfbed3f31c6df8444db3f" + integrity sha512-xYSH7AvuQ6nXkq42x0v5S8/Iry+cfulBz/DJQzhIyESdLD7425jXsPy4vn5cCXU+HhRN2kVw51Vd1K6/By4BQg== + +koa-compose@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-4.1.0.tgz#507306b9371901db41121c812e923d0d67d3e877" + integrity sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw== + +koa-convert@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/koa-convert/-/koa-convert-2.0.0.tgz#86a0c44d81d40551bae22fee6709904573eea4f5" + integrity sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA== + dependencies: + co "^4.6.0" + koa-compose "^4.1.0" + +koa-send@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/koa-send/-/koa-send-5.0.1.tgz#39dceebfafb395d0d60beaffba3a70b4f543fe79" + integrity sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ== + dependencies: + debug "^4.1.1" + http-errors "^1.7.3" + resolve-path "^1.4.0" + +koa-static@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/koa-static/-/koa-static-5.0.0.tgz#5e92fc96b537ad5219f425319c95b64772776943" + integrity sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ== + dependencies: + debug "^3.1.0" + koa-send "^5.0.0" + +koa@^2.14.2: + version "2.15.3" + resolved "https://registry.yarnpkg.com/koa/-/koa-2.15.3.tgz#062809266ee75ce0c75f6510a005b0e38f8c519a" + integrity sha512-j/8tY9j5t+GVMLeioLaxweJiKUayFhlGqNTzf2ZGwL0ZCQijd2RLHK0SLW5Tsko8YyyqCZC2cojIb0/s62qTAg== + dependencies: + accepts "^1.3.5" + cache-content-type "^1.0.0" + content-disposition "~0.5.2" + content-type "^1.0.4" + cookies "~0.9.0" + debug "^4.3.2" + delegates "^1.0.0" + depd "^2.0.0" + destroy "^1.0.4" + encodeurl "^1.0.2" + escape-html "^1.0.3" + fresh "~0.5.2" + http-assert "^1.3.0" + http-errors "^1.6.3" + is-generator-function "^1.0.7" + koa-compose "^4.1.0" + koa-convert "^2.0.0" + on-finished "^2.3.0" + only "~0.0.2" + parseurl "^1.3.2" + statuses "^1.5.0" + type-is "^1.6.16" + vary "^1.1.2" + +kolorist@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/kolorist/-/kolorist-1.8.0.tgz#edddbbbc7894bc13302cdf740af6374d4a04743c" + integrity sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ== + +launch-editor@^2.9.1: + version "2.9.1" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.9.1.tgz#253f173bd441e342d4344b4dae58291abb425047" + integrity sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w== + dependencies: + picocolors "^1.0.0" + shell-quote "^1.8.1" + +lazystream@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638" + integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== + dependencies: + readable-stream "^2.0.5" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lilconfig@^3.0.0, lilconfig@^3.1.2, lilconfig@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" + integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +listhen@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/listhen/-/listhen-1.9.0.tgz#59355f7e4fc1eefda6bc494ae7e9ed13aa7658ef" + integrity sha512-I8oW2+QL5KJo8zXNWX046M134WchxsXC7SawLPvRQpogCbkyQIaFxPE89A2HiwR7vAK2Dm2ERBAmyjTYGYEpBg== + dependencies: + "@parcel/watcher" "^2.4.1" + "@parcel/watcher-wasm" "^2.4.1" + citty "^0.1.6" + clipboardy "^4.0.0" + consola "^3.2.3" + crossws ">=0.2.0 <0.4.0" + defu "^6.1.4" + get-port-please "^3.1.2" + h3 "^1.12.0" + http-shutdown "^1.2.2" + jiti "^2.1.2" + mlly "^1.7.1" + node-forge "^1.3.1" + pathe "^1.1.2" + std-env "^3.7.0" + ufo "^1.5.4" + untun "^0.1.3" + uqr "^0.1.2" + +load-tsconfig@^0.2.3: + version "0.2.5" + resolved "https://registry.yarnpkg.com/load-tsconfig/-/load-tsconfig-0.2.5.tgz#453b8cd8961bfb912dea77eb6c168fe8cca3d3a1" + integrity sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg== + +local-pkg@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.5.1.tgz#69658638d2a95287534d4c2fff757980100dbb6d" + integrity sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ== + dependencies: + mlly "^1.7.3" + pkg-types "^1.2.1" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +locate-path@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a" + integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== + dependencies: + p-locate "^6.0.0" + +lodash.defaults@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== + +lodash.isarguments@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + +lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +lru-cache@^10.2.0, lru-cache@^10.4.3: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +magic-string-ast@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/magic-string-ast/-/magic-string-ast-0.6.3.tgz#99684592d00b382fafcc47d290dd79fa4a688925" + integrity sha512-C9sgUzVZtUtzCBoMdYtwrIRQ4IucGRFGgdhkjL7PXsVfPYmTuWtewqzk7dlipaCMWH/gOYehW9rgMoa4Oebtpw== + dependencies: + magic-string "^0.30.13" + +magic-string@^0.30.11, magic-string@^0.30.12, magic-string@^0.30.13, magic-string@^0.30.14, magic-string@^0.30.17, magic-string@^0.30.3, magic-string@^0.30.4, magic-string@^0.30.8: + version "0.30.17" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453" + integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + +magicast@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/magicast/-/magicast-0.3.5.tgz#8301c3c7d66704a0771eb1bad74274f0ec036739" + integrity sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ== + dependencies: + "@babel/parser" "^7.25.4" + "@babel/types" "^7.25.4" + source-map-js "^1.2.0" + +mdn-data@2.0.28: + version "2.0.28" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" + integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g== + +mdn-data@2.0.30: + version "2.0.30" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" + integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^4.0.4, micromatch@^4.0.5, micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.18, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" + integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== + +mime@^4.0.4: + version "4.0.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-4.0.6.tgz#ca83bec0bcf2a02353d0e02da99be05603d04839" + integrity sha512-4rGt7rvQHBbaSOF9POGkk1ocRP16Md1x36Xma8sz8h8/vfCUI2OtEIeCqe4Ofes853x4xDoPiFLIT47J5fI/7A== + +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1, minimatch@^5.1.0: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.3, minimatch@^9.0.4, minimatch@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass@^3.0.0: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4, minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +minizlib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.0.1.tgz#46d5329d1eb3c83924eff1d3b858ca0a31581012" + integrity sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg== + dependencies: + minipass "^7.0.4" + rimraf "^5.0.5" + +mitt@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1" + integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw== + +mkdirp@^0.5.6: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mkdirp@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mkdirp@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" + integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== + +mlly@^1.3.0, mlly@^1.6.1, mlly@^1.7.1, mlly@^1.7.2, mlly@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.7.3.tgz#d86c0fcd8ad8e16395eb764a5f4b831590cee48c" + integrity sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A== + dependencies: + acorn "^8.14.0" + pathe "^1.1.2" + pkg-types "^1.2.1" + ufo "^1.5.4" + +mrmime@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.0.tgz#151082a6e06e59a9a39b46b3e14d5cfe92b3abb4" + integrity sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.3, ms@^2.1.1, ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +mz@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nanoid@^3.3.7: + version "3.3.8" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" + integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== + +nanoid@^5.0.9: + version "5.0.9" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-5.0.9.tgz#977dcbaac055430ce7b1e19cf0130cea91a20e50" + integrity sha512-Aooyr6MXU6HpvvWXKoVoXwKMs/KyVakWwg7xQfv5/S/RIgJMy0Ifa45H9qqYy7pTCszrHzP21Uk4PZq2HpEM8Q== + +nanotar@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/nanotar/-/nanotar-0.1.1.tgz#24276a418130fa69f479577f343747e768810857" + integrity sha512-AiJsGsSF3O0havL1BydvI4+wR76sKT+okKRwWIaK96cZUnXqH0uNBOsHlbwZq3+m2BR1VKqHDVudl3gO4mYjpQ== + +napi-wasm@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/napi-wasm/-/napi-wasm-1.1.3.tgz#7bb95c88e6561f84880bb67195437b1cfbe99224" + integrity sha512-h/4nMGsHjZDCYmQVNODIrYACVJ+I9KItbG+0si6W/jSjdA9JbWDoU4LLeMXVcEQGHjttI2tuXqDrbGF7qkUHHg== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +nitropack@^2.10.4: + version "2.10.4" + resolved "https://registry.yarnpkg.com/nitropack/-/nitropack-2.10.4.tgz#f7eb092bf7296257bf2426c45134fba61373e026" + integrity sha512-sJiG/MIQlZCVSw2cQrFG1H6mLeSqHlYfFerRjLKz69vUfdu0EL2l0WdOxlQbzJr3mMv/l4cOlCCLzVRzjzzF/g== + dependencies: + "@cloudflare/kv-asset-handler" "^0.3.4" + "@netlify/functions" "^2.8.2" + "@rollup/plugin-alias" "^5.1.1" + "@rollup/plugin-commonjs" "^28.0.1" + "@rollup/plugin-inject" "^5.0.5" + "@rollup/plugin-json" "^6.1.0" + "@rollup/plugin-node-resolve" "^15.3.0" + "@rollup/plugin-replace" "^6.0.1" + "@rollup/plugin-terser" "^0.4.4" + "@rollup/pluginutils" "^5.1.3" + "@types/http-proxy" "^1.17.15" + "@vercel/nft" "^0.27.5" + archiver "^7.0.1" + c12 "2.0.1" + chokidar "^3.6.0" + citty "^0.1.6" + compatx "^0.1.8" + confbox "^0.1.8" + consola "^3.2.3" + cookie-es "^1.2.2" + croner "^9.0.0" + crossws "^0.3.1" + db0 "^0.2.1" + defu "^6.1.4" + destr "^2.0.3" + dot-prop "^9.0.0" + esbuild "^0.24.0" + escape-string-regexp "^5.0.0" + etag "^1.8.1" + fs-extra "^11.2.0" + globby "^14.0.2" + gzip-size "^7.0.0" + h3 "^1.13.0" + hookable "^5.5.3" + httpxy "^0.1.5" + ioredis "^5.4.1" + jiti "^2.4.0" + klona "^2.0.6" + knitwork "^1.1.0" + listhen "^1.9.0" + magic-string "^0.30.12" + magicast "^0.3.5" + mime "^4.0.4" + mlly "^1.7.2" + node-fetch-native "^1.6.4" + ofetch "^1.4.1" + ohash "^1.1.4" + openapi-typescript "^7.4.2" + pathe "^1.1.2" + perfect-debounce "^1.0.0" + pkg-types "^1.2.1" + pretty-bytes "^6.1.1" + radix3 "^1.1.2" + rollup "^4.24.3" + rollup-plugin-visualizer "^5.12.0" + scule "^1.3.0" + semver "^7.6.3" + serve-placeholder "^2.0.2" + serve-static "^1.16.2" + std-env "^3.7.0" + ufo "^1.5.4" + uncrypto "^0.1.3" + unctx "^2.3.1" + unenv "^1.10.0" + unimport "^3.13.1" + unstorage "^1.13.1" + untyped "^1.5.1" + unwasm "^0.3.9" + +node-addon-api@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558" + integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== + +node-fetch-native@^1.6.3, node-fetch-native@^1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.6.4.tgz#679fc8fd8111266d47d7e72c379f1bed9acff06e" + integrity sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ== + +node-fetch@^2.6.1, node-fetch@^2.6.7: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-forge@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + +node-gyp-build@^4.2.2: + version "4.8.4" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8" + integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== + +node-releases@^2.0.19: + version "2.0.19" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" + integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== + +nopt@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-8.0.0.tgz#644f1e78da564b70e3606ab8db4836b0e32e198a" + integrity sha512-1L/fTJ4UmV/lUxT2Uf006pfZKTvAgCF+chz+0OgBHO8u2Z67pE7AaAUUj7CJy0lXqHmymUvGFt6NE9R3HER0yw== + dependencies: + abbrev "^2.0.0" + +normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npm-run-path@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" + integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== + dependencies: + path-key "^4.0.0" + +nth-check@^2.0.1, nth-check@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +nuxi@^3.15.0: + version "3.17.1" + resolved "https://registry.yarnpkg.com/nuxi/-/nuxi-3.17.1.tgz#efae2cacdf13041ad5505bd0047fccf91bab6b17" + integrity sha512-Uz3RlQt8IvhvFfA+rQPxG1mRPckMF9TwPzyEh136iZlSW9khcyHvA2uqC++VNlgMRbVyjvhTq8bCpyNPHHZwrA== + +nuxt@^3.14.1592: + version "3.14.1592" + resolved "https://registry.yarnpkg.com/nuxt/-/nuxt-3.14.1592.tgz#0f94132b7e0ffe9087b37392f295e2c7d5d05ee3" + integrity sha512-roWAQH4Mb6WY72cNos+YVw0DgTCNAhNygiAMCedM7hbX6ESTR2n3VH7tU0yIWDPe/hfFdii4M4wWTTNHOtS44g== + dependencies: + "@nuxt/devalue" "^2.0.2" + "@nuxt/devtools" "^1.6.0" + "@nuxt/kit" "3.14.1592" + "@nuxt/schema" "3.14.1592" + "@nuxt/telemetry" "^2.6.0" + "@nuxt/vite-builder" "3.14.1592" + "@unhead/dom" "^1.11.11" + "@unhead/shared" "^1.11.11" + "@unhead/ssr" "^1.11.11" + "@unhead/vue" "^1.11.11" + "@vue/shared" "^3.5.13" + acorn "8.14.0" + c12 "^2.0.1" + chokidar "^4.0.1" + compatx "^0.1.8" + consola "^3.2.3" + cookie-es "^1.2.2" + defu "^6.1.4" + destr "^2.0.3" + devalue "^5.1.1" + errx "^0.1.0" + esbuild "^0.24.0" + escape-string-regexp "^5.0.0" + estree-walker "^3.0.3" + globby "^14.0.2" + h3 "^1.13.0" + hookable "^5.5.3" + ignore "^6.0.2" + impound "^0.2.0" + jiti "^2.4.0" + klona "^2.0.6" + knitwork "^1.1.0" + magic-string "^0.30.13" + mlly "^1.7.3" + nanotar "^0.1.1" + nitropack "^2.10.4" + nuxi "^3.15.0" + nypm "^0.3.12" + ofetch "^1.4.1" + ohash "^1.1.4" + pathe "^1.1.2" + perfect-debounce "^1.0.0" + pkg-types "^1.2.1" + radix3 "^1.1.2" + scule "^1.3.0" + semver "^7.6.3" + std-env "^3.8.0" + strip-literal "^2.1.0" + tinyglobby "0.2.10" + ufo "^1.5.4" + ultrahtml "^1.5.3" + uncrypto "^0.1.3" + unctx "^2.3.1" + unenv "^1.10.0" + unhead "^1.11.11" + unimport "^3.13.2" + unplugin "^1.16.0" + unplugin-vue-router "^0.10.8" + unstorage "^1.13.1" + untyped "^1.5.1" + vue "^3.5.13" + vue-bundle-renderer "^2.1.1" + vue-devtools-stub "^0.1.0" + vue-router "^4.4.5" + +nypm@^0.3.12, nypm@^0.3.8: + version "0.3.12" + resolved "https://registry.yarnpkg.com/nypm/-/nypm-0.3.12.tgz#37541bec0af3a37d3acd81d6662c6666e650b22e" + integrity sha512-D3pzNDWIvgA+7IORhD/IuWzEk4uXv6GsgOxiid4UU3h9oq5IqV1KtPDi63n4sZJ/xcWlr88c0QM2RgN5VbOhFA== + dependencies: + citty "^0.1.6" + consola "^3.2.3" + execa "^8.0.1" + pathe "^1.1.2" + pkg-types "^1.2.0" + ufo "^1.5.4" + +nypm@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/nypm/-/nypm-0.4.1.tgz#b7059afbddd20373a5d64ba1c05d569607387a67" + integrity sha512-1b9mihliBh8UCcKtcGRu//G50iHpjxIQVUqkdhPT/SDVE7KdJKoHXLS0heuYTQCx95dFqiyUbXZB9r8ikn+93g== + dependencies: + citty "^0.1.6" + consola "^3.2.3" + pathe "^1.1.2" + pkg-types "^1.2.1" + tinyexec "^0.3.1" + ufo "^1.5.4" + +object-assign@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-hash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" + integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== + +ofetch@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/ofetch/-/ofetch-1.4.1.tgz#b6bf6b0d75ba616cef6519dd8b6385a8bae480ec" + integrity sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw== + dependencies: + destr "^2.0.3" + node-fetch-native "^1.6.4" + ufo "^1.5.4" + +ohash@^1.1.3, ohash@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/ohash/-/ohash-1.1.4.tgz#ae8d83014ab81157d2c285abf7792e2995fadd72" + integrity sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g== + +on-finished@2.4.1, on-finished@^2.3.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + +only@~0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" + integrity sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ== + +open@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/open/-/open-10.1.0.tgz#a7795e6e5d519abe4286d9937bb24b51122598e1" + integrity sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw== + dependencies: + default-browser "^5.2.1" + define-lazy-prop "^3.0.0" + is-inside-container "^1.0.0" + is-wsl "^3.1.0" + +open@^7.0.4: + version "7.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + +open@^8.4.0: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +openapi-typescript@^7.4.2: + version "7.4.4" + resolved "https://registry.yarnpkg.com/openapi-typescript/-/openapi-typescript-7.4.4.tgz#77fd70c275d40cf98fb4a68a96e09dc38859cbb9" + integrity sha512-7j3nktnRzlQdlHnHsrcr6Gqz8f80/RhfA2I8s1clPI+jkY0hLNmnYVKBfuUEli5EEgK1B6M+ibdS5REasPlsUw== + dependencies: + "@redocly/openapi-core" "^1.25.9" + ansi-colors "^4.1.3" + change-case "^5.4.4" + parse-json "^8.1.0" + supports-color "^9.4.0" + yargs-parser "^21.1.1" + +optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.5" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-limit@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" + integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== + dependencies: + yocto-queue "^1.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-locate@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" + integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== + dependencies: + p-limit "^4.0.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== + +package-manager-detector@^0.2.5, package-manager-detector@^0.2.7: + version "0.2.8" + resolved "https://registry.yarnpkg.com/package-manager-detector/-/package-manager-detector-0.2.8.tgz#f5ace2dbd37666af54e5acec11bc37c8450f72d0" + integrity sha512-ts9KSdroZisdvKMWVAVCXiKqnqNfXz4+IbrBG8/BWx/TR5le+jfenvoBuIZ6UWM9nz47W7AbD9qYfAwfWMIwzA== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-git-config@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/parse-git-config/-/parse-git-config-3.0.0.tgz#4a2de08c7b74a2555efa5ae94d40cd44302a6132" + integrity sha512-wXoQGL1D+2COYWCD35/xbiKma1Z15xvZL8cI25wvxzled58V51SJM04Urt/uznS900iQor7QO04SgdfT/XlbuA== + dependencies: + git-config-path "^2.0.0" + ini "^1.3.5" + +parse-imports@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/parse-imports/-/parse-imports-2.2.1.tgz#0a6e8b5316beb5c9905f50eb2bbb8c64a4805642" + integrity sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ== + dependencies: + es-module-lexer "^1.5.3" + slashes "^3.0.12" + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-json@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-8.1.0.tgz#91cdc7728004e955af9cb734de5684733b24a717" + integrity sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA== + dependencies: + "@babel/code-frame" "^7.22.13" + index-to-position "^0.1.2" + type-fest "^4.7.1" + +parse-path@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-7.0.0.tgz#605a2d58d0a749c8594405d8cc3a2bf76d16099b" + integrity sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog== + dependencies: + protocols "^2.0.0" + +parse-url@^9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-9.2.0.tgz#d75da32b3bbade66e4eb0763fb4851d27526b97b" + integrity sha512-bCgsFI+GeGWPAvAiUv63ZorMeif3/U0zaXABGJbOWt5OH2KCaPHF6S+0ok4aqM9RuIPGyZdx9tR9l13PsW4AYQ== + dependencies: + "@types/parse-path" "^7.0.0" + parse-path "^7.0.0" + +parseurl@^1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-exists@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" + integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== + +path-is-absolute@1.0.1, path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-to-regexp@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.3.0.tgz#2b6a26a337737a8e1416f9272ed0766b1c0389f4" + integrity sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ== + +path-type@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-5.0.0.tgz#14b01ed7aea7ddf9c7c3f46181d4d04f9c785bb8" + integrity sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg== + +pathe@^1.1.1, pathe@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" + integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== + +perfect-debounce@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz#9c2e8bc30b169cc984a58b7d5b28049839591d2a" + integrity sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA== + +picocolors@^1.0.0, picocolors@^1.0.1, picocolors@^1.1.0, picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +picomatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" + integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pirates@^4.0.1: + version "4.0.6" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + +pkg-types@^1.0.3, pkg-types@^1.2.0, pkg-types@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.2.1.tgz#6ac4e455a5bb4b9a6185c1c79abd544c901db2e5" + integrity sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw== + dependencies: + confbox "^0.1.8" + mlly "^1.7.2" + pathe "^1.1.2" + +pluralize@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" + integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== + +portfinder@^1.0.26: + version "1.0.32" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.32.tgz#2fe1b9e58389712429dc2bea5beb2146146c7f81" + integrity sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg== + dependencies: + async "^2.6.4" + debug "^3.2.7" + mkdirp "^0.5.6" + +postcss-calc@^10.0.2: + version "10.0.2" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-10.0.2.tgz#15f01635a27b9d38913a98c4ef2877f5b715b439" + integrity sha512-DT/Wwm6fCKgpYVI7ZEWuPJ4az8hiEHtCUeYjZXqU7Ou4QqYh1Df2yCQ7Ca6N7xqKPFkxN3fhf+u9KSoOCJNAjg== + dependencies: + postcss-selector-parser "^6.1.2" + postcss-value-parser "^4.2.0" + +postcss-colormin@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-7.0.2.tgz#6f3c53c13158168669f45adc3926f35cb240ef8e" + integrity sha512-YntRXNngcvEvDbEjTdRWGU606eZvB5prmHG4BF0yLmVpamXbpsRJzevyy6MZVyuecgzI2AWAlvFi8DAeCqwpvA== + dependencies: + browserslist "^4.23.3" + caniuse-api "^3.0.0" + colord "^2.9.3" + postcss-value-parser "^4.2.0" + +postcss-convert-values@^7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-7.0.4.tgz#fc13ecedded6365f3c794b502dbcf77d298da12c" + integrity sha512-e2LSXPqEHVW6aoGbjV9RsSSNDO3A0rZLCBxN24zvxF25WknMPpX8Dm9UxxThyEbaytzggRuZxaGXqaOhxQ514Q== + dependencies: + browserslist "^4.23.3" + postcss-value-parser "^4.2.0" + +postcss-discard-comments@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-7.0.3.tgz#9c414e8ee99d3514ad06a3465ccc20ec1dbce780" + integrity sha512-q6fjd4WU4afNhWOA2WltHgCbkRhZPgQe7cXF74fuVB/ge4QbM9HEaOIzGSiMvM+g/cOsNAUGdf2JDzqA2F8iLA== + dependencies: + postcss-selector-parser "^6.1.2" + +postcss-discard-duplicates@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.1.tgz#f87f2fe47d8f01afb1e98361c1db3ce1e8afd1a3" + integrity sha512-oZA+v8Jkpu1ct/xbbrntHRsfLGuzoP+cpt0nJe5ED2FQF8n8bJtn7Bo28jSmBYwqgqnqkuSXJfSUEE7if4nClQ== + +postcss-discard-empty@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-7.0.0.tgz#218829d1ef0a5d5142dd62f0aa60e00e599d2033" + integrity sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA== + +postcss-discard-overridden@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-7.0.0.tgz#b123ea51e3d4e1d0a254cf71eaff1201926d319c" + integrity sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w== + +postcss-import@^15.1.0: + version "15.1.0" + resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70" + integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== + dependencies: + postcss-value-parser "^4.0.0" + read-cache "^1.0.0" + resolve "^1.1.7" + +postcss-js@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2" + integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== + dependencies: + camelcase-css "^2.0.1" + +postcss-load-config@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3" + integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== + dependencies: + lilconfig "^3.0.0" + yaml "^2.3.4" + +postcss-merge-longhand@^7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-7.0.4.tgz#a52d0662b4b29420f3b64a8d5b0ac5133d8db776" + integrity sha512-zer1KoZA54Q8RVHKOY5vMke0cCdNxMP3KBfDerjH/BYHh4nCIh+1Yy0t1pAEQF18ac/4z3OFclO+ZVH8azjR4A== + dependencies: + postcss-value-parser "^4.2.0" + stylehacks "^7.0.4" + +postcss-merge-rules@^7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-7.0.4.tgz#648cc864d3121e6ec72c2a4f08df1cc801e60ce8" + integrity sha512-ZsaamiMVu7uBYsIdGtKJ64PkcQt6Pcpep/uO90EpLS3dxJi6OXamIobTYcImyXGoW0Wpugh7DSD3XzxZS9JCPg== + dependencies: + browserslist "^4.23.3" + caniuse-api "^3.0.0" + cssnano-utils "^5.0.0" + postcss-selector-parser "^6.1.2" + +postcss-minify-font-values@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-7.0.0.tgz#d16a75a2548e000779566b3568fc874ee5d0aa17" + integrity sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-minify-gradients@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-7.0.0.tgz#f6d84456e6d49164a55d0e45bb1b1809c6cf0959" + integrity sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg== + dependencies: + colord "^2.9.3" + cssnano-utils "^5.0.0" + postcss-value-parser "^4.2.0" + +postcss-minify-params@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-7.0.2.tgz#264a76e25f202d8b5ca5290569c0e8c3ac599dfe" + integrity sha512-nyqVLu4MFl9df32zTsdcLqCFfE/z2+f8GE1KHPxWOAmegSo6lpV2GNy5XQvrzwbLmiU7d+fYay4cwto1oNdAaQ== + dependencies: + browserslist "^4.23.3" + cssnano-utils "^5.0.0" + postcss-value-parser "^4.2.0" + +postcss-minify-selectors@^7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-7.0.4.tgz#2b69c99ec48a1c223fce4840609d9c53340a11f5" + integrity sha512-JG55VADcNb4xFCf75hXkzc1rNeURhlo7ugf6JjiiKRfMsKlDzN9CXHZDyiG6x/zGchpjQS+UAgb1d4nqXqOpmA== + dependencies: + cssesc "^3.0.0" + postcss-selector-parser "^6.1.2" + +postcss-nested@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.2.0.tgz#4c2d22ab5f20b9cb61e2c5c5915950784d068131" + integrity sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ== + dependencies: + postcss-selector-parser "^6.1.1" + +postcss-nesting@^13.0.0: + version "13.0.1" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-13.0.1.tgz#c405796d7245a3e4c267a9956cacfe9670b5d43e" + integrity sha512-VbqqHkOBOt4Uu3G8Dm8n6lU5+9cJFxiuty9+4rcoyRPO9zZS1JIs6td49VIoix3qYqELHlJIn46Oih9SAKo+yQ== + dependencies: + "@csstools/selector-resolve-nested" "^3.0.0" + "@csstools/selector-specificity" "^5.0.0" + postcss-selector-parser "^7.0.0" + +postcss-normalize-charset@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-7.0.0.tgz#92244ae73c31bf8f8885d5f16ff69e857ac6c001" + integrity sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ== + +postcss-normalize-display-values@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.0.tgz#01fb50e5e97ef8935363629bea5a6d3b3aac1342" + integrity sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-positions@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-7.0.0.tgz#4eebd7c9d3dde40c97b8047cad38124fc844c463" + integrity sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-repeat-style@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.0.tgz#0cb784655d5714d29bd3bda6dee2fb628aa7227b" + integrity sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-string@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-7.0.0.tgz#a119d3e63a9614570d8413d572fb9fc8c6a64e8c" + integrity sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-timing-functions@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.0.tgz#99d0ee8c4b23b7f4355fafb91385833b9b07108b" + integrity sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-unicode@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.2.tgz#095f8d36ea29adfdf494069c1de101112992a713" + integrity sha512-ztisabK5C/+ZWBdYC+Y9JCkp3M9qBv/XFvDtSw0d/XwfT3UaKeW/YTm/MD/QrPNxuecia46vkfEhewjwcYFjkg== + dependencies: + browserslist "^4.23.3" + postcss-value-parser "^4.2.0" + +postcss-normalize-url@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-7.0.0.tgz#c88cb7cf8952d3ff631e4eba924e7b060ca802f6" + integrity sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-whitespace@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.0.tgz#46b025f0bea72139ddee63015619b0c21cebd845" + integrity sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-ordered-values@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-7.0.1.tgz#8b4b5b8070ca7756bd49f07d5edf274b8f6782e0" + integrity sha512-irWScWRL6nRzYmBOXReIKch75RRhNS86UPUAxXdmW/l0FcAsg0lvAXQCby/1lymxn/o0gVa6Rv/0f03eJOwHxw== + dependencies: + cssnano-utils "^5.0.0" + postcss-value-parser "^4.2.0" + +postcss-reduce-initial@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-7.0.2.tgz#3dc085347a5943e18547d4b0aa5bd4ff5a93b2c5" + integrity sha512-pOnu9zqQww7dEKf62Nuju6JgsW2V0KRNBHxeKohU+JkHd/GAH5uvoObqFLqkeB2n20mr6yrlWDvo5UBU5GnkfA== + dependencies: + browserslist "^4.23.3" + caniuse-api "^3.0.0" + +postcss-reduce-transforms@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.0.tgz#0386080a14e5faad9f8eda33375b79fe7c4f9677" + integrity sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-selector-parser@^6.0.15, postcss-selector-parser@^6.1.1, postcss-selector-parser@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" + integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-selector-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz#41bd8b56f177c093ca49435f65731befe25d6b9c" + integrity sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-svgo@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-7.0.1.tgz#2b63571d8e9568384df334bac9917baff4d23f58" + integrity sha512-0WBUlSL4lhD9rA5k1e5D8EN5wCEyZD6HJk0jIvRxl+FDVOMlJ7DePHYWGGVc5QRqrJ3/06FTXM0bxjmJpmTPSA== + dependencies: + postcss-value-parser "^4.2.0" + svgo "^3.3.2" + +postcss-unique-selectors@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-7.0.3.tgz#483fc11215b23d517d5d9bbe5833d9915619ca33" + integrity sha512-J+58u5Ic5T1QjP/LDV9g3Cx4CNOgB5vz+kM6+OxHHhFACdcDeKhBXjQmB7fnIZM12YSTvsL0Opwco83DmacW2g== + dependencies: + postcss-selector-parser "^6.1.2" + +postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@^8.4.43, postcss@^8.4.47, postcss@^8.4.48, postcss@^8.4.49: + version "8.4.49" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.49.tgz#4ea479048ab059ab3ae61d082190fabfd994fe19" + integrity sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA== + dependencies: + nanoid "^3.3.7" + picocolors "^1.1.1" + source-map-js "^1.2.1" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +pretty-bytes@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-6.1.1.tgz#38cd6bb46f47afbf667c202cfc754bffd2016a3b" + integrity sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + +prompts@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +protocols@^2.0.0, protocols@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" + integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== + +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +queue-tick@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/queue-tick/-/queue-tick-1.0.1.tgz#f6f07ac82c1fd60f82e098b417a80e52f1f4c142" + integrity sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag== + +radix3@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/radix3/-/radix3-1.1.2.tgz#fd27d2af3896c6bf4bcdfab6427c69c2afc69ec0" + integrity sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +rc9@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/rc9/-/rc9-2.1.2.tgz#6282ff638a50caa0a91a31d76af4a0b9cbd1080d" + integrity sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg== + dependencies: + defu "^6.1.4" + destr "^2.0.3" + +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== + dependencies: + pify "^2.3.0" + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +readable-stream@^2.0.5: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^4.0.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.6.0.tgz#ce412dfb19c04efde1c5936d99c27f37a1ff94c9" + integrity sha512-cbAdYt0VcnpN2Bekq7PU+k363ZRsPwJoEEJOEtSJQlJXzwaxt3FIo/uL+KeDSGIjJqtkwyge4KQgD2S2kd+CQw== + dependencies: + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" + string_decoder "^1.3.0" + +readdir-glob@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.3.tgz#c3d831f51f5e7bfa62fa2ffbe4b508c640f09584" + integrity sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA== + dependencies: + minimatch "^5.1.0" + +readdirp@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.0.2.tgz#388fccb8b75665da3abffe2d8f8ed59fe74c230a" + integrity sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA== + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +redis-errors@^1.0.0, redis-errors@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" + integrity sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w== + +redis-parser@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" + integrity sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A== + dependencies: + redis-errors "^1.0.0" + +refa@^0.12.0, refa@^0.12.1: + version "0.12.1" + resolved "https://registry.yarnpkg.com/refa/-/refa-0.12.1.tgz#dac13c4782dc22b6bae6cce81a2b863888ea39c6" + integrity sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g== + dependencies: + "@eslint-community/regexpp" "^4.8.0" + +regexp-ast-analysis@^0.7.0, regexp-ast-analysis@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/regexp-ast-analysis/-/regexp-ast-analysis-0.7.1.tgz#c0e24cb2a90f6eadd4cbaaba129317e29d29c482" + integrity sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A== + dependencies: + "@eslint-community/regexpp" "^4.8.0" + refa "^0.12.1" + +regexp-tree@^0.1.27: + version "0.1.27" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd" + integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== + +regjsparser@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.10.0.tgz#b1ed26051736b436f22fdec1c8f72635f9f44892" + integrity sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA== + dependencies: + jsesc "~0.5.0" + +replace-in-file@^6.1.0: + version "6.3.5" + resolved "https://registry.yarnpkg.com/replace-in-file/-/replace-in-file-6.3.5.tgz#ff956b0ab5bc96613207d603d197cd209400a654" + integrity sha512-arB9d3ENdKva2fxRnSjwBEXfK1npgyci7ZZuwysgAp7ORjHSyxz6oqIjTEv8R0Ydl4Ll7uOAZXL4vbkhGIizCg== + dependencies: + chalk "^4.1.2" + glob "^7.2.0" + yargs "^17.2.1" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-path@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/resolve-path/-/resolve-path-1.4.0.tgz#c4bda9f5efb2fce65247873ab36bb4d834fe16f7" + integrity sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w== + dependencies: + http-errors "~1.6.2" + path-is-absolute "1.0.1" + +resolve-pkg-maps@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + +resolve@^1.1.7, resolve@^1.10.0, resolve@^1.22.1, resolve@^1.22.4, resolve@^1.22.8: + version "1.22.10" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" + integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== + dependencies: + is-core-module "^2.16.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rfdc@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" + integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== + +rimraf@^5.0.5: + version "5.0.10" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.10.tgz#23b9843d3dc92db71f96e1a2ce92e39fd2a8221c" + integrity sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ== + dependencies: + glob "^10.3.7" + +rollup-plugin-visualizer@^5.12.0: + version "5.12.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.12.0.tgz#661542191ce78ee4f378995297260d0c1efb1302" + integrity sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ== + dependencies: + open "^8.4.0" + picomatch "^2.3.1" + source-map "^0.7.4" + yargs "^17.5.1" + +rollup@^4.20.0, rollup@^4.24.3: + version "4.29.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.29.1.tgz#a9aaaece817e5f778489e5bf82e379cc8a5c05bc" + integrity sha512-RaJ45M/kmJUzSWDs1Nnd5DdV4eerC98idtUOVr6FfKcgxqvjwHmxc5upLF9qZU9EpsVzzhleFahrT3shLuJzIw== + dependencies: + "@types/estree" "1.0.6" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.29.1" + "@rollup/rollup-android-arm64" "4.29.1" + "@rollup/rollup-darwin-arm64" "4.29.1" + "@rollup/rollup-darwin-x64" "4.29.1" + "@rollup/rollup-freebsd-arm64" "4.29.1" + "@rollup/rollup-freebsd-x64" "4.29.1" + "@rollup/rollup-linux-arm-gnueabihf" "4.29.1" + "@rollup/rollup-linux-arm-musleabihf" "4.29.1" + "@rollup/rollup-linux-arm64-gnu" "4.29.1" + "@rollup/rollup-linux-arm64-musl" "4.29.1" + "@rollup/rollup-linux-loongarch64-gnu" "4.29.1" + "@rollup/rollup-linux-powerpc64le-gnu" "4.29.1" + "@rollup/rollup-linux-riscv64-gnu" "4.29.1" + "@rollup/rollup-linux-s390x-gnu" "4.29.1" + "@rollup/rollup-linux-x64-gnu" "4.29.1" + "@rollup/rollup-linux-x64-musl" "4.29.1" + "@rollup/rollup-win32-arm64-msvc" "4.29.1" + "@rollup/rollup-win32-ia32-msvc" "4.29.1" + "@rollup/rollup-win32-x64-msvc" "4.29.1" + fsevents "~2.3.2" + +run-applescript@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.0.0.tgz#e5a553c2bffd620e169d276c1cd8f1b64778fbeb" + integrity sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A== + +run-parallel@^1.1.9, run-parallel@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-buffer@5.2.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +scslre@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/scslre/-/scslre-0.3.0.tgz#c3211e9bfc5547fc86b1eabaa34ed1a657060155" + integrity sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ== + dependencies: + "@eslint-community/regexpp" "^4.8.0" + refa "^0.12.0" + regexp-ast-analysis "^0.7.0" + +scule@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/scule/-/scule-1.3.0.tgz#6efbd22fd0bb801bdcc585c89266a7d2daa8fbd3" + integrity sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g== + +"semver@2 || 3 || 4 || 5": + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.4, semver@^7.3.6, semver@^7.5.3, semver@^7.6.0, semver@^7.6.3: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +send@0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" + integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-javascript@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== + dependencies: + randombytes "^2.1.0" + +serve-placeholder@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/serve-placeholder/-/serve-placeholder-2.0.2.tgz#c5db17fb8e906687c275404eaeb29c0d93aacc36" + integrity sha512-/TMG8SboeiQbZJWRlfTCqMs2DD3SZgWp0kDQePz9yUuCnDfDh/92gf7/PxGhzXTKBIPASIHxFcZndoNbp6QOLQ== + dependencies: + defu "^6.1.4" + +serve-static@^1.16.2: + version "1.16.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" + integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== + dependencies: + encodeurl "~2.0.0" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.19.0" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.2.tgz#d2d83e057959d53ec261311e9e9b8f51dcb2934a" + integrity sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA== + +signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +signal-exit@^4.0.1, signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +simple-git@^3.27.0: + version "3.27.0" + resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-3.27.0.tgz#f4b09e807bda56a4a3968f635c0e4888d3decbd5" + integrity sha512-ivHoFS9Yi9GY49ogc6/YAi3Fl9ROnF4VyubNylgCkA+RVqLaKWnDSzXOVzya8csELIaWaYNutsEuAhZrtOjozA== + dependencies: + "@kwsites/file-exists" "^1.1.1" + "@kwsites/promise-deferred" "^1.1.1" + debug "^4.3.5" + +sirv@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/sirv/-/sirv-3.0.0.tgz#f8d90fc528f65dff04cb597a88609d4e8a4361ce" + integrity sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg== + dependencies: + "@polka/url" "^1.0.0-next.24" + mrmime "^2.0.0" + totalist "^3.0.0" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-5.1.0.tgz#be3adddcdf09ac38eebe8dcdc7b1a57a75b095ce" + integrity sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg== + +slashes@^3.0.12: + version "3.0.12" + resolved "https://registry.yarnpkg.com/slashes/-/slashes-3.0.12.tgz#3d664c877ad542dc1509eaf2c50f38d483a6435a" + integrity sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA== + +smob@^1.0.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/smob/-/smob-1.5.0.tgz#85d79a1403abf128d24d3ebc1cdc5e1a9548d3ab" + integrity sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig== + +source-map-js@^1.0.1, source-map-js@^1.2.0, source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + +source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + +spdx-correct@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-expression-parse@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz#a23af9f3132115465dac215c099303e4ceac5794" + integrity sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.20" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz#e44ed19ed318dd1e5888f93325cee800f0f51b89" + integrity sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw== + +speakingurl@^14.0.1: + version "14.0.1" + resolved "https://registry.yarnpkg.com/speakingurl/-/speakingurl-14.0.1.tgz#f37ec8ddc4ab98e9600c1c9ec324a8c48d772a53" + integrity sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ== + +stable-hash@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/stable-hash/-/stable-hash-0.0.4.tgz#55ae7dadc13e4b3faed13601587cec41859b42f7" + integrity sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g== + +standard-as-callback@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" + integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +std-env@^3.7.0, std-env@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.8.0.tgz#b56ffc1baf1a29dcc80a3bdf11d7fca7c315e7d5" + integrity sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w== + +streamx@^2.15.0: + version "2.21.1" + resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.21.1.tgz#f02979d8395b6b637d08a589fb514498bed55845" + integrity sha512-PhP9wUnFLa+91CPy3N6tiQsK+gnYyUNuk15S3YG/zjYE7RuPeCjJngqnzpC31ow0lzBHQ+QGO4cNJnd0djYUsw== + dependencies: + fast-fifo "^1.3.2" + queue-tick "^1.0.1" + text-decoder "^1.1.0" + optionalDependencies: + bare-events "^2.2.0" + +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string_decoder@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-literal@^2.1.0, strip-literal@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-2.1.1.tgz#26906e65f606d49f748454a08084e94190c2e5ad" + integrity sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q== + dependencies: + js-tokens "^9.0.1" + +stylehacks@^7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-7.0.4.tgz#9c21f7374f4bccc0082412b859b3c89d77d3277c" + integrity sha512-i4zfNrGMt9SB4xRK9L83rlsFCgdGANfeDAYacO1pkqcE7cRHPdWHwnKZVz7WY17Veq/FvyYsRAU++Ga+qDFIww== + dependencies: + browserslist "^4.23.3" + postcss-selector-parser "^6.1.2" + +sucrase@^3.35.0: + version "3.35.0" + resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" + integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== + dependencies: + "@jridgewell/gen-mapping" "^0.3.2" + commander "^4.0.0" + glob "^10.3.10" + lines-and-columns "^1.1.6" + mz "^2.7.0" + pirates "^4.0.1" + ts-interface-checker "^0.1.9" + +superjson@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/superjson/-/superjson-2.2.2.tgz#9d52bf0bf6b5751a3c3472f1292e714782ba3173" + integrity sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q== + dependencies: + copy-anything "^3.0.2" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^9.4.0: + version "9.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.4.0.tgz#17bfcf686288f531db3dea3215510621ccb55954" + integrity sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw== + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +svg-tags@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" + integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA== + +svgo@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.3.2.tgz#ad58002652dffbb5986fc9716afe52d869ecbda8" + integrity sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^5.1.0" + css-tree "^2.3.1" + css-what "^6.1.0" + csso "^5.0.5" + picocolors "^1.0.0" + +synckit@^0.9.1: + version "0.9.2" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.9.2.tgz#a3a935eca7922d48b9e7d6c61822ee6c3ae4ec62" + integrity sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw== + dependencies: + "@pkgr/core" "^0.1.0" + tslib "^2.6.2" + +system-architecture@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/system-architecture/-/system-architecture-0.1.0.tgz#71012b3ac141427d97c67c56bc7921af6bff122d" + integrity sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA== + +tailwind-config-viewer@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/tailwind-config-viewer/-/tailwind-config-viewer-2.0.4.tgz#5f47ef0f0ba3719557f88628de8bf276cad7a4cb" + integrity sha512-icvcmdMmt9dphvas8wL40qttrHwAnW3QEN4ExJ2zICjwRsPj7gowd1cOceaWG3IfTuM/cTNGQcx+bsjMtmV+cw== + dependencies: + "@koa/router" "^12.0.1" + commander "^6.0.0" + fs-extra "^9.0.1" + koa "^2.14.2" + koa-static "^5.0.0" + open "^7.0.4" + portfinder "^1.0.26" + replace-in-file "^6.1.0" + +tailwindcss@~3.4.13: + version "3.4.17" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.17.tgz#ae8406c0f96696a631c790768ff319d46d5e5a63" + integrity sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og== + dependencies: + "@alloc/quick-lru" "^5.2.0" + arg "^5.0.2" + chokidar "^3.6.0" + didyoumean "^1.2.2" + dlv "^1.1.3" + fast-glob "^3.3.2" + glob-parent "^6.0.2" + is-glob "^4.0.3" + jiti "^1.21.6" + lilconfig "^3.1.3" + micromatch "^4.0.8" + normalize-path "^3.0.0" + object-hash "^3.0.0" + picocolors "^1.1.1" + postcss "^8.4.47" + postcss-import "^15.1.0" + postcss-js "^4.0.1" + postcss-load-config "^4.0.2" + postcss-nested "^6.2.0" + postcss-selector-parser "^6.1.2" + resolve "^1.22.8" + sucrase "^3.35.0" + +tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +tar-stream@^3.0.0: + version "3.1.7" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.7.tgz#24b3fb5eabada19fe7338ed6d26e5f7c482e792b" + integrity sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ== + dependencies: + b4a "^1.6.4" + fast-fifo "^1.2.0" + streamx "^2.15.0" + +tar@^6.2.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" + integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^5.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +tar@^7.4.0: + version "7.4.3" + resolved "https://registry.yarnpkg.com/tar/-/tar-7.4.3.tgz#88bbe9286a3fcd900e94592cda7a22b192e80571" + integrity sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw== + dependencies: + "@isaacs/fs-minipass" "^4.0.0" + chownr "^3.0.0" + minipass "^7.1.2" + minizlib "^3.0.1" + mkdirp "^3.0.1" + yallist "^5.0.0" + +terser@^5.17.4: + version "5.37.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.37.0.tgz#38aa66d1cfc43d0638fab54e43ff8a4f72a21ba3" + integrity sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" + commander "^2.20.0" + source-map-support "~0.5.20" + +text-decoder@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/text-decoder/-/text-decoder-1.2.3.tgz#b19da364d981b2326d5f43099c310cc80d770c65" + integrity sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA== + dependencies: + b4a "^1.6.4" + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +tiny-invariant@^1.1.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" + integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== + +tinyexec@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.1.tgz#0ab0daf93b43e2c211212396bdb836b468c97c98" + integrity sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ== + +tinyglobby@0.2.10, tinyglobby@^0.2.10: + version "0.2.10" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.10.tgz#e712cf2dc9b95a1f5c5bbd159720e15833977a0f" + integrity sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew== + dependencies: + fdir "^6.4.2" + picomatch "^4.0.2" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +totalist@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8" + integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +ts-api-utils@^1.3.0: + version "1.4.3" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064" + integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== + +ts-interface-checker@^0.1.9: + version "0.1.13" + resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" + integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== + +tslib@^2.6.2, tslib@^2.6.3: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +tsscmp@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" + integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA== + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-fest@^4.18.2, type-fest@^4.7.1: + version "4.30.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.30.2.tgz#d94429edde1f7deacf554741650aab394197a4cc" + integrity sha512-UJShLPYi1aWqCdq9HycOL/gwsuqda1OISdBO3t8RlXQC4QvtuIz4b5FCfe2dQIWEpmlRExKmcTBfP1r9bhY7ig== + +type-is@^1.6.16: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typescript@^5.7.2: + version "5.7.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.2.tgz#3169cf8c4c8a828cde53ba9ecb3d2b1d5dd67be6" + integrity sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg== + +ufo@^1.1.2, ufo@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.5.4.tgz#16d6949674ca0c9e0fbbae1fa20a71d7b1ded754" + integrity sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ== + +ultrahtml@^1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/ultrahtml/-/ultrahtml-1.5.3.tgz#e7a903a4b28a0e49b71b0801b444050bb0a369c7" + integrity sha512-GykOvZwgDWZlTQMtp5jrD4BVL+gNn2NVlVafjcFUJ7taY20tqYdwdoWBFy6GBJsNTZe1GkGPkSl5knQAjtgceg== + +uncrypto@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/uncrypto/-/uncrypto-0.1.3.tgz#e1288d609226f2d02d8d69ee861fa20d8348ef2b" + integrity sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q== + +unctx@^2.3.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/unctx/-/unctx-2.4.1.tgz#93346a98d4a38c64cc5861f6098f4ce7c6f8164a" + integrity sha512-AbaYw0Nm4mK4qjhns67C+kgxR2YWiwlDBPzxrN8h8C6VtAdCgditAY5Dezu3IJy4XVqAnbrXt9oQJvsn3fyozg== + dependencies: + acorn "^8.14.0" + estree-walker "^3.0.3" + magic-string "^0.30.17" + unplugin "^2.1.0" + +undici-types@~6.20.0: + version "6.20.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" + integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== + +unenv@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/unenv/-/unenv-1.10.0.tgz#c3394a6c6e4cfe68d699f87af456fe3f0db39571" + integrity sha512-wY5bskBQFL9n3Eca5XnhH6KbUo/tfvkwm9OpcdCvLaeA7piBNbavbOKJySEwQ1V0RH6HvNlSAFRTpvTqgKRQXQ== + dependencies: + consola "^3.2.3" + defu "^6.1.4" + mime "^3.0.0" + node-fetch-native "^1.6.4" + pathe "^1.1.2" + +unhead@1.11.14, unhead@^1.11.11: + version "1.11.14" + resolved "https://registry.yarnpkg.com/unhead/-/unhead-1.11.14.tgz#9be7c432a74fa299462d7e87b2a2c0b0e9c48e01" + integrity sha512-XmXW0aZyX9kGk9ejCKCSvv/J4T3Rt4hoAe2EofM+nhG+zwZ7AArUMK/0F/fj6FTkfgY0u0/JryE00qUDULgygA== + dependencies: + "@unhead/dom" "1.11.14" + "@unhead/schema" "1.11.14" + "@unhead/shared" "1.11.14" + hookable "^5.5.3" + +unicorn-magic@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.1.0.tgz#1bb9a51c823aaf9d73a8bfcd3d1a23dde94b0ce4" + integrity sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ== + +unimport@^3.13.1, unimport@^3.13.2, unimport@^3.14.5: + version "3.14.5" + resolved "https://registry.yarnpkg.com/unimport/-/unimport-3.14.5.tgz#6433dd21423edad6e225e61fbf8ea969bcc8bde1" + integrity sha512-tn890SwFFZxqaJSKQPPd+yygfKSATbM8BZWW1aCR2TJBTs1SDrmLamBueaFtYsGjHtQaRgqEbQflOjN2iW12gA== + dependencies: + "@rollup/pluginutils" "^5.1.3" + acorn "^8.14.0" + escape-string-regexp "^5.0.0" + estree-walker "^3.0.3" + fast-glob "^3.3.2" + local-pkg "^0.5.1" + magic-string "^0.30.14" + mlly "^1.7.3" + pathe "^1.1.2" + picomatch "^4.0.2" + pkg-types "^1.2.1" + scule "^1.3.0" + strip-literal "^2.1.1" + unplugin "^1.16.0" + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +unplugin-vue-router@^0.10.8: + version "0.10.9" + resolved "https://registry.yarnpkg.com/unplugin-vue-router/-/unplugin-vue-router-0.10.9.tgz#7a806275214993f6e67f666430fa637bb6e84181" + integrity sha512-DXmC0GMcROOnCmN56GRvi1bkkG1BnVs4xJqNvucBUeZkmB245URvtxOfbo3H6q4SOUQQbLPYWd6InzvjRh363A== + dependencies: + "@babel/types" "^7.26.0" + "@rollup/pluginutils" "^5.1.3" + "@vue-macros/common" "^1.15.0" + ast-walker-scope "^0.6.2" + chokidar "^3.6.0" + fast-glob "^3.3.2" + json5 "^2.2.3" + local-pkg "^0.5.1" + magic-string "^0.30.14" + mlly "^1.7.3" + pathe "^1.1.2" + scule "^1.3.0" + unplugin "2.0.0-beta.1" + yaml "^2.6.1" + +unplugin@2.0.0-beta.1: + version "2.0.0-beta.1" + resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-2.0.0-beta.1.tgz#3f8c9ecfae03fc9e22d9821ba68d52aa46a13aeb" + integrity sha512-2qzQo5LN2DmUZXkWDHvGKLF5BP0WN+KthD6aPnPJ8plRBIjv4lh5O07eYcSxgO2znNw9s4MNhEO1sB+JDllDbQ== + dependencies: + acorn "^8.14.0" + webpack-virtual-modules "^0.6.2" + +unplugin@^1.10.0, unplugin@^1.14.1, unplugin@^1.16.0: + version "1.16.0" + resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.16.0.tgz#ca0f248bf8798cd752dd02e5b381223b737cef72" + integrity sha512-5liCNPuJW8dqh3+DM6uNM2EI3MLLpCKp/KY+9pB5M2S2SR2qvvDHhKgBOaTWEbZTAws3CXfB0rKTIolWKL05VQ== + dependencies: + acorn "^8.14.0" + webpack-virtual-modules "^0.6.2" + +unplugin@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-2.1.0.tgz#c093c34bf52812131125b67d0724bd57685c830a" + integrity sha512-us4j03/499KhbGP8BU7Hrzrgseo+KdfJYWcbcajCOqsAyb8Gk0Yn2kiUIcZISYCb1JFaZfIuG3b42HmguVOKCQ== + dependencies: + acorn "^8.14.0" + webpack-virtual-modules "^0.6.2" + +unstorage@^1.13.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/unstorage/-/unstorage-1.14.1.tgz#49d8cb9b219114e29e56d6c1df83be13713083e5" + integrity sha512-0MBKpoVhNLL/Ixvue9lIsrHkwwWW9/f3TRftsYu1R7nZJJyHSdgPMBDjny2op07nirnS3OX6H3u+YDFGld+1Bg== + dependencies: + anymatch "^3.1.3" + chokidar "^3.6.0" + citty "^0.1.6" + destr "^2.0.3" + h3 "^1.13.0" + listhen "^1.9.0" + lru-cache "^10.4.3" + node-fetch-native "^1.6.4" + ofetch "^1.4.1" + ufo "^1.5.4" + +untun@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/untun/-/untun-0.1.3.tgz#5d10dee37a3a5737ff03d158be877dae0a0e58a6" + integrity sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ== + dependencies: + citty "^0.1.5" + consola "^3.2.3" + pathe "^1.1.1" + +untyped@^1.5.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/untyped/-/untyped-1.5.2.tgz#36e892fab34172a9bc1d31004332ac2173b9d694" + integrity sha512-eL/8PlhLcMmlMDtNPKhyyz9kEBDS3Uk4yMu/ewlkT2WFbtzScjHWPJLdQLmaGPUKjXzwe9MumOtOgc4Fro96Kg== + dependencies: + "@babel/core" "^7.26.0" + "@babel/standalone" "^7.26.4" + "@babel/types" "^7.26.3" + citty "^0.1.6" + defu "^6.1.4" + jiti "^2.4.1" + knitwork "^1.2.0" + scule "^1.3.0" + +unwasm@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/unwasm/-/unwasm-0.3.9.tgz#01eca80a1cf2133743bc1bf5cfa749cc145beea0" + integrity sha512-LDxTx/2DkFURUd+BU1vUsF/moj0JsoTvl+2tcg2AUOiEzVturhGGx17/IMgGvKUYdZwr33EJHtChCJuhu9Ouvg== + dependencies: + knitwork "^1.0.0" + magic-string "^0.30.8" + mlly "^1.6.1" + pathe "^1.1.2" + pkg-types "^1.0.3" + unplugin "^1.10.0" + +update-browserslist-db@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz#80846fba1d79e82547fb661f8d141e0945755fe5" + integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.0" + +uqr@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/uqr/-/uqr-0.1.2.tgz#5c6cd5dcff9581f9bb35b982cb89e2c483a41d7d" + integrity sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA== + +uri-js-replace@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uri-js-replace/-/uri-js-replace-1.0.1.tgz#c285bb352b701c9dfdaeffc4da5be77f936c9048" + integrity sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +urlpattern-polyfill@8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-8.0.2.tgz#99f096e35eff8bf4b5a2aa7d58a1523d6ebc7ce5" + integrity sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ== + +util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +vary@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +vite-hot-client@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/vite-hot-client/-/vite-hot-client-0.2.4.tgz#c88789f1615cf4e95690cd5fca98b2e449a29637" + integrity sha512-a1nzURqO7DDmnXqabFOliz908FRmIppkBKsJthS8rbe8hBEXwEwe4C3Pp33Z1JoFCYfVL4kTOMLKk0ZZxREIeA== + +vite-node@^2.1.5: + version "2.1.8" + resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-2.1.8.tgz#9495ca17652f6f7f95ca7c4b568a235e0c8dbac5" + integrity sha512-uPAwSr57kYjAUux+8E2j0q0Fxpn8M9VoyfGiRI8Kfktz9NcYMCenwY5RnZxnF1WTu3TGiYipirIzacLL3VVGFg== + dependencies: + cac "^6.7.14" + debug "^4.3.7" + es-module-lexer "^1.5.4" + pathe "^1.1.2" + vite "^5.0.0" + +vite-plugin-checker@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/vite-plugin-checker/-/vite-plugin-checker-0.8.0.tgz#33419857a623b35c9483e4f603d4ca8b6984acde" + integrity sha512-UA5uzOGm97UvZRTdZHiQVYFnd86AVn8EVaD4L3PoVzxH+IZSfaAw14WGFwX9QS23UW3lV/5bVKZn6l0w+q9P0g== + dependencies: + "@babel/code-frame" "^7.12.13" + ansi-escapes "^4.3.0" + chalk "^4.1.1" + chokidar "^3.5.1" + commander "^8.0.0" + fast-glob "^3.2.7" + fs-extra "^11.1.0" + npm-run-path "^4.0.1" + strip-ansi "^6.0.0" + tiny-invariant "^1.1.0" + vscode-languageclient "^7.0.0" + vscode-languageserver "^7.0.0" + vscode-languageserver-textdocument "^1.0.1" + vscode-uri "^3.0.2" + +vite-plugin-inspect@~0.8.9: + version "0.8.9" + resolved "https://registry.yarnpkg.com/vite-plugin-inspect/-/vite-plugin-inspect-0.8.9.tgz#01a7e484ccbc12a8c86ee8bc90efe13aeb0fed1b" + integrity sha512-22/8qn+LYonzibb1VeFZmISdVao5kC22jmEKm24vfFE8siEn47EpVcCLYMv6iKOYMJfjSvSJfueOwcFCkUnV3A== + dependencies: + "@antfu/utils" "^0.7.10" + "@rollup/pluginutils" "^5.1.3" + debug "^4.3.7" + error-stack-parser-es "^0.1.5" + fs-extra "^11.2.0" + open "^10.1.0" + perfect-debounce "^1.0.0" + picocolors "^1.1.1" + sirv "^3.0.0" + +vite-plugin-vue-inspector@5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.1.3.tgz#b85c85c2a2d5fe5aa382039f3230068cc0837996" + integrity sha512-pMrseXIDP1Gb38mOevY+BvtNGNqiqmqa2pKB99lnLsADQww9w9xMbAfT4GB6RUoaOkSPrtlXqpq2Fq+Dj2AgFg== + dependencies: + "@babel/core" "^7.23.0" + "@babel/plugin-proposal-decorators" "^7.23.0" + "@babel/plugin-syntax-import-attributes" "^7.22.5" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-transform-typescript" "^7.22.15" + "@vue/babel-plugin-jsx" "^1.1.5" + "@vue/compiler-dom" "^3.3.4" + kolorist "^1.8.0" + magic-string "^0.30.4" + +vite@^5.0.0, vite@^5.4.11: + version "5.4.11" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.11.tgz#3b415cd4aed781a356c1de5a9ebafb837715f6e5" + integrity sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q== + dependencies: + esbuild "^0.21.3" + postcss "^8.4.43" + rollup "^4.20.0" + optionalDependencies: + fsevents "~2.3.3" + +vscode-jsonrpc@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz#108bdb09b4400705176b957ceca9e0880e9b6d4e" + integrity sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg== + +vscode-languageclient@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz#b505c22c21ffcf96e167799757fca07a6bad0fb2" + integrity sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg== + dependencies: + minimatch "^3.0.4" + semver "^7.3.4" + vscode-languageserver-protocol "3.16.0" + +vscode-languageserver-protocol@3.16.0: + version "3.16.0" + resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz#34135b61a9091db972188a07d337406a3cdbe821" + integrity sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A== + dependencies: + vscode-jsonrpc "6.0.0" + vscode-languageserver-types "3.16.0" + +vscode-languageserver-textdocument@^1.0.1: + version "1.0.12" + resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz#457ee04271ab38998a093c68c2342f53f6e4a631" + integrity sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA== + +vscode-languageserver-types@3.16.0: + version "3.16.0" + resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz#ecf393fc121ec6974b2da3efb3155644c514e247" + integrity sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA== + +vscode-languageserver@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz#49b068c87cfcca93a356969d20f5d9bdd501c6b0" + integrity sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw== + dependencies: + vscode-languageserver-protocol "3.16.0" + +vscode-uri@^3.0.2: + version "3.0.8" + resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.8.tgz#1770938d3e72588659a172d0fd4642780083ff9f" + integrity sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw== + +vue-bundle-renderer@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/vue-bundle-renderer/-/vue-bundle-renderer-2.1.1.tgz#77147f96d865729828b3a5dff2bccffa8370dde9" + integrity sha512-+qALLI5cQncuetYOXp4yScwYvqh8c6SMXee3B+M7oTZxOgtESP0l4j/fXdEJoZ+EdMxkGWIj+aSEyjXkOdmd7g== + dependencies: + ufo "^1.5.4" + +vue-devtools-stub@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/vue-devtools-stub/-/vue-devtools-stub-0.1.0.tgz#a65b9485edecd4273cedcb8102c739b83add2c81" + integrity sha512-RutnB7X8c5hjq39NceArgXg28WZtZpGc3+J16ljMiYnFhKvd8hITxSWQSQ5bvldxMDU6gG5mkxl1MTQLXckVSQ== + +vue-eslint-parser@^9.4.3: + version "9.4.3" + resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz#9b04b22c71401f1e8bca9be7c3e3416a4bde76a8" + integrity sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg== + 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" + +vue-router@^4.4.5: + version "4.5.0" + resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.5.0.tgz#58fc5fe374e10b6018f910328f756c3dae081f14" + integrity sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w== + dependencies: + "@vue/devtools-api" "^6.6.4" + +vue@^3.5.13, vue@latest: + version "3.5.13" + resolved "https://registry.yarnpkg.com/vue/-/vue-3.5.13.tgz#9f760a1a982b09c0c04a867903fc339c9f29ec0a" + integrity sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ== + 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" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +webpack-virtual-modules@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz#057faa9065c8acf48f24cb57ac0e77739ab9a7e8" + integrity sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +which@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/which/-/which-3.0.1.tgz#89f1cd0c23f629a8105ffe69b8172791c87b4be1" + integrity sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@^8.18.0: + version "8.18.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== + +xml-name-validator@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" + integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yallist@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533" + integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw== + +yaml-ast-parser@0.0.43: + version "0.0.43" + resolved "https://registry.yarnpkg.com/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz#e8a23e6fb4c38076ab92995c5dca33f3d3d7c9bb" + integrity sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A== + +yaml@^2.3.4, yaml@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.6.1.tgz#42f2b1ba89203f374609572d5349fb8686500773" + integrity sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^17.2.1, yargs@^17.5.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +ylru@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ylru/-/ylru-1.4.0.tgz#0cf0aa57e9c24f8a2cbde0cc1ca2c9592ac4e0f6" + integrity sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +yocto-queue@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110" + integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g== + +zhead@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/zhead/-/zhead-2.2.4.tgz#87cd1e2c3d2f465fa9f43b8db23f9716dfe6bed7" + integrity sha512-8F0OI5dpWIA5IGG5NHUg9staDwz/ZPxZtvGVf01j7vHqSyZ0raHY+78atOVxRqb73AotX22uV1pXt3gYSstGag== + +zip-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-6.0.1.tgz#e141b930ed60ccaf5d7fa9c8260e0d1748a2bbfb" + integrity sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA== + dependencies: + archiver-utils "^5.0.0" + compress-commons "^6.0.2" + readable-stream "^4.0.0" From d509995a8628af571390f0a085827b65227895c5 Mon Sep 17 00:00:00 2001 From: DecDuck Date: Tue, 24 Dec 2024 08:54:45 +1100 Subject: [PATCH 188/316] feat(modal): fix confirm and add notification --- base/components/ConfirmationModal.vue | 22 +++++-- base/components/NotificationModal.vue | 95 +++++++++++++++++++++++++++ base/composables/modal-stack.ts | 10 +++ 3 files changed, 121 insertions(+), 6 deletions(-) create mode 100644 base/components/NotificationModal.vue diff --git a/base/components/ConfirmationModal.vue b/base/components/ConfirmationModal.vue index 1c500cf8..55b93422 100644 --- a/base/components/ConfirmationModal.vue +++ b/base/components/ConfirmationModal.vue @@ -1,6 +1,10 @@ From 464a2e0cf95ba975dd73cba4c351909401ac95b5 Mon Sep 17 00:00:00 2001 From: DecDuck Date: Tue, 28 Jan 2025 15:56:20 +1100 Subject: [PATCH 195/316] fix: requiring disabled param --- base/components/LoadingButton.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/components/LoadingButton.vue b/base/components/LoadingButton.vue index f0ff4a22..9a2e83e1 100644 --- a/base/components/LoadingButton.vue +++ b/base/components/LoadingButton.vue @@ -35,7 +35,7 @@ type Style = "default" | "none"; const props = defineProps<{ loading: boolean; style?: Style; - disabled: boolean; + disabled?: boolean; }>(); const style = props.style ?? "default"; From 3e87c3a1b0ccd10eef5c6fe74d1c9e0eddb70adc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 29 Jan 2025 05:45:14 +0000 Subject: [PATCH 196/316] chore(deps): update hustcer/setup-nu action to v3.17 --- .../native_model/.github/workflows/build_and_test_release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/native_model/.github/workflows/build_and_test_release.yml b/libraries/native_model/.github/workflows/build_and_test_release.yml index 9ac324ba..a409b8cf 100644 --- a/libraries/native_model/.github/workflows/build_and_test_release.yml +++ b/libraries/native_model/.github/workflows/build_and_test_release.yml @@ -22,7 +22,7 @@ jobs: toolchain: ${{ matrix.toolchain }} override: true - uses: extractions/setup-just@v2 - - uses: hustcer/setup-nu@v3.16 + - uses: hustcer/setup-nu@v3.17 with: version: '0.85' - name: Just version From 60f780134562ba2b60b5e9448390d2327721bf23 Mon Sep 17 00:00:00 2001 From: DecDuck Date: Fri, 14 Feb 2025 20:07:40 +1100 Subject: [PATCH 197/316] fix: loading button styles --- base/components/LoadingButton.vue | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/base/components/LoadingButton.vue b/base/components/LoadingButton.vue index 9a2e83e1..c615ed85 100644 --- a/base/components/LoadingButton.vue +++ b/base/components/LoadingButton.vue @@ -1,11 +1,15 @@