feat: remove plutus v1,v2 from aiken.toml closes #1032

This commit is contained in:
rvcas 2024-12-25 22:52:08 -05:00
parent 3355b477e2
commit c1871768f8
No known key found for this signature in database
GPG Key ID: C09B64E263F7D68C
10 changed files with 279 additions and 367 deletions

View File

@ -1,5 +1,12 @@
# Changelog
## unreleased
### Changed
- **aiken-project**: The `aiken.toml` file no longer supports `v1` and `v2` for the plutus version field. @rvcas
- **aiken-project**: `Error::TomlLoading` now looks much better - [see](https://github.com/aiken-lang/aiken/issues/1032#issuecomment-2562122101). @rvcas
## v1.1.9 - 2024-12-13
### Added
@ -7,9 +14,10 @@
- **aiken**: Generate a default _'placeholder.ak'_ validator when using `aiken new`. See [#1061](https://github.com/aiken-lang/aiken/pull/1061) @Waalge
- **aiken-lang**: New builtins [`unconstr_fields`](https://aiken-lang.github.io/prelude/aiken/builtin.html#unconstr_fields) and [`unconstr_index`](https://aiken-lang.github.io/prelude/aiken/builtin.html#unconstr_index). @Microproofs
- **aiken-lang**: Added builtins from Chang2 hardfork (except for writeBits). @Microproofs, @KtorZ
- [Bitwise operations](https://aiken-lang.github.io/prelude/aiken/builtin.html#Bitwise)
- [Ripemd-160 hashing](https://aiken-lang.github.io/prelude/aiken/builtin.html#ripemd_160)
- [Bitwise operations](https://aiken-lang.github.io/prelude/aiken/builtin.html#Bitwise)
- [Ripemd-160 hashing](https://aiken-lang.github.io/prelude/aiken/builtin.html#ripemd_160)
- **aiken-projects**: The generated documentation may now include maths typesetting rendered using [KaTex](https://katex.org/). See [#1070](https://github.com/aiken-lang/aiken/pull/1070) @adrian052.
- (Linux & MacOS only) Both inline (delimited by single `$` symbols) and blocks (delimited by doubled `$$` symbols) are now parsed and rendered as SVG upon generating documentation. For example:
```
@ -23,6 +31,7 @@
$$
g^{z} = g^{r + c \cdot x} = g^{r} g^{x \cdot c} = g^{r} (g^{x})^{c} = g^{r} u^{c}
$$
- **uplc**: New builtins from Chang2 hardfork added to the VM along with costing. @Hadelive, @Microproofs
### Changed
@ -203,7 +212,7 @@
- **aiken-lang**: rename some builtins. @KtorZ
| old name | new name |
| --- | --- |
| ------------------ | ----------- |
| `mk_nil_data` | `new_list` |
| `mk_pair_data` | `new_pair` |
| `mk_nil_pair_data` | `new_pairs` |
@ -248,8 +257,8 @@
3. Changes the behavior of the `--trace-level compact` mode to now:
- remove trace-if-false (`?` operator) traces entirely in this mode;
- only keep the label (first trace argument) and error when it isn't a string.
- remove trace-if-false (`?` operator) traces entirely in this mode;
- only keep the label (first trace argument) and error when it isn't a string.
See also [#978](https://github.com/aiken-lang/aiken/pull/978).

435
Cargo.lock generated vendored

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,9 @@ use serde::{Deserialize, Serialize};
#[derive(Debug, Default, Deserialize, Serialize, Clone, Copy, PartialEq)]
#[serde(rename_all = "camelCase")]
pub enum PlutusVersion {
#[serde(skip_deserializing)]
V1,
#[serde(skip_deserializing)]
V2,
#[default]
V3,

View File

@ -1,4 +1,6 @@
use crate::{github::repo::LatestRelease, package_name::PackageName, paths, Error};
use crate::{
error::TomlLoadingContext, github::repo::LatestRelease, package_name::PackageName, paths, Error,
};
use aiken_lang::{
ast::{Annotation, ByteArrayFormatPreference, ModuleConstant, Span, UntypedDefinition},
expr::UntypedExpr,
@ -343,6 +345,7 @@ impl Config {
})?;
let result: Self = toml::from_str(&raw_config).map_err(|e| Error::TomlLoading {
ctx: TomlLoadingContext::Project,
path: config_path.clone(),
src: raw_config.clone(),
named: NamedSource::new(config_path.display().to_string(), raw_config).into(),
@ -351,7 +354,7 @@ impl Config {
start: range.start,
end: range.end,
}),
help: e.to_string(),
help: e.message().to_string(),
})?;
Ok(result)

View File

@ -7,7 +7,7 @@ use tokio::time::Instant;
use crate::{
config::{Config, Dependency},
error::Error,
error::{Error, TomlLoadingContext},
package_name::PackageName,
paths,
telemetry::{DownloadSource, Event, EventListener},
@ -44,6 +44,7 @@ impl LocalPackages {
let src = fs::read_to_string(&path)?;
let result: Self = toml::from_str(&src).map_err(|e| Error::TomlLoading {
ctx: TomlLoadingContext::Package,
path: path.clone(),
src: src.clone(),
named: NamedSource::new(path.display().to_string(), src).into(),
@ -52,7 +53,7 @@ impl LocalPackages {
start: range.start,
end: range.end,
}),
help: e.to_string(),
help: e.message().to_string(),
})?;
Ok(result)

View File

@ -10,7 +10,7 @@ use std::{
use crate::{
config::{Config, Dependency, Platform},
error::Error,
error::{Error, TomlLoadingContext},
package_name::PackageName,
paths,
telemetry::{Event, EventListener},
@ -47,6 +47,7 @@ impl Manifest {
let toml = fs::read_to_string(&manifest_path)?;
let manifest: Self = toml::from_str(&toml).map_err(|e| Error::TomlLoading {
ctx: TomlLoadingContext::Manifest,
path: manifest_path.clone(),
src: toml.clone(),
named: NamedSource::new(manifest_path.display().to_string(), toml).into(),
@ -55,7 +56,7 @@ impl Manifest {
start: range.start,
end: range.end,
}),
help: e.to_string(),
help: e.message().to_string(),
})?;
// If the config is unchanged since the manifest was written then it is up

View File

@ -15,12 +15,28 @@ use owo_colors::{
Stream::{Stderr, Stdout},
};
use std::{
fmt::{Debug, Display},
fmt::{self, Debug, Display},
io,
path::{Path, PathBuf},
};
use zip::result::ZipError;
pub enum TomlLoadingContext {
Project,
Manifest,
Package,
}
impl fmt::Display for TomlLoadingContext {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
TomlLoadingContext::Project => write!(f, "project"),
TomlLoadingContext::Manifest => write!(f, "manifest"),
TomlLoadingContext::Package => write!(f, "package"),
}
}
}
#[allow(dead_code)]
#[derive(thiserror::Error)]
pub enum Error {
@ -58,8 +74,9 @@ pub enum Error {
#[error(transparent)]
Module(#[from] ast::Error),
#[error("{help}")]
#[error("I could not load the {ctx} config file.")]
TomlLoading {
ctx: TomlLoadingContext,
path: PathBuf,
src: String,
named: Box<NamedSource<String>>,
@ -372,7 +389,7 @@ impl Diagnostic for Error {
Error::NoDefaultEnvironment { .. } => Some(Box::new(
"Environment module names are free, but there must be at least one named 'default.ak'.",
)),
Error::TomlLoading { .. } => None,
Error::TomlLoading { help, .. } => Some(Box::new(help)),
Error::Format { .. } => None,
Error::TestFailure { .. } => None,
Error::Http(_) => None,

View File

@ -64,16 +64,16 @@ impl Export {
})
.collect::<Result<_, _>>()?;
let program = generator
.generate_raw(&func.body, &func.arguments, &module.name)
.to_debruijn()
.unwrap();
let program = match plutus_version {
PlutusVersion::V1 => SerializableProgram::PlutusV1Program,
PlutusVersion::V2 => SerializableProgram::PlutusV2Program,
PlutusVersion::V3 => SerializableProgram::PlutusV3Program,
}(
generator
.generate_raw(&func.body, &func.arguments, &module.name)
.to_debruijn()
.unwrap(),
);
PlutusVersion::V1 => SerializableProgram::PlutusV1Program(program),
PlutusVersion::V2 => SerializableProgram::PlutusV2Program(program),
PlutusVersion::V3 => SerializableProgram::PlutusV3Program(program),
};
Ok(Export {
name: format!("{}.{}", &module.name, &func.name),

View File

@ -13,4 +13,4 @@ requirements = []
source = "github"
[etags]
"aiken-lang/stdlib@v2" = [{ secs_since_epoch = 1732568276, nanos_since_epoch = 702142000 }, "33dce3a6dbfc58a92cc372c4e15d802f079f4958af941386d18980eb98439bb4"]
"aiken-lang/stdlib@v2" = [{ secs_since_epoch = 1735183696, nanos_since_epoch = 808235000 }, "25c8d0802b8266feca04b47933382c5dee3cadb422208a5d3810d9d2df108c2e"]

View File

@ -23,9 +23,6 @@ importers:
'@tailwindcss/typography':
specifier: ^0.5.15
version: 0.5.15(tailwindcss@3.4.15)
'@utxorpc/lucid-evolution-provider':
specifier: ^0.1.2
version: 0.1.2(@bufbuild/protobuf@1.10.0)(@harmoniclabs/bytestring@1.0.0)(@harmoniclabs/cbor@1.5.0)(@harmoniclabs/crypto@0.2.4)(@harmoniclabs/pair@1.0.0)(fast-check@3.23.1)
vite-plugin-top-level-await:
specifier: ^1.4.4
version: 1.4.4(rollup@4.27.4)(vite@5.4.11(@types/node@20.14.10))
@ -127,9 +124,6 @@ packages:
'@anastasia-labs/cardano-multiplatform-lib-nodejs@6.0.2-3':
resolution: {integrity: sha512-Jy7QKahRQJgX6OFeuQvPXO0ejKfT9cQ8m3PFLBhbM04jjzFnaxlJJJ5+7qNHe3xdy40fMbMMe2SgAYPJ4gZ2Xw==}
'@bufbuild/protobuf@1.10.0':
resolution: {integrity: sha512-QDdVFLoN93Zjg36NoQPZfsVH9tZew7wKDKyV5qRdj8ntT4wQCOradQjRaTdwMhWUYsgKsvCINKKm87FdEk96Ag==}
'@cbor-extract/cbor-extract-darwin-arm64@2.2.0':
resolution: {integrity: sha512-P7swiOAdF7aSi0H+tHtHtr6zrpF3aAq/W9FXx5HektRvLTM2O89xCyXF3pk7pLc7QpaY7AoaE8UowVf9QBdh3w==}
cpu: [arm64]
@ -160,24 +154,6 @@ packages:
cpu: [x64]
os: [win32]
'@connectrpc/connect-node@1.4.0':
resolution: {integrity: sha512-0ANnrr6SvsjevsWEgdzHy7BaHkluZyS6s4xNoVt7RBHFR5V/kT9lPokoIbYUOU9JHzdRgTaS3x5595mwUsu15g==}
engines: {node: '>=16.0.0'}
peerDependencies:
'@bufbuild/protobuf': ^1.4.2
'@connectrpc/connect': 1.4.0
'@connectrpc/connect-web@1.4.0':
resolution: {integrity: sha512-13aO4psFbbm7rdOFGV0De2Za64DY/acMspgloDlcOKzLPPs0yZkhp1OOzAQeiAIr7BM/VOHIA3p8mF0inxCYTA==}
peerDependencies:
'@bufbuild/protobuf': ^1.4.2
'@connectrpc/connect': 1.4.0
'@connectrpc/connect@1.4.0':
resolution: {integrity: sha512-vZeOkKaAjyV4+RH3+rJZIfDFJAfr+7fyYr6sLDKbYX3uuTVszhFe9/YKf5DNqrDb5cKdKVlYkGn6DTDqMitAnA==}
peerDependencies:
'@bufbuild/protobuf': ^1.4.2
'@effect/platform@0.59.3':
resolution: {integrity: sha512-DHR4Hl+hhTCzjs1ykRIyzwaala4JMtPVnReLea29hn+M3fKzloic7UpyCkTO7aJdFjthUtAKcW2mr2lDtuqlDA==}
peerDependencies:
@ -373,10 +349,6 @@ packages:
resolution: {integrity: sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@fastify/busboy@2.1.1':
resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==}
engines: {node: '>=14'}
'@harmoniclabs/bigint-utils@1.0.0':
resolution: {integrity: sha512-OhZMHcdtH2hHKMlxWFHf71PmKHdoi9ARpjS9mUu0/cd8VWDDjT7VQoQwC5NN/68iyO4O5Dojrvrp9tjG5BDABA==}
@ -815,20 +787,6 @@ packages:
resolution: {integrity: sha512-h8vYOulWec9LhpwfAdZf2bjr8xIp0KNKnpgqSz0qqYYKAW/QZKw3ktRndbiAtUz4acH4QLQavwZBYCc0wulA/Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@utxorpc/lucid-evolution-provider@0.1.2':
resolution: {integrity: sha512-VQoa0wAhWTCy6qH07KKOvoeVN8WE2BO22Su6TPC8J3D/E/ZGabF8C9wxXdk3p27MkTOxRO5Zz5I0g6m5v/PtUg==}
'@utxorpc/sdk@0.6.4':
resolution: {integrity: sha512-DQK/w+5KTtufOr+pZ9fnms9C3/k/93EuWlVnqQaCLxU6N3vjYrIMF9gQgd9/ynE4zYM+VHjRjlvchEIGXBufYA==}
'@utxorpc/spec@0.10.1':
resolution: {integrity: sha512-0INat5xSjkTeqKr+JO3SMQQ2PxcfZNUi5wJja/Fpnp68f52eTJf4X4QGy7tzqYzMsK/ZYhRr95J+WUeM6Vbmwg==}
engines: {node: '>=20.0.0'}
'@utxorpc/spec@0.12.0':
resolution: {integrity: sha512-Xl1PD3zui79ZoOqj8xQjUrA/+qxwJ4k7wlfmEDrSOPoKePtGlZNMwWL6SOU/GprgZOPWmtdlfmDQiTQVLZXL+Q==}
engines: {node: '>=20.0.0'}
acorn-jsx@5.3.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
@ -894,9 +852,6 @@ packages:
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
bech32@2.0.0:
resolution: {integrity: sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==}
@ -922,9 +877,6 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
buffer@6.0.3:
resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
callsites@3.1.0:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
@ -1222,9 +1174,6 @@ packages:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
ignore@5.3.2:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'}
@ -1788,10 +1737,6 @@ packages:
undici-types@5.26.5:
resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
undici@5.28.4:
resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==}
engines: {node: '>=14.0'}
update-browserslist-db@1.1.1:
resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==}
hasBin: true
@ -1922,8 +1867,6 @@ snapshots:
'@anastasia-labs/cardano-multiplatform-lib-nodejs@6.0.2-3': {}
'@bufbuild/protobuf@1.10.0': {}
'@cbor-extract/cbor-extract-darwin-arm64@2.2.0':
optional: true
@ -1942,21 +1885,6 @@ snapshots:
'@cbor-extract/cbor-extract-win32-x64@2.2.0':
optional: true
'@connectrpc/connect-node@1.4.0(@bufbuild/protobuf@1.10.0)(@connectrpc/connect@1.4.0(@bufbuild/protobuf@1.10.0))':
dependencies:
'@bufbuild/protobuf': 1.10.0
'@connectrpc/connect': 1.4.0(@bufbuild/protobuf@1.10.0)
undici: 5.28.4
'@connectrpc/connect-web@1.4.0(@bufbuild/protobuf@1.10.0)(@connectrpc/connect@1.4.0(@bufbuild/protobuf@1.10.0))':
dependencies:
'@bufbuild/protobuf': 1.10.0
'@connectrpc/connect': 1.4.0(@bufbuild/protobuf@1.10.0)
'@connectrpc/connect@1.4.0(@bufbuild/protobuf@1.10.0)':
dependencies:
'@bufbuild/protobuf': 1.10.0
'@effect/platform@0.59.3(@effect/schema@0.68.27(effect@3.10.16))(effect@3.10.16)':
dependencies:
'@effect/schema': 0.68.27(effect@3.10.16)
@ -2086,8 +2014,6 @@ snapshots:
dependencies:
levn: 0.4.1
'@fastify/busboy@2.1.1': {}
'@harmoniclabs/bigint-utils@1.0.0':
dependencies:
'@harmoniclabs/uint8array-utils': 1.0.3
@ -2490,6 +2416,7 @@ snapshots:
'@types/node@20.14.10':
dependencies:
undici-types: 5.26.5
optional: true
'@typescript-eslint/eslint-plugin@8.15.0(@typescript-eslint/parser@8.15.0(eslint@9.15.0(jiti@1.21.6))(typescript@5.7.2))(eslint@9.15.0(jiti@1.21.6))(typescript@5.7.2)':
dependencies:
@ -2573,45 +2500,6 @@ snapshots:
'@typescript-eslint/types': 8.15.0
eslint-visitor-keys: 4.2.0
'@utxorpc/lucid-evolution-provider@0.1.2(@bufbuild/protobuf@1.10.0)(@harmoniclabs/bytestring@1.0.0)(@harmoniclabs/cbor@1.5.0)(@harmoniclabs/crypto@0.2.4)(@harmoniclabs/pair@1.0.0)(fast-check@3.23.1)':
dependencies:
'@lucid-evolution/core-types': 0.1.21
'@lucid-evolution/core-utils': 0.1.16
'@lucid-evolution/lucid': 0.4.6(@harmoniclabs/bytestring@1.0.0)(@harmoniclabs/cbor@1.5.0)(@harmoniclabs/crypto@0.2.4)(@harmoniclabs/pair@1.0.0)(fast-check@3.23.1)
'@lucid-evolution/plutus': 0.1.28
'@lucid-evolution/provider': 0.1.74(@harmoniclabs/bytestring@1.0.0)(@harmoniclabs/cbor@1.5.0)(@harmoniclabs/crypto@0.2.4)(@harmoniclabs/pair@1.0.0)
'@lucid-evolution/sign_data': 0.1.24
'@lucid-evolution/utils': 0.1.56(@harmoniclabs/bytestring@1.0.0)(@harmoniclabs/cbor@1.5.0)(@harmoniclabs/crypto@0.2.4)(@harmoniclabs/pair@1.0.0)
'@lucid-evolution/wallet': 0.1.62(@harmoniclabs/bytestring@1.0.0)(@harmoniclabs/cbor@1.5.0)(@harmoniclabs/crypto@0.2.4)(@harmoniclabs/pair@1.0.0)
'@utxorpc/sdk': 0.6.4(@bufbuild/protobuf@1.10.0)
'@utxorpc/spec': 0.10.1
transitivePeerDependencies:
- '@bufbuild/protobuf'
- '@harmoniclabs/bytestring'
- '@harmoniclabs/cbor'
- '@harmoniclabs/crypto'
- '@harmoniclabs/pair'
- fast-check
'@utxorpc/sdk@0.6.4(@bufbuild/protobuf@1.10.0)':
dependencies:
'@connectrpc/connect': 1.4.0(@bufbuild/protobuf@1.10.0)
'@connectrpc/connect-node': 1.4.0(@bufbuild/protobuf@1.10.0)(@connectrpc/connect@1.4.0(@bufbuild/protobuf@1.10.0))
'@connectrpc/connect-web': 1.4.0(@bufbuild/protobuf@1.10.0)(@connectrpc/connect@1.4.0(@bufbuild/protobuf@1.10.0))
'@types/node': 20.14.10
'@utxorpc/spec': 0.12.0
buffer: 6.0.3
transitivePeerDependencies:
- '@bufbuild/protobuf'
'@utxorpc/spec@0.10.1':
dependencies:
'@bufbuild/protobuf': 1.10.0
'@utxorpc/spec@0.12.0':
dependencies:
'@bufbuild/protobuf': 1.10.0
acorn-jsx@5.3.2(acorn@8.14.0):
dependencies:
acorn: 8.14.0
@ -2666,8 +2554,6 @@ snapshots:
balanced-match@1.0.2: {}
base64-js@1.5.1: {}
bech32@2.0.0: {}
binary-extensions@2.3.0: {}
@ -2696,11 +2582,6 @@ snapshots:
node-releases: 2.0.18
update-browserslist-db: 1.1.1(browserslist@4.24.2)
buffer@6.0.3:
dependencies:
base64-js: 1.5.1
ieee754: 1.2.1
callsites@3.1.0: {}
camelcase-css@2.0.1: {}
@ -3030,8 +2911,6 @@ snapshots:
dependencies:
function-bind: 1.1.2
ieee754@1.2.1: {}
ignore@5.3.2: {}
import-fresh@3.3.0:
@ -3521,11 +3400,8 @@ snapshots:
typescript@5.7.2: {}
undici-types@5.26.5: {}
undici@5.28.4:
dependencies:
'@fastify/busboy': 2.1.1
undici-types@5.26.5:
optional: true
update-browserslist-db@1.1.1(browserslist@4.24.2):
dependencies: