diff --git a/apps/playground/public/articles/spices-4185324_640.jpg b/apps/playground/public/articles/spices-4185324_640.jpg
new file mode 100644
index 00000000..5f77eeb7
Binary files /dev/null and b/apps/playground/public/articles/spices-4185324_640.jpg differ
diff --git a/apps/playground/public/team/abdelkrim.png b/apps/playground/public/team/abdelkrim.png
index 496f8a04..318bafd8 100644
Binary files a/apps/playground/public/team/abdelkrim.png and b/apps/playground/public/team/abdelkrim.png differ
diff --git a/apps/playground/public/team/felix.png b/apps/playground/public/team/felix.png
index 52f4f3ec..c3966204 100644
Binary files a/apps/playground/public/team/felix.png and b/apps/playground/public/team/felix.png differ
diff --git a/apps/playground/public/team/hinson.png b/apps/playground/public/team/hinson.png
index b715e8b0..03e3d9bb 100644
Binary files a/apps/playground/public/team/hinson.png and b/apps/playground/public/team/hinson.png differ
diff --git a/apps/playground/public/team/jingles.png b/apps/playground/public/team/jingles.png
index c5d509e0..e4b53d8b 100644
Binary files a/apps/playground/public/team/jingles.png and b/apps/playground/public/team/jingles.png differ
diff --git a/apps/playground/public/team/tszwai.png b/apps/playground/public/team/tszwai.png
index f1403953..d3e34ce6 100644
Binary files a/apps/playground/public/team/tszwai.png and b/apps/playground/public/team/tszwai.png differ
diff --git a/apps/playground/src/data/links-articles.ts b/apps/playground/src/data/links-articles.ts
new file mode 100644
index 00000000..e8ce1f81
--- /dev/null
+++ b/apps/playground/src/data/links-articles.ts
@@ -0,0 +1,35 @@
+import { NewspaperIcon } from "@heroicons/react/24/solid";
+
+import { MenuItem } from "~/types/menu-item";
+
+export const articleNew16 = {
+ title: "What's new in Mesh 1.6",
+ desc: "",
+ link: "whats-new-in-16",
+ thumbnail: "/articles/develop-first-web-app.png",
+ image: "/articles/arches-1866598_1280.jpg",
+};
+export const articleMesh20 = {
+ title: "Introduce Mesh 2.0",
+ desc: "",
+ link: "typescript-cardano-sdk",
+ thumbnail: "/articles/develop-first-web-app.png",
+ image: "/articles/arches-1866598_1280.jpg",
+};
+export const articleElementsOfCardano = {
+ title: "Elements of Cardano",
+ desc: "Cardano represents a significant advancement in blockchain technology, offering a scalable, secure, and flexible platform that is well-suited for a wide range of applications. Its unique combination of public, permissionless infrastructure, proof-of-stake consensus, and support for smart contracts and native assets makes it a powerful tool for developers and enterprises alike.",
+ link: "elements-of-cardano",
+ thumbnail: "/articles/spices-4185324_640.png",
+ image: "/articles/spices-4185324_640.jpg",
+};
+
+export const linksArticles: MenuItem[] = [articleElementsOfCardano,articleMesh20, articleNew16];
+
+export const metaArticles: MenuItem = {
+ link: `/blogs`,
+ title: "Blogs",
+ desc: "Read the latest blogs and articles about Mesh",
+ icon: NewspaperIcon,
+ items: linksArticles,
+};
diff --git a/apps/playground/src/data/links-blogs.ts b/apps/playground/src/data/links-blogs.ts
deleted file mode 100644
index 0d1f64cf..00000000
--- a/apps/playground/src/data/links-blogs.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-import { NewspaperIcon } from "@heroicons/react/24/solid";
-
-import { MenuItem } from "~/types/menu-item";
-
-export const blogNew16 = {
- title: "What's new in Mesh 1.6",
- desc: "",
- link: "whats-new-in-16",
- thumbnail: "/guides/develop-first-web-app.png",
- image: "/guides/arches-1866598_1280.jpg",
-};
-export const blogMesh20 = {
- title: "Introduce Mesh 2.0",
- desc: "",
- link: "typescript-cardano-sdk",
- thumbnail: "/guides/develop-first-web-app.png",
- image: "/guides/arches-1866598_1280.jpg",
-};
-
-export const linksBlogs: MenuItem[] = [blogMesh20, blogNew16];
-
-export const metaBlogs: MenuItem = {
- link: `/blogs`,
- title: "Blogs",
- desc: "Read the latest blogs and articles about Mesh",
- icon: NewspaperIcon,
- items: linksBlogs,
-};
diff --git a/apps/playground/src/data/links-data.ts b/apps/playground/src/data/links-data.ts
index 97fd5cf2..62097829 100644
--- a/apps/playground/src/data/links-data.ts
+++ b/apps/playground/src/data/links-data.ts
@@ -27,6 +27,13 @@ export const metaDataJson = {
link: "/apis/data/json",
icon: Bars3Icon,
};
+// todoß
+export const metaDataValue = {
+ title: "Value",
+ desc: "Manipulate Cardano Value Easily",
+ link: "/apis/data/value",
+ icon: Bars3Icon,
+};
export const metaDataCbor = {
title: "CBOR Data",
desc: "Parse and manipulate Cardano data with CBOR",
@@ -44,6 +51,7 @@ export const linksData: MenuItem[] = [
metaOverview,
metaDataMesh,
metaDataJson,
+ metaDataValue,
// metaDataCbor,
// metaDataUtils,
];
diff --git a/apps/playground/src/pages/apis/data/value/accessor.tsx b/apps/playground/src/pages/apis/data/value/accessor.tsx
new file mode 100644
index 00000000..dfebc744
--- /dev/null
+++ b/apps/playground/src/pages/apis/data/value/accessor.tsx
@@ -0,0 +1,104 @@
+import { MeshValue } from "@meshsdk/common";
+
+import LiveCodeDemo from "~/components/sections/live-code-demo";
+import TwoColumnsScroll from "~/components/sections/two-columns-scroll";
+import { mockUnit } from "./";
+
+export default function ValueAccessor() {
+ return (
+
+ get
get the quantity of asset object per unit, with
+ parameters
+
+ units
get all asset units with no parameters (e.g. unit)
+ needed
+
+ addAsset
Add an asset to the Value class's value record
+ with parameters:
+
+ addAssets
Add an array of assets to the Value class's value
+ record with parameters:
+
+ geq
Check if the value is greater than or equal to another
+ value with parameters:
+
+ geqUnit
Check if the value is greater than or equal to
+ another value with parameters:
+
+ leq
Check if the value is less than or equal to another
+ value with parameters:
+
+ leqUnit
Check if the specific unit of value is less than or
+ equal to that unit of another value with parameters:
+
+ isEmpty
Check if the value is empty
+
+ value
converts assets into Cardano data Value in JSON with
+ parameters:
+
+ mValue
converts assets into Cardano data value in Mesh Data
+ type with parameters:
+
+ fromAssets
converts assets into MeshValue with parameters:
+
+ fromValue
get all asset units with no parameters (e.g.
+ unit) needed
+
+ toAssets
converts the MeshValue object into an array of
+ Asset
+
+ toData
Convert the MashValue object into Cardano data Value
+ in Mesh Data type
+
+ toJSON
converts the MeshValue object into a JSON
+ representation of Cardano data Value
+
+ fromAssets
converts assets into MeshValue with parameters:
+
+ fromValue
Convert Value (the JSON representation of Cardano
+ data Value) into MeshValue with parameters:
+
+ geq
Check if the value is greater than or equal to another
+ value with parameters:
+
+ geqUnit
Check if the value is greater than or equal to
+ another value with parameters:
+
+ get
get the quantity of asset object per unit, with
+ parameters
+
+ We all know the pain of conducting Value
operation in
+ Cardano. Mesh provides a full set of value methods to help
+ converting, operating, accessing and comparing Cardano data.
+
+ Convertor functions provide utilities around round trip among
+ Cardano onchain data and off chain JSON
and{" "}
+ Data
type.
+
value
+ mValue
+ fromAssets
+ toAssets
+ fromValue
+ toData
+ toJSON
+ + Operator functions provide utilities into performing value + manipulation. They are useful in DApps which check against value + payment involving calculation in value. +
+ +
+ Accessor functions provide utilities in obtaining keys or values of
+ the Value
type.
+
+ Comparator functions provide utilities in comparing different{" "}
+ Value
. It helps with offchain validation before using
+ for transaction building.
+
+ isEmpty
Check if the value is empty
+
+ leq
Check if the value is less than or equal to another
+ value with parameters:
+
+ leqUnit
Check if the specific unit of value is less than or
+ equal to that unit of another value with parameters:
+
+ merge
Merge the given values
+
+ mValue
converts assets into Cardano data value in Mesh Data
+ type with parameters:
+
+ negateAsset
Substract an asset from the Value class's value
+ record with parameters:
+
+ negateAssets
Substract an array of assets from the Value
+ class's value record with parameters:
+
+ addAsset
Add an asset to the Value class's value record
+ with parameters:
+
+ addAssets
Add an array of assets to the Value class's value
+ record with parameters:
+
+ negateAsset
Substract an asset from the Value class's value
+ record with parameters:
+
+ negateAssets
Substract an array of assets from the Value
+ class's value record with parameters:
+
+ merge
Merge the given values
+
+ toAssets
Convert the MeshValue object into an array of
+ Asset
+
+ toData
Convert the MashValue object into Cardano data Value
+ in Mesh Data type
+
+ toJSON
Converts the MeshValue object into a JSON
+ representation of Cardano data Value
+
+ units
get all asset units with no parameters (e.g. unit)
+ needed
+
+ value
converts assets into Cardano data Value in JSON with
+ parameters:
+
+ Deserialize bech32 address into payment and staking parts, with + visibility of whether they are script or key hash. +
+ > + ); +} + +function Right() { + const [userInput, setUserInput] = useStateDeserialize a datum from a CBOR string to JSON object.
+ > + ); +} + +function Right() { + const [userInput, setUserInput] = useStateDeserialize a script from a poolxxxx to Ed25519 key hash.
+ > + ); +} + +function Right() { + const [userInput, setUserInput] = useState- Converts datum into hash. Getting the hash is useful when you need to - query for the UTXO that contain the assets you need for your - transaction's input. -
-- Explore Transaction to learn more - about designing Datum, and learn how to query for UTXOs containing the - datum hash. -
- > - ); -} - -function Right() { - const [userInput, setUserInput] = useState- Converts datum into hash. Getting the hash is useful when you need to - query for the UTXO that contain the assets you need for your - transaction's input. -
-- Explore Transaction to learn more - about designing Datum, and learn how to query for UTXOs containing the - datum hash. -
- > - ); -} - -function Right() { - const [userInput, setUserInput] = useStateSerialize address in Cardano data JSON format into bech32 address.
+ > + ); +} + +function Right() { + async function runDemo() { + // return serializeAddressObj(address); + } + + let codeSnippet = ``; + + return ( +Serialize Native script into bech32 address.
+ > + ); +} + +function Right() { + async function runDemo() { + const { pubKeyHash: keyHash } = deserializeAddress( + demoAddresses.testnetPayment, + ); + + const nativeScript: NativeScript = { + type: "all", + scripts: [ + { + type: "before", + slot: "99999999", + }, + { + type: "sig", + keyHash: keyHash, + }, + ], + }; + + const address = serializeNativeScript(nativeScript); + + return address; + } + + let codeSnippet = ``; + + return ( +Serialize Plutus script into bech32 address.
+ > + ); +} + +function Right() { + async function runDemo() { + const script: PlutusScript = { + code: demoPlutusAlwaysSucceedScript, + version: "V2", + }; + + const address = serializePlutusScript(script); + + return address; + } + + let codeSnippet = ``; + + return ( +Resolve the pool ID from hash.
+ > + ); +} + +function Right() { + async function runDemo() { + // return serializePoolId(address); + } + + let codeSnippet = ``; + + return ( +Serialize a script hash or key hash into bech32 reward address.
+ > + ); +} + +function Right() { + async function runDemo() { + // return serializeRewardAddress(address); + } + + let codeSnippet = ``; + + return ( ++ Giftcard contract allows users to create a transactions to lock + assets into the smart contract, which can be redeemed by any user. +
++ Creating a giftcard will mint a token and send the assets to the + contract. While redeeming will burn the token and send the assets + to the redeemer. +
+ ++ There are 2 actions (or endpoints) available to interact with this + smart contract: +
+
+ To initialize the contract, we need to initialize a{" "}
+ provider,{" "}
+ MeshTxBuilder
and MeshGiftCardContract
.
+
+ Both on-chain and off-chain codes are open-source and available on{" "} + + Mesh Github Repository + + . +
+ > ++ Vesting contract is a smart contract that locks up funds for a period of + time and allows the owner to withdraw the funds after the lockup period. + Usually, vesting contract defines a beneficiary who can be different + from the original owner. +
+ ++ When a new employee joins an organization, they typically receive a + promise of compensation to be disbursed after a specified duration of + employment. This arrangement often involves the organization depositing + the funds into a vesting contract, with the employee gaining access to + the funds upon the completion of a predetermined lockup period. Through + the utilization of vesting contracts, organizations establish a + mechanism to encourage employee retention by linking financial rewards + to tenure. +
+ ++ First, we define the datum's shape, as this datum serves as + configuration and contains the different parameters of our vesting + operation. +
+ ++ In this example, we define a `VestingDatum` that contains the following + fields: +
+ ++ This datum can be found in + `aiken-vesting/aiken-workspace/lib/vesting/types.ak`. +
+ +Next, we define the spend validator.
+ ++ In this example, we define a `vesting` validator that ensures the + following conditions are met: +
+ +Or:
++ This validator can be found in + `aiken-vesting/aiken-workspace/validators/vesting.ak`. +
+ ++ The owner of the funds deposits the funds into the vesting contract. The + funds are locked up until the lockup period expires. +
+ ++ Transactions can include validity intervals that specify when the + transaction is valid, both from and until a certain time. The ledger + verifies these validity bounds before executing a script and will only + proceed if they are legitimate. +
+ ++ This approach allows scripts to incorporate a sense of time while + maintaining determinism within the script's context. For instance, if a + transaction has a lower bound `A`, we can infer that the current time is + at least `A`. +
+ ++ It's important to note that since we don't control the upper bound, a + transaction might be executed even 30 years after the vesting delay. + However, from the script's perspective, this is entirely acceptable. +
+ ++ The beneficiary can withdraw the funds after the lockup period expires. + The beneficiary can also be different from the owner of the funds. +
+ ++ To test the vesting contract, we have provided the a comphrehensive test + script,you can run tests with `aiken check`. +
+ +The test script includes the following test cases:
+ ++ We recommend you to check out + `aiken-vesting/aiken-workspace/validators/tests/vesting.ak` to learn + more. +
+ +To compile the script, run the following command:
+ ++ This command will generate a CIP-0057 Plutus blueprint, which you can + find in `aiken-vesting/aiken-workspace/plutus.json`. +
+ ++ First, the owner can deposit funds into the vesting contract. The owner + can specify the lockup period and the beneficiary of the funds. +
+ ++ In this example, we deposit 10 ADA into the vesting contract. The funds + are locked up for 1 minute, and the beneficiary is specified. +
+ ++ Then, we prepare a few variables to be used in the transaction. We get + the wallet address and the UTXOs of the wallet. We also get the script + address of the vesting contract, to send the funds to the script + address. We also get the owner and beneficiary public key hashes. +
+ ++ Next, we construct the transaction to deposit the funds into the vesting + contract. +
+ ++ In this example, we construct the transaction to deposit the funds into + the vesting contract. We specify the script address of the vesting + contract, the amount to deposit, and the lockup period, owner, and + beneficiary of the funds. +
+ +Finally, we sign and submit the transaction.
+ ++ To execute this code, ensure you have defined blockfrost key in the + `.env` file. You can also define your wallet mnemonic in + `aiken-vesting/src/configs.ts` file. +
+ +You can run the following command execute the deposit funds code:
+ ++ Upon successful execution, you will receive a transaction hash. Save + this transaction hash for withdrawing the funds. +
+ ++ Example of a{" "} + + successful deposit transaction + + . +
+ ++ After the lockup period expires, the beneficiary can withdraw the funds + from the vesting contract. The owner can also withdraw the funds from + the vesting contract. +
+ ++ First, let's look for the UTxOs containing the funds locked in the + vesting contract. +
+ ++ In this example, we fetch the UTxOs containing the funds locked in the + vesting contract. We specify the transaction hash of the deposit + transaction. +
+ ++ Like before, we prepare a few variables to be used in the transaction. + We get the wallet address and the UTXOs of the wallet. We also get the + script address of the vesting contract, to send the funds to the script + address. We also get the owner and beneficiary public key hashes. +
+ ++ Next, we prepare the datum and the slot number to set the transaction + valid interval to be valid only after the slot. +
+ ++ In this example, we prepare the datum and the slot number to set the + transaction valid interval to be valid only after the slot. We get the + lockup period from the datum and set the transaction valid interval to + be valid only after the lockup period. +
+ ++ Next, we construct the transaction to withdraw the funds from the + vesting contract. +
+ ++ In this example, we construct the transaction to withdraw the funds from + the vesting contract. We specify the UTxO containing the funds locked in + the vesting contract, the script address of the vesting contract, the + wallet address to send the funds to, and the transaction valid interval. +
+ ++ Finally, we sign and submit the transaction. Notice that since we are + unlocking fund from validator, partial sign has to be specified by + passing a `true` parameter into `wallet.signTx`. +
+ ++ To execute this code, update `aiken-vesting/src/withdraw-fund.ts` with + the transaction hash from the deposit transaction. Ensure you have + defined blockfrost key in the `.env` file. You can also define your + wallet mnemonic in `aiken-vesting/src/configs.ts` file. +
+ +Run the following command:
+ ++ Example of a{" "} + + successful withdraw transaction + + . +
+ > + ); +} diff --git a/apps/playground/src/pages/smart-contracts/vesting/index.tsx b/apps/playground/src/pages/smart-contracts/vesting/index.tsx index f0fee7c0..555d3e1a 100644 --- a/apps/playground/src/pages/smart-contracts/vesting/index.tsx +++ b/apps/playground/src/pages/smart-contracts/vesting/index.tsx @@ -8,12 +8,14 @@ import Codeblock from "~/components/text/codeblock"; import { metaVesting } from "~/data/links-smart-contracts"; import { InstallSmartContract } from "../common"; import VestingDepositFund from "./deposit-fund"; +import VestingFullTutorial from "./full-tutorial"; import VestingWithdrawFund from "./withdraw-fund"; const ReactPage: NextPage = () => { const sidebarItems = [ { label: "Deposit Fund", to: "depositFund" }, { label: "Withdraw Fund", to: "withdrawFund" }, + { label: "Full Tutorial", to: "tutorial" }, ]; let example = ``; @@ -85,6 +87,7 @@ const ReactPage: NextPage = () => {Assets
, you will
- find the Source code (zip)
file.
+ find the yaci-devkit-version.zip
file.
Extract the zip file to a folder on your system. This folder will be diff --git a/apps/playground/src/pages/yaci/getting-started/start.tsx b/apps/playground/src/pages/yaci/getting-started/start.tsx index 0feebd38..d808319b 100644 --- a/apps/playground/src/pages/yaci/getting-started/start.tsx +++ b/apps/playground/src/pages/yaci/getting-started/start.tsx @@ -26,10 +26,10 @@ function Left() {
To create a new devnet, run the following command from yaci-cli:
- To create a new devnet with Conway era, run the following command from + To create a new devnet with Babbage era, run the following command from yaci-cli:
-
To start a devnet with zero fees, run the following command from
yaci-cli:
diff --git a/package-lock.json b/package-lock.json
index ee52fc83..e72935cf 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -345,103 +345,103 @@
}
},
"node_modules/@algolia/client-abtesting": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.1.1.tgz",
- "integrity": "sha512-Zz4c1VSwBKu1qD44/9zYd7OjcwsfiPJkqKArYcQuJJihHUwodfnmf4Agi29M07exa8dySo9SHYcWKRxrpkKRiA==",
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.2.3.tgz",
+ "integrity": "sha512-YGBK07pVEheCqI32qXDCsCyztvaa8M+MRzjGmdaOylfhDRFsyuGeAENBLQHppGRIKhR75VqWAUTsFb6Dq7IrJA==",
"peer": true,
"dependencies": {
- "@algolia/client-common": "5.1.1",
- "@algolia/requester-browser-xhr": "5.1.1",
- "@algolia/requester-node-http": "5.1.1"
+ "@algolia/client-common": "5.2.3",
+ "@algolia/requester-browser-xhr": "5.2.3",
+ "@algolia/requester-node-http": "5.2.3"
},
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/@algolia/client-analytics": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.1.1.tgz",
- "integrity": "sha512-0IjlWzzUtIHaoxqlHPUHCPzQQdzhUXThLHUlexeSMZSqqibmC5Ku6Hz3LFMBDGxoCC6L+qWgyd2x6aE9XupaNA==",
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.2.3.tgz",
+ "integrity": "sha512-1mwi1J0imohlz4QfTTlwxkAZeNgCTfc4KaI0XFacazTTdSlVPtzHYKgA2mLOCRmKJ0Bm5aoylNexcfkfBy3acw==",
"peer": true,
"dependencies": {
- "@algolia/client-common": "5.1.1",
- "@algolia/requester-browser-xhr": "5.1.1",
- "@algolia/requester-node-http": "5.1.1"
+ "@algolia/client-common": "5.2.3",
+ "@algolia/requester-browser-xhr": "5.2.3",
+ "@algolia/requester-node-http": "5.2.3"
},
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/@algolia/client-common": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.1.1.tgz",
- "integrity": "sha512-jkQNQbGY+XQB3Eln7wqqdUZKBzG8lETcsaUk5gcMc6iIwyN/qW0v0fhpKPH+Kli+BImLxo0CWk12CvVvx2exWA==",
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.2.3.tgz",
+ "integrity": "sha512-zqfcbgjYR72Y/rx/+/6g5Li/eV33yhRq5mkGbU06JYBzvGq6viy0gZl1ckCFhLLifKzXZ4yzUQTw/KG6FV+smg==",
"peer": true,
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/@algolia/client-personalization": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.1.1.tgz",
- "integrity": "sha512-Cf20l5ZyHkm7I+DnQ3d1rbgUMkx4GcLhN4AGBfN/MDhSQNG7mORCc4RKRvg62vG95NAElbfx1JcnAuLLucQ3Rw==",
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.2.3.tgz",
+ "integrity": "sha512-DBMQjOwKl2r/bzDLTS2sgXuorXNkEifVqWrKr7Gj0poU8fp8Oj8K2FQ/mc6o7PCIOVLwjchRYBkeCdxavakwmA==",
"peer": true,
"dependencies": {
- "@algolia/client-common": "5.1.1",
- "@algolia/requester-browser-xhr": "5.1.1",
- "@algolia/requester-node-http": "5.1.1"
+ "@algolia/client-common": "5.2.3",
+ "@algolia/requester-browser-xhr": "5.2.3",
+ "@algolia/requester-node-http": "5.2.3"
},
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/@algolia/client-search": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.1.1.tgz",
- "integrity": "sha512-SFpb3FI/VouGou/vpuS7qeCA5Y/KpV42P6CEA/1MZQtl/xJkl6PVjikb+Q9YadeHi2jtDV/aQ6PyiVDnX4PQcw==",
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.2.3.tgz",
+ "integrity": "sha512-xXdCg8vpiwE8gqSyvjxq8V3qbFa+gHasY5epIz718IByWv3WKLLi/n4SMIfB/zRwXTLVWeGOH/UJSz5VCnAAqg==",
"peer": true,
"dependencies": {
- "@algolia/client-common": "5.1.1",
- "@algolia/requester-browser-xhr": "5.1.1",
- "@algolia/requester-node-http": "5.1.1"
+ "@algolia/client-common": "5.2.3",
+ "@algolia/requester-browser-xhr": "5.2.3",
+ "@algolia/requester-node-http": "5.2.3"
},
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/@algolia/recommend": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.1.1.tgz",
- "integrity": "sha512-ebtbWTXBSaeg7DarDU3IXjbJgcVM6mtoHeK/VvMka+KAaJXoVsMfD402qs4cN0gaw0bAy3dNUmXkV0nNi1kq4g==",
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.2.3.tgz",
+ "integrity": "sha512-Ad+KrWPldCq8/INnpGJ6pxEwLCtU/vb2wZjy9V3CnSmxAxJ8kdCsbAdIsb8BxVR/Opgc62FwPKzkYEtp/AaDyw==",
"peer": true,
"dependencies": {
- "@algolia/client-common": "5.1.1",
- "@algolia/requester-browser-xhr": "5.1.1",
- "@algolia/requester-node-http": "5.1.1"
+ "@algolia/client-common": "5.2.3",
+ "@algolia/requester-browser-xhr": "5.2.3",
+ "@algolia/requester-node-http": "5.2.3"
},
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/@algolia/requester-browser-xhr": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.1.1.tgz",
- "integrity": "sha512-NXmN1ujJCj5GlJQaMK6DbdiXdcf6nhRef/X40lu9TYi71q9xTo/5RPMI0K2iOp6g07S26BrXFOz6RSV3Ny4LLw==",
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.2.3.tgz",
+ "integrity": "sha512-lezcE4E7ax7JkDGDKA/xAnyAY9p9LZ4AxzsyL0pksqUpOvn4U0msP553M2yJRfsxxdGDp15noCnPuRsh7u8dMg==",
"peer": true,
"dependencies": {
- "@algolia/client-common": "5.1.1"
+ "@algolia/client-common": "5.2.3"
},
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/@algolia/requester-node-http": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.1.1.tgz",
- "integrity": "sha512-xwrgnNTIzgxDEx6zuCKSKTPzQLA8fL/WZiVB6fRpIu5agLMjoAi0cWA5YSDbo+2FFxqVgLqKY/Jz6mKmWtY15Q==",
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.2.3.tgz",
+ "integrity": "sha512-xTxsRnJqxG1dylIkxmflrHO9LJfJKjSHqEF5yGdRrtnqIEvb2hiQPCHm2XwqxMa3NBcf6lmydGfJqhPLnRJwtw==",
"peer": true,
"dependencies": {
- "@algolia/client-common": "5.1.1"
+ "@algolia/client-common": "5.2.3"
},
"engines": {
"node": ">= 14.0.0"
@@ -569,12 +569,12 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.25.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.5.tgz",
- "integrity": "sha512-abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3w==",
+ "version": "7.25.6",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz",
+ "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.25.4",
+ "@babel/types": "^7.25.6",
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^2.5.1"
@@ -689,13 +689,13 @@
}
},
"node_modules/@babel/helpers": {
- "version": "7.25.0",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz",
- "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==",
+ "version": "7.25.6",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz",
+ "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==",
"dev": true,
"dependencies": {
"@babel/template": "^7.25.0",
- "@babel/types": "^7.25.0"
+ "@babel/types": "^7.25.6"
},
"engines": {
"node": ">=6.9.0"
@@ -788,12 +788,12 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.25.4",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.4.tgz",
- "integrity": "sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==",
+ "version": "7.25.6",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz",
+ "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.25.4"
+ "@babel/types": "^7.25.6"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -854,12 +854,12 @@
}
},
"node_modules/@babel/plugin-syntax-import-attributes": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz",
- "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==",
+ "version": "7.25.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz",
+ "integrity": "sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.24.8"
},
"engines": {
"node": ">=6.9.0"
@@ -1042,9 +1042,9 @@
}
},
"node_modules/@babel/runtime": {
- "version": "7.25.4",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.4.tgz",
- "integrity": "sha512-DSgLeL/FNcpXuzav5wfYvHCGvynXkJbn3Zvc3823AEe9nPwW9IK4UoCSS5yGymmQzN0pCPvivtgS6/8U2kkm1w==",
+ "version": "7.25.6",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz",
+ "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==",
"dependencies": {
"regenerator-runtime": "^0.14.0"
},
@@ -1067,16 +1067,16 @@
}
},
"node_modules/@babel/traverse": {
- "version": "7.25.4",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.4.tgz",
- "integrity": "sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg==",
+ "version": "7.25.6",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz",
+ "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.24.7",
- "@babel/generator": "^7.25.4",
- "@babel/parser": "^7.25.4",
+ "@babel/generator": "^7.25.6",
+ "@babel/parser": "^7.25.6",
"@babel/template": "^7.25.0",
- "@babel/types": "^7.25.4",
+ "@babel/types": "^7.25.6",
"debug": "^4.3.1",
"globals": "^11.1.0"
},
@@ -1094,9 +1094,9 @@
}
},
"node_modules/@babel/types": {
- "version": "7.25.4",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.4.tgz",
- "integrity": "sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==",
+ "version": "7.25.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz",
+ "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==",
"dev": true,
"dependencies": {
"@babel/helper-string-parser": "^7.24.8",
@@ -7001,9 +7001,9 @@
}
},
"node_modules/@tailwindcss/typography": {
- "version": "0.5.14",
- "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.14.tgz",
- "integrity": "sha512-ZvOCjUbsJBjL9CxQBn+VEnFpouzuKhxh2dH8xMIWHILL+HfOYtlAkWcyoon8LlzE53d2Yo6YO6pahKKNW3q1YQ==",
+ "version": "0.5.15",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.15.tgz",
+ "integrity": "sha512-AqhlCXl+8grUz8uqExv5OTtgpjuVIwFTSXTrh8y9/pw6q2ek7fJ+Y8ZEVw7EB2DCcuCOtEjf9w3+J3rzts01uA==",
"dev": true,
"dependencies": {
"lodash.castarray": "^4.4.0",
@@ -7012,7 +7012,7 @@
"postcss-selector-parser": "6.0.10"
},
"peerDependencies": {
- "tailwindcss": ">=3.0.0 || insiders"
+ "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20"
}
},
"node_modules/@tanstack/react-virtual": {
@@ -8146,19 +8146,19 @@
}
},
"node_modules/algoliasearch": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.1.1.tgz",
- "integrity": "sha512-Bmi456esf2+/nY1w3Xa2etGjQPOBw+RPtfdKRN33mWJ4hNs9cug/F4w9KAb0wiYqDjW1fduXYwu6+YKLHFMMew==",
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.2.3.tgz",
+ "integrity": "sha512-TPXs3MErOL2vdPwlXL71DnjISWuVgtOvv4CGErovXX32MyOT1oSwD1WXDjxZeY2LgVMYbIuPXwbi51AK3aATSQ==",
"peer": true,
"dependencies": {
- "@algolia/client-abtesting": "5.1.1",
- "@algolia/client-analytics": "5.1.1",
- "@algolia/client-common": "5.1.1",
- "@algolia/client-personalization": "5.1.1",
- "@algolia/client-search": "5.1.1",
- "@algolia/recommend": "5.1.1",
- "@algolia/requester-browser-xhr": "5.1.1",
- "@algolia/requester-node-http": "5.1.1"
+ "@algolia/client-abtesting": "5.2.3",
+ "@algolia/client-analytics": "5.2.3",
+ "@algolia/client-common": "5.2.3",
+ "@algolia/client-personalization": "5.2.3",
+ "@algolia/client-search": "5.2.3",
+ "@algolia/recommend": "5.2.3",
+ "@algolia/requester-browser-xhr": "5.2.3",
+ "@algolia/requester-node-http": "5.2.3"
},
"engines": {
"node": ">= 14.0.0"
@@ -10474,9 +10474,9 @@
}
},
"node_modules/escalade": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
- "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
"engines": {
"node": ">=6"
}
@@ -12191,9 +12191,9 @@
}
},
"node_modules/get-tsconfig": {
- "version": "4.7.6",
- "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.6.tgz",
- "integrity": "sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==",
+ "version": "4.8.0",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.0.tgz",
+ "integrity": "sha512-Pgba6TExTZ0FJAn1qkJAjIeKoDJ3CsI2ChuLohJnZl/tTU8MVrq3b+2t5UOPfRa4RMsorClBjJALkJUMjG1PAw==",
"dependencies": {
"resolve-pkg-maps": "^1.0.0"
},
@@ -12415,9 +12415,9 @@
}
},
"node_modules/got/node_modules/type-fest": {
- "version": "4.25.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.25.0.tgz",
- "integrity": "sha512-bRkIGlXsnGBRBQRAY56UXBm//9qH4bmJfFvq83gSz41N282df+fjy8ofcEgc1sM8geNt5cl6mC2g9Fht1cs8Aw==",
+ "version": "4.26.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.26.0.tgz",
+ "integrity": "sha512-OduNjVJsFbifKb57UqZ2EMP1i4u64Xwow3NYXUtBbD4vIwJdQd4+xl8YDou1dlm4DVrtwT/7Ky8z8WyCULVfxw==",
"engines": {
"node": ">=16"
},
@@ -12620,9 +12620,9 @@
"integrity": "sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g=="
},
"node_modules/hast-util-to-jsx-runtime/node_modules/style-to-object": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.6.tgz",
- "integrity": "sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.7.tgz",
+ "integrity": "sha512-uSjr59G5u6fbxUfKbb8GcqMGT3Xs9v5IbPkjb0S16GyOeBLAzSRK0CixBv5YrYvzO6TDLzIS6QCn78tkqWngPw==",
"dependencies": {
"inline-style-parser": "0.2.3"
}
@@ -15780,9 +15780,9 @@
}
},
"node_modules/npm": {
- "version": "10.8.2",
- "resolved": "https://registry.npmjs.org/npm/-/npm-10.8.2.tgz",
- "integrity": "sha512-x/AIjFIKRllrhcb48dqUNAAZl0ig9+qMuN91RpZo3Cb2+zuibfh+KISl6+kVVyktDz230JKc208UkQwwMqyB+w==",
+ "version": "10.8.3",
+ "resolved": "https://registry.npmjs.org/npm/-/npm-10.8.3.tgz",
+ "integrity": "sha512-0IQlyAYvVtQ7uOhDFYZCGK8kkut2nh8cpAdA9E6FvRSJaTgtZRZgNjlC5ZCct//L73ygrpY93CxXpRJDtNqPVg==",
"bundleDependencies": [
"@isaacs/string-locale-compare",
"@npmcli/arborist",
@@ -15873,13 +15873,13 @@
"@sigstore/tuf": "^2.3.4",
"abbrev": "^2.0.0",
"archy": "~1.0.0",
- "cacache": "^18.0.3",
+ "cacache": "^18.0.4",
"chalk": "^5.3.0",
"ci-info": "^4.0.0",
"cli-columns": "^4.0.0",
"fastest-levenshtein": "^1.0.16",
"fs-minipass": "^3.0.3",
- "glob": "^10.4.2",
+ "glob": "^10.4.5",
"graceful-fs": "^4.2.11",
"hosted-git-info": "^7.0.2",
"ini": "^4.1.3",
@@ -15888,7 +15888,7 @@
"json-parse-even-better-errors": "^3.0.2",
"libnpmaccess": "^8.0.6",
"libnpmdiff": "^6.1.4",
- "libnpmexec": "^8.1.3",
+ "libnpmexec": "^8.1.4",
"libnpmfund": "^5.0.12",
"libnpmhook": "^10.0.5",
"libnpmorg": "^6.0.6",
@@ -15902,12 +15902,12 @@
"minipass": "^7.1.1",
"minipass-pipeline": "^1.2.4",
"ms": "^2.1.2",
- "node-gyp": "^10.1.0",
+ "node-gyp": "^10.2.0",
"nopt": "^7.2.1",
"normalize-package-data": "^6.0.2",
"npm-audit-report": "^5.0.0",
"npm-install-checks": "^6.3.0",
- "npm-package-arg": "^11.0.2",
+ "npm-package-arg": "^11.0.3",
"npm-pick-manifest": "^9.1.0",
"npm-profile": "^10.0.0",
"npm-registry-fetch": "^17.1.0",
@@ -15918,7 +15918,7 @@
"proc-log": "^4.2.0",
"qrcode-terminal": "^0.12.0",
"read": "^3.0.1",
- "semver": "^7.6.2",
+ "semver": "^7.6.3",
"spdx-expression-parse": "^4.0.0",
"ssri": "^10.0.6",
"supports-color": "^9.4.0",
@@ -16501,7 +16501,7 @@
}
},
"node_modules/npm/node_modules/cacache": {
- "version": "18.0.3",
+ "version": "18.0.4",
"inBundle": true,
"license": "ISC",
"dependencies": {
@@ -16654,7 +16654,7 @@
}
},
"node_modules/npm/node_modules/debug": {
- "version": "4.3.5",
+ "version": "4.3.6",
"inBundle": true,
"license": "MIT",
"dependencies": {
@@ -16728,7 +16728,7 @@
}
},
"node_modules/npm/node_modules/foreground-child": {
- "version": "3.2.1",
+ "version": "3.3.0",
"inBundle": true,
"license": "ISC",
"dependencies": {
@@ -16754,7 +16754,7 @@
}
},
"node_modules/npm/node_modules/glob": {
- "version": "10.4.2",
+ "version": "10.4.5",
"inBundle": true,
"license": "ISC",
"dependencies": {
@@ -16768,9 +16768,6 @@
"bin": {
"glob": "dist/esm/bin.mjs"
},
- "engines": {
- "node": ">=16 || 14 >=14.18"
- },
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
@@ -16937,15 +16934,12 @@
"license": "ISC"
},
"node_modules/npm/node_modules/jackspeak": {
- "version": "3.4.0",
+ "version": "3.4.3",
"inBundle": true,
"license": "BlueOak-1.0.0",
"dependencies": {
"@isaacs/cliui": "^8.0.2"
},
- "engines": {
- "node": ">=14"
- },
"funding": {
"url": "https://github.com/sponsors/isaacs"
},
@@ -17023,7 +17017,7 @@
}
},
"node_modules/npm/node_modules/libnpmexec": {
- "version": "8.1.3",
+ "version": "8.1.4",
"inBundle": true,
"license": "ISC",
"dependencies": {
@@ -17148,12 +17142,9 @@
}
},
"node_modules/npm/node_modules/lru-cache": {
- "version": "10.2.2",
+ "version": "10.4.3",
"inBundle": true,
- "license": "ISC",
- "engines": {
- "node": "14 || >=16.14"
- }
+ "license": "ISC"
},
"node_modules/npm/node_modules/make-fetch-happen": {
"version": "13.0.1",
@@ -17348,7 +17339,7 @@
}
},
"node_modules/npm/node_modules/node-gyp": {
- "version": "10.1.0",
+ "version": "10.2.0",
"inBundle": true,
"license": "MIT",
"dependencies": {
@@ -17358,9 +17349,9 @@
"graceful-fs": "^4.2.6",
"make-fetch-happen": "^13.0.0",
"nopt": "^7.0.0",
- "proc-log": "^3.0.0",
+ "proc-log": "^4.1.0",
"semver": "^7.3.5",
- "tar": "^6.1.2",
+ "tar": "^6.2.1",
"which": "^4.0.0"
},
"bin": {
@@ -17370,14 +17361,6 @@
"node": "^16.14.0 || >=18.0.0"
}
},
- "node_modules/npm/node_modules/node-gyp/node_modules/proc-log": {
- "version": "3.0.0",
- "inBundle": true,
- "license": "ISC",
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
"node_modules/npm/node_modules/nopt": {
"version": "7.2.1",
"inBundle": true,
@@ -17444,7 +17427,7 @@
}
},
"node_modules/npm/node_modules/npm-package-arg": {
- "version": "11.0.2",
+ "version": "11.0.3",
"inBundle": true,
"license": "ISC",
"dependencies": {
@@ -17606,7 +17589,7 @@
}
},
"node_modules/npm/node_modules/postcss-selector-parser": {
- "version": "6.1.0",
+ "version": "6.1.2",
"inBundle": true,
"license": "MIT",
"dependencies": {
@@ -17730,7 +17713,7 @@
"optional": true
},
"node_modules/npm/node_modules/semver": {
- "version": "7.6.2",
+ "version": "7.6.3",
"inBundle": true,
"license": "ISC",
"bin": {
@@ -22369,7 +22352,7 @@
},
"packages/mesh-common": {
"name": "@meshsdk/common",
- "version": "1.6.12",
+ "version": "1.6.13",
"license": "Apache-2.0",
"dependencies": {
"bech32": "^2.0.0",
@@ -22386,7 +22369,7 @@
},
"packages/mesh-contract": {
"name": "@meshsdk/contract",
- "version": "1.6.12",
+ "version": "1.6.13",
"license": "Apache-2.0",
"dependencies": {
"@meshsdk/common": "*",
@@ -22404,7 +22387,7 @@
},
"packages/mesh-core": {
"name": "@meshsdk/core",
- "version": "1.6.12",
+ "version": "1.6.13",
"license": "Apache-2.0",
"dependencies": {
"@meshsdk/common": "*",
@@ -22424,7 +22407,7 @@
},
"packages/mesh-core-csl": {
"name": "@meshsdk/core-csl",
- "version": "1.6.12",
+ "version": "1.6.13",
"license": "Apache-2.0",
"dependencies": {
"@meshsdk/common": "*",
@@ -22443,7 +22426,7 @@
},
"packages/mesh-core-cst": {
"name": "@meshsdk/core-cst",
- "version": "1.6.12",
+ "version": "1.6.13",
"license": "Apache-2.0",
"dependencies": {
"@cardano-sdk/core": "^0.35.4",
@@ -22469,7 +22452,7 @@
},
"packages/mesh-provider": {
"name": "@meshsdk/provider",
- "version": "1.6.12",
+ "version": "1.6.13",
"license": "Apache-2.0",
"dependencies": {
"@meshsdk/common": "*",
@@ -22485,7 +22468,7 @@
},
"packages/mesh-react": {
"name": "@meshsdk/react",
- "version": "1.6.12",
+ "version": "1.6.13",
"license": "Apache-2.0",
"dependencies": {
"@meshsdk/common": "*",
@@ -22505,7 +22488,7 @@
},
"packages/mesh-transaction": {
"name": "@meshsdk/transaction",
- "version": "1.6.12",
+ "version": "1.6.13",
"license": "Apache-2.0",
"dependencies": {
"@meshsdk/common": "*",
@@ -22523,7 +22506,7 @@
},
"packages/mesh-wallet": {
"name": "@meshsdk/wallet",
- "version": "1.6.12",
+ "version": "1.6.13",
"license": "Apache-2.0",
"dependencies": {
"@meshsdk/common": "*",
@@ -22543,7 +22526,7 @@
},
"scripts/mesh-cli": {
"name": "meshjs",
- "version": "1.5.4",
+ "version": "1.6.13",
"license": "Apache-2.0",
"dependencies": {
"chalk": "5.3.0",
@@ -22554,7 +22537,7 @@
"tar": "7.2.0"
},
"bin": {
- "meshjs": "bin/meshjs"
+ "meshjs": "bin/meshjs.js"
},
"devDependencies": {
"@preconstruct/cli": "2.8.4",
diff --git a/package.json b/package.json
index e9b5143e..ac267c37 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,8 @@
"name": "@meshsdk/root",
"private": true,
"scripts": {
- "build": "turbo build --concurrency 15 && npm run build:scripts",
+ "build": "turbo run build:mesh && turbo run build:docs && turbo run build:apps && turbo run build:scripts",
+ "build2": "turbo build --concurrency 15 && npm run build:scripts",
"build:apps": "turbo run build:apps",
"build:docs": "turbo run build:docs",
"build:mesh": "turbo run build:mesh",
diff --git a/packages/mesh-common/src/data/value.ts b/packages/mesh-common/src/data/value.ts
index cca749b0..f832c3b3 100644
--- a/packages/mesh-common/src/data/value.ts
+++ b/packages/mesh-common/src/data/value.ts
@@ -197,7 +197,7 @@ export class MeshValue {
* @returns boolean
*/
leq = (other: MeshValue): boolean => {
- return Object.keys(other.value).every((key) => this.leqUnit(key, other));
+ return Object.keys(this.value).every((key) => this.leqUnit(key, other));
};
/**
diff --git a/packages/mesh-common/test/data/value/comparator.test.ts b/packages/mesh-common/test/data/value/comparator.test.ts
index f035ca05..da30e69a 100644
--- a/packages/mesh-common/test/data/value/comparator.test.ts
+++ b/packages/mesh-common/test/data/value/comparator.test.ts
@@ -21,6 +21,24 @@ describe("MeshValue class", () => {
const target = new MeshValue({ lovelace: 20n, [mockUnit]: 10n });
expect(value.geq(target)).toBe(true);
});
+
+ it("should return false if there is missing unit in the target value", () => {
+ const value = new MeshValue({ lovelace: 20n });
+ const target = new MeshValue({ lovelace: 20n, [mockUnit]: 10n });
+ expect(value.geq(target)).toBe(false);
+ });
+
+ it("should return false if there is missing unit in the value.value", () => {
+ const value = new MeshValue({ lovelace: 20n, [mockUnit]: 10n });
+ const target = new MeshValue({ lovelace: 20n });
+ expect(value.geq(target)).toBe(true);
+ });
+
+ it("should return false if there is missing unit in both value.value and target.value", () => {
+ const value = new MeshValue({ lovelace: 20n, somethingelse: 10n });
+ const target = new MeshValue({ lovelace: 20n, [mockUnit]: 10n });
+ expect(value.geq(target)).toBe(false);
+ });
});
describe("geqUnit", () => {
it("should return true if the value is greater than or equal to the target value for a specific unit", () => {
@@ -46,8 +64,14 @@ describe("MeshValue class", () => {
it("should return false if the unit does not exist in value.value", () => {
const value = new MeshValue({ lovelace: 20n, [mockUnit]: 10n });
- const target = new MeshValue({ somethingElse: 5n });
- expect(value.geqUnit("somethingElse", target)).toBe(false);
+ const target = new MeshValue({ lovelace: 20n });
+ expect(value.geqUnit(mockUnit, target)).toBe(false);
+ });
+
+ it("should return false if the unit does not exist in other.value", () => {
+ const value = new MeshValue({ lovelace: 20n });
+ const target = new MeshValue({ lovelace: 20n, [mockUnit]: 10n });
+ expect(value.geqUnit(mockUnit, target)).toBe(false);
});
});
describe("leq", () => {
@@ -68,6 +92,24 @@ describe("MeshValue class", () => {
const target = new MeshValue({ lovelace: 20n, [mockUnit]: 10n });
expect(value.leq(target)).toBe(true);
});
+
+ it("should return false if there is missing unit in the target value", () => {
+ const value = new MeshValue({ lovelace: 20n });
+ const target = new MeshValue({ lovelace: 20n, [mockUnit]: 10n });
+ expect(value.leq(target)).toBe(true);
+ });
+
+ it("should return false if there is missing unit in the value.value", () => {
+ const value = new MeshValue({ lovelace: 20n, [mockUnit]: 10n });
+ const target = new MeshValue({ lovelace: 20n });
+ expect(value.leq(target)).toBe(false);
+ });
+
+ it("should return false if there is missing unit in both value.value and target.value", () => {
+ const value = new MeshValue({ lovelace: 20n, somethingelse: 10n });
+ const target = new MeshValue({ lovelace: 20n, [mockUnit]: 10n });
+ expect(value.leq(target)).toBe(false);
+ });
});
describe("leqUnit", () => {
it("should return true if the value is less than or equal to the target value for a specific unit", () => {
@@ -91,10 +133,16 @@ describe("MeshValue class", () => {
expect(value.leqUnit(mockUnit, target)).toBe(true);
});
- it("should return false if the unit does not exist in value.value", () => {
+ it("should return false if the unit does not exist in other.value", () => {
+ const value = new MeshValue({ lovelace: 20n });
+ const target = new MeshValue({ lovelace: 5n, [mockUnit]: 10n });
+ expect(value.leqUnit(mockUnit, target)).toBe(false);
+ });
+
+ it("should return false if the unit does not exist in this.value", () => {
const value = new MeshValue({ lovelace: 20n, [mockUnit]: 10n });
- const target = new MeshValue({ somethingElse: 5n });
- expect(value.leqUnit("somethingElse", target)).toBe(false);
+ const target = new MeshValue({ lovelace: 20n });
+ expect(value.leqUnit(mockUnit, target)).toBe(false);
});
});
describe("isEmpty", () => {
diff --git a/packages/mesh-common/test/data/value/convertor.test.ts b/packages/mesh-common/test/data/value/convertor.test.ts
index bfff721f..0ce51ceb 100644
--- a/packages/mesh-common/test/data/value/convertor.test.ts
+++ b/packages/mesh-common/test/data/value/convertor.test.ts
@@ -1,6 +1,8 @@
import {
Asset,
+ assocMap,
byteString,
+ currencySymbol,
dict,
Dict,
Integer,
@@ -8,6 +10,7 @@ import {
MeshValue,
MValue,
mValue,
+ tokenName,
Value,
value,
} from "@meshsdk/common";
@@ -170,4 +173,100 @@ describe("MeshValue class", () => {
expect(JSON.stringify(val)).toBe(JSON.stringify(assets));
});
});
+ describe("toData", () => {
+ test("Empty Value", () => {
+ const val: Asset[] = [];
+ const plutusValue: Value = value(val);
+ const data = MeshValue.fromValue(plutusValue).toData();
+ const expected: MValue = mValue(val);
+ expect(JSON.stringify(expected)).toBe(JSON.stringify(data));
+ });
+
+ test("Multiple Assets with Same Policy", () => {
+ const val: Asset[] = [
+ {
+ unit: "baefdc6c5b191be372a794cd8d40d839ec0dbdd3c28957267dc817001234",
+ quantity: "100",
+ },
+ {
+ unit: "baefdc6c5b191be372a794cd8d40d839ec0dbdd3c28957267dc817001234",
+ quantity: "200",
+ },
+ ];
+ const plutusValue: Value = value(val);
+ const data = MeshValue.fromValue(plutusValue).toData();
+ const expected: MValue = mValue(val);
+
+ expect(JSON.stringify(expected)).toBe(JSON.stringify(data));
+ });
+
+ test("Mixed Assets", () => {
+ const val: Asset[] = [
+ { unit: "lovelace", quantity: "1000000" },
+ {
+ unit: "baefdc6c5b191be372a794cd8d40d839ec0dbdd3c28957267dc817001234",
+ quantity: "567",
+ },
+ {
+ unit: "baefdc6c5b191be372a794cd8d40d839ec0dbdd3c28957267dc8170074657374696e676e657777616c2e616461",
+ quantity: "345",
+ },
+ {
+ unit: "baefdc6c5b191be372a794cd8d40d839ec0dbdd3c28957267dc817001234",
+ quantity: "100",
+ },
+ ];
+ const plutusValue: Value = value(val);
+ const data = MeshValue.fromValue(plutusValue).toData();
+ const expected: MValue = mValue(val);
+ expect(JSON.stringify(expected)).toBe(JSON.stringify(data));
+ });
+
+ test("Single Asset with Large Quantity", () => {
+ const val: Asset[] = [{ unit: "lovelace", quantity: "1000000000000" }];
+ const plutusValue: Value = value(val);
+ const data = MeshValue.fromValue(plutusValue).toData();
+ const expected: MValue = mValue(val);
+ expect(JSON.stringify(expected)).toBe(JSON.stringify(data));
+ });
+ });
+ describe("toJSON", () => {
+ test("should correctly convert MeshValue to JSON with multiple assets", () => {
+ const assets: Asset[] = [
+ { unit: "lovelace", quantity: "1000000" },
+ {
+ unit: "c21d710605bb00e69f3c175150552fc498316d80e7efdb1b186db38c000643b04d65736820676f6f64",
+ quantity: "500",
+ },
+ ];
+
+ const expectedValue = assocMap([
+ [currencySymbol(""), assocMap([[tokenName(""), integer(1000000)]])],
+ [
+ currencySymbol(
+ "c21d710605bb00e69f3c175150552fc498316d80e7efdb1b186db38c",
+ ),
+ assocMap([[tokenName("000643b04d65736820676f6f64"), integer(500)]]),
+ ],
+ ]);
+
+ const meshValue = new MeshValue();
+ meshValue.toAssets = () => assets;
+
+ const jsonValue = meshValue.toJSON();
+ expect(JSON.stringify(jsonValue)).toEqual(JSON.stringify(expectedValue));
+ });
+
+ test("should correctly convert MeshValue to JSON with no asset", () => {
+ const assets: Asset[] = [];
+
+ const expectedValue = assocMap([]);
+
+ const meshValue = new MeshValue();
+ meshValue.toAssets = () => assets;
+
+ const jsonValue = meshValue.toJSON();
+ expect(JSON.stringify(jsonValue)).toEqual(JSON.stringify(expectedValue));
+ });
+ });
});
diff --git a/packages/mesh-contract/src/hello-world/aiken-workspace/validators/hello_world.ak b/packages/mesh-contract/src/hello-world/aiken-workspace/validators/hello-world.ak
similarity index 100%
rename from packages/mesh-contract/src/hello-world/aiken-workspace/validators/hello_world.ak
rename to packages/mesh-contract/src/hello-world/aiken-workspace/validators/hello-world.ak
diff --git a/packages/mesh-contract/src/hello-world/offchain.ts b/packages/mesh-contract/src/hello-world/offchain.ts
index df9048be..0932d417 100644
--- a/packages/mesh-contract/src/hello-world/offchain.ts
+++ b/packages/mesh-contract/src/hello-world/offchain.ts
@@ -1,5 +1,14 @@
-import { BuiltinByteString, ConStr0, Integer } from "@meshsdk/common";
-import { UTxO } from "@meshsdk/core";
+import {
+ Asset,
+ BuiltinByteString,
+ ConStr0,
+ deserializeAddress,
+ Integer,
+ mConStr0,
+ serializePlutusScript,
+ stringToHex,
+ UTxO,
+} from "@meshsdk/core";
import { applyParamsToScript } from "@meshsdk/core-csl";
import { MeshTxInitiator, MeshTxInitiatorInput } from "../common";
@@ -18,6 +27,61 @@ export class MeshHelloWorldContract extends MeshTxInitiator {
super(inputs);
}
+ getScript = () => {
+ const { address } = serializePlutusScript(
+ { code: this.scriptCbor, version: "V2" },
+ undefined,
+ this.networkId,
+ );
+ return {
+ scriptAddr: address,
+ };
+ };
+
+ lockAsset = async (assets: Asset[]): Promise