Compare commits
9 Commits
ece53d90db
...
2d058d109c
Author | SHA1 | Date |
---|---|---|
VISHAL KUMAR SINGH | 2d058d109c | |
acheron | 81c8c556e8 | |
czkz | c96846fce2 | |
acheron | 10c997552e | |
Sundeep Charan Ramkumar | 827c986618 | |
acheron | fefa69519f | |
zeroc | b53bb35cf2 | |
fedoras | 7515c919f8 | |
vishalsinghji | 03e569ff5a |
|
@ -12,8 +12,14 @@ The minor version will be incremented upon a breaking change and the patch versi
|
|||
|
||||
### Features
|
||||
|
||||
- avm: Support customizing the installation location using `AVM_HOME` environment variable ([#2917](https://github.com/coral-xyz/anchor/pull/2917))
|
||||
- idl, ts: Add accounts resolution for associated token accounts ([#2927](https://github.com/coral-xyz/anchor/pull/2927))
|
||||
|
||||
### Fixes
|
||||
|
||||
- lang: Eliminate variable allocations that build up stack space for token extension code generation ([#2913](https://github.com/coral-xyz/anchor/pull/2913)).
|
||||
- ts: Fix incorrect `maxSupportedTransactionVersion` in `AnchorProvider.send*()` methods ([#2922](https://github.com/coral-xyz/anchor/pull/2922)).
|
||||
|
||||
### Breaking
|
||||
|
||||
## [0.30.0] - 2024-04-15
|
||||
|
|
2
Makefile
2
Makefile
|
@ -15,6 +15,8 @@ publish:
|
|||
sleep 25
|
||||
cd lang/derive/accounts/ && cargo publish && cd ../../../
|
||||
sleep 25
|
||||
cd lang/derive/serde/ && cargo publish && cd ../../../
|
||||
sleep 25
|
||||
cd lang/derive/space/ && cargo publish && cd ../../../
|
||||
sleep 25
|
||||
cd lang/attribute/access-control/ && cargo publish && cd ../../../
|
||||
|
|
|
@ -9,27 +9,32 @@ use std::fs;
|
|||
use std::io::Write;
|
||||
use std::path::PathBuf;
|
||||
use std::process::Stdio;
|
||||
use std::collections::HashSet;
|
||||
|
||||
/// Storage directory for AVM, ~/.avm
|
||||
/// Storage directory for AVM, customizable by setting the $AVM_HOME, defaults to ~/.avm
|
||||
pub static AVM_HOME: Lazy<PathBuf> = Lazy::new(|| {
|
||||
cfg_if::cfg_if! {
|
||||
if #[cfg(test)] {
|
||||
let dir = tempfile::tempdir().expect("Could not create temporary directory");
|
||||
dir.path().join(".avm")
|
||||
} else {
|
||||
let mut user_home = dirs::home_dir().expect("Could not find home directory");
|
||||
user_home.push(".avm");
|
||||
user_home
|
||||
if let Ok(avm_home) = std::env::var("AVM_HOME") {
|
||||
PathBuf::from(avm_home)
|
||||
} else {
|
||||
let mut user_home = dirs::home_dir().expect("Could not find home directory");
|
||||
user_home.push(".avm");
|
||||
user_home
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/// Path to the current version file ~/.avm/.version
|
||||
/// Path to the current version file $AVM_HOME/.version
|
||||
fn current_version_file_path() -> PathBuf {
|
||||
AVM_HOME.join(".version")
|
||||
}
|
||||
|
||||
/// Path to the current version file ~/.avm/bin
|
||||
/// Path to the current version file $AVM_HOME/bin
|
||||
fn get_bin_dir_path() -> PathBuf {
|
||||
AVM_HOME.join("bin")
|
||||
}
|
||||
|
@ -270,36 +275,42 @@ pub fn fetch_versions() -> Result<Vec<Version>> {
|
|||
/// Print available versions and flags indicating installed, current and latest
|
||||
pub fn list_versions() -> Result<()> {
|
||||
let mut installed_versions = read_installed_versions()?;
|
||||
|
||||
let mut available_versions = fetch_versions()?;
|
||||
// Reverse version list so latest versions are printed last
|
||||
available_versions.reverse();
|
||||
|
||||
let print_versions =
|
||||
|versions: Vec<Version>, installed_versions: &mut Vec<Version>, show_latest: bool| {
|
||||
versions.iter().enumerate().for_each(|(i, v)| {
|
||||
print!("{v}");
|
||||
let mut flags = vec![];
|
||||
if i == versions.len() - 1 && show_latest {
|
||||
flags.push("latest");
|
||||
}
|
||||
if let Some(position) = installed_versions.iter().position(|iv| iv == v) {
|
||||
flags.push("installed");
|
||||
installed_versions.remove(position);
|
||||
}
|
||||
if current_version().map(|cv| &cv == v).unwrap_or_default() {
|
||||
flags.push("current");
|
||||
}
|
||||
let installed_set: HashSet<_> = installed_versions.iter().cloned().collect();
|
||||
|
||||
if flags.is_empty() {
|
||||
println!();
|
||||
} else {
|
||||
println!("\t({})", flags.join(", "));
|
||||
}
|
||||
})
|
||||
};
|
||||
print_versions(available_versions, &mut installed_versions, true);
|
||||
print_versions(installed_versions.clone(), &mut installed_versions, false);
|
||||
// Print helper function
|
||||
let print_version_info = |v: &Version, flags: &[&str]| {
|
||||
print!("{v}");
|
||||
if !flags.is_empty() {
|
||||
println!("\t({})", flags.join(", "));
|
||||
} else {
|
||||
println!();
|
||||
}
|
||||
};
|
||||
|
||||
// Print available versions with flags
|
||||
let print_available_versions = |versions: Vec<Version>, show_latest: bool| {
|
||||
for (i, v) in versions.iter().enumerate() {
|
||||
let mut flags = vec![];
|
||||
if i == versions.len() - 1 && show_latest {
|
||||
flags.push("latest");
|
||||
}
|
||||
if installed_set.contains(v) {
|
||||
flags.push("installed");
|
||||
installed_versions.retain(|iv| iv != v);
|
||||
}
|
||||
if current_version().map_or(false, |cv| cv == *v) {
|
||||
flags.push("current");
|
||||
}
|
||||
print_version_info(v, &flags);
|
||||
}
|
||||
};
|
||||
|
||||
print_available_versions(&available_versions, true);
|
||||
print_available_versions(&installed_versions, false);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
@ -60,4 +60,4 @@ bytemuck = "1"
|
|||
solana-program = "1.16"
|
||||
thiserror = "1"
|
||||
# TODO: Remove. This crate has been added to fix a build error with the 1.16.0 release.
|
||||
getrandom = { version = "0.2", features = ["custom"] }
|
||||
getrandom = { version = "0.2", features = ["custom"] }
|
||||
|
|
|
@ -591,16 +591,16 @@ use syn::parse_macro_input;
|
|||
/// <br><br>
|
||||
/// Example:
|
||||
/// <pre>
|
||||
/// use anchor_spl::{mint, token::{TokenAccount, Mint, Token}};
|
||||
/// use anchor_spl::token_interface::{TokenInterface, TokenAccount, Mint};
|
||||
/// ...
|
||||
/// #[account(
|
||||
/// mint::token_program = token_a_token_program,
|
||||
/// )]
|
||||
/// pub token_a_mint: Box<InterfaceAccount<'info, Mint>>,
|
||||
/// pub token_a_mint: InterfaceAccount<'info, Mint>,
|
||||
/// #[account(
|
||||
/// mint::token_program = token_b_token_program,
|
||||
/// )]
|
||||
/// pub token_b_mint: Box<InterfaceAccount<'info, Mint>>,
|
||||
/// pub token_b_mint: InterfaceAccount<'info, Mint>,
|
||||
/// #[account(
|
||||
/// init,
|
||||
/// payer = payer,
|
||||
|
@ -608,7 +608,7 @@ use syn::parse_macro_input;
|
|||
/// token::authority = payer,
|
||||
/// token::token_program = token_a_token_program,
|
||||
/// )]
|
||||
/// pub token_a_account: Box<InterfaceAccount<'info, TokenAccount>>,
|
||||
/// pub token_a_account: InterfaceAccount<'info, TokenAccount>,
|
||||
/// #[account(
|
||||
/// init,
|
||||
/// payer = payer,
|
||||
|
@ -616,7 +616,7 @@ use syn::parse_macro_input;
|
|||
/// token::authority = payer,
|
||||
/// token::token_program = token_b_token_program,
|
||||
/// )]
|
||||
/// pub token_b_account: Box<InterfaceAccount<'info, TokenAccount>>,
|
||||
/// pub token_b_account: InterfaceAccount<'info, TokenAccount>,
|
||||
/// pub token_a_token_program: Interface<'info, TokenInterface>,
|
||||
/// pub token_b_token_program: Interface<'info, TokenInterface>,
|
||||
/// #[account(mut)]
|
||||
|
|
|
@ -886,67 +886,46 @@ fn generate_constraint_init_group(
|
|||
for e in extensions {
|
||||
match e {
|
||||
::anchor_spl::token_interface::spl_token_2022::extension::ExtensionType::GroupPointer => {
|
||||
let cpi_program = #token_program.to_account_info();
|
||||
let accounts = ::anchor_spl::token_interface::GroupPointerInitialize {
|
||||
::anchor_spl::token_interface::group_pointer_initialize(anchor_lang::context::CpiContext::new(#token_program.to_account_info(), ::anchor_spl::token_interface::GroupPointerInitialize {
|
||||
token_program_id: #token_program.to_account_info(),
|
||||
mint: #field.to_account_info(),
|
||||
};
|
||||
let cpi_ctx = anchor_lang::context::CpiContext::new(cpi_program, accounts);
|
||||
::anchor_spl::token_interface::group_pointer_initialize(cpi_ctx, #group_pointer_authority, #group_pointer_group_address)?;
|
||||
}), #group_pointer_authority, #group_pointer_group_address)?;
|
||||
},
|
||||
::anchor_spl::token_interface::spl_token_2022::extension::ExtensionType::GroupMemberPointer => {
|
||||
let cpi_program = #token_program.to_account_info();
|
||||
let accounts = ::anchor_spl::token_interface::GroupMemberPointerInitialize {
|
||||
::anchor_spl::token_interface::group_member_pointer_initialize(anchor_lang::context::CpiContext::new(#token_program.to_account_info(), ::anchor_spl::token_interface::GroupMemberPointerInitialize {
|
||||
token_program_id: #token_program.to_account_info(),
|
||||
mint: #field.to_account_info(),
|
||||
};
|
||||
let cpi_ctx = anchor_lang::context::CpiContext::new(cpi_program, accounts);
|
||||
::anchor_spl::token_interface::group_member_pointer_initialize(cpi_ctx, #group_member_pointer_authority, #group_member_pointer_member_address)?;
|
||||
}), #group_member_pointer_authority, #group_member_pointer_member_address)?;
|
||||
},
|
||||
::anchor_spl::token_interface::spl_token_2022::extension::ExtensionType::MetadataPointer => {
|
||||
let cpi_program = #token_program.to_account_info();
|
||||
let accounts = ::anchor_spl::token_interface::MetadataPointerInitialize {
|
||||
::anchor_spl::token_interface::metadata_pointer_initialize(anchor_lang::context::CpiContext::new(#token_program.to_account_info(), ::anchor_spl::token_interface::MetadataPointerInitialize {
|
||||
token_program_id: #token_program.to_account_info(),
|
||||
mint: #field.to_account_info(),
|
||||
};
|
||||
let cpi_ctx = anchor_lang::context::CpiContext::new(cpi_program, accounts);
|
||||
::anchor_spl::token_interface::metadata_pointer_initialize(cpi_ctx, #metadata_pointer_authority, #metadata_pointer_metadata_address)?;
|
||||
}), #metadata_pointer_authority, #metadata_pointer_metadata_address)?;
|
||||
},
|
||||
::anchor_spl::token_interface::spl_token_2022::extension::ExtensionType::MintCloseAuthority => {
|
||||
let cpi_program = #token_program.to_account_info();
|
||||
let accounts = ::anchor_spl::token_interface::MintCloseAuthorityInitialize {
|
||||
::anchor_spl::token_interface::mint_close_authority_initialize(anchor_lang::context::CpiContext::new(#token_program.to_account_info(), ::anchor_spl::token_interface::MintCloseAuthorityInitialize {
|
||||
token_program_id: #token_program.to_account_info(),
|
||||
mint: #field.to_account_info(),
|
||||
};
|
||||
let cpi_ctx = anchor_lang::context::CpiContext::new(cpi_program, accounts);
|
||||
::anchor_spl::token_interface::mint_close_authority_initialize(cpi_ctx, #close_authority)?;
|
||||
}), #close_authority)?;
|
||||
},
|
||||
::anchor_spl::token_interface::spl_token_2022::extension::ExtensionType::TransferHook => {
|
||||
let cpi_program = #token_program.to_account_info();
|
||||
let accounts = ::anchor_spl::token_interface::TransferHookInitialize {
|
||||
::anchor_spl::token_interface::transfer_hook_initialize(anchor_lang::context::CpiContext::new(#token_program.to_account_info(), ::anchor_spl::token_interface::TransferHookInitialize {
|
||||
token_program_id: #token_program.to_account_info(),
|
||||
mint: #field.to_account_info(),
|
||||
};
|
||||
let cpi_ctx = anchor_lang::context::CpiContext::new(cpi_program, accounts);
|
||||
::anchor_spl::token_interface::transfer_hook_initialize(cpi_ctx, #transfer_hook_authority, #transfer_hook_program_id)?;
|
||||
}), #transfer_hook_authority, #transfer_hook_program_id)?;
|
||||
},
|
||||
::anchor_spl::token_interface::spl_token_2022::extension::ExtensionType::NonTransferable => {
|
||||
let cpi_program = #token_program.to_account_info();
|
||||
let accounts = ::anchor_spl::token_interface::NonTransferableMintInitialize {
|
||||
::anchor_spl::token_interface::non_transferable_mint_initialize(anchor_lang::context::CpiContext::new(#token_program.to_account_info(), ::anchor_spl::token_interface::NonTransferableMintInitialize {
|
||||
token_program_id: #token_program.to_account_info(),
|
||||
mint: #field.to_account_info(),
|
||||
};
|
||||
let cpi_ctx = anchor_lang::context::CpiContext::new(cpi_program, accounts);
|
||||
::anchor_spl::token_interface::non_transferable_mint_initialize(cpi_ctx)?;
|
||||
}))?;
|
||||
},
|
||||
::anchor_spl::token_interface::spl_token_2022::extension::ExtensionType::PermanentDelegate => {
|
||||
let cpi_program = #token_program.to_account_info();
|
||||
let accounts = ::anchor_spl::token_interface::PermanentDelegateInitialize {
|
||||
::anchor_spl::token_interface::permanent_delegate_initialize(anchor_lang::context::CpiContext::new(#token_program.to_account_info(), ::anchor_spl::token_interface::PermanentDelegateInitialize {
|
||||
token_program_id: #token_program.to_account_info(),
|
||||
mint: #field.to_account_info(),
|
||||
};
|
||||
let cpi_ctx = anchor_lang::context::CpiContext::new(cpi_program, accounts);
|
||||
::anchor_spl::token_interface::permanent_delegate_initialize(cpi_ctx, #permanent_delegate.unwrap())?;
|
||||
}), #permanent_delegate.unwrap())?;
|
||||
},
|
||||
_ => {} // do nothing
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ use proc_macro2::TokenStream;
|
|||
use quote::{quote, ToTokens};
|
||||
|
||||
use super::common::{get_idl_module_path, get_no_docs};
|
||||
use crate::{AccountField, AccountsStruct, Field, Ty};
|
||||
use crate::{AccountField, AccountsStruct, Field, InitKind, Ty};
|
||||
|
||||
/// Generate the IDL build impl for the Accounts struct.
|
||||
pub fn gen_idl_build_impl_accounts_struct(accounts: &AccountsStruct) -> TokenStream {
|
||||
|
@ -168,26 +168,87 @@ fn get_address(acc: &Field) -> TokenStream {
|
|||
|
||||
fn get_pda(acc: &Field, accounts: &AccountsStruct) -> TokenStream {
|
||||
let idl = get_idl_module_path();
|
||||
let parse_default = |expr: &syn::Expr| parse_seed(expr, accounts);
|
||||
|
||||
// Seeds
|
||||
let seed_constraints = acc.constraints.seeds.as_ref();
|
||||
let seeds = seed_constraints
|
||||
.map(|seed| seed.seeds.iter().map(|seed| parse_seed(seed, accounts)))
|
||||
.and_then(|seeds| seeds.collect::<Result<Vec<_>>>().ok());
|
||||
let program = seed_constraints
|
||||
.and_then(|seed| seed.program_seed.as_ref())
|
||||
.and_then(|program| parse_seed(program, accounts).ok())
|
||||
.map(|program| quote! { Some(#program) })
|
||||
.unwrap_or_else(|| quote! { None });
|
||||
match seeds {
|
||||
Some(seeds) => quote! {
|
||||
Some(
|
||||
#idl::IdlPda {
|
||||
seeds: vec![#(#seeds),*],
|
||||
program: #program,
|
||||
}
|
||||
)
|
||||
},
|
||||
_ => quote! { None },
|
||||
let pda = seed_constraints
|
||||
.map(|seed| seed.seeds.iter().map(parse_default))
|
||||
.and_then(|seeds| seeds.collect::<Result<Vec<_>>>().ok())
|
||||
.map(|seeds| {
|
||||
let program = seed_constraints
|
||||
.and_then(|seed| seed.program_seed.as_ref())
|
||||
.and_then(|program| parse_default(program).ok())
|
||||
.map(|program| quote! { Some(#program) })
|
||||
.unwrap_or_else(|| quote! { None });
|
||||
|
||||
quote! {
|
||||
Some(
|
||||
#idl::IdlPda {
|
||||
seeds: vec![#(#seeds),*],
|
||||
program: #program,
|
||||
}
|
||||
)
|
||||
}
|
||||
});
|
||||
if let Some(pda) = pda {
|
||||
return pda;
|
||||
}
|
||||
|
||||
// Associated token
|
||||
let pda = acc
|
||||
.constraints
|
||||
.init
|
||||
.as_ref()
|
||||
.and_then(|init| match &init.kind {
|
||||
InitKind::AssociatedToken {
|
||||
owner,
|
||||
mint,
|
||||
token_program,
|
||||
} => Some((owner, mint, token_program)),
|
||||
_ => None,
|
||||
})
|
||||
.or_else(|| {
|
||||
acc.constraints
|
||||
.associated_token
|
||||
.as_ref()
|
||||
.map(|ata| (&ata.wallet, &ata.mint, &ata.token_program))
|
||||
})
|
||||
.and_then(|(wallet, mint, token_program)| {
|
||||
// ATA constraints have implicit `.key()` call
|
||||
let parse_expr = |ts| parse_default(&syn::parse2(ts).unwrap()).ok();
|
||||
let parse_ata = |expr| parse_expr(quote! { #expr.key().as_ref() });
|
||||
|
||||
let wallet = parse_ata(wallet);
|
||||
let mint = parse_ata(mint);
|
||||
let token_program = token_program
|
||||
.as_ref()
|
||||
.and_then(parse_ata)
|
||||
.or_else(|| parse_expr(quote!(anchor_spl::token::ID)));
|
||||
|
||||
let seeds = match (wallet, mint, token_program) {
|
||||
(Some(w), Some(m), Some(tp)) => quote! { vec![#w, #tp, #m] },
|
||||
_ => return None,
|
||||
};
|
||||
|
||||
let program = parse_expr(quote!(anchor_spl::associated_token::ID))
|
||||
.map(|program| quote! { Some(#program) })
|
||||
.unwrap();
|
||||
|
||||
Some(quote! {
|
||||
Some(
|
||||
#idl::IdlPda {
|
||||
seeds: #seeds,
|
||||
program: #program,
|
||||
}
|
||||
)
|
||||
})
|
||||
});
|
||||
if let Some(pda) = pda {
|
||||
return pda;
|
||||
}
|
||||
|
||||
quote! { None }
|
||||
}
|
||||
|
||||
/// Parse a seeds constraint, extracting the `IdlSeed` types.
|
||||
|
|
|
@ -14,7 +14,8 @@ no-entrypoint = []
|
|||
no-idl = []
|
||||
cpi = ["no-entrypoint"]
|
||||
default = []
|
||||
idl-build = ["anchor-lang/idl-build"]
|
||||
idl-build = ["anchor-lang/idl-build", "anchor-spl/idl-build"]
|
||||
|
||||
[dependencies]
|
||||
anchor-lang = { path = "../../../../lang" }
|
||||
anchor-spl = { path = "../../../../spl" }
|
||||
|
|
|
@ -4,6 +4,10 @@
|
|||
mod other;
|
||||
|
||||
use anchor_lang::prelude::*;
|
||||
use anchor_spl::{
|
||||
associated_token::AssociatedToken,
|
||||
token::{Mint, Token, TokenAccount},
|
||||
};
|
||||
|
||||
declare_id!("Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS");
|
||||
|
||||
|
@ -34,6 +38,10 @@ pub mod pda_derivation {
|
|||
ctx.accounts.account.data = 1337;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn associated_token_resolution(_ctx: Context<AssociatedTokenResolution>) -> Result<()> {
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Accounts)]
|
||||
|
@ -115,6 +123,29 @@ pub struct Nested<'info> {
|
|||
account_nested: AccountInfo<'info>,
|
||||
}
|
||||
|
||||
#[derive(Accounts)]
|
||||
pub struct AssociatedTokenResolution<'info> {
|
||||
#[account(
|
||||
init,
|
||||
payer = payer,
|
||||
mint::authority = payer,
|
||||
mint::decimals = 9,
|
||||
)]
|
||||
pub mint: Account<'info, Mint>,
|
||||
#[account(
|
||||
init,
|
||||
payer = payer,
|
||||
associated_token::authority = payer,
|
||||
associated_token::mint = mint,
|
||||
)]
|
||||
pub ata: Account<'info, TokenAccount>,
|
||||
#[account(mut)]
|
||||
pub payer: Signer<'info>,
|
||||
pub system_program: Program<'info, System>,
|
||||
pub token_program: Program<'info, Token>,
|
||||
pub associated_token_program: Program<'info, AssociatedToken>,
|
||||
}
|
||||
|
||||
#[account]
|
||||
pub struct MyAccount {
|
||||
data: u64,
|
||||
|
|
|
@ -103,4 +103,13 @@ describe("typescript", () => {
|
|||
|
||||
expect(called).is.true;
|
||||
});
|
||||
|
||||
it("Can resolve associated token accounts", async () => {
|
||||
const mintKp = anchor.web3.Keypair.generate();
|
||||
await program.methods
|
||||
.associatedTokenResolution()
|
||||
.accounts({ mint: mintKp.publicKey })
|
||||
.signers([mintKp])
|
||||
.rpc();
|
||||
});
|
||||
});
|
||||
|
|
|
@ -174,8 +174,10 @@ export class AnchorProvider implements Provider {
|
|||
? tx.signatures?.[0] || new Uint8Array()
|
||||
: tx.signature ?? new Uint8Array()
|
||||
);
|
||||
const maxVer = isVersionedTransaction(tx) ? 0 : undefined;
|
||||
const failedTx = await this.connection.getTransaction(txSig, {
|
||||
commitment: "confirmed",
|
||||
maxSupportedTransactionVersion: maxVer,
|
||||
});
|
||||
if (!failedTx) {
|
||||
throw err;
|
||||
|
@ -256,8 +258,10 @@ export class AnchorProvider implements Provider {
|
|||
? tx.signatures?.[0] || new Uint8Array()
|
||||
: tx.signature ?? new Uint8Array()
|
||||
);
|
||||
const maxVer = isVersionedTransaction(tx) ? 0 : undefined;
|
||||
const failedTx = await this.connection.getTransaction(txSig, {
|
||||
commitment: "confirmed",
|
||||
maxSupportedTransactionVersion: maxVer,
|
||||
});
|
||||
if (!failedTx) {
|
||||
throw err;
|
||||
|
|
159
ts/yarn.lock
159
ts/yarn.lock
|
@ -24,6 +24,14 @@
|
|||
dependencies:
|
||||
"@babel/highlight" "^7.18.6"
|
||||
|
||||
"@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.1":
|
||||
version "7.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae"
|
||||
integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==
|
||||
dependencies:
|
||||
"@babel/highlight" "^7.24.2"
|
||||
picocolors "^1.0.0"
|
||||
|
||||
"@babel/compat-data@^7.20.0":
|
||||
version "7.20.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.5.tgz#86f172690b093373a933223b4745deeb6049e733"
|
||||
|
@ -59,6 +67,16 @@
|
|||
"@jridgewell/gen-mapping" "^0.3.2"
|
||||
jsesc "^2.5.1"
|
||||
|
||||
"@babel/generator@^7.24.1":
|
||||
version "7.24.4"
|
||||
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.4.tgz#1fc55532b88adf952025d5d2d1e71f946cb1c498"
|
||||
integrity sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==
|
||||
dependencies:
|
||||
"@babel/types" "^7.24.0"
|
||||
"@jridgewell/gen-mapping" "^0.3.5"
|
||||
"@jridgewell/trace-mapping" "^0.3.25"
|
||||
jsesc "^2.5.1"
|
||||
|
||||
"@babel/helper-compilation-targets@^7.20.0":
|
||||
version "7.20.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz#6bf5374d424e1b3922822f1d9bdaa43b1a139d0a"
|
||||
|
@ -74,20 +92,25 @@
|
|||
resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be"
|
||||
integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==
|
||||
|
||||
"@babel/helper-function-name@^7.19.0":
|
||||
version "7.19.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c"
|
||||
integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==
|
||||
dependencies:
|
||||
"@babel/template" "^7.18.10"
|
||||
"@babel/types" "^7.19.0"
|
||||
"@babel/helper-environment-visitor@^7.22.20":
|
||||
version "7.22.20"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167"
|
||||
integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==
|
||||
|
||||
"@babel/helper-hoist-variables@^7.18.6":
|
||||
version "7.18.6"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678"
|
||||
integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==
|
||||
"@babel/helper-function-name@^7.23.0":
|
||||
version "7.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759"
|
||||
integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==
|
||||
dependencies:
|
||||
"@babel/types" "^7.18.6"
|
||||
"@babel/template" "^7.22.15"
|
||||
"@babel/types" "^7.23.0"
|
||||
|
||||
"@babel/helper-hoist-variables@^7.22.5":
|
||||
version "7.22.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb"
|
||||
integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==
|
||||
dependencies:
|
||||
"@babel/types" "^7.22.5"
|
||||
|
||||
"@babel/helper-module-imports@^7.18.6":
|
||||
version "7.18.6"
|
||||
|
@ -129,16 +152,33 @@
|
|||
dependencies:
|
||||
"@babel/types" "^7.18.6"
|
||||
|
||||
"@babel/helper-split-export-declaration@^7.22.6":
|
||||
version "7.22.6"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c"
|
||||
integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==
|
||||
dependencies:
|
||||
"@babel/types" "^7.22.5"
|
||||
|
||||
"@babel/helper-string-parser@^7.19.4":
|
||||
version "7.19.4"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63"
|
||||
integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==
|
||||
|
||||
"@babel/helper-string-parser@^7.23.4":
|
||||
version "7.24.1"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e"
|
||||
integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==
|
||||
|
||||
"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1":
|
||||
version "7.19.1"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2"
|
||||
integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==
|
||||
|
||||
"@babel/helper-validator-identifier@^7.22.20":
|
||||
version "7.22.20"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0"
|
||||
integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==
|
||||
|
||||
"@babel/helper-validator-option@^7.18.6":
|
||||
version "7.18.6"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8"
|
||||
|
@ -162,11 +202,26 @@
|
|||
chalk "^2.0.0"
|
||||
js-tokens "^4.0.0"
|
||||
|
||||
"@babel/highlight@^7.24.2":
|
||||
version "7.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.2.tgz#3f539503efc83d3c59080a10e6634306e0370d26"
|
||||
integrity sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==
|
||||
dependencies:
|
||||
"@babel/helper-validator-identifier" "^7.22.20"
|
||||
chalk "^2.4.2"
|
||||
js-tokens "^4.0.0"
|
||||
picocolors "^1.0.0"
|
||||
|
||||
"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.20.5":
|
||||
version "7.20.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.5.tgz#7f3c7335fe417665d929f34ae5dceae4c04015e8"
|
||||
integrity sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==
|
||||
|
||||
"@babel/parser@^7.24.0", "@babel/parser@^7.24.1":
|
||||
version "7.24.4"
|
||||
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.4.tgz#234487a110d89ad5a3ed4a8a566c36b9453e8c88"
|
||||
integrity sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==
|
||||
|
||||
"@babel/plugin-syntax-async-generators@^7.8.4":
|
||||
version "7.8.4"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
|
||||
|
@ -274,23 +329,32 @@
|
|||
"@babel/parser" "^7.18.10"
|
||||
"@babel/types" "^7.18.10"
|
||||
|
||||
"@babel/traverse@^7.20.1", "@babel/traverse@^7.20.5", "@babel/traverse@^7.7.2":
|
||||
version "7.20.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.5.tgz#78eb244bea8270fdda1ef9af22a5d5e5b7e57133"
|
||||
integrity sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==
|
||||
"@babel/template@^7.22.15":
|
||||
version "7.24.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50"
|
||||
integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.18.6"
|
||||
"@babel/generator" "^7.20.5"
|
||||
"@babel/helper-environment-visitor" "^7.18.9"
|
||||
"@babel/helper-function-name" "^7.19.0"
|
||||
"@babel/helper-hoist-variables" "^7.18.6"
|
||||
"@babel/helper-split-export-declaration" "^7.18.6"
|
||||
"@babel/parser" "^7.20.5"
|
||||
"@babel/types" "^7.20.5"
|
||||
debug "^4.1.0"
|
||||
"@babel/code-frame" "^7.23.5"
|
||||
"@babel/parser" "^7.24.0"
|
||||
"@babel/types" "^7.24.0"
|
||||
|
||||
"@babel/traverse@^7.20.1", "@babel/traverse@^7.20.5", "@babel/traverse@^7.7.2":
|
||||
version "7.24.1"
|
||||
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.1.tgz#d65c36ac9dd17282175d1e4a3c49d5b7988f530c"
|
||||
integrity sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.24.1"
|
||||
"@babel/generator" "^7.24.1"
|
||||
"@babel/helper-environment-visitor" "^7.22.20"
|
||||
"@babel/helper-function-name" "^7.23.0"
|
||||
"@babel/helper-hoist-variables" "^7.22.5"
|
||||
"@babel/helper-split-export-declaration" "^7.22.6"
|
||||
"@babel/parser" "^7.24.1"
|
||||
"@babel/types" "^7.24.0"
|
||||
debug "^4.3.1"
|
||||
globals "^11.1.0"
|
||||
|
||||
"@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3":
|
||||
"@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3":
|
||||
version "7.20.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.5.tgz#e206ae370b5393d94dfd1d04cd687cace53efa84"
|
||||
integrity sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==
|
||||
|
@ -299,6 +363,15 @@
|
|||
"@babel/helper-validator-identifier" "^7.19.1"
|
||||
to-fast-properties "^2.0.0"
|
||||
|
||||
"@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.24.0":
|
||||
version "7.24.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf"
|
||||
integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==
|
||||
dependencies:
|
||||
"@babel/helper-string-parser" "^7.23.4"
|
||||
"@babel/helper-validator-identifier" "^7.22.20"
|
||||
to-fast-properties "^2.0.0"
|
||||
|
||||
"@bcoe/v8-coverage@^0.2.3":
|
||||
version "0.2.3"
|
||||
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
|
||||
|
@ -678,16 +751,35 @@
|
|||
"@jridgewell/sourcemap-codec" "^1.4.10"
|
||||
"@jridgewell/trace-mapping" "^0.3.9"
|
||||
|
||||
"@jridgewell/gen-mapping@^0.3.5":
|
||||
version "0.3.5"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36"
|
||||
integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==
|
||||
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", "@jridgewell/resolve-uri@^3.0.3":
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
|
||||
integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
|
||||
|
||||
"@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.0.0", "@jridgewell/set-array@^1.0.1":
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
|
||||
integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
|
||||
|
||||
"@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.2":
|
||||
version "0.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb"
|
||||
|
@ -701,6 +793,11 @@
|
|||
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
|
||||
integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
|
||||
|
||||
"@jridgewell/sourcemap-codec@^1.4.14":
|
||||
version "1.4.15"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
|
||||
integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
|
||||
|
||||
"@jridgewell/trace-mapping@0.3.9":
|
||||
version "0.3.9"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9"
|
||||
|
@ -709,6 +806,14 @@
|
|||
"@jridgewell/resolve-uri" "^3.0.3"
|
||||
"@jridgewell/sourcemap-codec" "^1.4.10"
|
||||
|
||||
"@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"
|
||||
|
||||
"@jridgewell/trace-mapping@^0.3.9":
|
||||
version "0.3.17"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985"
|
||||
|
@ -1588,7 +1693,7 @@ chalk@4.1.0:
|
|||
ansi-styles "^4.1.0"
|
||||
supports-color "^7.1.0"
|
||||
|
||||
chalk@^2.0.0:
|
||||
chalk@^2.0.0, chalk@^2.4.2:
|
||||
version "2.4.2"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
|
||||
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
|
||||
|
|
Loading…
Reference in New Issue