From cd95b66fe1716c6c964ca3f4c0fdefd4de32346b Mon Sep 17 00:00:00 2001 From: Elijah Potter Date: Fri, 14 Feb 2025 14:35:38 -0700 Subject: [PATCH 01/16] feat(core): add Automattic-specific rules --- harper-core/dictionary.dict | 2 ++ harper-core/src/linting/lint_group.rs | 2 ++ harper-core/src/linting/mod.rs | 1 + .../proper_noun_capitalization_linters.rs | 22 +++++++++++++++++++ 4 files changed, 27 insertions(+) diff --git a/harper-core/dictionary.dict b/harper-core/dictionary.dict index 3dcca998..c72f82fb 100644 --- a/harper-core/dictionary.dict +++ b/harper-core/dictionary.dict @@ -49928,3 +49928,5 @@ backplane/SM cyberattack/SM RTX/1SM PDP/1SM +Jetpack/M +learnt/4 diff --git a/harper-core/src/linting/lint_group.rs b/harper-core/src/linting/lint_group.rs index 55ca43d0..a7324944 100644 --- a/harper-core/src/linting/lint_group.rs +++ b/harper-core/src/linting/lint_group.rs @@ -55,6 +55,7 @@ use super::pique_interest::PiqueInterest; use super::plural_conjugate::PluralConjugate; use super::possessive_your::PossessiveYour; use super::pronoun_contraction::PronounContraction; +use super::proper_noun_capitalization_linters::AutomatticNames; use super::proper_noun_capitalization_linters::{ AmazonNames, Americas, AppleNames, Australia, AzureNames, Canada, ChineseCommunistParty, GoogleNames, Holidays, Koreas, Malaysia, MetaNames, MicrosoftNames, UnitedOrganizations, @@ -195,6 +196,7 @@ macro_rules! create_lint_group_config { } create_lint_group_config!( + AutomatticNames => true, OutOfDate => true, Desktop => true, Laptop => true, diff --git a/harper-core/src/linting/mod.rs b/harper-core/src/linting/mod.rs index 05f2be2c..840a1a87 100644 --- a/harper-core/src/linting/mod.rs +++ b/harper-core/src/linting/mod.rs @@ -117,6 +117,7 @@ pub use pique_interest::PiqueInterest; pub use plural_conjugate::PluralConjugate; pub use possessive_your::PossessiveYour; pub use pronoun_contraction::PronounContraction; +pub use proper_noun_capitalization_linters::AutomatticNames; pub use proper_noun_capitalization_linters::{ AmazonNames, Americas, AppleNames, Australia, AzureNames, Canada, ChineseCommunistParty, GoogleNames, Holidays, Koreas, Malaysia, MetaNames, MicrosoftNames, UnitedOrganizations, diff --git a/harper-core/src/linting/proper_noun_capitalization_linters.rs b/harper-core/src/linting/proper_noun_capitalization_linters.rs index 2424d57f..69bd69b1 100644 --- a/harper-core/src/linting/proper_noun_capitalization_linters.rs +++ b/harper-core/src/linting/proper_noun_capitalization_linters.rs @@ -684,6 +684,28 @@ create_linter_for!( "When referring to Meta products and services, make sure to treat them as proper nouns." ); +create_linter_for!( + AutomatticNames, + SequencePattern::default() + .t_aco("Automattic") + .then_whitespace() + .then(Box::new(EitherPattern::new(vec![Box::new(WordSet::all( + &[ + "WordPress", + "WooCommerce", + "Jetpack", + "Tumblr", + "Akismet", + "Simplenote", + "Longreads", + "VaultPress", + "Gravatar", + "Crowdsignal", + ] + ))]))), + "When referring to Automattic products and services, make sure to treat them as proper nouns." +); + #[cfg(test)] mod tests { use crate::linting::tests::{assert_lint_count, assert_suggestion_result}; From 14f3fdcc1c20e61ab4ccfe57acb1a73d4b5493f1 Mon Sep 17 00:00:00 2001 From: Elijah Potter Date: Fri, 14 Feb 2025 15:04:48 -0700 Subject: [PATCH 02/16] feat(core): create individual linters for specific products --- harper-core/dictionary.dict | 8 ++ harper-core/src/linting/lint_group.rs | 8 +- harper-core/src/linting/mod.rs | 4 +- .../proper_noun_capitalization_linters.rs | 123 +++++++++++++++--- 4 files changed, 123 insertions(+), 20 deletions(-) diff --git a/harper-core/dictionary.dict b/harper-core/dictionary.dict index c72f82fb..02cabec8 100644 --- a/harper-core/dictionary.dict +++ b/harper-core/dictionary.dict @@ -49930,3 +49930,11 @@ RTX/1SM PDP/1SM Jetpack/M learnt/4 +WooCommerce/M +Tumblr/M +Akismet/M +Simplenote/M +Longreads/M +VaultPress/M +Gravatar/M +Crowdsignal/M diff --git a/harper-core/src/linting/lint_group.rs b/harper-core/src/linting/lint_group.rs index a7324944..e959e5b2 100644 --- a/harper-core/src/linting/lint_group.rs +++ b/harper-core/src/linting/lint_group.rs @@ -55,7 +55,9 @@ use super::pique_interest::PiqueInterest; use super::plural_conjugate::PluralConjugate; use super::possessive_your::PossessiveYour; use super::pronoun_contraction::PronounContraction; -use super::proper_noun_capitalization_linters::AutomatticNames; +use super::proper_noun_capitalization_linters::JetpackNames; +use super::proper_noun_capitalization_linters::PocketCastsNames; +use super::proper_noun_capitalization_linters::TumblrNames; use super::proper_noun_capitalization_linters::{ AmazonNames, Americas, AppleNames, Australia, AzureNames, Canada, ChineseCommunistParty, GoogleNames, Holidays, Koreas, Malaysia, MetaNames, MicrosoftNames, UnitedOrganizations, @@ -196,7 +198,9 @@ macro_rules! create_lint_group_config { } create_lint_group_config!( - AutomatticNames => true, + PocketCastsNames => true, + TumblrNames => true, + JetpackNames => true, OutOfDate => true, Desktop => true, Laptop => true, diff --git a/harper-core/src/linting/mod.rs b/harper-core/src/linting/mod.rs index 840a1a87..243af2a7 100644 --- a/harper-core/src/linting/mod.rs +++ b/harper-core/src/linting/mod.rs @@ -117,7 +117,9 @@ pub use pique_interest::PiqueInterest; pub use plural_conjugate::PluralConjugate; pub use possessive_your::PossessiveYour; pub use pronoun_contraction::PronounContraction; -pub use proper_noun_capitalization_linters::AutomatticNames; +pub use proper_noun_capitalization_linters::JetpackNames; +pub use proper_noun_capitalization_linters::PocketCastsNames; +pub use proper_noun_capitalization_linters::TumblrNames; pub use proper_noun_capitalization_linters::{ AmazonNames, Americas, AppleNames, Australia, AzureNames, Canada, ChineseCommunistParty, GoogleNames, Holidays, Koreas, Malaysia, MetaNames, MicrosoftNames, UnitedOrganizations, diff --git a/harper-core/src/linting/proper_noun_capitalization_linters.rs b/harper-core/src/linting/proper_noun_capitalization_linters.rs index 69bd69b1..aaf7916d 100644 --- a/harper-core/src/linting/proper_noun_capitalization_linters.rs +++ b/harper-core/src/linting/proper_noun_capitalization_linters.rs @@ -685,25 +685,114 @@ create_linter_for!( ); create_linter_for!( - AutomatticNames, + JetpackNames, SequencePattern::default() - .t_aco("Automattic") + .t_aco("Jetpack") .then_whitespace() - .then(Box::new(EitherPattern::new(vec![Box::new(WordSet::all( - &[ - "WordPress", - "WooCommerce", - "Jetpack", - "Tumblr", - "Akismet", - "Simplenote", - "Longreads", - "VaultPress", - "Gravatar", - "Crowdsignal", - ] - ))]))), - "When referring to Automattic products and services, make sure to treat them as proper nouns." + .then(Box::new(EitherPattern::new(vec![ + Box::new(SequencePattern::default() + .t_aco("VaultPress") + .then_whitespace() + .t_aco("Backup") + ), + Box::new(SequencePattern::default() + .t_aco("VaultPress") + ), + Box::new(SequencePattern::default() + .t_aco("Scan") + ), + Box::new(SequencePattern::default() + .t_aco("Akismet") + .then_whitespace() + .t_aco("Anti-spam") + ), + Box::new(SequencePattern::default() + .t_aco("Stats") + ), + Box::new(SequencePattern::default() + .t_aco("Social") + ), + Box::new(SequencePattern::default() + .t_aco("Blaze") + ), + Box::new(SequencePattern::default() + .t_aco("AI") + .then_whitespace() + .t_aco("Assistant") + ), + Box::new(SequencePattern::default() + .t_aco("Site") + .then_whitespace() + .t_aco("Search") + ), + Box::new(SequencePattern::default() + .t_aco("Boost") + ), + Box::new(SequencePattern::default() + .t_aco("VideoPress") + ), + Box::new(SequencePattern::default() + .t_aco("For") + .then_whitespace() + .t_aco("Agencies") + ), + Box::new(SequencePattern::default() + .t_aco("CRM") + ), + ]))), + "Ensure proper capitalization of Jetpack-related terms, including products and features such as Jetpack VaultPress Backup, Jetpack Blaze, and Jetpack AI Assistant." +); + +create_linter_for!( + TumblrNames, + SequencePattern::default() + .t_aco("Tumblr") + .then_whitespace() + .then(Box::new(EitherPattern::new(vec![ + Box::new(SequencePattern::default() + .t_aco("Blaze") + ), + Box::new(SequencePattern::default() + .t_aco("Pro") + ), + Box::new(SequencePattern::default() + .t_aco("Live") + ), + Box::new(SequencePattern::default() + .t_aco("Ads") + ), + Box::new(SequencePattern::default() + .t_aco("Communities") + ), + Box::new(SequencePattern::default() + .t_aco("Shop") + ), + Box::new(SequencePattern::default() + .t_aco("Dashboard") + ) + ]))), + "Ensure proper capitalization of Tumblr-related terms, including products and features such as Tumblr Blaze, Tumblr Post+, and Tumblr Communities." +); + +create_linter_for!( + PocketCastsNames, + EitherPattern::new(vec![ + Box::new( + SequencePattern::default() + .t_aco("Pocket") + .then_whitespace() + .t_aco("Casts") + ), + Box::new( + SequencePattern::default() + .t_aco("Pocket") + .then_whitespace() + .t_aco("Casts") + .then_whitespace() + .t_aco("Plus") + ) + ]), + "Ensure proper capitalization of Pocket Casts and Pocket Casts Plus as brand names." ); #[cfg(test)] From 5d1ac5e918c476d0ace9a1dbcd77762351e457fd Mon Sep 17 00:00:00 2001 From: Elijah Potter Date: Fri, 14 Feb 2025 15:06:17 -0700 Subject: [PATCH 03/16] feat(core): add Day One --- harper-core/src/linting/lint_group.rs | 2 ++ harper-core/src/linting/mod.rs | 1 + .../proper_noun_capitalization_linters.rs | 21 +++++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/harper-core/src/linting/lint_group.rs b/harper-core/src/linting/lint_group.rs index e959e5b2..32e847dc 100644 --- a/harper-core/src/linting/lint_group.rs +++ b/harper-core/src/linting/lint_group.rs @@ -55,6 +55,7 @@ use super::pique_interest::PiqueInterest; use super::plural_conjugate::PluralConjugate; use super::possessive_your::PossessiveYour; use super::pronoun_contraction::PronounContraction; +use super::proper_noun_capitalization_linters::DayOneNames; use super::proper_noun_capitalization_linters::JetpackNames; use super::proper_noun_capitalization_linters::PocketCastsNames; use super::proper_noun_capitalization_linters::TumblrNames; @@ -198,6 +199,7 @@ macro_rules! create_lint_group_config { } create_lint_group_config!( + DayOneNames => true, PocketCastsNames => true, TumblrNames => true, JetpackNames => true, diff --git a/harper-core/src/linting/mod.rs b/harper-core/src/linting/mod.rs index 243af2a7..4c25f1d8 100644 --- a/harper-core/src/linting/mod.rs +++ b/harper-core/src/linting/mod.rs @@ -117,6 +117,7 @@ pub use pique_interest::PiqueInterest; pub use plural_conjugate::PluralConjugate; pub use possessive_your::PossessiveYour; pub use pronoun_contraction::PronounContraction; +pub use proper_noun_capitalization_linters::DayOneNames; pub use proper_noun_capitalization_linters::JetpackNames; pub use proper_noun_capitalization_linters::PocketCastsNames; pub use proper_noun_capitalization_linters::TumblrNames; diff --git a/harper-core/src/linting/proper_noun_capitalization_linters.rs b/harper-core/src/linting/proper_noun_capitalization_linters.rs index aaf7916d..ce539bff 100644 --- a/harper-core/src/linting/proper_noun_capitalization_linters.rs +++ b/harper-core/src/linting/proper_noun_capitalization_linters.rs @@ -795,6 +795,27 @@ create_linter_for!( "Ensure proper capitalization of Pocket Casts and Pocket Casts Plus as brand names." ); +create_linter_for!( + DayOneNames, + EitherPattern::new(vec![ + Box::new( + SequencePattern::default() + .t_aco("Day") + .then_whitespace() + .t_aco("One") + ), + Box::new( + SequencePattern::default() + .t_aco("Day") + .then_whitespace() + .t_aco("One") + .then_whitespace() + .t_aco("Premium") + ) + ]), + "Ensure proper capitalization of Day One and Day One Premium as brand names." +); + #[cfg(test)] mod tests { use crate::linting::tests::{assert_lint_count, assert_suggestion_result}; From f8083204e2fb1c84db6201426609422ee3363e86 Mon Sep 17 00:00:00 2001 From: b-sharman Date: Sat, 15 Feb 2025 21:05:37 -0700 Subject: [PATCH 04/16] fix(core): possesive -> possessive typo in lint message --- harper-core/src/linting/possessive_your.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/harper-core/src/linting/possessive_your.rs b/harper-core/src/linting/possessive_your.rs index a9d6e2cd..7d4f195e 100644 --- a/harper-core/src/linting/possessive_your.rs +++ b/harper-core/src/linting/possessive_your.rs @@ -39,7 +39,7 @@ impl PatternLinter for PossessiveYour { Suggestion::replace_with_match_case("your".chars().collect(), orig_chars), Suggestion::replace_with_match_case("you're an".chars().collect(), orig_chars), ], - message: "The possesive version of this word is more common in this context." + message: "The possessive version of this word is more common in this context." .to_owned(), ..Default::default() } From 703aed835a2f27dbe5955aee1447c25f66ea4c5d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Feb 2025 01:44:21 +0000 Subject: [PATCH 05/16] build(deps): bump smallvec from 1.13.2 to 1.14.0 Bumps [smallvec](https://github.com/servo/rust-smallvec) from 1.13.2 to 1.14.0. - [Release notes](https://github.com/servo/rust-smallvec/releases) - [Commits](https://github.com/servo/rust-smallvec/compare/v1.13.2...v1.14.0) --- updated-dependencies: - dependency-name: smallvec dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Cargo.lock | 4 ++-- harper-core/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e73b52b6..46f58731 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1564,9 +1564,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.13.2" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" dependencies = [ "serde", ] diff --git a/harper-core/Cargo.toml b/harper-core/Cargo.toml index fc26cdd6..5d17b15c 100644 --- a/harper-core/Cargo.toml +++ b/harper-core/Cargo.toml @@ -19,7 +19,7 @@ paste = "1.0.14" pulldown-cmark = "0.12.2" serde = { version = "1.0.214", features = ["derive"] } serde_json = "1.0.138" -smallvec = { version = "1.13.2", features = ["serde"] } +smallvec = { version = "1.14.0", features = ["serde"] } thiserror = "2.0.11" unicode-blocks = "0.1.9" unicode-script = "0.5.7" From fb801d652da0bfa87489a63c2812e2e625b0b61c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Feb 2025 01:44:36 +0000 Subject: [PATCH 06/16] build(deps): bump clap from 4.5.28 to 4.5.29 Bumps [clap](https://github.com/clap-rs/clap) from 4.5.28 to 4.5.29. - [Release notes](https://github.com/clap-rs/clap/releases) - [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md) - [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.28...clap_complete-v4.5.29) --- updated-dependencies: - dependency-name: clap dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Cargo.lock | 8 ++++---- harper-cli/Cargo.toml | 2 +- harper-ls/Cargo.toml | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e73b52b6..a2cd1b25 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -235,9 +235,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.28" +version = "4.5.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e77c3243bd94243c03672cb5154667347c457ca271254724f9f393aee1c05ff" +checksum = "8acebd8ad879283633b343856142139f2da2317c96b05b4dd6181c61e2480184" dependencies = [ "clap_builder", "clap_derive", @@ -245,9 +245,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.27" +version = "4.5.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b26884eb4b57140e4d2d93652abfa49498b938b3c9179f9fc487b0acc3edad7" +checksum = "f6ba32cbda51c7e1dfd49acc1457ba1a7dec5b64fe360e828acb13ca8dc9c2f9" dependencies = [ "anstream", "anstyle", diff --git a/harper-cli/Cargo.toml b/harper-cli/Cargo.toml index 2746937b..d6baf291 100644 --- a/harper-cli/Cargo.toml +++ b/harper-cli/Cargo.toml @@ -9,7 +9,7 @@ repository = "https://github.com/automattic/harper" [dependencies] anyhow = "1.0.95" ariadne = "0.4.1" -clap = { version = "4.5.28", features = ["derive"] } +clap = { version = "4.5.29", features = ["derive"] } harper-literate-haskell = { path = "../harper-literate-haskell", version = "0.21.0" } harper-core = { path = "../harper-core", version = "0.21.0" } harper-comments = { path = "../harper-comments", version = "0.21.0" } diff --git a/harper-ls/Cargo.toml b/harper-ls/Cargo.toml index ff92500b..1fe0d3de 100644 --- a/harper-ls/Cargo.toml +++ b/harper-ls/Cargo.toml @@ -15,7 +15,7 @@ harper-typst = { path = "../harper-typst", version = "0.21.0" } harper-html = { path = "../harper-html", version = "0.21.0" } tower-lsp = "0.20.0" tokio = { version = "1.43.0", features = ["fs", "rt", "rt-multi-thread", "macros", "io-std", "io-util", "net"] } -clap = { version = "4.5.28", features = ["derive"] } +clap = { version = "4.5.29", features = ["derive"] } once_cell = "1.20.3" dirs = "6.0.0" anyhow = "1.0.95" From e24415c63302e09c7beefd57102c0e33fe536ab1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Feb 2025 01:55:15 +0000 Subject: [PATCH 07/16] build(deps-dev): bump jasmine and @types/jasmine in /packages Bumps [jasmine](https://github.com/jasmine/jasmine-npm) and [@types/jasmine](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jasmine). These dependencies needed to be updated together. Updates `jasmine` from 5.5.0 to 5.6.0 - [Release notes](https://github.com/jasmine/jasmine-npm/releases) - [Changelog](https://github.com/jasmine/jasmine-npm/blob/main/RELEASE.md) - [Commits](https://github.com/jasmine/jasmine-npm/compare/v5.5.0...v5.6.0) Updates `@types/jasmine` from 5.1.5 to 5.1.6 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jasmine) --- updated-dependencies: - dependency-name: jasmine dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: "@types/jasmine" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- packages/vscode-plugin/package.json | 4 ++-- packages/yarn.lock | 28 ++++++++++++++-------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/vscode-plugin/package.json b/packages/vscode-plugin/package.json index cd7c12ac..c687ad07 100644 --- a/packages/vscode-plugin/package.json +++ b/packages/vscode-plugin/package.json @@ -916,7 +916,7 @@ "lint": "eslint src --ext ts" }, "devDependencies": { - "@types/jasmine": "^5.1.4", + "@types/jasmine": "^5.1.6", "@types/node": "22.x", "@types/vscode": "^1.89.0", "@typescript-eslint/eslint-plugin": "^7.7.1", @@ -925,7 +925,7 @@ "@vscode/vsce": "^3.0.0", "esbuild": "^0.25.0", "eslint": "^8.57.0", - "jasmine": "^5.3.0", + "jasmine": "^5.6.0", "typescript": "^5.7.3" }, "dependencies": { diff --git a/packages/yarn.lock b/packages/yarn.lock index 9a4445f3..51dc8cb1 100644 --- a/packages/yarn.lock +++ b/packages/yarn.lock @@ -2499,10 +2499,10 @@ dependencies: "@types/unist" "*" -"@types/jasmine@^5.1.4": - version "5.1.5" - resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-5.1.5.tgz#bba343c504f48e596837415f0558e10b8a0e5f7d" - integrity sha512-SaCZ3kM5NjOiJqMRYwHpLbTfUC2Dyk1KS3QanNFsUYPGTk70CWVK/J9ueun6zNhw/UkgV7xl8V4ZLQZNRbfnNw== +"@types/jasmine@^5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-5.1.6.tgz#43400819398c1c13cbfa9716419128bd0b18fc52" + integrity sha512-JDwKwipGFDwf021BtRTuluYe1aMDNimtO72ygPrVXnZSC8Df2V22AHeIgGa84tbF4SLkRvN+dJnlV8aMwQjkVw== "@types/mdast@^4.0.0", "@types/mdast@^4.0.2": version "4.0.4" @@ -5131,7 +5131,7 @@ gzip-size@^6.0.0: duplexer "^0.1.2" "harper.js@link:harper.js": - version "0.19.1" + version "0.21.1" has-bigints@^1.0.2: version "1.1.0" @@ -5686,18 +5686,18 @@ jake@^10.8.5: filelist "^1.0.4" minimatch "^3.1.2" -jasmine-core@~5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-5.5.0.tgz#43564e4b41f73a37cff3aeb262e23bbd073576d8" - integrity sha512-NHOvoPO6o9gVR6pwqEACTEpbgcH+JJ6QDypyymGbSUIFIFsMMbBJ/xsFNud8MSClfnWclXd7RQlAZBz7yVo5TQ== +jasmine-core@~5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-5.6.0.tgz#4b979c254e7d9b1fe8e767ab00c5d2901c00bd4f" + integrity sha512-niVlkeYVRwKFpmfWg6suo6H9CrNnydfBLEqefM5UjibYS+UoTjZdmvPJSiuyrRLGnFj1eYRhFd/ch+5hSlsFVA== -jasmine@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-5.5.0.tgz#dbcb7a59a3ce88d475cc6e9341db92b8a8bb7974" - integrity sha512-JKlEVCVD5QBPYLsg/VE+IUtjyseDCrW8rMBu8la+9ysYashDgavMLM9Kotls1FhI6dCJLJ40dBCIfQjGLPZI1Q== +jasmine@^5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-5.6.0.tgz#83be3acf8dd44ad365d15f01c13c019a5e9c01cc" + integrity sha512-6frlW22jhgRjtlp68QY/DDVCUfrYqmSxDBWM13mrBzYQGx1XITfVcJltnY15bk8B5cRfN5IpKvemkDiDTSRCsA== dependencies: glob "^10.2.2" - jasmine-core "~5.5.0" + jasmine-core "~5.6.0" "jiti-v1@npm:jiti@^1.21.6": version "1.21.7" From a8fcf943bc0d92f780722fa40d123b42aeb8a1ce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Feb 2025 01:55:25 +0000 Subject: [PATCH 08/16] build(deps-dev): bump flowbite from 3.1.1 to 3.1.2 in /packages Bumps [flowbite](https://github.com/themesberg/flowbite) from 3.1.1 to 3.1.2. - [Release notes](https://github.com/themesberg/flowbite/releases) - [Commits](https://github.com/themesberg/flowbite/compare/v3.1.1...v3.1.2) --- updated-dependencies: - dependency-name: flowbite dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- packages/web/package.json | 2 +- packages/yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/web/package.json b/packages/web/package.json index d0c9cf69..fd268dd1 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -16,7 +16,7 @@ "@sveltejs/vite-plugin-svelte": "^5.0.3", "@types/reveal.js": "^5.0.3", "autoprefixer": "^10.4.16", - "flowbite": "^3.0.0", + "flowbite": "^3.1.2", "flowbite-svelte": "^0.44.18", "postcss": "^8.4.31", "svelte": "^5.15.0", diff --git a/packages/yarn.lock b/packages/yarn.lock index 9a4445f3..f7625a42 100644 --- a/packages/yarn.lock +++ b/packages/yarn.lock @@ -4840,10 +4840,10 @@ flowbite@^2.0.0, flowbite@^2.3.0: flowbite-datepicker "^1.3.0" mini-svg-data-uri "^1.4.3" -flowbite@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/flowbite/-/flowbite-3.1.1.tgz#464338a50500e152dddcbc99a053f97e66a592ad" - integrity sha512-ZYj519lS7Ls+ek6jOi12JRJytDtwekJdnwSjDXhiS8G+k2j3X8HfFOGtbdrYey6h2+z/seEDSqsSjDca/wClxw== +flowbite@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/flowbite/-/flowbite-3.1.2.tgz#a3223462b608119e8388af6579d05642e553a5db" + integrity sha512-MkwSgbbybCYgMC+go6Da5idEKUFfMqc/AmSjm/2ZbdmvoKf5frLPq/eIhXc9P+rC8t9boZtUXzHDgt5whZ6A/Q== dependencies: "@popperjs/core" "^2.9.3" flowbite-datepicker "^1.3.1" @@ -5131,7 +5131,7 @@ gzip-size@^6.0.0: duplexer "^0.1.2" "harper.js@link:harper.js": - version "0.19.1" + version "0.21.1" has-bigints@^1.0.2: version "1.1.0" From e6c26a1d750b6e0930ce07509629658dc33076e6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Feb 2025 01:55:33 +0000 Subject: [PATCH 09/16] build(deps-dev): bump @types/node from 22.13.1 to 22.13.4 in /packages Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.13.1 to 22.13.4. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- packages/yarn.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/yarn.lock b/packages/yarn.lock index 9a4445f3..059f3807 100644 --- a/packages/yarn.lock +++ b/packages/yarn.lock @@ -2517,9 +2517,9 @@ integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== "@types/node@22.x": - version "22.13.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.1.tgz#a2a3fefbdeb7ba6b89f40371842162fac0934f33" - integrity sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew== + version "22.13.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.4.tgz#3fe454d77cd4a2d73c214008b3e331bfaaf5038a" + integrity sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg== dependencies: undici-types "~6.20.0" @@ -5131,7 +5131,7 @@ gzip-size@^6.0.0: duplexer "^0.1.2" "harper.js@link:harper.js": - version "0.19.1" + version "0.21.1" has-bigints@^1.0.2: version "1.1.0" From 0d09d97e6d0169d18fdfcd3ba1eb2f44d61c45be Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Feb 2025 01:55:47 +0000 Subject: [PATCH 10/16] build(deps-dev): bump vite-plugin-top-level-await in /packages Bumps [vite-plugin-top-level-await](https://github.com/Menci/vite-plugin-top-level-await) from 1.4.4 to 1.5.0. - [Commits](https://github.com/Menci/vite-plugin-top-level-await/compare/v1.4.4...v1.5.0) --- updated-dependencies: - dependency-name: vite-plugin-top-level-await dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- packages/web/package.json | 2 +- packages/yarn.lock | 140 +++++++++++++++++++------------------- 2 files changed, 71 insertions(+), 71 deletions(-) diff --git a/packages/web/package.json b/packages/web/package.json index d0c9cf69..55193f7c 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -26,7 +26,7 @@ "typescript": "^5.7.3", "vite": "^6.0.9", "vite-plugin-pwa": "^0.21.1", - "vite-plugin-top-level-await": "^1.4.4", + "vite-plugin-top-level-await": "^1.5.0", "vite-plugin-wasm": "^3.3.0" }, "type": "module", diff --git a/packages/yarn.lock b/packages/yarn.lock index 9a4445f3..83b42503 100644 --- a/packages/yarn.lock +++ b/packages/yarn.lock @@ -2353,74 +2353,74 @@ vite-plugin-inspect "^0.8.3" yaml "^2.4.0" -"@swc/core-darwin-arm64@1.10.12": - version "1.10.12" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.10.12.tgz#ed317cd6aac5a66f529c0cbd8385761e2eccecc6" - integrity sha512-pOANQegUTAriW7jq3SSMZGM5l89yLVMs48R0F2UG6UZsH04SiViCnDctOGlA/Sa++25C+rL9MGMYM1jDLylBbg== - -"@swc/core-darwin-x64@1.10.12": - version "1.10.12" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.10.12.tgz#59e249f40852231232b80f6a4caea2a223e9682e" - integrity sha512-m4kbpIDDsN1FrwfNQMU+FTrss356xsXvatLbearwR+V0lqOkjLBP0VmRvQfHEg+uy13VPyrT9gj4HLoztlci7w== - -"@swc/core-linux-arm-gnueabihf@1.10.12": - version "1.10.12" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.10.12.tgz#5c2066a6ad8b768adc473e300995f909ce96cbbd" - integrity sha512-OY9LcupgqEu8zVK+rJPes6LDJJwPDmwaShU96beTaxX2K6VrXbpwm5WbPS/8FfQTsmpnuA7dCcMPUKhNgmzTrQ== - -"@swc/core-linux-arm64-gnu@1.10.12": - version "1.10.12" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.10.12.tgz#7a8e6212617365c41a7b6e015cd2749d222c1ebe" - integrity sha512-nJD587rO0N4y4VZszz3xzVr7JIiCzSMhEMWnPjuh+xmPxDBz0Qccpr8xCr1cSxpl1uY7ERkqAGlKr6CwoV5kVg== - -"@swc/core-linux-arm64-musl@1.10.12": - version "1.10.12" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.10.12.tgz#c939d554ecb32df65b4a784fc586f30c8ae7be0a" - integrity sha512-oqhSmV+XauSf0C//MoQnVErNUB/5OzmSiUzuazyLsD5pwqKNN+leC3JtRQ/QVzaCpr65jv9bKexT9+I2Tt3xDw== - -"@swc/core-linux-x64-gnu@1.10.12": - version "1.10.12" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.10.12.tgz#745bc25de364bbde3b6240ed84d063379dc52c6c" - integrity sha512-XldSIHyjD7m1Gh+/8rxV3Ok711ENLI420CU2EGEqSe3VSGZ7pHJvJn9ZFbYpWhsLxPqBYMFjp3Qw+J6OXCPXCA== - -"@swc/core-linux-x64-musl@1.10.12": - version "1.10.12" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.10.12.tgz#188855ee612a482eb8c298b2237e0b36962182a7" - integrity sha512-wvPXzJxzPgTqhyp1UskOx1hRTtdWxlyFD1cGWOxgLsMik0V9xKRgqKnMPv16Nk7L9xl6quQ6DuUHj9ID7L3oVw== - -"@swc/core-win32-arm64-msvc@1.10.12": - version "1.10.12" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.10.12.tgz#3f8271b8a42ef29b53574705a6cd0427345cc616" - integrity sha512-TUYzWuu1O7uyIcRfxdm6Wh1u+gNnrW5M1DUgDOGZLsyQzgc2Zjwfh2llLhuAIilvCVg5QiGbJlpibRYJ/8QGsg== - -"@swc/core-win32-ia32-msvc@1.10.12": - version "1.10.12" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.10.12.tgz#b7f59376870039f6a7ecc5331b4287f0fa82b182" - integrity sha512-4Qrw+0Xt+Fe2rz4OJ/dEPMeUf/rtuFWWAj/e0vL7J5laUHirzxawLRE5DCJLQTarOiYR6mWnmadt9o3EKzV6Xg== - -"@swc/core-win32-x64-msvc@1.10.12": - version "1.10.12" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.10.12.tgz#e053b1efc2bf24b0da1a1fa6a5ea6e1bda36df76" - integrity sha512-YiloZXLW7rUxJpALwHXaGjVaAEn+ChoblG7/3esque+Y7QCyheoBUJp2DVM1EeVA43jBfZ8tvYF0liWd9Tpz1A== - -"@swc/core@^1.7.0": - version "1.10.12" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.10.12.tgz#6d002050814888ec72a8d439ca7194a4631ce199" - integrity sha512-+iUL0PYpPm6N9AdV1wvafakvCqFegQus1aoEDxgFsv3/uNVNIyRaupf/v/Zkp5hbep2EzhtoJR0aiJIzDbXWHg== +"@swc/core-darwin-arm64@1.10.16": + version "1.10.16" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.10.16.tgz#2aa09f2bcea4cfdaac67673b4661fca1e5422dc2" + integrity sha512-iikIxwqCQ4Bvz79vJ4ELh26efPf1u5D9TFdmXSJUBs7C3mmMHvk5zyWD9A9cTowXiW6WHs2gE58U1R9HOTTIcg== + +"@swc/core-darwin-x64@1.10.16": + version "1.10.16" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.10.16.tgz#fbcd585956e381e2eb7fe395d6205d1dea6e0847" + integrity sha512-R2Eb9aktWd62vPfW9H/c/OaQ0e94iURibBo4uzUUcgxNNmB4+wb6piKbHxGdr/5bEsT+vJ1lwZFSRzfb45E7DA== + +"@swc/core-linux-arm-gnueabihf@1.10.16": + version "1.10.16" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.10.16.tgz#249cad76197ff6ac68dd1ae189996d88b8f8809b" + integrity sha512-mkqN3HBAMnuiSGZ/k2utScuH8rAPshvNj0T1LjBWon+X9DkMNHSA+aMLdWsy0yZKF1zjOPc4L3Uq2l2wzhUlzA== + +"@swc/core-linux-arm64-gnu@1.10.16": + version "1.10.16" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.10.16.tgz#5d9ce61a1f0ef220fa6b073282563ac287393005" + integrity sha512-PH/+q/L5nVZJ91CU07CL6Q9Whs6iR6nneMZMAgtVF9Ix8ST0cWVItdUhs6D38kFklCFhaOrpHhS01HlMJ72vWw== + +"@swc/core-linux-arm64-musl@1.10.16": + version "1.10.16" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.10.16.tgz#99798b7dbe8ce35c7410d4d5f741362517bfd9c9" + integrity sha512-1169+C9XbydKKc6Ec1XZxTGKtHjZHDIFn0r+Nqp/QSVwkORrOY1Vz2Hdu7tn/lWMg36ZkGePS+LnnyV67s/7yg== + +"@swc/core-linux-x64-gnu@1.10.16": + version "1.10.16" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.10.16.tgz#ad3bdb5ca57d99b479912b496bcd6510616e9a11" + integrity sha512-n2rV0XwkjoHn4MDJmpYp5RBrnyi94/6GsJVpbn6f+/eqSrZn3mh3dT7pdZc9zCN1Qp9eDHo+uI6e/wgvbL22uA== + +"@swc/core-linux-x64-musl@1.10.16": + version "1.10.16" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.10.16.tgz#07d92aa670c4873116c5cf54b721e6e09fecc914" + integrity sha512-EevCpwreBrkPrJjQVIbiM81lK42ukNNSlBmrSRxxbx2V9VGmOd5qxX0cJBn0TRRSLIPi62BuMS76F9iYjqsjgg== + +"@swc/core-win32-arm64-msvc@1.10.16": + version "1.10.16" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.10.16.tgz#2a8b13914b79235291a50f252c9ed2736d75d832" + integrity sha512-BvE7RWAnKJeELVQWLok6env5I4GUVBTZSvaSN/VPgxnTjF+4PsTeQptYx0xCYhp5QCv68wWYsBnZKuPDS+SBsw== + +"@swc/core-win32-ia32-msvc@1.10.16": + version "1.10.16" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.10.16.tgz#f3c31df61748cd211e0f5b3f9912360f3ffe5bd6" + integrity sha512-7Jf/7AeCgbLR/JsQgMJuacHIq4Jeie3knf6+mXxn8aCvRypsOTIEu0eh7j24SolOboxK1ijqJ86GyN1VA2Rebg== + +"@swc/core-win32-x64-msvc@1.10.16": + version "1.10.16" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.10.16.tgz#0a7aa33a24cb9f09908e62de06366d28add3e845" + integrity sha512-p0blVm0R8bjaTtmW+FoPmLxLSQdRNbqhuWcR/8g80OzMSkka9mk5/J3kn/5JRVWh+MaR9LHRHZc1Q1L8zan13g== + +"@swc/core@^1.10.16": + version "1.10.16" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.10.16.tgz#ee5e973ee68b51844b52629adfed311c7f23b390" + integrity sha512-nOINg/OUcZazCW7B55QV2/UB8QAqz9FYe4+z229+4RYboBTZ102K7ebOEjY5sKn59JgAkhjZTz+5BKmXpDFopw== dependencies: "@swc/counter" "^0.1.3" "@swc/types" "^0.1.17" optionalDependencies: - "@swc/core-darwin-arm64" "1.10.12" - "@swc/core-darwin-x64" "1.10.12" - "@swc/core-linux-arm-gnueabihf" "1.10.12" - "@swc/core-linux-arm64-gnu" "1.10.12" - "@swc/core-linux-arm64-musl" "1.10.12" - "@swc/core-linux-x64-gnu" "1.10.12" - "@swc/core-linux-x64-musl" "1.10.12" - "@swc/core-win32-arm64-msvc" "1.10.12" - "@swc/core-win32-ia32-msvc" "1.10.12" - "@swc/core-win32-x64-msvc" "1.10.12" + "@swc/core-darwin-arm64" "1.10.16" + "@swc/core-darwin-x64" "1.10.16" + "@swc/core-linux-arm-gnueabihf" "1.10.16" + "@swc/core-linux-arm64-gnu" "1.10.16" + "@swc/core-linux-arm64-musl" "1.10.16" + "@swc/core-linux-x64-gnu" "1.10.16" + "@swc/core-linux-x64-musl" "1.10.16" + "@swc/core-win32-arm64-msvc" "1.10.16" + "@swc/core-win32-ia32-msvc" "1.10.16" + "@swc/core-win32-x64-msvc" "1.10.16" "@swc/counter@^0.1.3": version "0.1.3" @@ -5131,7 +5131,7 @@ gzip-size@^6.0.0: duplexer "^0.1.2" "harper.js@link:harper.js": - version "0.19.1" + version "0.21.1" has-bigints@^1.0.2: version "1.1.0" @@ -9005,13 +9005,13 @@ vite-plugin-pwa@^0.21.1: workbox-build "^7.3.0" workbox-window "^7.3.0" -vite-plugin-top-level-await@^1.4.4: - version "1.4.4" - resolved "https://registry.yarnpkg.com/vite-plugin-top-level-await/-/vite-plugin-top-level-await-1.4.4.tgz#4900e06bfb7179de20aaa9b4730d04022a9e259e" - integrity sha512-QyxQbvcMkgt+kDb12m2P8Ed35Sp6nXP+l8ptGrnHV9zgYDUpraO0CPdlqLSeBqvY2DToR52nutDG7mIHuysdiw== +vite-plugin-top-level-await@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/vite-plugin-top-level-await/-/vite-plugin-top-level-await-1.5.0.tgz#e3f76302921152bf29d1658f169d168f8937e78b" + integrity sha512-r/DtuvHrSqUVk23XpG2cl8gjt1aATMG5cjExXL1BUTcSNab6CzkcPua9BPEc9fuTP5UpwClCxUe3+dNGL0yrgQ== dependencies: "@rollup/plugin-virtual" "^3.0.2" - "@swc/core" "^1.7.0" + "@swc/core" "^1.10.16" uuid "^10.0.0" vite-plugin-virtual@^0.3.0: From a75424208e7e9309bda51b6591a854114410e27e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Feb 2025 01:55:59 +0000 Subject: [PATCH 11/16] build(deps-dev): bump @sveltejs/adapter-node in /packages Bumps [@sveltejs/adapter-node](https://github.com/sveltejs/kit/tree/HEAD/packages/adapter-node) from 3.0.3 to 5.2.12. - [Release notes](https://github.com/sveltejs/kit/releases) - [Changelog](https://github.com/sveltejs/kit/blob/main/packages/adapter-node/CHANGELOG.md) - [Commits](https://github.com/sveltejs/kit/commits/@sveltejs/adapter-node@5.2.12/packages/adapter-node) --- updated-dependencies: - dependency-name: "@sveltejs/adapter-node" dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- packages/web/package.json | 2 +- packages/yarn.lock | 172 ++++++-------------------------------- 2 files changed, 26 insertions(+), 148 deletions(-) diff --git a/packages/web/package.json b/packages/web/package.json index d0c9cf69..29af35ad 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -11,7 +11,7 @@ "start": "node build" }, "devDependencies": { - "@sveltejs/adapter-node": "^3.0.3", + "@sveltejs/adapter-node": "^5.2.12", "@sveltejs/kit": "^2.17.1", "@sveltejs/vite-plugin-svelte": "^5.0.3", "@types/reveal.js": "^5.0.3", diff --git a/packages/yarn.lock b/packages/yarn.lock index 9a4445f3..5c8128fa 100644 --- a/packages/yarn.lock +++ b/packages/yarn.lock @@ -1829,17 +1829,18 @@ "@babel/helper-module-imports" "^7.10.4" "@rollup/pluginutils" "^3.1.0" -"@rollup/plugin-commonjs@^25.0.7": - version "25.0.8" - resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.8.tgz#c77e608ab112a666b7f2a6bea625c73224f7dd34" - integrity sha512-ZEZWTK5n6Qde0to4vS9Mr5x/0UZoqCxPVR9KRUjU4kA2sO7GEUn1fop0DAwpO6z0Nw/kJON9bDmSxdWxO/TT1A== +"@rollup/plugin-commonjs@^28.0.1": + version "28.0.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.2.tgz#193d7a86470f112b56927c1d821ee45951a819ea" + integrity sha512-BEFI2EDqzl+vA1rl97IDRZ61AIwGH093d9nz8+dThxJNH8oSoB7MjWvPCX3dkaK1/RCJ/1v/R1XB15FuSs0fQw== dependencies: "@rollup/pluginutils" "^5.0.1" commondir "^1.0.1" estree-walker "^2.0.2" - glob "^8.0.3" + fdir "^6.2.0" is-reference "1.2.1" magic-string "^0.30.3" + picomatch "^4.0.2" "@rollup/plugin-json@^6.1.0": version "6.1.0" @@ -1859,6 +1860,17 @@ is-module "^1.0.0" resolve "^1.22.1" +"@rollup/plugin-node-resolve@^16.0.0": + version "16.0.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.0.tgz#b1a0594661f40d7b061d82136e847354ff85f211" + integrity sha512-0FPvAeVUT/zdWoO0jnb/V5BlBsUSNfkIOtFHzMO4H9MOklrmQFY6FduVHKucNb/aTFxvnGhj4MNj/T1oNdDfNg== + dependencies: + "@rollup/pluginutils" "^5.0.1" + "@types/resolve" "1.20.2" + deepmerge "^4.2.2" + is-module "^1.0.0" + resolve "^1.22.1" + "@rollup/plugin-replace@^2.4.1": version "2.4.2" resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a" @@ -1914,191 +1926,96 @@ estree-walker "^2.0.2" picomatch "^4.0.2" -"@rollup/rollup-android-arm-eabi@4.34.1": - version "4.34.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.1.tgz#a09cb0718297a2f0cc7f9b4dfca4d08753ea5c9b" - integrity sha512-kwctwVlswSEsr4ljpmxKrRKp1eG1v2NAhlzFzDf1x1OdYaMjBYjDCbHkzWm57ZXzTwqn8stMXgROrnMw8dJK3w== - "@rollup/rollup-android-arm-eabi@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.6.tgz#9b726b4dcafb9332991e9ca49d54bafc71d9d87f" integrity sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg== -"@rollup/rollup-android-arm64@4.34.1": - version "4.34.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.1.tgz#cbb3cad15748794b8dfec7f1e427e633f8f06d61" - integrity sha512-4H5ZtZitBPlbPsTv6HBB8zh1g5d0T8TzCmpndQdqq20Ugle/nroOyDMf9p7f88Gsu8vBLU78/cuh8FYHZqdXxw== - "@rollup/rollup-android-arm64@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.6.tgz#88326ff46168a47851077ca0bf0c442689ec088f" integrity sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA== -"@rollup/rollup-darwin-arm64@4.34.1": - version "4.34.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.1.tgz#7f5127bca8892d0287a53fb17be9c7af32748234" - integrity sha512-f2AJ7Qwx9z25hikXvg+asco8Sfuc5NCLg8rmqQBIOUoWys5sb/ZX9RkMZDPdnnDevXAMJA5AWLnRBmgdXGEUiA== - "@rollup/rollup-darwin-arm64@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.6.tgz#b8fbcc9389bc6fad3334a1d16dbeaaa5637c5772" integrity sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg== -"@rollup/rollup-darwin-x64@4.34.1": - version "4.34.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.1.tgz#bbf8aa9fe655d75b5fb858b5bdbb1c790c36a3cd" - integrity sha512-+/2JBrRfISCsWE4aEFXxd+7k9nWGXA8+wh7ZUHn/u8UDXOU9LN+QYKKhd57sIn6WRcorOnlqPMYFIwie/OHXWw== - "@rollup/rollup-darwin-x64@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.6.tgz#1aa2bcad84c0fb5902e945d88822e17a4f661d51" integrity sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg== -"@rollup/rollup-freebsd-arm64@4.34.1": - version "4.34.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.1.tgz#43f75cb686a23fc0aef3ce6bfe44501bf934e412" - integrity sha512-SUeB0pYjIXwT2vfAMQ7E4ERPq9VGRrPR7Z+S4AMssah5EHIilYqjWQoTn5dkDtuIJUSTs8H+C9dwoEcg3b0sCA== - "@rollup/rollup-freebsd-arm64@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.6.tgz#29c54617e0929264dcb6416597d6d7481696e49f" integrity sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ== -"@rollup/rollup-freebsd-x64@4.34.1": - version "4.34.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.1.tgz#1d0377ef7a06bb3a6543bbbf18b6d65b55074802" - integrity sha512-L3T66wAZiB/ooiPbxz0s6JEX6Sr2+HfgPSK+LMuZkaGZFAFCQAHiP3dbyqovYdNaiUXcl9TlgnIbcsIicAnOZg== - "@rollup/rollup-freebsd-x64@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.6.tgz#a8b58ab7d31882559d93f2d1b5863d9e4b4b2678" integrity sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ== -"@rollup/rollup-linux-arm-gnueabihf@4.34.1": - version "4.34.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.1.tgz#1ca88b1244678e74984efe89b1e39b9ae74671c7" - integrity sha512-UBXdQ4+ATARuFgsFrQ+tAsKvBi/Hly99aSVdeCUiHV9dRTTpMU7OrM3WXGys1l40wKVNiOl0QYY6cZQJ2xhKlQ== - "@rollup/rollup-linux-arm-gnueabihf@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.6.tgz#a844e1978c8b9766b169ecb1cb5cc0d8a3f05930" integrity sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg== -"@rollup/rollup-linux-arm-musleabihf@4.34.1": - version "4.34.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.1.tgz#33cdcac1befc32d7217b94b78c56fa5c194660cc" - integrity sha512-m/yfZ25HGdcCSwmopEJm00GP7xAUyVcBPjttGLRAqZ60X/bB4Qn6gP7XTwCIU6bITeKmIhhwZ4AMh2XLro+4+w== - "@rollup/rollup-linux-arm-musleabihf@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.6.tgz#6b44c3b7257985d71b087fcb4ef01325e2fff201" integrity sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg== -"@rollup/rollup-linux-arm64-gnu@4.34.1": - version "4.34.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.1.tgz#4de1e8ade39d0da1e981ab05f94a69f3de72725a" - integrity sha512-Wy+cUmFuvziNL9qWRRzboNprqSQ/n38orbjRvd6byYWridp5TJ3CD+0+HUsbcWVSNz9bxkDUkyASGP0zS7GAvg== - "@rollup/rollup-linux-arm64-gnu@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.6.tgz#ebb499cf1720115256d0c9ae7598c90cc2251bc5" integrity sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA== -"@rollup/rollup-linux-arm64-musl@4.34.1": - version "4.34.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.1.tgz#314f56ea347323d94107b8eb0dc6cb60ba4e0a35" - integrity sha512-CQ3MAGgiFmQW5XJX5W3wnxOBxKwFlUAgSXFA2SwgVRjrIiVt5LHfcQLeNSHKq5OEZwv+VCBwlD1+YKCjDG8cpg== - "@rollup/rollup-linux-arm64-musl@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.6.tgz#9658221b59d9e5643348f9a52fa5ef35b4dc07b1" integrity sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q== -"@rollup/rollup-linux-loongarch64-gnu@4.34.1": - version "4.34.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.1.tgz#64f7871f5718a086786485b9c4d22fd263a37b44" - integrity sha512-rSzb1TsY4lSwH811cYC3OC2O2mzNMhM13vcnA7/0T6Mtreqr3/qs6WMDriMRs8yvHDI54qxHgOk8EV5YRAHFbw== - "@rollup/rollup-linux-loongarch64-gnu@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.6.tgz#19418cc57579a5655af2d850a89d74b3f7e9aa92" integrity sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw== -"@rollup/rollup-linux-powerpc64le-gnu@4.34.1": - version "4.34.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.1.tgz#ad5902358a0d91bda75b3cbd45d61d1f6698b6f5" - integrity sha512-fwr0n6NS0pG3QxxlqVYpfiY64Fd1Dqd8Cecje4ILAV01ROMp4aEdCj5ssHjRY3UwU7RJmeWd5fi89DBqMaTawg== - "@rollup/rollup-linux-powerpc64le-gnu@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.6.tgz#fe0bce7778cb6ce86898c781f3f11369d1a4952c" integrity sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ== -"@rollup/rollup-linux-riscv64-gnu@4.34.1": - version "4.34.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.1.tgz#1d917841458ccc34dcc34be32ea0a4b33437370f" - integrity sha512-4uJb9qz7+Z/yUp5RPxDGGGUcoh0PnKF33QyWgEZ3X/GocpWb6Mb+skDh59FEt5d8+Skxqs9mng6Swa6B2AmQZg== - "@rollup/rollup-linux-riscv64-gnu@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.6.tgz#9c158360abf6e6f7794285642ba0898c580291f6" integrity sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg== -"@rollup/rollup-linux-s390x-gnu@4.34.1": - version "4.34.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.1.tgz#0c224baa3e1823f2b7b0e45dfaf43a99a18e8248" - integrity sha512-QlIo8ndocWBEnfmkYqj8vVtIUpIqJjfqKggjy7IdUncnt8BGixte1wDON7NJEvLg3Kzvqxtbo8tk+U1acYEBlw== - "@rollup/rollup-linux-s390x-gnu@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.6.tgz#f9113498d22962baacdda008b5587d568b05aa34" integrity sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw== -"@rollup/rollup-linux-x64-gnu@4.34.1": - version "4.34.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.1.tgz#f5fba18eda523cbe04f82cbf3e0685e461e71613" - integrity sha512-hzpleiKtq14GWjz3ahWvJXgU1DQC9DteiwcsY4HgqUJUGxZThlL66MotdUEK9zEo0PK/2ADeZGM9LIondE302A== - "@rollup/rollup-linux-x64-gnu@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.6.tgz#aec8d4cdf911cd869a72b8bd00833cb426664e0c" integrity sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw== -"@rollup/rollup-linux-x64-musl@4.34.1": - version "4.34.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.1.tgz#7439d15ffe62ac0468ef2d539d4c39b4686e1276" - integrity sha512-jqtKrO715hDlvUcEsPn55tZt2TEiBvBtCMkUuU0R6fO/WPT7lO9AONjPbd8II7/asSiNVQHCMn4OLGigSuxVQA== - "@rollup/rollup-linux-x64-musl@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.6.tgz#61c0a146bdd1b5e0dcda33690dd909b321d8f20f" integrity sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A== -"@rollup/rollup-win32-arm64-msvc@4.34.1": - version "4.34.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.1.tgz#125f09f40719ea7a02a76607428a0366ff9dca4d" - integrity sha512-RnHy7yFf2Wz8Jj1+h8klB93N0NHNHXFhNwAmiy9zJdpY7DE01VbEVtPdrK1kkILeIbHGRJjvfBDBhnxBr8kD4g== - "@rollup/rollup-win32-arm64-msvc@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.6.tgz#c6c5bf290a3a459c18871110bc2e7009ce35b15a" integrity sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA== -"@rollup/rollup-win32-ia32-msvc@4.34.1": - version "4.34.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.1.tgz#04e36410a55fa36278a627ed769a60576c882d1d" - integrity sha512-i7aT5HdiZIcd7quhzvwQ2oAuX7zPYrYfkrd1QFfs28Po/i0q6kas/oRrzGlDhAEyug+1UfUtkWdmoVlLJj5x9Q== - "@rollup/rollup-win32-ia32-msvc@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.6.tgz#16ca6bdadc9e054818b9c51f8dac82f6b8afab81" integrity sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA== -"@rollup/rollup-win32-x64-msvc@4.34.1": - version "4.34.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.1.tgz#37cddc33f8cd961a615f5f854d2b1994c90fe547" - integrity sha512-k3MVFD9Oq+laHkw2N2v7ILgoa9017ZMF/inTtHzyTVZjYs9cSH18sdyAf6spBAJIGwJ5UaC7et2ZH1WCdlhkMw== - "@rollup/rollup-win32-x64-msvc@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.6.tgz#f3d03ce2d82723eb089188ea1494a719b09e1561" @@ -2224,14 +2141,14 @@ magic-string "^0.25.0" string.prototype.matchall "^4.0.6" -"@sveltejs/adapter-node@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@sveltejs/adapter-node/-/adapter-node-3.0.3.tgz#119771e19cd7dbc4ca1e8d6e66560f3e8d88ce0f" - integrity sha512-tYs13Xs0NLYXy4XMGrPUupKdBYqvMQ/IZ4OSmv53LudHgcthZCZD3fXrPLvbsSW3EapKl5/8AQZxTYbwUMZbKw== +"@sveltejs/adapter-node@^5.2.12": + version "5.2.12" + resolved "https://registry.yarnpkg.com/@sveltejs/adapter-node/-/adapter-node-5.2.12.tgz#011b91b941bd37a52dfd725c775f2123c7148429" + integrity sha512-0bp4Yb3jKIEcZWVcJC/L1xXp9zzJS4hDwfb4VITAkfT4OVdkspSHsx7YhqJDbb2hgLl6R9Vs7VQR+fqIVOxPUQ== dependencies: - "@rollup/plugin-commonjs" "^25.0.7" + "@rollup/plugin-commonjs" "^28.0.1" "@rollup/plugin-json" "^6.1.0" - "@rollup/plugin-node-resolve" "^15.2.3" + "@rollup/plugin-node-resolve" "^16.0.0" rollup "^4.9.5" "@sveltejs/kit@^2.17.1": @@ -5055,17 +4972,6 @@ glob@^7.1.3, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8.0.3: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -5131,7 +5037,7 @@ gzip-size@^6.0.0: duplexer "^0.1.2" "harper.js@link:harper.js": - version "0.19.1" + version "0.21.1" has-bigints@^1.0.2: version "1.1.0" @@ -7684,35 +7590,7 @@ rollup@^2.43.1: optionalDependencies: fsevents "~2.3.2" -rollup@^4.22.4, rollup@^4.23.0, rollup@^4.9.5: - version "4.34.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.34.1.tgz#dcc318abee12e23dae4003af733c1987d7baca8e" - integrity sha512-iYZ/+PcdLYSGfH3S+dGahlW/RWmsqDhLgj1BT9DH/xXJ0ggZN7xkdP9wipPNjjNLczI+fmMLmTB9pye+d2r4GQ== - dependencies: - "@types/estree" "1.0.6" - optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.34.1" - "@rollup/rollup-android-arm64" "4.34.1" - "@rollup/rollup-darwin-arm64" "4.34.1" - "@rollup/rollup-darwin-x64" "4.34.1" - "@rollup/rollup-freebsd-arm64" "4.34.1" - "@rollup/rollup-freebsd-x64" "4.34.1" - "@rollup/rollup-linux-arm-gnueabihf" "4.34.1" - "@rollup/rollup-linux-arm-musleabihf" "4.34.1" - "@rollup/rollup-linux-arm64-gnu" "4.34.1" - "@rollup/rollup-linux-arm64-musl" "4.34.1" - "@rollup/rollup-linux-loongarch64-gnu" "4.34.1" - "@rollup/rollup-linux-powerpc64le-gnu" "4.34.1" - "@rollup/rollup-linux-riscv64-gnu" "4.34.1" - "@rollup/rollup-linux-s390x-gnu" "4.34.1" - "@rollup/rollup-linux-x64-gnu" "4.34.1" - "@rollup/rollup-linux-x64-musl" "4.34.1" - "@rollup/rollup-win32-arm64-msvc" "4.34.1" - "@rollup/rollup-win32-ia32-msvc" "4.34.1" - "@rollup/rollup-win32-x64-msvc" "4.34.1" - fsevents "~2.3.2" - -rollup@^4.30.1: +rollup@^4.22.4, rollup@^4.23.0, rollup@^4.30.1, rollup@^4.9.5: version "4.34.6" resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.34.6.tgz#a07e4d2621759e29034d909655e7a32eee9195c9" integrity sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ== From 6b012c32b0bb6af84402615e22a5d62b30b29472 Mon Sep 17 00:00:00 2001 From: Elijah Potter Date: Fri, 14 Feb 2025 15:24:34 -0700 Subject: [PATCH 12/16] feat(core): add misc words --- harper-core/affixes.json | 4 +- harper-core/dictionary.dict | 23 ++-- .../proper_noun_capitalization_linters.rs | 109 +++++++----------- harper-core/src/spell/mod.rs | 6 +- justfile | 2 +- 5 files changed, 61 insertions(+), 83 deletions(-) diff --git a/harper-core/affixes.json b/harper-core/affixes.json index ab65899c..6a51b3d9 100644 --- a/harper-core/affixes.json +++ b/harper-core/affixes.json @@ -289,9 +289,7 @@ "is_possessive": true } }, - "gifts_metadata": { - "noun": {} - } + "gifts_metadata": {} }, "F": { "#": "'con-' prefix", diff --git a/harper-core/dictionary.dict b/harper-core/dictionary.dict index 02cabec8..62b5f9c7 100644 --- a/harper-core/dictionary.dict +++ b/harper-core/dictionary.dict @@ -49928,13 +49928,18 @@ backplane/SM cyberattack/SM RTX/1SM PDP/1SM -Jetpack/M +Jetpack/2M learnt/4 -WooCommerce/M -Tumblr/M -Akismet/M -Simplenote/M -Longreads/M -VaultPress/M -Gravatar/M -Crowdsignal/M +WooCommerce/2M +Tumblr/2M +Akismet/2M +Simplenote/2M +Longreads/2M +VaultPress/2M +Gravatar/2M +Crowdsignal/2M +Mullenweg/M +journaling/SM3 +Polldaddy/2M +P2/M +VideoPress/2M diff --git a/harper-core/src/linting/proper_noun_capitalization_linters.rs b/harper-core/src/linting/proper_noun_capitalization_linters.rs index ce539bff..9f540e56 100644 --- a/harper-core/src/linting/proper_noun_capitalization_linters.rs +++ b/harper-core/src/linting/proper_noun_capitalization_linters.rs @@ -690,57 +690,46 @@ create_linter_for!( .t_aco("Jetpack") .then_whitespace() .then(Box::new(EitherPattern::new(vec![ - Box::new(SequencePattern::default() - .t_aco("VaultPress") - .then_whitespace() - .t_aco("Backup") - ), - Box::new(SequencePattern::default() - .t_aco("VaultPress") - ), - Box::new(SequencePattern::default() - .t_aco("Scan") - ), - Box::new(SequencePattern::default() - .t_aco("Akismet") - .then_whitespace() - .t_aco("Anti-spam") - ), - Box::new(SequencePattern::default() - .t_aco("Stats") - ), - Box::new(SequencePattern::default() - .t_aco("Social") - ), - Box::new(SequencePattern::default() - .t_aco("Blaze") - ), - Box::new(SequencePattern::default() - .t_aco("AI") - .then_whitespace() - .t_aco("Assistant") - ), - Box::new(SequencePattern::default() - .t_aco("Site") - .then_whitespace() - .t_aco("Search") + Box::new( + SequencePattern::default() + .t_aco("VaultPress") + .then_whitespace() + .t_aco("Backup") ), - Box::new(SequencePattern::default() - .t_aco("Boost") + Box::new(SequencePattern::default().t_aco("VaultPress")), + Box::new(SequencePattern::default().t_aco("Scan")), + Box::new( + SequencePattern::default() + .t_aco("Akismet") + .then_whitespace() + .t_aco("Anti-spam") ), - Box::new(SequencePattern::default() - .t_aco("VideoPress") + Box::new(SequencePattern::default().t_aco("Stats")), + Box::new(SequencePattern::default().t_aco("Social")), + Box::new(SequencePattern::default().t_aco("Blaze")), + Box::new( + SequencePattern::default() + .t_aco("AI") + .then_whitespace() + .t_aco("Assistant") ), - Box::new(SequencePattern::default() - .t_aco("For") - .then_whitespace() - .t_aco("Agencies") + Box::new( + SequencePattern::default() + .t_aco("Site") + .then_whitespace() + .t_aco("Search") ), - Box::new(SequencePattern::default() - .t_aco("CRM") + Box::new(SequencePattern::default().t_aco("Boost")), + Box::new(SequencePattern::default().t_aco("VideoPress")), + Box::new( + SequencePattern::default() + .t_aco("For") + .then_whitespace() + .t_aco("Agencies") ), + Box::new(SequencePattern::default().t_aco("CRM")), ]))), - "Ensure proper capitalization of Jetpack-related terms, including products and features such as Jetpack VaultPress Backup, Jetpack Blaze, and Jetpack AI Assistant." + "Ensure proper capitalization of Jetpack-related terms." ); create_linter_for!( @@ -749,29 +738,15 @@ create_linter_for!( .t_aco("Tumblr") .then_whitespace() .then(Box::new(EitherPattern::new(vec![ - Box::new(SequencePattern::default() - .t_aco("Blaze") - ), - Box::new(SequencePattern::default() - .t_aco("Pro") - ), - Box::new(SequencePattern::default() - .t_aco("Live") - ), - Box::new(SequencePattern::default() - .t_aco("Ads") - ), - Box::new(SequencePattern::default() - .t_aco("Communities") - ), - Box::new(SequencePattern::default() - .t_aco("Shop") - ), - Box::new(SequencePattern::default() - .t_aco("Dashboard") - ) + Box::new(SequencePattern::default().t_aco("Blaze")), + Box::new(SequencePattern::default().t_aco("Pro")), + Box::new(SequencePattern::default().t_aco("Live")), + Box::new(SequencePattern::default().t_aco("Ads")), + Box::new(SequencePattern::default().t_aco("Communities")), + Box::new(SequencePattern::default().t_aco("Shop")), + Box::new(SequencePattern::default().t_aco("Dashboard")) ]))), - "Ensure proper capitalization of Tumblr-related terms, including products and features such as Tumblr Blaze, Tumblr Post+, and Tumblr Communities." + "Ensure proper capitalization of Tumblr-related terms." ); create_linter_for!( diff --git a/harper-core/src/spell/mod.rs b/harper-core/src/spell/mod.rs index f7c3e2c9..8998cbee 100644 --- a/harper-core/src/spell/mod.rs +++ b/harper-core/src/spell/mod.rs @@ -17,9 +17,9 @@ mod mutable_dictionary; #[derive(PartialEq, Debug, Hash, Eq)] pub struct FuzzyMatchResult<'a> { - word: &'a [char], - edit_distance: u8, - metadata: WordMetadata, + pub word: &'a [char], + pub edit_distance: u8, + pub metadata: WordMetadata, } impl PartialOrd for FuzzyMatchResult<'_> { diff --git a/justfile b/justfile index aee63d84..b9c19293 100644 --- a/justfile +++ b/justfile @@ -235,7 +235,7 @@ addnoun noun: fi if [[ "{{noun}}" =~ ^[A-Z] ]]; then - echo "{{noun}}/M" >> $DICT_FILE + echo "{{noun}}/2M" >> $DICT_FILE else echo "{{noun}}/SM" >> $DICT_FILE fi From c95bc16c3a2a425f0674e6b75339cc890e2d054d Mon Sep 17 00:00:00 2001 From: hippietrail Date: Tue, 18 Feb 2025 01:17:33 +0800 Subject: [PATCH 13/16] fix: change "and alike" phrase correction to "and the like" I thought "and alike" was only used by non-native English speakers. Not sure whether it was included here as a correct phrase on purpose or by accident. --- harper-core/src/linting/lint_group.rs | 4 ++-- harper-core/src/linting/mod.rs | 2 +- harper-core/src/linting/phrase_corrections.rs | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/harper-core/src/linting/lint_group.rs b/harper-core/src/linting/lint_group.rs index fc901c3f..5586ff66 100644 --- a/harper-core/src/linting/lint_group.rs +++ b/harper-core/src/linting/lint_group.rs @@ -30,7 +30,7 @@ use super::multiple_sequential_pronouns::MultipleSequentialPronouns; use super::nobody::Nobody; use super::number_suffix_capitalization::NumberSuffixCapitalization; use super::phrase_corrections::{ - AndAlike, BadRap, BatedBreath, BeckAndCall, ChangeTack, EnMasse, HumanLife, HungerPang, + AndTheLike, BadRap, BatedBreath, BeckAndCall, ChangeTack, EnMasse, HumanLife, HungerPang, LetAlone, LoAndBehold, NeedHelp, NoLonger, OfCourse, SneakingSuspicion, SpecialAttention, SupposedTo, ThanOthers, ThatChallenged, TurnItOff, }; @@ -273,7 +273,7 @@ create_lint_group_config!( ThatChallenged => true, TurnItOff => true, OfCourse => true, - AndAlike => true, + AndTheLike => true, BadRap => true, BatedBreath => true, BeckAndCall => true, diff --git a/harper-core/src/linting/mod.rs b/harper-core/src/linting/mod.rs index ce8bdc03..9830343b 100644 --- a/harper-core/src/linting/mod.rs +++ b/harper-core/src/linting/mod.rs @@ -86,7 +86,7 @@ pub use number_suffix_capitalization::NumberSuffixCapitalization; pub use oxford_comma::OxfordComma; pub use pattern_linter::PatternLinter; pub use phrase_corrections::{ - AndAlike, BadRap, BatedBreath, BeckAndCall, ChangeTack, EnMasse, HumanLife, HungerPang, + AndTheLike, BadRap, BatedBreath, BeckAndCall, ChangeTack, EnMasse, HumanLife, HungerPang, LetAlone, LoAndBehold, NeedHelp, NoLonger, OfCourse, SneakingSuspicion, SpecialAttention, SupposedTo, ThanOthers, ThatChallenged, TurnItOff, }; diff --git a/harper-core/src/linting/phrase_corrections.rs b/harper-core/src/linting/phrase_corrections.rs index b7c8828f..449b4e3b 100644 --- a/harper-core/src/linting/phrase_corrections.rs +++ b/harper-core/src/linting/phrase_corrections.rs @@ -76,7 +76,7 @@ create_linter_for_phrase!(ThatChallenged, "that challenged", 2); create_linter_for_phrase!(NoLonger, "no longer", 1); create_linter_for_phrase!(NeedHelp, "need help", 1); create_linter_for_phrase!(OfCourse, "of course", 1); -create_linter_for_phrase!(AndAlike, "and alike", 1); +create_linter_for_phrase!(AndTheLike, "and the like", 1); create_linter_for_phrase!(BadRap, "bad rap", 1); create_linter_for_phrase!(BatedBreath, "bated breath", 1); create_linter_for_phrase!(BeckAndCall, "beck and call", 1); From 935f4a863a7f2afe1e9430bde226c6e5c6a9c07c Mon Sep 17 00:00:00 2001 From: Elijah Potter Date: Mon, 17 Feb 2025 10:26:05 -0700 Subject: [PATCH 14/16] feat(core): properly capitalize unusual proper nouns in titles --- harper-core/affixes.json | 4 +- harper-core/dictionary.dict | 2 - harper-core/src/document.rs | 5 ++- .../compound_nouns/general_compound_nouns.rs | 3 +- harper-core/src/linting/compound_nouns/mod.rs | 2 +- harper-core/src/linting/spell_check.rs | 6 ++- .../src/patterns/split_compound_word.rs | 37 ++++++---------- harper-core/src/spell/dictionary.rs | 14 +++--- harper-core/src/spell/fst_dictionary.rs | 12 +++++ harper-core/src/spell/merged_dictionary.rs | 23 ++++++++++ harper-core/src/spell/mutable_dictionary.rs | 44 ++++++++++++++++--- harper-core/src/title_case.rs | 26 +++++++++++ packages/obsidian-plugin/data.json | 4 -- 13 files changed, 136 insertions(+), 46 deletions(-) delete mode 100644 packages/obsidian-plugin/data.json diff --git a/harper-core/affixes.json b/harper-core/affixes.json index 6a51b3d9..ab65899c 100644 --- a/harper-core/affixes.json +++ b/harper-core/affixes.json @@ -289,7 +289,9 @@ "is_possessive": true } }, - "gifts_metadata": {} + "gifts_metadata": { + "noun": {} + } }, "F": { "#": "'con-' prefix", diff --git a/harper-core/dictionary.dict b/harper-core/dictionary.dict index 62b5f9c7..1cf7fedf 100644 --- a/harper-core/dictionary.dict +++ b/harper-core/dictionary.dict @@ -8570,7 +8570,6 @@ Ryan/2M Rydberg/2M Ryder/2M Ryukyu/2M -S/152MN SA/5124 SAC/12 SALT/2M @@ -37361,7 +37360,6 @@ pox/14MS pp/1 ppm/1 ppr -pr/5 practicability/1M practicably/ practical/51SMY diff --git a/harper-core/src/document.rs b/harper-core/src/document.rs index 237b249d..e6809f67 100644 --- a/harper-core/src/document.rs +++ b/harper-core/src/document.rs @@ -129,7 +129,10 @@ impl Document { for token in self.tokens.iter_mut() { if let TokenKind::Word(meta) = &mut token.kind { let word_source = token.span.get_content(&self.source); - let found_meta = dictionary.get_word_metadata(word_source); + let found_meta = dictionary + .get_correct_capitalization_of(word_source) + .map(|canonical_caps| dictionary.get_word_metadata(canonical_caps)) + .unwrap_or_default(); *meta = meta.or(&found_meta); } } diff --git a/harper-core/src/linting/compound_nouns/general_compound_nouns.rs b/harper-core/src/linting/compound_nouns/general_compound_nouns.rs index d499ec32..3c720e56 100644 --- a/harper-core/src/linting/compound_nouns/general_compound_nouns.rs +++ b/harper-core/src/linting/compound_nouns/general_compound_nouns.rs @@ -58,6 +58,7 @@ impl PatternLinter for GeneralCompoundNouns { fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Lint { let span = matched_tokens.span().unwrap(); + let orig = span.get_content(source); // If the pattern matched, this will not return `None`. let word = self .split_pattern @@ -67,7 +68,7 @@ impl PatternLinter for GeneralCompoundNouns { Lint { span, lint_kind: LintKind::Spelling, - suggestions: vec![Suggestion::ReplaceWith(word.to_vec())], + suggestions: vec![Suggestion::replace_with_match_case(word.to_vec(), orig)], message: format!( "Did you mean the closed compound noun “{}”?", word.to_string() diff --git a/harper-core/src/linting/compound_nouns/mod.rs b/harper-core/src/linting/compound_nouns/mod.rs index f5989d42..6846d91d 100644 --- a/harper-core/src/linting/compound_nouns/mod.rs +++ b/harper-core/src/linting/compound_nouns/mod.rs @@ -226,7 +226,7 @@ mod tests { #[test] fn web_socket() { let test_sentence = "Real-time updates are sent via a web socket."; - let expected = "Real-time updates are sent via a WebSocket."; + let expected = "Real-time updates are sent via a websocket."; assert_suggestion_result(test_sentence, CompoundNouns::default(), expected); } diff --git a/harper-core/src/linting/spell_check.rs b/harper-core/src/linting/spell_check.rs index 51bbbe36..eef15c04 100644 --- a/harper-core/src/linting/spell_check.rs +++ b/harper-core/src/linting/spell_check.rs @@ -5,7 +5,7 @@ use super::Suggestion; use super::{Lint, LintKind, Linter}; use crate::document::Document; use crate::spell::suggest_correct_spelling; -use crate::{CharString, Dictionary, TokenStringExt}; +use crate::{CharString, CharStringExt, Dictionary, TokenStringExt}; pub struct SpellCheck where @@ -56,7 +56,9 @@ impl Linter for SpellCheck { for word in document.iter_words() { let word_chars = document.get_span_content(word.span); - if self.dictionary.contains_word(word_chars) { + if self.dictionary.contains_exact_word(word_chars) + || self.dictionary.contains_exact_word(&word_chars.to_lower()) + { continue; } diff --git a/harper-core/src/patterns/split_compound_word.rs b/harper-core/src/patterns/split_compound_word.rs index 9cb53d9c..b972a805 100644 --- a/harper-core/src/patterns/split_compound_word.rs +++ b/harper-core/src/patterns/split_compound_word.rs @@ -34,36 +34,25 @@ impl SplitCompoundWord { word_b: Token, source: &[char], ) -> Option { - let mut a_chars: CharString = word_a.span.get_content(source).into(); - let mut b_chars: CharString = word_b.span.get_content(source).into(); + let a_chars: CharString = word_a.span.get_content(source).into(); + let b_chars: CharString = word_b.span.get_content(source).into(); let mut buffer = CharString::new(); - macro_rules! attempt { - () => { - buffer.clear(); - buffer.extend_from_slice(&a_chars); - buffer.extend_from_slice(&b_chars); + buffer.clear(); + buffer.extend_from_slice(&a_chars); + buffer.extend_from_slice(&b_chars); - if self.dict.contains_word(&buffer) { - let metadata = self.dict.get_word_metadata(&buffer); - if (self.predicate)(metadata) { - return Some(buffer); - } - } - }; + if self.dict.contains_word(&buffer) { + let metadata = self.dict.get_word_metadata(&buffer); + if (self.predicate)(metadata) { + let correct = self.dict.get_correct_capitalization_of(&buffer).unwrap(); + buffer.clear(); + buffer.extend_from_slice(correct); + return Some(buffer); + } } - attempt!(); - a_chars[0] = a_chars[0].to_ascii_uppercase(); - attempt!(); - b_chars[0] = b_chars[0].to_ascii_uppercase(); - attempt!(); - a_chars[0] = a_chars[0].to_ascii_lowercase(); - attempt!(); - b_chars[0] = b_chars[0].to_ascii_lowercase(); - attempt!(); - None } } diff --git a/harper-core/src/spell/dictionary.rs b/harper-core/src/spell/dictionary.rs index 403f29b8..7fd1c4f4 100644 --- a/harper-core/src/spell/dictionary.rs +++ b/harper-core/src/spell/dictionary.rs @@ -8,10 +8,14 @@ use crate::WordMetadata; /// See also: [`super::FstDictionary`] and [`super::MutableDictionary`]. #[blanket(derive(Arc))] pub trait Dictionary: Send + Sync { - /// Check if the dictionary contains a given word. + /// Check if the dictionary contains any capitalization of a given word. fn contains_word(&self, word: &[char]) -> bool; - /// Check if the dictionary contains a given word. + /// Check if the dictionary contains any capitalization of a given word. fn contains_word_str(&self, word: &str) -> bool; + /// Check if the dictionary contains the exact capitalization of a given word. + fn contains_exact_word(&self, word: &[char]) -> bool; + /// Check if the dictionary contains the exact capitalization of a given word. + fn contains_exact_word_str(&self, word: &str) -> bool; /// Gets best fuzzy match from dictionary fn fuzzy_match( &self, @@ -26,15 +30,15 @@ pub trait Dictionary: Send + Sync { max_distance: u8, max_results: usize, ) -> Vec; - /// Get the associated [`WordMetadata`] for a given word. + fn get_correct_capitalization_of(&self, word: &[char]) -> Option<&'_ [char]>; + /// Get the associated [`WordMetadata`] for any capitalization of a given word. /// If the word isn't in the dictionary, the resulting metadata will be /// empty. fn get_word_metadata(&self, word: &[char]) -> WordMetadata; - /// Get the associated [`WordMetadata`] for a given word. + /// Get the associated [`WordMetadata`] for any capitalization of a given word. /// If the word isn't in the dictionary, the resulting metadata will be /// empty. fn get_word_metadata_str(&self, word: &str) -> WordMetadata; - /// Iterate over the words in the dictionary. fn words_iter(&self) -> Box + Send + '_>; diff --git a/harper-core/src/spell/fst_dictionary.rs b/harper-core/src/spell/fst_dictionary.rs index 81604804..bd7f79ca 100644 --- a/harper-core/src/spell/fst_dictionary.rs +++ b/harper-core/src/spell/fst_dictionary.rs @@ -212,6 +212,18 @@ impl Dictionary for FstDictionary { fn words_with_len_iter(&self, len: usize) -> Box + Send + '_> { self.full_dict.words_with_len_iter(len) } + + fn contains_exact_word(&self, word: &[char]) -> bool { + self.full_dict.contains_exact_word(word) + } + + fn contains_exact_word_str(&self, word: &str) -> bool { + self.full_dict.contains_exact_word_str(word) + } + + fn get_correct_capitalization_of(&self, word: &[char]) -> Option<&'_ [char]> { + self.full_dict.get_correct_capitalization_of(word) + } } #[cfg(test)] diff --git a/harper-core/src/spell/merged_dictionary.rs b/harper-core/src/spell/merged_dictionary.rs index c455a229..2724d37c 100644 --- a/harper-core/src/spell/merged_dictionary.rs +++ b/harper-core/src/spell/merged_dictionary.rs @@ -37,6 +37,15 @@ impl Default for MergedDictionary { } impl Dictionary for MergedDictionary { + fn get_correct_capitalization_of(&self, word: &[char]) -> Option<&'_ [char]> { + for child in &self.children { + if let Some(word) = child.get_correct_capitalization_of(word) { + return Some(word); + } + } + None + } + fn contains_word(&self, word: &[char]) -> bool { for child in &self.children { if child.contains_word(word) { @@ -46,6 +55,15 @@ impl Dictionary for MergedDictionary { false } + fn contains_exact_word(&self, word: &[char]) -> bool { + for child in &self.children { + if child.contains_exact_word(word) { + return true; + } + } + false + } + fn get_word_metadata(&self, word: &[char]) -> WordMetadata { let mut found_metadata = WordMetadata::default(); for child in &self.children { @@ -72,6 +90,11 @@ impl Dictionary for MergedDictionary { self.contains_word(&chars) } + fn contains_exact_word_str(&self, word: &str) -> bool { + let chars: CharString = word.chars().collect(); + self.contains_word(&chars) + } + fn get_word_metadata_str(&self, word: &str) -> WordMetadata { let chars: CharString = word.chars().collect(); self.get_word_metadata(&chars) diff --git a/harper-core/src/spell/mutable_dictionary.rs b/harper-core/src/spell/mutable_dictionary.rs index a88fed75..17f95070 100644 --- a/harper-core/src/spell/mutable_dictionary.rs +++ b/harper-core/src/spell/mutable_dictionary.rs @@ -14,7 +14,7 @@ use crate::{CharString, CharStringExt, WordMetadata}; use super::dictionary::Dictionary; use super::FuzzyMatchResult; -/// A basic dictionary that allows words to be added. +/// A basic dictionary that allows words to be added after instantiating. /// This is useful for user and file dictionaries that may change at runtime. /// /// For immutable use-cases, such as the curated dictionary, prefer [`super::FstDictionary`], @@ -37,6 +37,12 @@ pub struct MutableDictionary { word_len_starts: Vec, /// All English words word_map: HashMap, + /// A map from the lowercase versions of a word to the correct capitalization + /// of that same word. + /// + /// It can be used to check if a word is correctly capitalized, or if it is valid, regardless of + /// capitalization. + word_map_lowercase: HashMap, } /// The uncached function that is used to produce the original copy of the @@ -56,8 +62,14 @@ fn uncached_inner_new() -> Arc { words.dedup(); words.sort_unstable_by_key(|w| w.len()); + let mut word_map_lowercase = HashMap::with_capacity(word_map.len()); + for key in word_map.keys() { + word_map_lowercase.insert(key.to_lower(), key.clone()); + } + Arc::new(MutableDictionary { word_map, + word_map_lowercase, word_len_starts: MutableDictionary::create_len_starts(&words), words, }) @@ -73,6 +85,7 @@ impl MutableDictionary { words: Vec::new(), word_len_starts: Vec::new(), word_map: HashMap::new(), + word_map_lowercase: HashMap::new(), } } @@ -98,6 +111,8 @@ impl MutableDictionary { self.words.extend(pairs.iter().map(|(v, _)| v.clone())); self.words.sort_by_key(|w| w.len()); self.word_len_starts = Self::create_len_starts(&self.words); + self.word_map_lowercase + .extend(pairs.iter().map(|(key, _)| (key.to_lower(), key.clone()))); self.word_map.extend(pairs); } @@ -145,12 +160,13 @@ impl Default for MutableDictionary { impl Dictionary for MutableDictionary { fn get_word_metadata(&self, word: &[char]) -> WordMetadata { let normalized = seq_to_normalized(word); - let lowercase: CharString = normalized.to_lower(); + let Some(correct_caps) = self.get_correct_capitalization_of(&normalized) else { + return WordMetadata::default(); + }; self.word_map - .get(normalized.as_ref()) + .get(correct_caps) .cloned() - .or(self.word_map.get(lowercase.as_ref()).cloned()) .unwrap_or(WordMetadata::default()) } @@ -158,7 +174,7 @@ impl Dictionary for MutableDictionary { let normalized = seq_to_normalized(word); let lowercase: CharString = normalized.to_lower(); - self.word_map.contains_key(normalized.as_ref()) || self.word_map.contains_key(&lowercase) + self.word_map_lowercase.contains_key(&lowercase) } fn contains_word_str(&self, word: &str) -> bool { @@ -171,6 +187,15 @@ impl Dictionary for MutableDictionary { self.get_word_metadata(&chars) } + fn get_correct_capitalization_of(&self, word: &[char]) -> Option<&'_ [char]> { + let normalized = seq_to_normalized(word); + let lowercase: CharString = normalized.to_lower(); + + self.word_map_lowercase + .get(&lowercase) + .map(|v| v.as_slice()) + } + /// Suggest a correct spelling for a given misspelled word. /// `Self::word` is assumed to be quite small (n < 100). /// `max_distance` relates to an optimization that allows the search @@ -258,6 +283,15 @@ impl Dictionary for MutableDictionary { Box::new(self.words[start..end].iter().map(|v| v.as_slice())) } + + fn contains_exact_word(&self, word: &[char]) -> bool { + self.word_map.contains_key(seq_to_normalized(word).as_ref()) + } + + fn contains_exact_word_str(&self, word: &str) -> bool { + let word: CharString = word.chars().collect(); + self.contains_exact_word(word.as_ref()) + } } #[cfg(test)] diff --git a/harper-core/src/title_case.rs b/harper-core/src/title_case.rs index 5cdec274..6819a314 100644 --- a/harper-core/src/title_case.rs +++ b/harper-core/src/title_case.rs @@ -35,6 +35,24 @@ pub fn make_title_case(toks: &[Token], source: &[char], dict: &impl Dictionary) let mut output = toks.span().unwrap().get_content(source).to_vec(); while let Some((index, word)) = word_likes.next() { + let Some(metadata) = word.kind.as_word() else { + continue; + }; + + if metadata.is_proper_noun() { + // Replace it with the dictionary entry verbatim. + let orig_text = word.span.get_content(source); + + if let Some(correct_caps) = dict.get_correct_capitalization_of(orig_text) { + // It should match the dictionary verbatim + output[word.span.start - start_index..word.span.end - start_index] + .iter_mut() + .enumerate() + .for_each(|(idx, c)| *c = correct_caps[idx]); + continue; + } + } + let should_capitalize = should_capitalize_token(&word, source, dict) || index == 0 || word_likes.peek().is_none(); @@ -160,6 +178,14 @@ mod tests { ) } + #[test] + fn fixes_video_press() { + assert_eq!( + make_title_case_str("videopress", &PlainEnglish, &FstDictionary::curated()), + "VideoPress" + ) + } + #[quickcheck] fn a_stays_lowercase(prefix: String, postfix: String) -> TestResult { // There must be words other than the `a`. diff --git a/packages/obsidian-plugin/data.json b/packages/obsidian-plugin/data.json deleted file mode 100644 index d0f18ef2..00000000 --- a/packages/obsidian-plugin/data.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "useWebWorker": true, - "lintSettings": {} -} From a099610e53471ed30adc852029079c76a21208dd Mon Sep 17 00:00:00 2001 From: Elijah Potter Date: Mon, 17 Feb 2025 10:52:22 -0700 Subject: [PATCH 15/16] feat(core): added linter for capitalization of `WordPress.com` --- harper-core/src/document.rs | 1 + harper-core/src/linting/lint_group.rs | 2 + harper-core/src/linting/mod.rs | 2 + harper-core/src/linting/wordpress_dotcom.rs | 57 +++++++++++++++++++++ harper-core/src/title_case.rs | 30 +++++------ harper-core/src/token_string_ext.rs | 2 + 6 files changed, 78 insertions(+), 16 deletions(-) create mode 100644 harper-core/src/linting/wordpress_dotcom.rs diff --git a/harper-core/src/document.rs b/harper-core/src/document.rs index e6809f67..b83615e7 100644 --- a/harper-core/src/document.rs +++ b/harper-core/src/document.rs @@ -538,6 +538,7 @@ macro_rules! create_fns_on_doc { impl TokenStringExt for Document { create_fns_on_doc!(word); + create_fns_on_doc!(hostname); create_fns_on_doc!(word_like); create_fns_on_doc!(conjunction); create_fns_on_doc!(space); diff --git a/harper-core/src/linting/lint_group.rs b/harper-core/src/linting/lint_group.rs index 32e847dc..6ad75df0 100644 --- a/harper-core/src/linting/lint_group.rs +++ b/harper-core/src/linting/lint_group.rs @@ -76,6 +76,7 @@ use super::unclosed_quotes::UnclosedQuotes; use super::use_genitive::UseGenitive; use super::was_aloud::WasAloud; use super::whereas::Whereas; +use super::wordpress_dotcom::WordPressDotcom; use super::wrong_quotes::WrongQuotes; use super::{CurrencyPlacement, Lint, Linter, NoOxfordComma, OxfordComma}; use crate::{Dictionary, Document}; @@ -199,6 +200,7 @@ macro_rules! create_lint_group_config { } create_lint_group_config!( + WordPressDotcom => true, DayOneNames => true, PocketCastsNames => true, TumblrNames => true, diff --git a/harper-core/src/linting/mod.rs b/harper-core/src/linting/mod.rs index 4c25f1d8..c74df0e5 100644 --- a/harper-core/src/linting/mod.rs +++ b/harper-core/src/linting/mod.rs @@ -56,6 +56,7 @@ mod unclosed_quotes; mod use_genitive; mod was_aloud; mod whereas; +mod wordpress_dotcom; mod wrong_quotes; pub use an_a::AnA; @@ -139,6 +140,7 @@ pub use unclosed_quotes::UnclosedQuotes; pub use use_genitive::UseGenitive; pub use was_aloud::WasAloud; pub use whereas::Whereas; +pub use wordpress_dotcom::WordPressDotcom; pub use wrong_quotes::WrongQuotes; use crate::Document; diff --git a/harper-core/src/linting/wordpress_dotcom.rs b/harper-core/src/linting/wordpress_dotcom.rs new file mode 100644 index 00000000..33ab889a --- /dev/null +++ b/harper-core/src/linting/wordpress_dotcom.rs @@ -0,0 +1,57 @@ +use crate::{CharString, CharStringExt, TokenStringExt}; + +use super::{Lint, LintKind, Linter, Suggestion}; + +/// Make sure you properly capitalize `WordPress.com`. +#[derive(Default)] +pub struct WordPressDotcom; + +impl Linter for WordPressDotcom { + fn lint(&mut self, document: &crate::Document) -> Vec { + let correct: CharString = "WordPress.com".chars().collect(); + let correct_lower = correct.to_lower(); + let mut lints = Vec::new(); + + for hostname in document.iter_hostnames() { + let text = document.get_span_content(hostname.span); + + if correct.as_slice() != text && text.to_lower() == correct_lower { + lints.push(Lint { + span: hostname.span, + lint_kind: LintKind::Style, + suggestions: vec![Suggestion::ReplaceWith(correct.to_vec())], + message: "The WordPress hosting provider should be stylized as `WordPress.com`" + .to_owned(), + priority: 31, + }); + } + } + + lints + } + + fn description(&self) -> &str { + "Ensures correct capitalization of WordPress.com. This rule verifies that the official stylization of WordPress.com is used when referring to the hosting provider." + } +} + +#[cfg(test)] +mod tests { + use crate::linting::tests::assert_suggestion_result; + + use super::WordPressDotcom; + + #[test] + fn simple() { + assert_suggestion_result("wordpress.com", WordPressDotcom, "WordPress.com"); + } + + #[test] + fn sentence() { + assert_suggestion_result( + "wordpress.com is a great hosting provider", + WordPressDotcom, + "WordPress.com is a great hosting provider", + ); + } +} diff --git a/harper-core/src/title_case.rs b/harper-core/src/title_case.rs index 6819a314..75101ddd 100644 --- a/harper-core/src/title_case.rs +++ b/harper-core/src/title_case.rs @@ -35,23 +35,21 @@ pub fn make_title_case(toks: &[Token], source: &[char], dict: &impl Dictionary) let mut output = toks.span().unwrap().get_content(source).to_vec(); while let Some((index, word)) = word_likes.next() { - let Some(metadata) = word.kind.as_word() else { - continue; - }; - - if metadata.is_proper_noun() { - // Replace it with the dictionary entry verbatim. - let orig_text = word.span.get_content(source); - - if let Some(correct_caps) = dict.get_correct_capitalization_of(orig_text) { - // It should match the dictionary verbatim - output[word.span.start - start_index..word.span.end - start_index] - .iter_mut() - .enumerate() - .for_each(|(idx, c)| *c = correct_caps[idx]); - continue; + if let Some(metadata) = word.kind.as_word() { + if metadata.is_proper_noun() { + // Replace it with the dictionary entry verbatim. + let orig_text = word.span.get_content(source); + + if let Some(correct_caps) = dict.get_correct_capitalization_of(orig_text) { + // It should match the dictionary verbatim + output[word.span.start - start_index..word.span.end - start_index] + .iter_mut() + .enumerate() + .for_each(|(idx, c)| *c = correct_caps[idx]); + continue; + } } - } + }; let should_capitalize = should_capitalize_token(&word, source, dict) || index == 0 diff --git a/harper-core/src/token_string_ext.rs b/harper-core/src/token_string_ext.rs index 89458fc1..c2ca1edc 100644 --- a/harper-core/src/token_string_ext.rs +++ b/harper-core/src/token_string_ext.rs @@ -65,6 +65,7 @@ pub trait TokenStringExt { create_decl_for!(number); create_decl_for!(at); create_decl_for!(ellipsis); + create_decl_for!(hostname); create_decl_for!(unlintable); create_decl_for!(sentence_terminator); create_decl_for!(paragraph_break); @@ -99,6 +100,7 @@ pub trait TokenStringExt { impl TokenStringExt for [Token] { create_fns_for!(word); create_fns_for!(word_like); + create_fns_for!(hostname); create_fns_for!(conjunction); create_fns_for!(space); create_fns_for!(apostrophe); From 066c9ba9bcde47a84cdb9a431e32875596a5734c Mon Sep 17 00:00:00 2001 From: Elijah Potter Date: Mon, 17 Feb 2025 11:17:04 -0700 Subject: [PATCH 16/16] feat(core): add word to dictionary --- harper-core/dictionary.dict | 1 + 1 file changed, 1 insertion(+) diff --git a/harper-core/dictionary.dict b/harper-core/dictionary.dict index 1cf7fedf..25d6a47b 100644 --- a/harper-core/dictionary.dict +++ b/harper-core/dictionary.dict @@ -49941,3 +49941,4 @@ journaling/SM3 Polldaddy/2M P2/M VideoPress/2M +stylization/SM