diff --git a/api/src/ids.rs b/api/src/ids.rs index e01f9e17..4dc0a91a 100644 --- a/api/src/ids.rs +++ b/api/src/ids.rs @@ -145,9 +145,11 @@ pub enum ScopeNameValidateError { } /// A package name, like 'foo' or 'bar'. The name is not prefixed with an @. -/// The name must be at least 2 character long, and at most 32 characters long. +/// The name must be at least 2 character long, and at most 58 characters long. /// The name must only contain alphanumeric characters and hyphens. /// The name must not start or end with a hyphen. +/// +/// 1 (@) + 20 (scope name) + 1 (/) + 58 (package name) = 80 #[derive(Clone, PartialEq, Eq, Hash)] pub struct PackageName(String); @@ -157,7 +159,7 @@ impl PackageName { return Err(PackageNameValidateError::TooShort); } - if name.len() > 32 { + if name.len() > 58 { return Err(PackageNameValidateError::TooLong); } @@ -270,7 +272,7 @@ pub enum PackageNameValidateError { #[error("package name must be at least 2 characters long")] TooShort, - #[error("package name must be at most 32 characters long")] + #[error("package name must be at most 58 characters long")] TooLong, #[error("package name must contain only lowercase ascii alphanumeric characters and hyphens")] @@ -897,9 +899,10 @@ mod tests { assert!(PackageName::try_from("f").is_err()); assert!(PackageName::try_from("Foo").is_err()); assert!(PackageName::try_from("oooF").is_err()); - assert!( - PackageName::try_from("very-long-name-is-very-very-very-long").is_err() - ); + assert!(PackageName::try_from( + "very-long-name-is-very-very-very-very-very-very-very-very-long" + ) + .is_err()); assert!(PackageName::try_from("foo_bar").is_err()); assert!(PackageName::try_from("-foo").is_err()); assert!(PackageName::try_from("foo-").is_err()); diff --git a/frontend/docs/packages.md b/frontend/docs/packages.md index ea90242d..57cc8d47 100644 --- a/frontend/docs/packages.md +++ b/frontend/docs/packages.md @@ -13,7 +13,7 @@ by an author to the JSR site. Scopes are similar to npm organizations or GitHub accounts. [Learn more about scopes.](/docs/scopes) Packages have a name. Package names are unique within a scope - no two packages -in the same scope can have the same name. Package names must be between 2 and 20 +in the same scope can have the same name. Package names must be between 2 and 58 characters long, and can only contain lowercase letters, numbers, and hyphens. They cannot start with a hyphen. diff --git a/frontend/islands/new.tsx b/frontend/islands/new.tsx index 64b1bfd7..f957abc4 100644 --- a/frontend/islands/new.tsx +++ b/frontend/islands/new.tsx @@ -243,8 +243,8 @@ export function PackageName( if (name.value.startsWith("@")) { return "Enter only the package name, do not include the scope."; } - if (name.value.length > 32) { - return "Package name cannot be longer than 32 characters."; + if (name.value.length > 58) { + return "Package name cannot be longer than 58 characters."; } if (!/^[a-z0-9\-]+$/.test(name.value)) { return "Package name can only contain lowercase letters, numbers, and hyphens.";