diff --git a/examples/tutorial/basic-5/Anchor.toml b/examples/tutorial/basic-5/Anchor.toml new file mode 100644 index 0000000000..e7f396fc7f --- /dev/null +++ b/examples/tutorial/basic-5/Anchor.toml @@ -0,0 +1,9 @@ +[provider] +cluster = "localnet" +wallet = "~/.config/solana/id.json" + +[programs.localnet] +basic_5 = "DuT6R8tQGYa8ACYXyudFJtxDppSALLcmK39b7918jeSC" + +[scripts] +test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" \ No newline at end of file diff --git a/examples/tutorial/basic-5/Cargo.toml b/examples/tutorial/basic-5/Cargo.toml new file mode 100644 index 0000000000..7aa6203805 --- /dev/null +++ b/examples/tutorial/basic-5/Cargo.toml @@ -0,0 +1,4 @@ +[workspace] +members = [ + "programs/*" +] \ No newline at end of file diff --git a/examples/tutorial/basic-5/README.md b/examples/tutorial/basic-5/README.md new file mode 100644 index 0000000000..0ee5c5636c --- /dev/null +++ b/examples/tutorial/basic-5/README.md @@ -0,0 +1,13 @@ +# basic-5 + +This is a robot program developed as a Rust Smart Contract(running on Solana Blockchain). +It simplifies actions of a robot on-chain. +This program acts as an example for developers who are new to Solana ecosystem to learn on how the typescript client interacts with the program on-chain. + +Instructions of the program: + +1. Create +2. Walk +3. Run +4. Jump +5. Reset \ No newline at end of file diff --git a/examples/tutorial/basic-5/package.json b/examples/tutorial/basic-5/package.json new file mode 100644 index 0000000000..8c4eadb4eb --- /dev/null +++ b/examples/tutorial/basic-5/package.json @@ -0,0 +1,19 @@ +{ + "name": "basic-5", + "version": "0.27.0", + "license": "(MIT OR Apache-2.0)", + "homepage": "https://github.com/coral-xyz/anchor#readme", + "bugs": { + "url": "https://github.com/coral-xyz/anchor/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/coral-xyz/anchor.git" + }, + "engines": { + "node": ">=11" + }, + "scripts": { + "test": "anchor test --skip-lint" + } + } \ No newline at end of file diff --git a/examples/tutorial/basic-5/programs/basic-5/Cargo.toml b/examples/tutorial/basic-5/programs/basic-5/Cargo.toml new file mode 100644 index 0000000000..8b5ee1f8e3 --- /dev/null +++ b/examples/tutorial/basic-5/programs/basic-5/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "basic-5" +version = "0.1.0" +description = "Created with Anchor" +rust-version = "1.60" +edition = "2021" + +[lib] +crate-type = ["cdylib", "lib"] +name = "basic_5" + +[features] +no-entrypoint = [] +cpi = ["no-entrypoint"] + +[dependencies] +anchor-lang = { path = "../../../../../lang" } \ No newline at end of file diff --git a/examples/tutorial/basic-5/programs/basic-5/Xargo.toml b/examples/tutorial/basic-5/programs/basic-5/Xargo.toml new file mode 100644 index 0000000000..475fb71ed1 --- /dev/null +++ b/examples/tutorial/basic-5/programs/basic-5/Xargo.toml @@ -0,0 +1,2 @@ +[target.bpfel-unknown-unknown.dependencies.std] +features = [] diff --git a/examples/tutorial/basic-5/programs/basic-5/src/lib.rs b/examples/tutorial/basic-5/programs/basic-5/src/lib.rs new file mode 100644 index 0000000000..03542a69c3 --- /dev/null +++ b/examples/tutorial/basic-5/programs/basic-5/src/lib.rs @@ -0,0 +1,115 @@ +use anchor_lang::prelude::*; + +declare_id!("DuT6R8tQGYa8ACYXyudFJtxDppSALLcmK39b7918jeSC"); + +#[program] +pub mod basic_5 { + use super::*; + + pub fn create(ctx: Context) -> Result<()> { + let action_state = &mut ctx.accounts.action_state; + // * - means dereferencing + action_state.user = *ctx.accounts.user.key; + // Lets initialize the state + action_state.action = 0; + + Ok(()) + } + + pub fn walk(ctx: Context) -> Result<()> { + let action_state = &mut ctx.accounts.action_state; + // Lets change the robot action state to "walk" + action_state.action = 1; + + Ok(()) + } + + pub fn run(ctx: Context) -> Result<()> { + let action_state = &mut ctx.accounts.action_state; + // Lets change the robot action state to "run" + action_state.action = 2; + + Ok(()) + } + + pub fn jump(ctx: Context) -> Result<()> { + let action_state = &mut ctx.accounts.action_state; + // Lets change the robot action state to "jump" + action_state.action = 3; + + Ok(()) + } + + pub fn reset(ctx: Context) -> Result<()> { + let action_state = &mut ctx.accounts.action_state; + // Lets reset the robot action states + action_state.action = 0; + + Ok(()) + } +} + +#[derive(Accounts)] +pub struct Create<'info> { + // init means to create action_state account + // bump to use unique address for action_state account + #[account( + init, + payer = user, + space = 8 + ActionState::INIT_SPACE, + seeds = [b"action-state", user.key().as_ref()], + bump + )] + pub action_state: Account<'info, ActionState>, + // mut makes it changeble (mutable) + #[account(mut)] + pub user: Signer<'info>, + pub system_program: Program<'info, System>, +} + +#[derive(Accounts)] +pub struct Walk<'info> { + // Only the user on account action_state, should be able to change state + #[account(mut, has_one = user)] + pub action_state: Account<'info, ActionState>, + // mut makes it changeble (mutable) + #[account(mut)] + pub user: Signer<'info>, +} + +#[derive(Accounts)] +pub struct Run<'info> { + // Only the user on account action_state, should be able to change state + #[account(mut, has_one = user)] + pub action_state: Account<'info, ActionState>, + // mut makes it changeble (mutable) + #[account(mut)] + pub user: Signer<'info>, +} + +#[derive(Accounts)] +pub struct Jump<'info> { + // Only the user on account action_state, should be able to change state + #[account(mut, has_one = user)] + pub action_state: Account<'info, ActionState>, + // mut makes it changeble (mutable) + #[account(mut)] + pub user: Signer<'info>, +} + +#[derive(Accounts)] +pub struct Reset<'info> { + // Only the user on account action_state, should be able to change state + #[account(mut, has_one = user)] + pub action_state: Account<'info, ActionState>, + // mut makes it changeble (mutable) + #[account(mut)] + pub user: Signer<'info>, +} + +#[account] +#[derive(InitSpace)] +pub struct ActionState { + pub user: Pubkey, + pub action: u8, +} diff --git a/examples/tutorial/basic-5/tests/basic-5.ts b/examples/tutorial/basic-5/tests/basic-5.ts new file mode 100644 index 0000000000..796b205529 --- /dev/null +++ b/examples/tutorial/basic-5/tests/basic-5.ts @@ -0,0 +1,123 @@ +import * as anchor from "@coral-xyz/anchor"; +import { + TransactionInstruction, + TransactionMessage, + VersionedTransaction, +} from "@solana/web3.js"; +import { Basic5 } from "../target/types/basic_5"; + +describe("basic-5", () => { + const provider = anchor.AnchorProvider.local(); + + // Configure the client to use the local cluster. + anchor.setProvider(provider); + + const program = anchor.workspace.Basic5 as anchor.Program; + const user = provider.wallet.publicKey; + + let [actionState] = anchor.web3.PublicKey.findProgramAddressSync( + [Buffer.from("action-state"), user.toBuffer()], + program.programId + ); + + it("basic-5: Robot actions!", async () => { + // Create instruction: set up the Solana accounts to be used + const createInstruction = await program.methods + .create() + .accounts({ + actionState, + user, + systemProgram: anchor.web3.SystemProgram.programId, + }) + .instruction(); + // Walk instruction: Invoke the Robot to walk + const walkInstruction = await program.methods + .walk() + .accounts({ + actionState, + user, + }) + .instruction(); + // Run instruction: Invoke the Robot to run + const runInstruction = await program.methods + .run() + .accounts({ + actionState, + user, + }) + .instruction(); + // Jump instruction: Invoke the Robot to jump + const jumpInstruction = await program.methods + .jump() + .accounts({ + actionState, + user, + }) + .instruction(); + // Reset instruction: Reset actions of the Robot + const resetInstruction = await program.methods + .reset() + .accounts({ + actionState, + user, + }) + .instruction(); + + // Array of instructions + const instructions: TransactionInstruction[] = [ + createInstruction, + walkInstruction, + runInstruction, + jumpInstruction, + resetInstruction, + ]; + + await createAndSendV0Tx(instructions); + }); + + async function createAndSendV0Tx(txInstructions: TransactionInstruction[]) { + // Step 1 - Fetch the latest blockhash + let latestBlockhash = await provider.connection.getLatestBlockhash( + "confirmed" + ); + console.log( + " ✅ - Fetched latest blockhash. Last Valid Height:", + latestBlockhash.lastValidBlockHeight + ); + + // Step 2 - Generate Transaction Message + const messageV0 = new TransactionMessage({ + payerKey: user, + recentBlockhash: latestBlockhash.blockhash, + instructions: txInstructions, + }).compileToV0Message(); + console.log(" ✅ - Compiled Transaction Message"); + const transaction = new VersionedTransaction(messageV0); + + // Step 3 - Sign your transaction with the required `Signers` + provider.wallet.signTransaction(transaction); + console.log(" ✅ - Transaction Signed"); + + // Step 4 - Send our v0 transaction to the cluster + const txid = await provider.connection.sendTransaction(transaction, { + maxRetries: 5, + }); + console.log(" ✅ - Transaction sent to network"); + + // Step 5 - Confirm Transaction + const confirmation = await provider.connection.confirmTransaction({ + signature: txid, + blockhash: latestBlockhash.blockhash, + lastValidBlockHeight: latestBlockhash.lastValidBlockHeight, + }); + if (confirmation.value.err) { + throw new Error( + ` ❌ - Transaction not confirmed.\nReason: ${confirmation.value.err}` + ); + } + + console.log("🎉 Transaction Succesfully Confirmed!"); + let result = await program.account.actionState.fetch(actionState); + console.log("Robot action state details: ", result); + } +}); diff --git a/examples/tutorial/basic-5/tsconfig.json b/examples/tutorial/basic-5/tsconfig.json new file mode 100644 index 0000000000..8634a05df4 --- /dev/null +++ b/examples/tutorial/basic-5/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "types": ["mocha"], + "typeRoots": ["./node_modules/@types"], + "lib": ["es2015"], + "module": "commonjs", + "target": "es6", + "esModuleInterop": true + } +} diff --git a/examples/tutorial/package.json b/examples/tutorial/package.json index fba8354deb..ede14cf18a 100644 --- a/examples/tutorial/package.json +++ b/examples/tutorial/package.json @@ -10,13 +10,17 @@ "basic-1", "basic-2", "basic-3", - "basic-4" + "basic-4", + "basic-5" ], "dependencies": { "@coral-xyz/anchor": "file:../../ts/packages/anchor" }, "devDependencies": { - "mocha": "9.2.2", - "prettier": "^2.5.1" + "mocha": "^9.2.2", + "prettier": "^2.5.1", + "@types/mocha": "^9.1.1", + "ts-mocha": "^10.0.0", + "typescript": "^4.9.5" } -} +} \ No newline at end of file diff --git a/examples/tutorial/yarn.lock b/examples/tutorial/yarn.lock index e83796f9a8..6e530da13a 100644 --- a/examples/tutorial/yarn.lock +++ b/examples/tutorial/yarn.lock @@ -36,9 +36,9 @@ toml "^3.0.0" "@coral-xyz/borsh@^0.27.0": - version "0.26.0" - resolved "https://registry.yarnpkg.com/@coral-xyz/borsh/-/borsh-0.26.0.tgz#d054f64536d824634969e74138f9f7c52bbbc0d5" - integrity sha512-uCZ0xus0CszQPHYfWAqKS5swS1UxvePu83oOF+TWpUkedsNlg6p2p4azxZNSSqwXb9uXMFgxhuMBX9r3Xoi0vQ== + version "0.27.0" + resolved "https://registry.yarnpkg.com/@coral-xyz/borsh/-/borsh-0.27.0.tgz#700c647ea5262b1488957ac7fb4e8acf72c72b63" + integrity sha512-tJKzhLukghTWPLy+n8K8iJKgBq1yLT/AxaNd10yJrX8mI56ao5+OFAKAqW/h0i79KCvb4BK0VGO5ECmmolFz9A== dependencies: bn.js "^5.1.2" buffer-layout "^1.2.0" @@ -102,11 +102,21 @@ "@types/qs" "*" "@types/range-parser" "*" +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + "@types/lodash@^4.14.159": version "4.14.176" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.176.tgz#641150fc1cda36fbfa329de603bbb175d7ee20c0" integrity sha512-xZmuPTa3rlZoIbtDUyJKZQimJV3bxCmzMIO2c9Pz9afyDro6kr7R79GwcB6mRhuoPmV2p1Vb66WOJH7F886WKQ== +"@types/mocha@^9.1.1": + version "9.1.1" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" + integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== + "@types/node@*": version "16.11.7" resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.7.tgz#36820945061326978c42a01e56b61cd223dfdc42" @@ -177,6 +187,11 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +arrify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -259,6 +274,11 @@ bs58@^4.0.0, bs58@^4.0.1: dependencies: base-x "^3.0.2" +buffer-from@^1.0.0, buffer-from@^1.1.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-layout@^1.2.0, buffer-layout@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/buffer-layout/-/buffer-layout-1.2.2.tgz#b9814e7c7235783085f9ca4966a0cfff112259d5" @@ -385,6 +405,11 @@ diff@5.0.0: resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== +diff@^3.1.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== + dot-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" @@ -614,6 +639,13 @@ json-stringify-safe@^5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + jsonparse@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" @@ -646,6 +678,11 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + minimatch@4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.1.tgz#40d9d511a46bdc4e563c22c3080cde9c0d8299b4" @@ -660,7 +697,19 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -mocha@9.2.2: +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +mkdirp@^0.5.1: + 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" + +mocha@^9.2.2: version "9.2.2" resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.2.tgz#d70db46bdb93ca57402c809333e5a84977a88fb9" integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== @@ -838,6 +887,19 @@ snake-case@^3.0.4: dot-case "^3.0.4" tslib "^2.0.3" +source-map-support@^0.5.6: + 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== + string-width@^4.1.0, string-width@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -854,6 +916,11 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + 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" @@ -910,11 +977,49 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= +ts-mocha@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/ts-mocha/-/ts-mocha-10.0.0.tgz#41a8d099ac90dbbc64b06976c5025ffaebc53cb9" + integrity sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw== + dependencies: + ts-node "7.0.1" + optionalDependencies: + tsconfig-paths "^3.5.0" + +ts-node@7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-7.0.1.tgz#9562dc2d1e6d248d24bc55f773e3f614337d9baf" + integrity sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw== + dependencies: + arrify "^1.0.0" + buffer-from "^1.1.0" + diff "^3.1.0" + make-error "^1.1.1" + minimist "^1.2.0" + mkdirp "^0.5.1" + source-map-support "^0.5.6" + yn "^2.0.0" + +tsconfig-paths@^3.5.0: + version "3.14.2" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" + integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + tslib@^2.0.3: version "2.3.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== +typescript@^4.9.5: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + utf-8-validate@^5.0.2: version "5.0.7" resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.7.tgz#c15a19a6af1f7ad9ec7ddc425747ca28c3644922" @@ -1019,6 +1124,11 @@ yargs@16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" +yn@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" + integrity sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ== + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"