diff --git a/Gemfile.lock b/Gemfile.lock
index 6cc132b9..090b3ed7 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -14,30 +14,31 @@ GEM
securerandom (>= 0.3)
tzinfo (~> 2.0, >= 2.0.5)
uri (>= 0.13.1)
- ast (2.4.2)
+ ast (2.4.3)
base64 (0.2.0)
benchmark (0.4.0)
bigdecimal (3.1.9)
concurrent-ruby (1.3.5)
- connection_pool (2.5.0)
+ connection_pool (2.5.3)
drb (2.2.1)
i18n (1.14.7)
concurrent-ruby (~> 1.0)
- json (2.10.2)
- language_server-protocol (3.17.0.4)
+ json (2.12.0)
+ language_server-protocol (3.17.0.5)
lint_roller (1.1.0)
- logger (1.6.6)
+ logger (1.7.0)
minitest (5.25.5)
- parallel (1.26.3)
- parser (3.3.7.1)
+ parallel (1.27.0)
+ parser (3.3.8.0)
ast (~> 2.4.1)
racc
prettier_print (1.2.1)
+ prism (1.4.0)
racc (1.8.1)
- rack (3.1.12)
+ rack (3.1.14)
rainbow (3.1.1)
regexp_parser (2.10.0)
- rubocop (1.74.0)
+ rubocop (1.75.5)
json (~> 2.3)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.1.0)
@@ -45,11 +46,12 @@ GEM
parser (>= 3.3.0.2)
rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 2.9.3, < 3.0)
- rubocop-ast (>= 1.38.0, < 2.0)
+ rubocop-ast (>= 1.44.0, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 4.0)
- rubocop-ast (1.38.1)
- parser (>= 3.3.1.0)
+ rubocop-ast (1.44.1)
+ parser (>= 3.3.7.2)
+ prism (~> 1.4)
rubocop-capybara (2.22.1)
lint_roller (~> 1.1)
rubocop (~> 1.72, >= 1.72.1)
@@ -65,13 +67,13 @@ GEM
rubocop-factory_bot (2.27.1)
lint_roller (~> 1.1)
rubocop (~> 1.72, >= 1.72.1)
- rubocop-rails (2.30.3)
+ rubocop-rails (2.31.0)
activesupport (>= 4.2.0)
lint_roller (~> 1.1)
rack (>= 1.1)
- rubocop (>= 1.72.1, < 2.0)
+ rubocop (>= 1.75.0, < 2.0)
rubocop-ast (>= 1.38.0, < 2.0)
- rubocop-rspec (3.5.0)
+ rubocop-rspec (3.6.0)
lint_roller (~> 1.1)
rubocop (~> 1.72, >= 1.72.1)
rubocop-rspec_rails (2.31.0)
@@ -97,4 +99,4 @@ DEPENDENCIES
syntax_tree
BUNDLED WITH
- 2.6.6
+ 2.6.8
diff --git a/assets/javascripts/discourse/components/activity-pub-actor.gjs b/assets/javascripts/discourse/components/activity-pub-actor.gjs
index 49bfb726..c79ecdef 100644
--- a/assets/javascripts/discourse/components/activity-pub-actor.gjs
+++ b/assets/javascripts/discourse/components/activity-pub-actor.gjs
@@ -1,4 +1,4 @@
-import or from "truth-helpers/helpers/or";
+import { or } from "truth-helpers";
import ActivityPubActorHandleLink from "./activity-pub-actor-handle-link";
import ActivityPubActorImage from "./activity-pub-actor-image";
diff --git a/assets/javascripts/discourse/components/activity-pub-authorize.js b/assets/javascripts/discourse/components/activity-pub-authorize.gjs
similarity index 53%
rename from assets/javascripts/discourse/components/activity-pub-authorize.js
rename to assets/javascripts/discourse/components/activity-pub-authorize.gjs
index a6068ac2..b1b4a610 100644
--- a/assets/javascripts/discourse/components/activity-pub-authorize.js
+++ b/assets/javascripts/discourse/components/activity-pub-authorize.gjs
@@ -1,10 +1,15 @@
import Component from "@glimmer/component";
import { tracked } from "@glimmer/tracking";
+import { Input } from "@ember/component";
+import { fn, hash } from "@ember/helper";
+import { on } from "@ember/modifier";
import { action } from "@ember/object";
+import DButton from "discourse/components/d-button";
import { ajax } from "discourse/lib/ajax";
import { popupAjaxError } from "discourse/lib/ajax-error";
import getURL from "discourse/lib/get-url";
import { i18n } from "discourse-i18n";
+import ComboBox from "select-kit/components/combo-box";
const supportedAuthTypes = ["discourse", "mastodon"];
@@ -121,4 +126,60 @@ export default class ActivityPubAuthorize extends Component {
authorizeDomain() {
window.open(getURL(`/ap/auth/authorize/${this.authType}`), "_self");
}
+
+
+
+
+
+ {{#if this.verifiedDomain}}
+
+ {{this.domain}}
+
+
+ {{else}}
+
+ {{/if}}
+
+
+
+
+
}
diff --git a/assets/javascripts/discourse/components/activity-pub-authorize.hbs b/assets/javascripts/discourse/components/activity-pub-authorize.hbs
deleted file mode 100644
index 8eedada0..00000000
--- a/assets/javascripts/discourse/components/activity-pub-authorize.hbs
+++ /dev/null
@@ -1,53 +0,0 @@
-
-
-
- {{#if this.verifiedDomain}}
-
- {{this.domain}}
-
-
- {{else}}
-
- {{/if}}
-
-
-
-
\ No newline at end of file
diff --git a/assets/javascripts/discourse/components/activity-pub-follow-domain.js b/assets/javascripts/discourse/components/activity-pub-follow-domain.gjs
similarity index 64%
rename from assets/javascripts/discourse/components/activity-pub-follow-domain.js
rename to assets/javascripts/discourse/components/activity-pub-follow-domain.gjs
index 78c2934c..fa4fd303 100644
--- a/assets/javascripts/discourse/components/activity-pub-follow-domain.js
+++ b/assets/javascripts/discourse/components/activity-pub-follow-domain.gjs
@@ -1,8 +1,10 @@
import Component from "@glimmer/component";
import { tracked } from "@glimmer/tracking";
+import { Input } from "@ember/component";
+import { on } from "@ember/modifier";
import { action } from "@ember/object";
-import { service } from "@ember/service";
import { Promise } from "rsvp";
+import DButton from "discourse/components/d-button";
import { ajax } from "discourse/lib/ajax";
import DiscourseURL from "discourse/lib/url";
import { extractDomainFromUrl, hostnameValid } from "discourse/lib/utilities";
@@ -22,8 +24,6 @@ const mastodonFollowUrl = (domain, handle) => {
const mastodonAboutPath = "api/v2/instance";
export default class ActivityPubFollowDomain extends Component {
- @service site;
-
@tracked verifying = false;
@tracked error = null;
@@ -88,4 +88,37 @@ export default class ActivityPubFollowDomain extends Component {
this.error = i18n("discourse_activity_pub.follow.domain.invalid");
}
}
+
+
+
+
{{i18n "discourse_activity_pub.follow.domain.label"}}
+
+
+
+
+
+
+
}
diff --git a/assets/javascripts/discourse/components/activity-pub-follow-domain.hbs b/assets/javascripts/discourse/components/activity-pub-follow-domain.hbs
deleted file mode 100644
index 13e7638b..00000000
--- a/assets/javascripts/discourse/components/activity-pub-follow-domain.hbs
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
{{i18n "discourse_activity_pub.follow.domain.label"}}
-
-
-
-
-
-
\ No newline at end of file
diff --git a/assets/javascripts/discourse/components/activity-pub-handle.gjs b/assets/javascripts/discourse/components/activity-pub-handle.gjs
index 5e8aeccd..866d5773 100644
--- a/assets/javascripts/discourse/components/activity-pub-handle.gjs
+++ b/assets/javascripts/discourse/components/activity-pub-handle.gjs
@@ -1,16 +1,12 @@
import Component from "@glimmer/component";
import { tracked } from "@glimmer/tracking";
import { action } from "@ember/object";
-import { service } from "@ember/service";
import DButton from "discourse/components/d-button";
import icon from "discourse/helpers/d-icon";
import discourseLater from "discourse/lib/later";
import { clipboardCopy } from "discourse/lib/utilities";
export default class ActivityPubHandle extends Component {
- @service site;
- @service siteSettings;
-
@tracked copied = false;
get showLink() {
diff --git a/assets/javascripts/discourse/components/activity-pub-nav-item.js b/assets/javascripts/discourse/components/activity-pub-nav-item.gjs
similarity index 79%
rename from assets/javascripts/discourse/components/activity-pub-nav-item.js
rename to assets/javascripts/discourse/components/activity-pub-nav-item.gjs
index d638333d..cf3fc23b 100644
--- a/assets/javascripts/discourse/components/activity-pub-nav-item.js
+++ b/assets/javascripts/discourse/components/activity-pub-nav-item.gjs
@@ -1,6 +1,10 @@
import Component from "@glimmer/component";
import { tracked } from "@glimmer/tracking";
+import didInsert from "@ember/render-modifiers/modifiers/did-insert";
+import didUpdate from "@ember/render-modifiers/modifiers/did-update";
+import willDestroy from "@ember/render-modifiers/modifiers/will-destroy";
import { service } from "@ember/service";
+import icon from "discourse/helpers/d-icon";
import { bind } from "discourse/lib/decorators";
import getURL from "discourse/lib/get-url";
import { i18n } from "discourse-i18n";
@@ -13,7 +17,6 @@ export default class ActivityPubNavItem extends Component {
@service router;
@service messageBus;
@service site;
- @service currentUser;
@tracked visible = false;
@tracked actor;
@@ -110,4 +113,19 @@ export default class ActivityPubNavItem extends Component {
get active() {
return this.router.currentRouteName.includes(`activityPub.actor`);
}
+
+
+
+ {{icon "discourse-activity-pub"}}
+ {{i18n "discourse_activity_pub.discovery.label"}}
+
+
}
diff --git a/assets/javascripts/discourse/components/activity-pub-nav-item.hbs b/assets/javascripts/discourse/components/activity-pub-nav-item.hbs
deleted file mode 100644
index e0ef051c..00000000
--- a/assets/javascripts/discourse/components/activity-pub-nav-item.hbs
+++ /dev/null
@@ -1,12 +0,0 @@
-
- {{d-icon "discourse-activity-pub"}}
- {{i18n "discourse_activity_pub.discovery.label"}}
-
\ No newline at end of file
diff --git a/assets/javascripts/discourse/components/activity-pub-post-actions.gjs b/assets/javascripts/discourse/components/activity-pub-post-actions.gjs
index e95abc25..8a07ce16 100644
--- a/assets/javascripts/discourse/components/activity-pub-post-actions.gjs
+++ b/assets/javascripts/discourse/components/activity-pub-post-actions.gjs
@@ -32,6 +32,11 @@ export default class ActivityPubPostActions extends Component {
this.status = status;
}
+ willDestroy() {
+ super.willDestroy(...arguments);
+ this.appEvents.off("activity-pub:post-updated", this, "postUpdated");
+ }
+
postUpdated(postId, postProps) {
if (this.post.id === postId) {
this.post.setProperties(postProps);
diff --git a/assets/javascripts/discourse/components/activity-pub-site-setting-notice.gjs b/assets/javascripts/discourse/components/activity-pub-site-setting-notice.gjs
index 6a9c8234..676770b7 100644
--- a/assets/javascripts/discourse/components/activity-pub-site-setting-notice.gjs
+++ b/assets/javascripts/discourse/components/activity-pub-site-setting-notice.gjs
@@ -1,13 +1,10 @@
import Component from "@glimmer/component";
-import { service } from "@ember/service";
import { dasherize } from "@ember/string";
import icon from "discourse/helpers/d-icon";
import getURL from "discourse/lib/get-url";
import { i18n } from "discourse-i18n";
export default class ActivityPubSiteSettingNotice extends Component {
- @service siteSettings;
-
get containerClass() {
return `activity-pub-site-setting ${dasherize(this.args.setting)}`;
}
diff --git a/assets/javascripts/discourse/components/modal/activity-pub-actor-follow.gjs b/assets/javascripts/discourse/components/modal/activity-pub-actor-follow.gjs
new file mode 100644
index 00000000..09072629
--- /dev/null
+++ b/assets/javascripts/discourse/components/modal/activity-pub-actor-follow.gjs
@@ -0,0 +1,148 @@
+import Component from "@glimmer/component";
+import { tracked } from "@glimmer/tracking";
+import { Input } from "@ember/component";
+import { on } from "@ember/modifier";
+import { action } from "@ember/object";
+import DButton from "discourse/components/d-button";
+import DModal from "discourse/components/d-modal";
+import loadingSpinner from "discourse/helpers/loading-spinner";
+import { i18n } from "discourse-i18n";
+import ActivityPubActor from "../../models/activity-pub-actor";
+import ActivityPubWebfinger from "../../models/activity-pub-webfinger";
+import ActivityPubActor0 from "../activity-pub-actor";
+import ActivityPubActorFollowBtn from "../activity-pub-actor-follow-btn";
+
+export default class ActivityPubFollowRemote extends Component {
+ @tracked verifying = false;
+ @tracked error = null;
+ @tracked followActor;
+
+ get title() {
+ return i18n("discourse_activity_pub.actor_follow.title", {
+ actor: this.args.model.actor.name,
+ });
+ }
+
+ get footerClass() {
+ let result = "activity-pub-actor-follow-find-footer";
+ if (this.error) {
+ result += " error";
+ }
+ return result;
+ }
+
+ get actorClass() {
+ let result = "activity-pub-actor-follow-actor-container";
+ if (!this.followActor) {
+ result += " no-actor";
+ }
+ return result;
+ }
+
+ get notFound() {
+ return this.followActor === false;
+ }
+
+ @action
+ onKeyup(e) {
+ this.error = null;
+
+ if (e.key === "Enter") {
+ this.find();
+ } else {
+ this.followActor = null;
+ }
+ }
+
+ @action
+ follow(actor, followActor) {
+ return this.args.model.follow(actor, followActor).then(() => {
+ this.args.closeModal();
+ });
+ }
+
+ @action
+ async find() {
+ const handle = this.handle;
+
+ if (!handle) {
+ return;
+ }
+
+ this.validating = true;
+ const validated = await ActivityPubWebfinger.validateHandle(handle);
+ this.validating = false;
+
+ if (validated) {
+ this.finding = true;
+ this.followActor = await ActivityPubActor.findByHandle(
+ this.args.model.actor.id,
+ handle
+ );
+ this.finding = false;
+ } else {
+ this.error = i18n("discourse_activity_pub.actor_follow.find.invalid");
+ }
+ }
+
+
+
+ <:body>
+
+
+
{{i18n
+ "discourse_activity_pub.actor_follow.find.label"
+ }}
+
+
+
+
+
+
+
+ {{#if this.followActor}}
+
+ {{else if this.finding}}
+ {{loadingSpinner size="small"}}
+ {{else if this.notFound}}
+ {{i18n
+ "discourse_activity_pub.actor_follow.find.not_found"
+ handle=this.handle
+ }}
+ {{/if}}
+
+
+
+
+
+}
diff --git a/assets/javascripts/discourse/components/modal/activity-pub-actor-follow.hbs b/assets/javascripts/discourse/components/modal/activity-pub-actor-follow.hbs
deleted file mode 100644
index aff27e85..00000000
--- a/assets/javascripts/discourse/components/modal/activity-pub-actor-follow.hbs
+++ /dev/null
@@ -1,56 +0,0 @@
-
- <:body>
-
-
-
{{i18n "discourse_activity_pub.actor_follow.find.label"}}
-
-
-
-
-
-
-
- {{#if this.followActor}}
-
- {{else if this.finding}}
- {{loading-spinner size="small"}}
- {{else if this.notFound}}
- {{i18n
- "discourse_activity_pub.actor_follow.find.not_found"
- handle=this.handle
- }}
- {{/if}}
-
-
-
-
\ No newline at end of file
diff --git a/assets/javascripts/discourse/components/modal/activity-pub-actor-follow.js b/assets/javascripts/discourse/components/modal/activity-pub-actor-follow.js
deleted file mode 100644
index 860135b6..00000000
--- a/assets/javascripts/discourse/components/modal/activity-pub-actor-follow.js
+++ /dev/null
@@ -1,83 +0,0 @@
-import Component from "@glimmer/component";
-import { tracked } from "@glimmer/tracking";
-import { action } from "@ember/object";
-import { service } from "@ember/service";
-import { i18n } from "discourse-i18n";
-import ActivityPubActor from "../../models/activity-pub-actor";
-import ActivityPubWebfinger from "../../models/activity-pub-webfinger";
-
-export default class ActivityPubFollowRemote extends Component {
- @service site;
-
- @tracked verifying = false;
- @tracked error = null;
- @tracked followActor;
-
- get title() {
- return i18n("discourse_activity_pub.actor_follow.title", {
- actor: this.args.model.actor.name,
- });
- }
-
- get footerClass() {
- let result = "activity-pub-actor-follow-find-footer";
- if (this.error) {
- result += " error";
- }
- return result;
- }
-
- get actorClass() {
- let result = "activity-pub-actor-follow-actor-container";
- if (!this.followActor) {
- result += " no-actor";
- }
- return result;
- }
-
- get notFound() {
- return this.followActor === false;
- }
-
- @action
- onKeyup(e) {
- this.error = null;
-
- if (e.key === "Enter") {
- this.find();
- } else {
- this.followActor = null;
- }
- }
-
- @action
- follow(actor, followActor) {
- return this.args.model.follow(actor, followActor).then(() => {
- this.args.closeModal();
- });
- }
-
- @action
- async find() {
- const handle = this.handle;
-
- if (!handle) {
- return;
- }
-
- this.validating = true;
- const validated = await ActivityPubWebfinger.validateHandle(handle);
- this.validating = false;
-
- if (validated) {
- this.finding = true;
- this.followActor = await ActivityPubActor.findByHandle(
- this.args.model.actor.id,
- handle
- );
- this.finding = false;
- } else {
- this.error = i18n("discourse_activity_pub.actor_follow.find.invalid");
- }
- }
-}
diff --git a/assets/javascripts/discourse/components/modal/activity-pub-actor-reject.gjs b/assets/javascripts/discourse/components/modal/activity-pub-actor-reject.gjs
new file mode 100644
index 00000000..6fe92314
--- /dev/null
+++ b/assets/javascripts/discourse/components/modal/activity-pub-actor-reject.gjs
@@ -0,0 +1,48 @@
+import Component from "@glimmer/component";
+import { action } from "@ember/object";
+import DButton from "discourse/components/d-button";
+import DModal from "discourse/components/d-modal";
+import DModalCancel from "discourse/components/d-modal-cancel";
+import { i18n } from "discourse-i18n";
+
+export default class ActivityPubActorReject extends Component {
+ get title() {
+ return i18n("discourse_activity_pub.actor_reject.modal_title", {
+ actor: this.args.model.actor?.name,
+ });
+ }
+
+ @action
+ reject() {
+ const model = this.args.model;
+ model.reject(model.actor, model.follower);
+ this.args.closeModal();
+ }
+
+
+
+ <:body>
+
+ {{i18n
+ "discourse_activity_pub.actor_reject.confirm"
+ actor=@model.actor.name
+ follower=@model.follower.handle
+ }}
+
+
+
+ <:footer>
+
+
+
+
+
+}
diff --git a/assets/javascripts/discourse/components/modal/activity-pub-actor-reject.hbs b/assets/javascripts/discourse/components/modal/activity-pub-actor-reject.hbs
deleted file mode 100644
index e9c187e8..00000000
--- a/assets/javascripts/discourse/components/modal/activity-pub-actor-reject.hbs
+++ /dev/null
@@ -1,24 +0,0 @@
-
- <:body>
-
- {{i18n
- "discourse_activity_pub.actor_reject.confirm"
- actor=@model.actor.name
- follower=@model.follower.handle
- }}
-
-
-
- <:footer>
-
-
-
-
\ No newline at end of file
diff --git a/assets/javascripts/discourse/components/modal/activity-pub-actor-reject.js b/assets/javascripts/discourse/components/modal/activity-pub-actor-reject.js
deleted file mode 100644
index 0353456f..00000000
--- a/assets/javascripts/discourse/components/modal/activity-pub-actor-reject.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import Component from "@glimmer/component";
-import { action } from "@ember/object";
-import { i18n } from "discourse-i18n";
-
-export default class ActivityPubActorReject extends Component {
- get title() {
- return i18n("discourse_activity_pub.actor_reject.modal_title", {
- actor: this.args.model.actor?.name,
- });
- }
-
- @action
- reject() {
- const model = this.args.model;
- model.reject(model.actor, model.follower);
- this.args.closeModal();
- }
-}
diff --git a/assets/javascripts/discourse/components/modal/activity-pub-actor-unfollow.gjs b/assets/javascripts/discourse/components/modal/activity-pub-actor-unfollow.gjs
new file mode 100644
index 00000000..ca3a0ad1
--- /dev/null
+++ b/assets/javascripts/discourse/components/modal/activity-pub-actor-unfollow.gjs
@@ -0,0 +1,48 @@
+import Component from "@glimmer/component";
+import { action } from "@ember/object";
+import DButton from "discourse/components/d-button";
+import DModal from "discourse/components/d-modal";
+import DModalCancel from "discourse/components/d-modal-cancel";
+import { i18n } from "discourse-i18n";
+
+export default class ActivityPubActorUnfollow extends Component {
+ get title() {
+ return i18n("discourse_activity_pub.actor_unfollow.modal_title", {
+ actor: this.args.model.actor.name,
+ });
+ }
+
+ @action
+ unfollow() {
+ const model = this.args.model;
+ model.unfollow(model.actor, model.followedActor);
+ this.args.closeModal();
+ }
+
+
+
+ <:body>
+
+ {{i18n
+ "discourse_activity_pub.actor_unfollow.confirm"
+ actor=@model.actor.name
+ followed_actor=@model.followedActor.handle
+ }}
+
+
+
+ <:footer>
+
+
+
+
+
+}
diff --git a/assets/javascripts/discourse/components/modal/activity-pub-actor-unfollow.hbs b/assets/javascripts/discourse/components/modal/activity-pub-actor-unfollow.hbs
deleted file mode 100644
index 834b8662..00000000
--- a/assets/javascripts/discourse/components/modal/activity-pub-actor-unfollow.hbs
+++ /dev/null
@@ -1,24 +0,0 @@
-
- <:body>
-
- {{i18n
- "discourse_activity_pub.actor_unfollow.confirm"
- actor=@model.actor.name
- followed_actor=@model.followedActor.handle
- }}
-
-
-
- <:footer>
-
-
-
-
\ No newline at end of file
diff --git a/assets/javascripts/discourse/components/modal/activity-pub-actor-unfollow.js b/assets/javascripts/discourse/components/modal/activity-pub-actor-unfollow.js
deleted file mode 100644
index 0fc84606..00000000
--- a/assets/javascripts/discourse/components/modal/activity-pub-actor-unfollow.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import Component from "@glimmer/component";
-import { action } from "@ember/object";
-import { i18n } from "discourse-i18n";
-
-export default class ActivityPubActorUnfollow extends Component {
- get title() {
- return i18n("discourse_activity_pub.actor_unfollow.modal_title", {
- actor: this.args.model.actor.name,
- });
- }
-
- @action
- unfollow() {
- const model = this.args.model;
- model.unfollow(model.actor, model.followedActor);
- this.args.closeModal();
- }
-}
diff --git a/assets/javascripts/discourse/components/modal/activity-pub-follow.gjs b/assets/javascripts/discourse/components/modal/activity-pub-follow.gjs
new file mode 100644
index 00000000..7f3447c6
--- /dev/null
+++ b/assets/javascripts/discourse/components/modal/activity-pub-follow.gjs
@@ -0,0 +1,35 @@
+import Component from "@glimmer/component";
+import DModal from "discourse/components/d-modal";
+import { i18n } from "discourse-i18n";
+import ActivityPubFollowDomain from "../activity-pub-follow-domain";
+import ActivityPubHandle from "../activity-pub-handle";
+
+export default class ActivityPubFollow extends Component {
+ get title() {
+ const actor = this.args.model.actor;
+ return i18n("discourse_activity_pub.follow.title", {
+ actor: actor.name || actor.username,
+ });
+ }
+
+
+
+ <:body>
+
+
+
+ {{i18n "discourse_activity_pub.handle.label"}}
+
+
+
+ {{i18n "discourse_activity_pub.handle.description"}}
+
+
+
+
+
+}
diff --git a/assets/javascripts/discourse/components/modal/activity-pub-follow.hbs b/assets/javascripts/discourse/components/modal/activity-pub-follow.hbs
deleted file mode 100644
index 1e7c9612..00000000
--- a/assets/javascripts/discourse/components/modal/activity-pub-follow.hbs
+++ /dev/null
@@ -1,18 +0,0 @@
-
- <:body>
-
-
-
- {{i18n "discourse_activity_pub.handle.label"}}
-
-
-
- {{i18n "discourse_activity_pub.handle.description"}}
-
-
-
-
\ No newline at end of file
diff --git a/assets/javascripts/discourse/components/modal/activity-pub-follow.js b/assets/javascripts/discourse/components/modal/activity-pub-follow.js
deleted file mode 100644
index e9c7f727..00000000
--- a/assets/javascripts/discourse/components/modal/activity-pub-follow.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import Component from "@glimmer/component";
-import { i18n } from "discourse-i18n";
-
-export default class ActivityPubFollow extends Component {
- get title() {
- const actor = this.args.model.actor;
- return i18n("discourse_activity_pub.follow.title", {
- actor: actor.name || actor.username,
- });
- }
-}
diff --git a/assets/javascripts/discourse/components/modal/activity-pub-log-json.gjs b/assets/javascripts/discourse/components/modal/activity-pub-log-json.gjs
new file mode 100644
index 00000000..60120506
--- /dev/null
+++ b/assets/javascripts/discourse/components/modal/activity-pub-log-json.gjs
@@ -0,0 +1,65 @@
+import Component from "@glimmer/component";
+import { tracked } from "@glimmer/tracking";
+import { action } from "@ember/object";
+import DButton from "discourse/components/d-button";
+import DModal from "discourse/components/d-modal";
+import formatDate from "discourse/helpers/format-date";
+import htmlSafe from "discourse/helpers/html-safe";
+import discourseLater from "discourse/lib/later";
+import { clipboardCopy } from "discourse/lib/utilities";
+import { i18n } from "discourse-i18n";
+
+export default class ActivityPubLogJson extends Component {
+ @tracked copied = false;
+
+ get jsonDisplay() {
+ return JSON.stringify(this.args.model.log.json, null, 4);
+ }
+
+ @action
+ copyToClipboard() {
+ clipboardCopy(this.args.model.log.json);
+ this.copied = true;
+ discourseLater(() => {
+ this.copied = false;
+ }, 3000);
+ }
+
+
+
+ <:body>
+
+ {{this.jsonDisplay}}
+
+
+
+}
diff --git a/assets/javascripts/discourse/components/modal/activity-pub-log-json.hbs b/assets/javascripts/discourse/components/modal/activity-pub-log-json.hbs
deleted file mode 100644
index e8015f00..00000000
--- a/assets/javascripts/discourse/components/modal/activity-pub-log-json.hbs
+++ /dev/null
@@ -1,35 +0,0 @@
-
- <:body>
-
- {{this.jsonDisplay}}
-
-
\ No newline at end of file
diff --git a/assets/javascripts/discourse/components/modal/activity-pub-log-json.js b/assets/javascripts/discourse/components/modal/activity-pub-log-json.js
deleted file mode 100644
index 2d92c602..00000000
--- a/assets/javascripts/discourse/components/modal/activity-pub-log-json.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import Component from "@glimmer/component";
-import { tracked } from "@glimmer/tracking";
-import { action } from "@ember/object";
-import discourseLater from "discourse/lib/later";
-import { clipboardCopy } from "discourse/lib/utilities";
-
-export default class ActivityPubLogJson extends Component {
- @tracked copied = false;
-
- get jsonDisplay() {
- return JSON.stringify(this.args.model.log.json, null, 4);
- }
-
- @action
- copyToClipboard() {
- clipboardCopy(this.args.model.log.json);
- this.copied = true;
- discourseLater(() => {
- this.copied = false;
- }, 3000);
- }
-}
diff --git a/assets/javascripts/discourse/lib/activity-pub-utilities.js b/assets/javascripts/discourse/lib/activity-pub-utilities.js
index e04fd6c4..18811122 100644
--- a/assets/javascripts/discourse/lib/activity-pub-utilities.js
+++ b/assets/javascripts/discourse/lib/activity-pub-utilities.js
@@ -10,29 +10,22 @@ function getStatusDatetimeFormat(infoStatus = false) {
}
export function buildHandle({ actor, model, site }) {
- if ((!actor && !model) || (model && !site)) {
- return undefined;
- } else {
- const username = actor ? actor.username : model.activity_pub_username;
- const domain = actor ? actor.domain : site.activity_pub_host;
- return `@${username}@${domain}`;
+ if (actor) {
+ return `@${actor.username}@${actor.domain}`;
+ } else if (model && site) {
+ return `@${model.activity_pub_username}@${site.activity_pub_host}`;
}
}
export function showStatusToUser(user, siteSettings) {
- if (!siteSettings) {
- return false;
- }
const groupIds = siteSettings.activity_pub_post_status_visibility_groups
.split("|")
.map(Number);
- if (groupIds.includes(AUTO_GROUPS.everyone.id)) {
- return true;
- }
- if (!user) {
- return false;
- }
- return user.groups.some((group) => groupIds.includes(group.id));
+
+ return (
+ groupIds.includes(AUTO_GROUPS.everyone.id) ||
+ user?.groups.some((group) => groupIds.includes(group.id))
+ );
}
export function activityPubPostStatus(post) {
diff --git a/assets/javascripts/discourse/templates/activity-pub-about.gjs b/assets/javascripts/discourse/templates/activity-pub-about.gjs
new file mode 100644
index 00000000..c227ecbd
--- /dev/null
+++ b/assets/javascripts/discourse/templates/activity-pub-about.gjs
@@ -0,0 +1,32 @@
+import RouteTemplate from "ember-route-template";
+import { i18n } from "discourse-i18n";
+import ActivityPubActorCard from "../components/activity-pub-actor-card";
+
+export default RouteTemplate(
+
+
+
{{i18n "discourse_activity_pub.about.title"}}
+
{{i18n "discourse_activity_pub.about.description"}}
+ {{#if @controller.hasCategoryActors}}
+
+
{{i18n "discourse_activity_pub.about.categories"}}
+
+ {{#each @controller.categoryActors as |actor|}}
+
+ {{/each}}
+
+
+ {{/if}}
+ {{#if @controller.hasTagActors}}
+
+ {{/if}}
+
+
+);
diff --git a/assets/javascripts/discourse/templates/activity-pub-about.hbs b/assets/javascripts/discourse/templates/activity-pub-about.hbs
deleted file mode 100644
index 74ca50af..00000000
--- a/assets/javascripts/discourse/templates/activity-pub-about.hbs
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
{{i18n "discourse_activity_pub.about.title"}}
-
{{i18n "discourse_activity_pub.about.description"}}
- {{#if this.hasCategoryActors}}
-
-
{{i18n "discourse_activity_pub.about.categories"}}
-
- {{#each this.categoryActors as |actor|}}
-
- {{/each}}
-
-
- {{/if}}
- {{#if this.hasTagActors}}
-
- {{/if}}
-
\ No newline at end of file
diff --git a/assets/javascripts/discourse/templates/activity-pub-actor-followers.gjs b/assets/javascripts/discourse/templates/activity-pub-actor-followers.gjs
new file mode 100644
index 00000000..79ce79f1
--- /dev/null
+++ b/assets/javascripts/discourse/templates/activity-pub-actor-followers.gjs
@@ -0,0 +1,104 @@
+import { concat } from "@ember/helper";
+import RouteTemplate from "ember-route-template";
+import ConditionalLoadingSpinner from "discourse/components/conditional-loading-spinner";
+import LoadMore from "discourse/components/load-more";
+import ResponsiveTable from "discourse/components/responsive-table";
+import TableHeaderToggle from "discourse/components/table-header-toggle";
+import avatar from "discourse/helpers/avatar";
+import boundDate from "discourse/helpers/bound-date";
+import routeAction from "discourse/helpers/route-action";
+import { i18n } from "discourse-i18n";
+import ActivityPubActor from "../components/activity-pub-actor";
+import ActivityPubFollowBtn from "../components/activity-pub-follow-btn";
+
+export default RouteTemplate(
+
+
+ {{#if @controller.hasActors}}
+
+ <:header>
+
+
+
+ {{#if @controller.currentUser.admin}}
+
+ {{i18n
+ "discourse_activity_pub.follow_table.actions"
+ }}
+
+ {{/if}}
+
+ <:body>
+ {{#each @controller.actors as |follower|}}
+
+
+
+
+ {{boundDate follower.followed_at}}
+
+ {{#if @controller.currentUser.admin}}
+
+ {{/if}}
+
+ {{/each}}
+
+
+
+
+ {{else}}
+ {{i18n "search.no_results"}}
+ {{/if}}
+
+
+);
diff --git a/assets/javascripts/discourse/templates/activity-pub-actor-followers.hbs b/assets/javascripts/discourse/templates/activity-pub-actor-followers.hbs
deleted file mode 100644
index c777a332..00000000
--- a/assets/javascripts/discourse/templates/activity-pub-actor-followers.hbs
+++ /dev/null
@@ -1,83 +0,0 @@
-
- {{#if this.hasActors}}
-
- <:header>
-
-
-
- {{#if this.currentUser.admin}}
-
- {{i18n
- "discourse_activity_pub.follow_table.actions"
- }}
-
- {{/if}}
-
- <:body>
- {{#each this.actors as |follower|}}
-
-
-
-
- {{bound-date follower.followed_at}}
-
- {{#if this.currentUser.admin}}
-
- {{/if}}
-
- {{/each}}
-
-
-
-
- {{else}}
- {{i18n "search.no_results"}}
- {{/if}}
-
\ No newline at end of file
diff --git a/assets/javascripts/discourse/templates/activity-pub-actor-follows.gjs b/assets/javascripts/discourse/templates/activity-pub-actor-follows.gjs
new file mode 100644
index 00000000..40054229
--- /dev/null
+++ b/assets/javascripts/discourse/templates/activity-pub-actor-follows.gjs
@@ -0,0 +1,104 @@
+import { concat } from "@ember/helper";
+import RouteTemplate from "ember-route-template";
+import ConditionalLoadingSpinner from "discourse/components/conditional-loading-spinner";
+import LoadMore from "discourse/components/load-more";
+import ResponsiveTable from "discourse/components/responsive-table";
+import TableHeaderToggle from "discourse/components/table-header-toggle";
+import avatar from "discourse/helpers/avatar";
+import boundDate from "discourse/helpers/bound-date";
+import routeAction from "discourse/helpers/route-action";
+import { i18n } from "discourse-i18n";
+import ActivityPubActor from "../components/activity-pub-actor";
+import ActivityPubFollowBtn from "../components/activity-pub-follow-btn";
+
+export default RouteTemplate(
+
+
+ {{#if @controller.hasActors}}
+
+ <:header>
+
+
+
+
+
+ <:body>
+ {{#each @controller.actors as |actor|}}
+
+
+
+
+ {{#if actor.followed_at}}
+ {{boundDate actor.followed_at}}
+ {{else}}
+ {{i18n
+ "discourse_activity_pub.follow_table.follow_pending"
+ }}
+ {{/if}}
+
+
+
+ {{/each}}
+
+
+
+
+ {{else}}
+ {{i18n "search.no_results"}}
+ {{/if}}
+
+
+);
diff --git a/assets/javascripts/discourse/templates/activity-pub-actor-follows.hbs b/assets/javascripts/discourse/templates/activity-pub-actor-follows.hbs
deleted file mode 100644
index 7e9e263a..00000000
--- a/assets/javascripts/discourse/templates/activity-pub-actor-follows.hbs
+++ /dev/null
@@ -1,79 +0,0 @@
-
- {{#if this.hasActors}}
-
- <:header>
-
-
-
-
-
- <:body>
- {{#each this.actors as |actor|}}
-
-
-
-
- {{#if actor.followed_at}}
- {{bound-date actor.followed_at}}
- {{else}}
- {{i18n "discourse_activity_pub.follow_table.follow_pending"}}
- {{/if}}
-
-
-
- {{/each}}
-
-
-
-
- {{else}}
- {{i18n "search.no_results"}}
- {{/if}}
-
\ No newline at end of file
diff --git a/assets/javascripts/discourse/templates/activity-pub-actor.gjs b/assets/javascripts/discourse/templates/activity-pub-actor.gjs
new file mode 100644
index 00000000..1f380466
--- /dev/null
+++ b/assets/javascripts/discourse/templates/activity-pub-actor.gjs
@@ -0,0 +1,27 @@
+import RouteTemplate from "ember-route-template";
+import Navigation from "discourse/components/discovery/navigation";
+import routeAction from "discourse/helpers/route-action";
+import ActivityPubBanner from "../components/activity-pub-banner";
+import ActivityPubNav from "../components/activity-pub-nav";
+
+export default RouteTemplate(
+
+
+
+ {{#if @controller.site.activity_pub_publishing_enabled}}
+
+ {{/if}}
+
+
+
+ {{outlet}}
+
+);
diff --git a/assets/javascripts/discourse/templates/activity-pub-actor.hbs b/assets/javascripts/discourse/templates/activity-pub-actor.hbs
deleted file mode 100644
index ad214089..00000000
--- a/assets/javascripts/discourse/templates/activity-pub-actor.hbs
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-{{#if this.site.activity_pub_publishing_enabled}}
-
-{{/if}}
-
-
-
-{{outlet}}
\ No newline at end of file
diff --git a/assets/javascripts/discourse/templates/admin-plugins-activity-pub-actor-show.gjs b/assets/javascripts/discourse/templates/admin-plugins-activity-pub-actor-show.gjs
new file mode 100644
index 00000000..602bf661
--- /dev/null
+++ b/assets/javascripts/discourse/templates/admin-plugins-activity-pub-actor-show.gjs
@@ -0,0 +1,213 @@
+import { Input } from "@ember/component";
+import { fn, hash } from "@ember/helper";
+import { on } from "@ember/modifier";
+import RouteTemplate from "ember-route-template";
+import { and, eq, not } from "truth-helpers";
+import ConditionalLoadingSpinner from "discourse/components/conditional-loading-spinner";
+import DButton from "discourse/components/d-button";
+import DToggleSwitch from "discourse/components/d-toggle-switch";
+import icon from "discourse/helpers/d-icon";
+import { i18n } from "discourse-i18n";
+import ActivityPubActorModel from "../components/activity-pub-actor-model";
+import ActivityPubActorStatus from "../components/activity-pub-actor-status";
+import ActivityPubCategoryChooser from "../components/activity-pub-category-chooser";
+import ActivityPubHandle from "../components/activity-pub-handle";
+import ActivityPubPostObjectTypeDropdown from "../components/activity-pub-post-object-type-dropdown";
+import ActivityPubPublicationTypeDropdown from "../components/activity-pub-publication-type-dropdown";
+import ActivityPubSiteSettingNotice from "../components/activity-pub-site-setting-notice";
+import ActivityPubTagChooser from "../components/activity-pub-tag-chooser";
+import ActivityPubVisibilityDropdown from "../components/activity-pub-visibility-dropdown";
+
+export default RouteTemplate(
+
+
+
+
{{@controller.titleLabel}}
+
+
+
+
+
+
+
+ {{#if @controller.showForm}}
+
+ {{#if @controller.saveResponse}}
+
+ {{#if @controller.saveSuccess}}
+ {{icon "check"}}
+ {{i18n "admin.discourse_activity_pub.actor.save.success"}}
+ {{else}}
+ {{icon "xmark"}}
+ {{i18n "admin.discourse_activity_pub.actor.save.failed"}}
+ {{/if}}
+
+ {{/if}}
+
+ {{/if}}
+
+
+
+);
diff --git a/assets/javascripts/discourse/templates/admin-plugins-activity-pub-actor-show.hbs b/assets/javascripts/discourse/templates/admin-plugins-activity-pub-actor-show.hbs
deleted file mode 100644
index 4ff8ffcb..00000000
--- a/assets/javascripts/discourse/templates/admin-plugins-activity-pub-actor-show.hbs
+++ /dev/null
@@ -1,174 +0,0 @@
-
-
-
{{this.titleLabel}}
-
-
-
-
-
-
-
- {{#if this.showForm}}
-
- {{#if this.saveResponse}}
-
- {{#if this.saveSuccess}}
- {{d-icon "check"}}
- {{i18n "admin.discourse_activity_pub.actor.save.success"}}
- {{else}}
- {{d-icon "xmark"}}
- {{i18n "admin.discourse_activity_pub.actor.save.failed"}}
- {{/if}}
-
- {{/if}}
-
- {{/if}}
-
-
\ No newline at end of file
diff --git a/assets/javascripts/discourse/templates/admin-plugins-activity-pub-actor.gjs b/assets/javascripts/discourse/templates/admin-plugins-activity-pub-actor.gjs
new file mode 100644
index 00000000..07f1d5b5
--- /dev/null
+++ b/assets/javascripts/discourse/templates/admin-plugins-activity-pub-actor.gjs
@@ -0,0 +1,84 @@
+import { fn } from "@ember/helper";
+import RouteTemplate from "ember-route-template";
+import ConditionalLoadingSpinner from "discourse/components/conditional-loading-spinner";
+import DButton from "discourse/components/d-button";
+import LoadMore from "discourse/components/load-more";
+import ResponsiveTable from "discourse/components/responsive-table";
+import TableHeaderToggle from "discourse/components/table-header-toggle";
+import { i18n } from "discourse-i18n";
+import ActivityPubActor from "../components/activity-pub-actor";
+import ActivityPubActorModel from "../components/activity-pub-actor-model";
+
+export default RouteTemplate(
+
+
+
{{@controller.title}}
+
+
+
+ {{#if @controller.hasActors}}
+
+ <:header>
+
+
+
+
+
+
+ <:body>
+ {{#each @controller.actors as |actor|}}
+
+ {{/each}}
+
+
+
+
+ {{else}}
+ {{i18n "search.no_results"}}
+ {{/if}}
+
+
+);
diff --git a/assets/javascripts/discourse/templates/admin-plugins-activity-pub-actor.hbs b/assets/javascripts/discourse/templates/admin-plugins-activity-pub-actor.hbs
deleted file mode 100644
index 4b67246b..00000000
--- a/assets/javascripts/discourse/templates/admin-plugins-activity-pub-actor.hbs
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
{{this.title}}
-
-
-
- {{#if this.hasActors}}
-
- <:header>
-
-
-
-
-
-
- <:body>
- {{#each this.actors as |actor|}}
-
- {{/each}}
-
-
-
-
- {{else}}
- {{i18n "search.no_results"}}
- {{/if}}
-
\ No newline at end of file
diff --git a/assets/javascripts/discourse/templates/admin-plugins-activity-pub-log.gjs b/assets/javascripts/discourse/templates/admin-plugins-activity-pub-log.gjs
new file mode 100644
index 00000000..02300b00
--- /dev/null
+++ b/assets/javascripts/discourse/templates/admin-plugins-activity-pub-log.gjs
@@ -0,0 +1,90 @@
+import { fn } from "@ember/helper";
+import RouteTemplate from "ember-route-template";
+import ConditionalLoadingSpinner from "discourse/components/conditional-loading-spinner";
+import DButton from "discourse/components/d-button";
+import LoadMore from "discourse/components/load-more";
+import ResponsiveTable from "discourse/components/responsive-table";
+import TableHeaderToggle from "discourse/components/table-header-toggle";
+import formatDate from "discourse/helpers/format-date";
+import { i18n } from "discourse-i18n";
+
+export default RouteTemplate(
+
+
+
{{i18n "admin.discourse_activity_pub.log.title"}}
+
+
+
+ {{#if @controller.hasLogs}}
+
+ <:header>
+
+
+
+
+
+
+
+ <:body>
+ {{#each @controller.logs as |logEntry|}}
+
+
+ {{formatDate logEntry.created_at leaveAgo="true"}}
+
+
+ {{logEntry.level}}
+
+
+ {{logEntry.message}}
+
+
+ {{#if logEntry.json}}
+
+ {{/if}}
+
+
+ {{/each}}
+
+
+
+
+ {{else}}
+ {{i18n "search.no_results"}}
+ {{/if}}
+
+
+);
diff --git a/assets/javascripts/discourse/templates/admin-plugins-activity-pub-log.hbs b/assets/javascripts/discourse/templates/admin-plugins-activity-pub-log.hbs
deleted file mode 100644
index 9f6a3871..00000000
--- a/assets/javascripts/discourse/templates/admin-plugins-activity-pub-log.hbs
+++ /dev/null
@@ -1,76 +0,0 @@
-
-
{{i18n "admin.discourse_activity_pub.log.title"}}
-
-
-
- {{#if this.hasLogs}}
-
- <:header>
-
-
-
-
-
-
-
- <:body>
- {{#each this.logs as |log|}}
-
-
- {{formatDate log.created_at leaveAgo="true"}}
-
-
- {{log.level}}
-
-
- {{log.message}}
-
-
- {{#if log.json}}
-
- {{/if}}
-
-
- {{/each}}
-
-
-
-
- {{else}}
- {{i18n "search.no_results"}}
- {{/if}}
-
\ No newline at end of file
diff --git a/assets/javascripts/discourse/templates/admin-plugins-activity-pub.gjs b/assets/javascripts/discourse/templates/admin-plugins-activity-pub.gjs
new file mode 100644
index 00000000..545cd362
--- /dev/null
+++ b/assets/javascripts/discourse/templates/admin-plugins-activity-pub.gjs
@@ -0,0 +1,50 @@
+import { hash } from "@ember/helper";
+import { LinkTo } from "@ember/routing";
+import RouteTemplate from "ember-route-template";
+import icon from "discourse/helpers/d-icon";
+import { i18n } from "discourse-i18n";
+import AdminNav from "admin/components/admin-nav";
+
+export default RouteTemplate(
+
+ {{#AdminNav}}
+
+
+ {{i18n
+ "admin.discourse_activity_pub.actor.category.label"
+ }}
+
+
+
+
+ {{i18n "admin.discourse_activity_pub.actor.tag.label"}}
+
+
+
+
+ {{i18n "admin.discourse_activity_pub.log.label"}}
+
+
+
+
+ {{icon "plus"}}
+ {{i18n @controller.addActorLabel}}
+
+
+ {{/AdminNav}}
+
+
+ {{outlet}}
+
+
+);
diff --git a/assets/javascripts/discourse/templates/admin-plugins-activity-pub.hbs b/assets/javascripts/discourse/templates/admin-plugins-activity-pub.hbs
deleted file mode 100644
index 816fd1ab..00000000
--- a/assets/javascripts/discourse/templates/admin-plugins-activity-pub.hbs
+++ /dev/null
@@ -1,37 +0,0 @@
-{{#admin-nav}}
-
-
- {{i18n "admin.discourse_activity_pub.actor.category.label"}}
-
-
-
-
- {{i18n "admin.discourse_activity_pub.actor.tag.label"}}
-
-
-
-
- {{i18n "admin.discourse_activity_pub.log.label"}}
-
-
-
-
- {{d-icon "plus"}}
- {{i18n this.addActorLabel}}
-
-
-{{/admin-nav}}
-
-
- {{outlet}}
-
\ No newline at end of file
diff --git a/assets/javascripts/discourse/templates/preferences/activity-pub.gjs b/assets/javascripts/discourse/templates/preferences/activity-pub.gjs
new file mode 100644
index 00000000..f140457f
--- /dev/null
+++ b/assets/javascripts/discourse/templates/preferences/activity-pub.gjs
@@ -0,0 +1,88 @@
+import { concat, fn } from "@ember/helper";
+import RouteTemplate from "ember-route-template";
+import DButton from "discourse/components/d-button";
+import ResponsiveTable from "discourse/components/responsive-table";
+import bodyClass from "discourse/helpers/body-class";
+import { i18n } from "discourse-i18n";
+import ActivityPubActor from "../../components/activity-pub-actor";
+import ActivityPubAuthorize from "../../components/activity-pub-authorize";
+
+export default RouteTemplate(
+
+ {{bodyClass "user-preferences-activity-pub-page"}}
+
+
+
+ {{i18n "user.discourse_activity_pub.actors.title"}}
+
+
+
{{i18n "user.discourse_activity_pub.actors.description"}}
+
+
+
+
+ {{#if @controller.hasAuthorizations}}
+
+
+ <:header>
+
+
+
+
+
+
+
+
+
+
+ <:body>
+ {{#each @controller.authorizations as |authorization|}}
+
+
+
+ {{i18n
+ (concat
+ "user.discourse_activity_pub.authorize.auth_type."
+ authorization.auth_type
+ ".title"
+ )
+ }}
+
+
+
+
+
+ {{/each}}
+
+
+
+ {{/if}}
+
+);
diff --git a/assets/javascripts/discourse/templates/preferences/activity-pub.hbs b/assets/javascripts/discourse/templates/preferences/activity-pub.hbs
deleted file mode 100644
index ac5deaef..00000000
--- a/assets/javascripts/discourse/templates/preferences/activity-pub.hbs
+++ /dev/null
@@ -1,71 +0,0 @@
-{{body-class "user-preferences-activity-pub-page"}}
-
-
-
{{i18n
- "user.discourse_activity_pub.actors.title"
- }}
-
-
{{i18n "user.discourse_activity_pub.actors.description"}}
-
-
-
-
-{{#if this.hasAuthorizations}}
-
-
- <:header>
-
-
-
-
-
-
-
-
-
-
- <:body>
- {{#each this.authorizations as |authorization|}}
-
-
-
- {{i18n
- (concat
- "user.discourse_activity_pub.authorize.auth_type."
- authorization.auth_type
- ".title"
- )
- }}
-
-
-
-
-
- {{/each}}
-
-
-
-{{/if}}
\ No newline at end of file
diff --git a/assets/stylesheets/common/common.scss b/assets/stylesheets/common/common.scss
index 2b18ad05..ebc55d9f 100644
--- a/assets/stylesheets/common/common.scss
+++ b/assets/stylesheets/common/common.scss
@@ -422,7 +422,7 @@ body.user-preferences-activity-pub-page {
align-items: center;
justify-content: space-between;
- @media all and (max-width: 400px) {
+ @media all and (width <= 400px) {
flex-flow: wrap;
gap: 1em;
diff --git a/package.json b/package.json
index 8cdc01bf..882f8af7 100644
--- a/package.json
+++ b/package.json
@@ -1,11 +1,11 @@
{
"private": true,
"devDependencies": {
- "@discourse/lint-configs": "2.11.1",
- "ember-template-lint": "7.0.1",
- "eslint": "9.22.0",
+ "@discourse/lint-configs": "2.17.2",
+ "ember-template-lint": "7.6.0",
+ "eslint": "9.26.0",
"prettier": "3.5.3",
- "stylelint": "16.16.0"
+ "stylelint": "16.19.1"
},
"engines": {
"node": ">= 22",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index ae987b46..2f117150 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -9,20 +9,20 @@ importers:
.:
devDependencies:
'@discourse/lint-configs':
- specifier: 2.11.1
- version: 2.11.1(ember-template-lint@7.0.1(@babel/core@7.26.10))(eslint@9.22.0)(postcss@8.5.3)(prettier@3.5.3)(stylelint@16.16.0(typescript@5.8.2))
+ specifier: 2.17.2
+ version: 2.17.2(ember-template-lint@7.6.0(@babel/core@7.27.1))(eslint@9.26.0)(postcss@8.5.3)(prettier@3.5.3)(stylelint@16.19.1(typescript@5.8.3))
ember-template-lint:
- specifier: 7.0.1
- version: 7.0.1(@babel/core@7.26.10)
+ specifier: 7.6.0
+ version: 7.6.0(@babel/core@7.27.1)
eslint:
- specifier: 9.22.0
- version: 9.22.0
+ specifier: 9.26.0
+ version: 9.26.0
prettier:
specifier: 3.5.3
version: 3.5.3
stylelint:
- specifier: 16.16.0
- version: 16.16.0(typescript@5.8.2)
+ specifier: 16.19.1
+ version: 16.19.1(typescript@5.8.3)
packages:
@@ -30,130 +30,130 @@ packages:
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
engines: {node: '>=6.0.0'}
- '@babel/code-frame@7.26.2':
- resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
+ '@babel/code-frame@7.27.1':
+ resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
engines: {node: '>=6.9.0'}
- '@babel/compat-data@7.26.8':
- resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==}
+ '@babel/compat-data@7.27.2':
+ resolution: {integrity: sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==}
engines: {node: '>=6.9.0'}
- '@babel/core@7.26.10':
- resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==}
+ '@babel/core@7.27.1':
+ resolution: {integrity: sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==}
engines: {node: '>=6.9.0'}
- '@babel/eslint-parser@7.26.10':
- resolution: {integrity: sha512-QsfQZr4AiLpKqn7fz+j7SN+f43z2DZCgGyYbNJ2vJOqKfG4E6MZer1+jqGZqKJaxq/gdO2DC/nUu45+pOL5p2Q==}
+ '@babel/eslint-parser@7.27.1':
+ resolution: {integrity: sha512-q8rjOuadH0V6Zo4XLMkJ3RMQ9MSBqwaDByyYB0izsYdaIWGNLmEblbCOf1vyFHICcg16CD7Fsi51vcQnYxmt6Q==}
engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0}
peerDependencies:
'@babel/core': ^7.11.0
eslint: ^7.5.0 || ^8.0.0 || ^9.0.0
- '@babel/generator@7.26.10':
- resolution: {integrity: sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==}
+ '@babel/generator@7.27.1':
+ resolution: {integrity: sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==}
engines: {node: '>=6.9.0'}
- '@babel/helper-annotate-as-pure@7.25.9':
- resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==}
+ '@babel/helper-annotate-as-pure@7.27.1':
+ resolution: {integrity: sha512-WnuuDILl9oOBbKnb4L+DyODx7iC47XfzmNCpTttFsSp6hTG7XZxu60+4IO+2/hPfcGOoKbFiwoI/+zwARbNQow==}
engines: {node: '>=6.9.0'}
- '@babel/helper-compilation-targets@7.26.5':
- resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==}
+ '@babel/helper-compilation-targets@7.27.2':
+ resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
engines: {node: '>=6.9.0'}
- '@babel/helper-create-class-features-plugin@7.26.9':
- resolution: {integrity: sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==}
+ '@babel/helper-create-class-features-plugin@7.27.1':
+ resolution: {integrity: sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
- '@babel/helper-member-expression-to-functions@7.25.9':
- resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==}
+ '@babel/helper-member-expression-to-functions@7.27.1':
+ resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==}
engines: {node: '>=6.9.0'}
- '@babel/helper-module-imports@7.25.9':
- resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==}
+ '@babel/helper-module-imports@7.27.1':
+ resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
engines: {node: '>=6.9.0'}
- '@babel/helper-module-transforms@7.26.0':
- resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==}
+ '@babel/helper-module-transforms@7.27.1':
+ resolution: {integrity: sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
- '@babel/helper-optimise-call-expression@7.25.9':
- resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==}
+ '@babel/helper-optimise-call-expression@7.27.1':
+ resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==}
engines: {node: '>=6.9.0'}
- '@babel/helper-plugin-utils@7.26.5':
- resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==}
+ '@babel/helper-plugin-utils@7.27.1':
+ resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==}
engines: {node: '>=6.9.0'}
- '@babel/helper-replace-supers@7.26.5':
- resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==}
+ '@babel/helper-replace-supers@7.27.1':
+ resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
- '@babel/helper-skip-transparent-expression-wrappers@7.25.9':
- resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==}
+ '@babel/helper-skip-transparent-expression-wrappers@7.27.1':
+ resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==}
engines: {node: '>=6.9.0'}
- '@babel/helper-string-parser@7.25.9':
- resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
+ '@babel/helper-string-parser@7.27.1':
+ resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
engines: {node: '>=6.9.0'}
- '@babel/helper-validator-identifier@7.25.9':
- resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
+ '@babel/helper-validator-identifier@7.27.1':
+ resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
engines: {node: '>=6.9.0'}
- '@babel/helper-validator-option@7.25.9':
- resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==}
+ '@babel/helper-validator-option@7.27.1':
+ resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
engines: {node: '>=6.9.0'}
- '@babel/helpers@7.26.10':
- resolution: {integrity: sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==}
+ '@babel/helpers@7.27.1':
+ resolution: {integrity: sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==}
engines: {node: '>=6.9.0'}
- '@babel/parser@7.26.10':
- resolution: {integrity: sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==}
+ '@babel/parser@7.27.2':
+ resolution: {integrity: sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==}
engines: {node: '>=6.0.0'}
hasBin: true
- '@babel/plugin-proposal-decorators@7.25.9':
- resolution: {integrity: sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==}
+ '@babel/plugin-proposal-decorators@7.27.1':
+ resolution: {integrity: sha512-DTxe4LBPrtFdsWzgpmbBKevg3e9PBy+dXRt19kSbucbZvL2uqtdqwwpluL1jfxYE0wIDTFp1nTy/q6gNLsxXrg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-syntax-decorators@7.25.9':
- resolution: {integrity: sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==}
+ '@babel/plugin-syntax-decorators@7.27.1':
+ resolution: {integrity: sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-syntax-typescript@7.25.9':
- resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==}
+ '@babel/plugin-syntax-typescript@7.27.1':
+ resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-typescript@7.26.8':
- resolution: {integrity: sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw==}
+ '@babel/plugin-transform-typescript@7.27.1':
+ resolution: {integrity: sha512-Q5sT5+O4QUebHdbwKedFBEwRLb02zJ7r4A5Gg2hUoLuU3FjdMcyqcywqUrLCaDsFCxzokf7u9kuy7qz51YUuAg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/template@7.26.9':
- resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==}
+ '@babel/template@7.27.2':
+ resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
engines: {node: '>=6.9.0'}
- '@babel/traverse@7.26.10':
- resolution: {integrity: sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==}
+ '@babel/traverse@7.27.1':
+ resolution: {integrity: sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==}
engines: {node: '>=6.9.0'}
- '@babel/types@7.26.10':
- resolution: {integrity: sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==}
+ '@babel/types@7.27.1':
+ resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==}
engines: {node: '>=6.9.0'}
'@csstools/css-parser-algorithms@3.0.4':
@@ -179,13 +179,13 @@ packages:
peerDependencies:
postcss-selector-parser: ^7.0.0
- '@discourse/lint-configs@2.11.1':
- resolution: {integrity: sha512-VQh052cXp43ytw+dn+pIyM5BMtgACXZ0z+tNpXVcRwiJWn8dbvuJaypFgWR6QCks3AKujypmLK8+FMnlZYZGRQ==}
+ '@discourse/lint-configs@2.17.2':
+ resolution: {integrity: sha512-hb0n4GDYZj6zKQq+Ls9dlYpC4wCT1vSTxsm2KZTyabCiDipDkYXXabDV+cirNrHfDuDrVXIe7Wsxn4OWX0zbrQ==}
peerDependencies:
- ember-template-lint: 7.0.1
- eslint: 9.22.0
+ ember-template-lint: 7.6.0
+ eslint: 9.26.0
prettier: 3.5.3
- stylelint: 16.16.0
+ stylelint: 16.19.1
'@dual-bundle/import-meta-resolve@4.1.0':
resolution: {integrity: sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==}
@@ -193,8 +193,8 @@ packages:
'@ember-data/rfc395-data@0.0.4':
resolution: {integrity: sha512-tGRdvgC9/QMQSuSuJV45xoyhI0Pzjm7A9o/MVVA3HakXIImJbbzx/k/6dO9CUEQXIyS2y0fW6C1XaYOG7rY0FQ==}
- '@eslint-community/eslint-utils@4.5.1':
- resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==}
+ '@eslint-community/eslint-utils@4.7.0':
+ resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
@@ -203,32 +203,32 @@ packages:
resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
- '@eslint/config-array@0.19.2':
- resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==}
+ '@eslint/config-array@0.20.0':
+ resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/config-helpers@0.1.0':
- resolution: {integrity: sha512-kLrdPDJE1ckPo94kmPPf9Hfd0DU0Jw6oKYrhe+pwSC0iTUInmTa+w6fw8sGgcfkFJGNdWOUeOaDM4quW4a7OkA==}
+ '@eslint/config-helpers@0.2.2':
+ resolution: {integrity: sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/core@0.12.0':
- resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==}
+ '@eslint/core@0.13.0':
+ resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/eslintrc@3.3.0':
- resolution: {integrity: sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==}
+ '@eslint/eslintrc@3.3.1':
+ resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/js@9.22.0':
- resolution: {integrity: sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ==}
+ '@eslint/js@9.26.0':
+ resolution: {integrity: sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/object-schema@2.1.6':
resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/plugin-kit@0.2.7':
- resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==}
+ '@eslint/plugin-kit@0.2.8':
+ resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@glimmer/env@0.1.7':
@@ -283,8 +283,8 @@ packages:
resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
engines: {node: '>=18.18'}
- '@humanwhocodes/retry@0.4.2':
- resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==}
+ '@humanwhocodes/retry@0.4.3':
+ resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
engines: {node: '>=18.18'}
'@jridgewell/gen-mapping@0.3.8':
@@ -312,6 +312,10 @@ packages:
resolution: {integrity: sha512-F5z53uvRIF4dYfFfJP3a2Cqg+4P1dgJchJsFnsZE0eZp0LK8X7g2J0CsJHRgns+skpXOlM7n5vFGwkWCWj8qJg==}
engines: {node: 12.* || >= 14}
+ '@modelcontextprotocol/sdk@1.11.2':
+ resolution: {integrity: sha512-H9vwztj5OAqHg9GockCQC06k1natgcxWQSRpQcPJf6i5+MWBzfKkRtxGbjQf0X2ihii0ffLZCRGbYV2f2bjNCQ==}
+ engines: {node: '>=18'}
+
'@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1':
resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==}
@@ -340,8 +344,8 @@ packages:
'@types/eslint@8.56.12':
resolution: {integrity: sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==}
- '@types/estree@1.0.6':
- resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
+ '@types/estree@1.0.7':
+ resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
@@ -349,6 +353,10 @@ packages:
'@types/json5@0.0.29':
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+ accepts@2.0.0:
+ resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==}
+ engines: {node: '>= 0.6'}
+
acorn-jsx@5.3.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
@@ -392,8 +400,8 @@ packages:
resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
engines: {node: '>=8'}
- array.prototype.findlastindex@1.2.5:
- resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==}
+ array.prototype.findlastindex@1.2.6:
+ resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==}
engines: {node: '>= 0.4'}
array.prototype.flat@1.3.3:
@@ -442,6 +450,10 @@ packages:
bl@4.1.0:
resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
+ body-parser@2.2.0:
+ resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==}
+ engines: {node: '>=18'}
+
brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
@@ -449,8 +461,8 @@ packages:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
- browserslist@4.24.4:
- resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==}
+ browserslist@4.24.5:
+ resolution: {integrity: sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
@@ -460,8 +472,12 @@ packages:
buffer@6.0.3:
resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
- cacheable@1.8.9:
- resolution: {integrity: sha512-FicwAUyWnrtnd4QqYAoRlNs44/a1jTL7XDKqm5gJ90wz1DQPlC7U2Rd1Tydpv+E7WAr4sQHuw8Q8M3nZMAyecQ==}
+ bytes@3.1.2:
+ resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
+ engines: {node: '>= 0.8'}
+
+ cacheable@1.9.0:
+ resolution: {integrity: sha512-8D5htMCxPDUULux9gFzv30f04Xo3wCnik0oOxKoRTPIBoqA7HtOcJ87uBhQTs3jCfZZTrUBGsYIZOgE0ZRgMAg==}
call-bind-apply-helpers@1.0.2:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
@@ -479,8 +495,8 @@ packages:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
- caniuse-lite@1.0.30001704:
- resolution: {integrity: sha512-+L2IgBbV6gXB4ETf0keSvLr7JUrRVbIaB/lrQ1+z8mRcQiisG5k+lG6O4n6Y5q6f5EuNfaYXKgymucphlEXQew==}
+ caniuse-lite@1.0.30001717:
+ resolution: {integrity: sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw==}
chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
@@ -531,6 +547,10 @@ packages:
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+ content-disposition@1.0.0:
+ resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==}
+ engines: {node: '>= 0.6'}
+
content-tag-utils@0.3.1:
resolution: {integrity: sha512-uBAmklAxqmem7WX/F7YA4eWBTegGLJ93MOPSJaJliAuzTNgF3u/H9YLlJ6Nae9/FwV+037OuXc75hvcmub1qww==}
engines: {node: '>= 18'}
@@ -538,12 +558,28 @@ packages:
content-tag@2.0.3:
resolution: {integrity: sha512-htLIdtfhhKW2fHlFLnZH7GFzHSdSpHhDLrWVswkNiiPMZ5uXq5JfrGboQKFhNQuAAFF8VNB2EYUj3MsdJrKKpg==}
- content-tag@3.1.1:
- resolution: {integrity: sha512-94puwVk6X8oJcbRIEY03UM80zWzA3dYgGkOiRJzeY1vXgwrFUh3OolDDi/D7YBa6Vsx+CgAvuk4uXlB8loZ1FA==}
+ content-tag@3.1.3:
+ resolution: {integrity: sha512-4Kiv9mEroxuMXfWUNUHcljVJgxThCNk7eEswdHMXdzJnkBBaYDqDwzHkoh3F74JJhfU3taJOsgpR6oEGIDg17g==}
+
+ content-type@1.0.5:
+ resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
+ engines: {node: '>= 0.6'}
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+ cookie-signature@1.2.2:
+ resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==}
+ engines: {node: '>=6.6.0'}
+
+ cookie@0.7.2:
+ resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
+ engines: {node: '>= 0.6'}
+
+ cors@2.8.5:
+ resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
+ engines: {node: '>= 0.10'}
+
cosmiconfig@9.0.0:
resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==}
engines: {node: '>=14'}
@@ -624,6 +660,10 @@ packages:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
engines: {node: '>= 0.4'}
+ depd@2.0.0:
+ resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
+ engines: {node: '>= 0.8'}
+
dir-glob@3.0.1:
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
engines: {node: '>=8'}
@@ -639,8 +679,11 @@ packages:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
- electron-to-chromium@1.5.118:
- resolution: {integrity: sha512-yNDUus0iultYyVoEFLnQeei7LOQkL8wg8GQpkPCRrOlJXlcCwa6eGKZkxQ9ciHsqZyYbj8Jd94X1CTPzGm+uIA==}
+ ee-first@1.1.1:
+ resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
+
+ electron-to-chromium@1.5.151:
+ resolution: {integrity: sha512-Rl6uugut2l9sLojjS4H4SAr3A4IgACMLgpuEMPYCVcKydzfyPrn5absNRju38IhQOf/NwjJY8OGWjlteqYeBCA==}
ember-eslint-parser@0.5.9:
resolution: {integrity: sha512-IW4/3cEiFp49M2LiKyzi7VcT1egogOe8UxQ9eUKTooenC7Q4qNhzTD6rOZ8j51m8iJC+8hCzjbNCa3K4CN0Hhg==}
@@ -655,8 +698,8 @@ packages:
ember-rfc176-data@0.3.18:
resolution: {integrity: sha512-JtuLoYGSjay1W3MQAxt3eINWXNYYQliK90tLwtb8aeCuQK8zKGCRbBodVIrkcTqshULMnRuTOS6t1P7oQk3g6Q==}
- ember-template-lint@7.0.1:
- resolution: {integrity: sha512-rFGrioqtoHyWGig6PsURQYL797Hj1u9Wbn8ZyTO3H0NUNrRgPOX+2Gu9uTrmnf+KWry/2GB+yok6OY7mVSygIA==}
+ ember-template-lint@7.6.0:
+ resolution: {integrity: sha512-FqSPRB4w16Yy1fIwXPJgekSYcNFkvRvTePsgEc1C8o1gd/8bE0LgmkTXjf6pgGdIG477wMR1NyOm7oDCQNleVA==}
engines: {node: ^18.18.0 || >= 20.9.0}
hasBin: true
@@ -668,6 +711,10 @@ packages:
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+ encodeurl@2.0.0:
+ resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
+ engines: {node: '>= 0.8'}
+
env-paths@2.2.1:
resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
engines: {node: '>=6'}
@@ -707,6 +754,9 @@ packages:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'}
+ escape-html@1.0.3:
+ resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
+
escape-string-regexp@4.0.0:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
@@ -813,8 +863,8 @@ packages:
resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- eslint@9.22.0:
- resolution: {integrity: sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ==}
+ eslint@9.26.0:
+ resolution: {integrity: sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
peerDependencies:
@@ -847,6 +897,28 @@ packages:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines: {node: '>=0.10.0'}
+ etag@1.8.1:
+ resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
+ engines: {node: '>= 0.6'}
+
+ eventsource-parser@3.0.1:
+ resolution: {integrity: sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==}
+ engines: {node: '>=18.0.0'}
+
+ eventsource@3.0.7:
+ resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==}
+ engines: {node: '>=18.0.0'}
+
+ express-rate-limit@7.5.0:
+ resolution: {integrity: sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==}
+ engines: {node: '>= 16'}
+ peerDependencies:
+ express: ^4.11 || 5 || ^5.0.0-beta.1
+
+ express@5.1.0:
+ resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==}
+ engines: {node: '>= 18'}
+
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
@@ -870,8 +942,8 @@ packages:
fastq@1.19.1:
resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
- file-entry-cache@10.0.7:
- resolution: {integrity: sha512-txsf5fu3anp2ff3+gOJJzRImtrtm/oa9tYLN0iTuINZ++EyVR/nRrg2fKYwvG/pXDofcrvvb0scEbX3NyW/COw==}
+ file-entry-cache@10.1.0:
+ resolution: {integrity: sha512-Et/ex6smi3wOOB+n5mek+Grf7P2AxZR5ueqRUvAAn4qkyatXi3cUC1cuQXVkX0VlzBVsN4BkWJFmY/fYiRTdww==}
file-entry-cache@8.0.0:
resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
@@ -881,6 +953,10 @@ packages:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
+ finalhandler@2.1.0:
+ resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==}
+ engines: {node: '>= 0.8'}
+
find-up@5.0.0:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines: {node: '>=10'}
@@ -893,8 +969,8 @@ packages:
resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
engines: {node: '>=16'}
- flat-cache@6.1.7:
- resolution: {integrity: sha512-qwZ4xf1v1m7Rc9XiORly31YaChvKt6oNVHuqqZcoED/7O+ToyNVGobKsIAopY9ODcWpEDKEBAbrSOCBHtNQvew==}
+ flat-cache@6.1.9:
+ resolution: {integrity: sha512-DUqiKkTlAfhtl7g78IuwqYM+YqvT+as0mY+EVk6mfimy19U79pJCzDZQsnqk3Ou/T6hFXWLGbwbADzD/c8Tydg==}
flatted@3.3.3:
resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
@@ -903,6 +979,14 @@ packages:
resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
engines: {node: '>= 0.4'}
+ forwarded@0.2.0:
+ resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
+ engines: {node: '>= 0.6'}
+
+ fresh@2.0.0:
+ resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==}
+ engines: {node: '>= 0.8'}
+
fs-extra@9.1.0:
resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==}
engines: {node: '>=10'}
@@ -969,8 +1053,8 @@ packages:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
engines: {node: '>=18'}
- globals@16.0.0:
- resolution: {integrity: sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==}
+ globals@16.1.0:
+ resolution: {integrity: sha512-aibexHNbb/jiUSObBgpHLj+sIuUmJnYcgXBlrfsiDZ9rt4aF2TFRbyLgZ2iFQuVZ1K5Mx3FVkbKRSgKrbK3K2g==}
engines: {node: '>=18'}
globalthis@1.0.4:
@@ -1022,13 +1106,21 @@ packages:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
- hookified@1.8.1:
- resolution: {integrity: sha512-GrO2l93P8xCWBSTBX9l2BxI78VU/MAAYag+pG8curS3aBGy0++ZlxrQ7PdUOUVMbn5BwkGb6+eRrnf43ipnFEA==}
+ hookified@1.9.0:
+ resolution: {integrity: sha512-2yEEGqphImtKIe1NXWEhu6yD3hlFR4Mxk4Mtp3XEyScpSt4pQ4ymmXA1zzxZpj99QkFK+nN0nzjeb2+RUi/6CQ==}
html-tags@3.3.1:
resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==}
engines: {node: '>=8'}
+ http-errors@2.0.0:
+ resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
+ engines: {node: '>= 0.8'}
+
+ iconv-lite@0.6.3:
+ resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
+ engines: {node: '>=0.10.0'}
+
ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
@@ -1036,8 +1128,8 @@ packages:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'}
- ignore@7.0.3:
- resolution: {integrity: sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==}
+ ignore@7.0.4:
+ resolution: {integrity: sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==}
engines: {node: '>= 4'}
import-fresh@3.3.1:
@@ -1058,6 +1150,10 @@ packages:
resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
engines: {node: '>= 0.4'}
+ ipaddr.js@1.9.1:
+ resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
+ engines: {node: '>= 0.10'}
+
is-array-buffer@3.0.5:
resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==}
engines: {node: '>= 0.4'}
@@ -1133,6 +1229,9 @@ packages:
resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
engines: {node: '>=0.10.0'}
+ is-promise@4.0.0:
+ resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==}
+
is-regex@1.2.1:
resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
engines: {node: '>= 0.4'}
@@ -1221,15 +1320,15 @@ packages:
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
- keyv@5.3.1:
- resolution: {integrity: sha512-13hQT2q2VIwOoaJdJa7nY3J8UVbYtMTJFHnwm9LI+SaQRfUiM6Em9KZeOVTCKbMnGcRIL3NSUFpAdjZCq24nLQ==}
+ keyv@5.3.3:
+ resolution: {integrity: sha512-Rwu4+nXI9fqcxiEHtbkvoes2X+QfkTRo1TMkPfwzipGsJlJO/z69vqB4FNl9xJ3xCpAcbkvmEabZfPzrwN3+gQ==}
kind-of@6.0.3:
resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
engines: {node: '>=0.10.0'}
- known-css-properties@0.35.0:
- resolution: {integrity: sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==}
+ known-css-properties@0.36.0:
+ resolution: {integrity: sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA==}
language-subtag-registry@0.3.23:
resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==}
@@ -1288,13 +1387,21 @@ packages:
mdn-data@2.12.2:
resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==}
- mdn-data@2.18.0:
- resolution: {integrity: sha512-gtCy1yim/vpHF/tq3B4Z43x3zKWpYeb4IM3d/Mf4oMYcNuoXOYEaqtoFlLHw9zd7+WNN3jNh6/WXyUrD3OIiwQ==}
+ mdn-data@2.21.0:
+ resolution: {integrity: sha512-+ZKPQezM5vYJIkCxaC+4DTnRrVZR1CgsKLu5zsQERQx6Tea8Y+wMx5A24rq8A8NepCeatIQufVAekKNgiBMsGQ==}
+
+ media-typer@1.1.0:
+ resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==}
+ engines: {node: '>= 0.8'}
meow@13.2.0:
resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==}
engines: {node: '>=18'}
+ merge-descriptors@2.0.0:
+ resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==}
+ engines: {node: '>=18'}
+
merge2@1.4.1:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
@@ -1303,6 +1410,14 @@ packages:
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
engines: {node: '>=8.6'}
+ mime-db@1.54.0:
+ resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
+ engines: {node: '>= 0.6'}
+
+ mime-types@3.0.1:
+ resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==}
+ engines: {node: '>= 0.6'}
+
mimic-fn@2.1.0:
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
engines: {node: '>=6'}
@@ -1319,14 +1434,18 @@ packages:
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
- nanoid@3.3.9:
- resolution: {integrity: sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==}
+ nanoid@3.3.11:
+ resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+ negotiator@1.0.0:
+ resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
+ engines: {node: '>= 0.6'}
+
no-case@3.0.4:
resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
@@ -1337,6 +1456,10 @@ packages:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'}
+ object-assign@4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
+
object-inspect@1.13.4:
resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
engines: {node: '>= 0.4'}
@@ -1361,6 +1484,13 @@ packages:
resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==}
engines: {node: '>= 0.4'}
+ on-finished@2.4.1:
+ resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
+ engines: {node: '>= 0.8'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
onetime@5.1.2:
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
engines: {node: '>=6'}
@@ -1401,6 +1531,10 @@ packages:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
engines: {node: '>=8'}
+ parseurl@1.3.3:
+ resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
+ engines: {node: '>= 0.8'}
+
path-exists@4.0.0:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
@@ -1416,6 +1550,10 @@ packages:
path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+ path-to-regexp@8.2.0:
+ resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==}
+ engines: {node: '>=16'}
+
path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
@@ -1431,6 +1569,10 @@ packages:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
+ pkce-challenge@5.0.0:
+ resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==}
+ engines: {node: '>=16.20.0'}
+
possible-typed-array-names@1.1.0:
resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
engines: {node: '>= 0.4'}
@@ -1468,8 +1610,8 @@ packages:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
- prettier-plugin-ember-template-tag@2.0.4:
- resolution: {integrity: sha512-Ude3MJyPBMr/Er5aSS9Y0dsnHWX3prpJB+Jj/BKKUT/EvG2ftnIMBsZXmRu68RJA62JJB8MdKBloYmCu2pTRNg==}
+ prettier-plugin-ember-template-tag@2.0.5:
+ resolution: {integrity: sha512-G9lbK3wmryIBSzqBKKoy254v7hIjqzqYpqWxi9NvOxcxNtwLyrC1u9NLJJFm+x9blzqHQOzKGOseVnbLtEwEbg==}
engines: {node: 18.* || >= 20}
peerDependencies:
prettier: '>= 3.0.0'
@@ -1482,13 +1624,29 @@ packages:
proper-lockfile@4.1.2:
resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==}
+ proxy-addr@2.0.7:
+ resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
+ engines: {node: '>= 0.10'}
+
punycode@2.3.1:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
+ qs@6.14.0:
+ resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==}
+ engines: {node: '>=0.6'}
+
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+ range-parser@1.2.1:
+ resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
+ engines: {node: '>= 0.6'}
+
+ raw-body@3.0.0:
+ resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==}
+ engines: {node: '>= 0.8'}
+
readable-stream@3.6.2:
resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
engines: {node: '>= 6'}
@@ -1538,6 +1696,10 @@ packages:
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+ router@2.2.0:
+ resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==}
+ engines: {node: '>= 18'}
+
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
@@ -1556,10 +1718,21 @@ packages:
resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
engines: {node: '>= 0.4'}
+ safer-buffer@2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+
semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
+ send@1.2.0:
+ resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==}
+ engines: {node: '>= 18'}
+
+ serve-static@2.2.0:
+ resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==}
+ engines: {node: '>= 18'}
+
set-function-length@1.2.2:
resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
engines: {node: '>= 0.4'}
@@ -1572,6 +1745,9 @@ packages:
resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==}
engines: {node: '>= 0.4'}
+ setprototypeof@1.2.0:
+ resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
+
shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
engines: {node: '>=8'}
@@ -1625,6 +1801,10 @@ packages:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
+ statuses@2.0.1:
+ resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
+ engines: {node: '>= 0.8'}
+
string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'}
@@ -1672,11 +1852,11 @@ packages:
peerDependencies:
stylelint: ^16.1.0
- stylelint-config-recommended@15.0.0:
- resolution: {integrity: sha512-9LejMFsat7L+NXttdHdTq94byn25TD+82bzGRiV1Pgasl99pWnwipXS5DguTpp3nP1XjvLXVnEJIuYBfsRjRkA==}
+ stylelint-config-recommended@16.0.0:
+ resolution: {integrity: sha512-4RSmPjQegF34wNcK1e1O3Uz91HN8P1aFdFzio90wNK9mjgAI19u5vsU868cVZboKzCaa5XbpvtTzAAGQAxpcXA==}
engines: {node: '>=18.12.0'}
peerDependencies:
- stylelint: ^16.13.0
+ stylelint: ^16.16.0
stylelint-config-standard-scss@14.0.0:
resolution: {integrity: sha512-6Pa26D9mHyi4LauJ83ls3ELqCglU6VfCXchovbEqQUiEkezvKdv6VgsIoMy58i00c854wVmOw0k8W5FTpuaVqg==}
@@ -1694,20 +1874,20 @@ packages:
peerDependencies:
stylelint: ^16.1.0
- stylelint-config-standard@37.0.0:
- resolution: {integrity: sha512-+6eBlbSTrOn/il2RlV0zYGQwRTkr+WtzuVSs1reaWGObxnxLpbcspCUYajVQHonVfxVw2U+h42azGhrBvcg8OA==}
+ stylelint-config-standard@38.0.0:
+ resolution: {integrity: sha512-uj3JIX+dpFseqd/DJx8Gy3PcRAJhlEZ2IrlFOc4LUxBX/PNMEQ198x7LCOE2Q5oT9Vw8nyc4CIL78xSqPr6iag==}
engines: {node: '>=18.12.0'}
peerDependencies:
- stylelint: ^16.13.0
+ stylelint: ^16.18.0
- stylelint-scss@6.11.1:
- resolution: {integrity: sha512-e4rYo0UY+BIMtGeGanghrvHTjcryxgZbyFxUedp8dLFqC4P70aawNdYjRrQxbnKhu3BNr4+lt5e/53tcKXiwFA==}
+ stylelint-scss@6.12.0:
+ resolution: {integrity: sha512-U7CKhi1YNkM1pXUXl/GMUXi8xKdhl4Ayxdyceie1nZ1XNIdaUgMV6OArpooWcDzEggwgYD0HP/xIgVJo9a655w==}
engines: {node: '>=18.12.0'}
peerDependencies:
stylelint: ^16.0.2
- stylelint@16.16.0:
- resolution: {integrity: sha512-40X5UOb/0CEFnZVEHyN260HlSSUxPES+arrUphOumGWgXERHfwCD0kNBVILgQSij8iliYVwlc0V7M5bcLP9vPg==}
+ stylelint@16.19.1:
+ resolution: {integrity: sha512-C1SlPZNMKl+d/C867ZdCRthrS+6KuZ3AoGW113RZCOL0M8xOGpgx7G70wq7lFvqvm4dcfdGFVLB/mNaLFChRKw==}
engines: {node: '>=18.12.0'}
hasBin: true
@@ -1738,6 +1918,10 @@ packages:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
+ toidentifier@1.0.1:
+ resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
+ engines: {node: '>=0.6'}
+
tsconfig-paths@3.15.0:
resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
@@ -1748,6 +1932,10 @@ packages:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
+ type-is@2.0.1:
+ resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==}
+ engines: {node: '>= 0.6'}
+
typed-array-buffer@1.0.3:
resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
engines: {node: '>= 0.4'}
@@ -1764,8 +1952,8 @@ packages:
resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
engines: {node: '>= 0.4'}
- typescript@5.8.2:
- resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==}
+ typescript@5.8.3:
+ resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
engines: {node: '>=14.17'}
hasBin: true
@@ -1785,6 +1973,10 @@ packages:
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
engines: {node: '>= 10.0.0'}
+ unpipe@1.0.0:
+ resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
+ engines: {node: '>= 0.8'}
+
upath@2.0.1:
resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==}
engines: {node: '>=4'}
@@ -1804,6 +1996,10 @@ packages:
v8-compile-cache@2.4.0:
resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==}
+ vary@1.1.2:
+ resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
+ engines: {node: '>= 0.8'}
+
wcwidth@1.0.1:
resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
@@ -1843,6 +2039,9 @@ packages:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
engines: {node: '>=10'}
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
write-file-atomic@5.0.1:
resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
@@ -1866,10 +2065,18 @@ packages:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
- yocto-queue@1.2.0:
- resolution: {integrity: sha512-KHBC7z61OJeaMGnF3wqNZj+GGNXOyypZviiKpQeiHirG5Ib1ImwcLBH70rbMSkKfSmUNBsdf2PwaEJtKvgmkNw==}
+ yocto-queue@1.2.1:
+ resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==}
engines: {node: '>=12.20'}
+ zod-to-json-schema@3.24.5:
+ resolution: {integrity: sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==}
+ peerDependencies:
+ zod: ^3.24.1
+
+ zod@3.24.4:
+ resolution: {integrity: sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==}
+
snapshots:
'@ampproject/remapping@2.3.0':
@@ -1877,26 +2084,26 @@ snapshots:
'@jridgewell/gen-mapping': 0.3.8
'@jridgewell/trace-mapping': 0.3.25
- '@babel/code-frame@7.26.2':
+ '@babel/code-frame@7.27.1':
dependencies:
- '@babel/helper-validator-identifier': 7.25.9
+ '@babel/helper-validator-identifier': 7.27.1
js-tokens: 4.0.0
picocolors: 1.1.1
- '@babel/compat-data@7.26.8': {}
+ '@babel/compat-data@7.27.2': {}
- '@babel/core@7.26.10':
+ '@babel/core@7.27.1':
dependencies:
'@ampproject/remapping': 2.3.0
- '@babel/code-frame': 7.26.2
- '@babel/generator': 7.26.10
- '@babel/helper-compilation-targets': 7.26.5
- '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10)
- '@babel/helpers': 7.26.10
- '@babel/parser': 7.26.10
- '@babel/template': 7.26.9
- '@babel/traverse': 7.26.10
- '@babel/types': 7.26.10
+ '@babel/code-frame': 7.27.1
+ '@babel/generator': 7.27.1
+ '@babel/helper-compilation-targets': 7.27.2
+ '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1)
+ '@babel/helpers': 7.27.1
+ '@babel/parser': 7.27.2
+ '@babel/template': 7.27.2
+ '@babel/traverse': 7.27.1
+ '@babel/types': 7.27.1
convert-source-map: 2.0.0
debug: 4.4.0
gensync: 1.0.0-beta.2
@@ -1905,159 +2112,159 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@babel/eslint-parser@7.26.10(@babel/core@7.26.10)(eslint@9.22.0)':
+ '@babel/eslint-parser@7.27.1(@babel/core@7.27.1)(eslint@9.26.0)':
dependencies:
- '@babel/core': 7.26.10
+ '@babel/core': 7.27.1
'@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1
- eslint: 9.22.0
+ eslint: 9.26.0
eslint-visitor-keys: 2.1.0
semver: 6.3.1
- '@babel/generator@7.26.10':
+ '@babel/generator@7.27.1':
dependencies:
- '@babel/parser': 7.26.10
- '@babel/types': 7.26.10
+ '@babel/parser': 7.27.2
+ '@babel/types': 7.27.1
'@jridgewell/gen-mapping': 0.3.8
'@jridgewell/trace-mapping': 0.3.25
jsesc: 3.1.0
- '@babel/helper-annotate-as-pure@7.25.9':
+ '@babel/helper-annotate-as-pure@7.27.1':
dependencies:
- '@babel/types': 7.26.10
+ '@babel/types': 7.27.1
- '@babel/helper-compilation-targets@7.26.5':
+ '@babel/helper-compilation-targets@7.27.2':
dependencies:
- '@babel/compat-data': 7.26.8
- '@babel/helper-validator-option': 7.25.9
- browserslist: 4.24.4
+ '@babel/compat-data': 7.27.2
+ '@babel/helper-validator-option': 7.27.1
+ browserslist: 4.24.5
lru-cache: 5.1.1
semver: 6.3.1
- '@babel/helper-create-class-features-plugin@7.26.9(@babel/core@7.26.10)':
+ '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.27.1)':
dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-annotate-as-pure': 7.25.9
- '@babel/helper-member-expression-to-functions': 7.25.9
- '@babel/helper-optimise-call-expression': 7.25.9
- '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10)
- '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
- '@babel/traverse': 7.26.10
+ '@babel/core': 7.27.1
+ '@babel/helper-annotate-as-pure': 7.27.1
+ '@babel/helper-member-expression-to-functions': 7.27.1
+ '@babel/helper-optimise-call-expression': 7.27.1
+ '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.1)
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ '@babel/traverse': 7.27.1
semver: 6.3.1
transitivePeerDependencies:
- supports-color
- '@babel/helper-member-expression-to-functions@7.25.9':
+ '@babel/helper-member-expression-to-functions@7.27.1':
dependencies:
- '@babel/traverse': 7.26.10
- '@babel/types': 7.26.10
+ '@babel/traverse': 7.27.1
+ '@babel/types': 7.27.1
transitivePeerDependencies:
- supports-color
- '@babel/helper-module-imports@7.25.9':
+ '@babel/helper-module-imports@7.27.1':
dependencies:
- '@babel/traverse': 7.26.10
- '@babel/types': 7.26.10
+ '@babel/traverse': 7.27.1
+ '@babel/types': 7.27.1
transitivePeerDependencies:
- supports-color
- '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)':
+ '@babel/helper-module-transforms@7.27.1(@babel/core@7.27.1)':
dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-module-imports': 7.25.9
- '@babel/helper-validator-identifier': 7.25.9
- '@babel/traverse': 7.26.10
+ '@babel/core': 7.27.1
+ '@babel/helper-module-imports': 7.27.1
+ '@babel/helper-validator-identifier': 7.27.1
+ '@babel/traverse': 7.27.1
transitivePeerDependencies:
- supports-color
- '@babel/helper-optimise-call-expression@7.25.9':
+ '@babel/helper-optimise-call-expression@7.27.1':
dependencies:
- '@babel/types': 7.26.10
+ '@babel/types': 7.27.1
- '@babel/helper-plugin-utils@7.26.5': {}
+ '@babel/helper-plugin-utils@7.27.1': {}
- '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.10)':
+ '@babel/helper-replace-supers@7.27.1(@babel/core@7.27.1)':
dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-member-expression-to-functions': 7.25.9
- '@babel/helper-optimise-call-expression': 7.25.9
- '@babel/traverse': 7.26.10
+ '@babel/core': 7.27.1
+ '@babel/helper-member-expression-to-functions': 7.27.1
+ '@babel/helper-optimise-call-expression': 7.27.1
+ '@babel/traverse': 7.27.1
transitivePeerDependencies:
- supports-color
- '@babel/helper-skip-transparent-expression-wrappers@7.25.9':
+ '@babel/helper-skip-transparent-expression-wrappers@7.27.1':
dependencies:
- '@babel/traverse': 7.26.10
- '@babel/types': 7.26.10
+ '@babel/traverse': 7.27.1
+ '@babel/types': 7.27.1
transitivePeerDependencies:
- supports-color
- '@babel/helper-string-parser@7.25.9': {}
+ '@babel/helper-string-parser@7.27.1': {}
- '@babel/helper-validator-identifier@7.25.9': {}
+ '@babel/helper-validator-identifier@7.27.1': {}
- '@babel/helper-validator-option@7.25.9': {}
+ '@babel/helper-validator-option@7.27.1': {}
- '@babel/helpers@7.26.10':
+ '@babel/helpers@7.27.1':
dependencies:
- '@babel/template': 7.26.9
- '@babel/types': 7.26.10
+ '@babel/template': 7.27.2
+ '@babel/types': 7.27.1
- '@babel/parser@7.26.10':
+ '@babel/parser@7.27.2':
dependencies:
- '@babel/types': 7.26.10
+ '@babel/types': 7.27.1
- '@babel/plugin-proposal-decorators@7.25.9(@babel/core@7.26.10)':
+ '@babel/plugin-proposal-decorators@7.27.1(@babel/core@7.27.1)':
dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.10)
- '@babel/helper-plugin-utils': 7.26.5
- '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.26.10)
+ '@babel/core': 7.27.1
+ '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.1)
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-syntax-decorators': 7.27.1(@babel/core@7.27.1)
transitivePeerDependencies:
- supports-color
- '@babel/plugin-syntax-decorators@7.25.9(@babel/core@7.26.10)':
+ '@babel/plugin-syntax-decorators@7.27.1(@babel/core@7.27.1)':
dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.26.5
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.10)':
+ '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.27.1)':
dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.26.5
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-typescript@7.26.8(@babel/core@7.26.10)':
+ '@babel/plugin-transform-typescript@7.27.1(@babel/core@7.27.1)':
dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-annotate-as-pure': 7.25.9
- '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.10)
- '@babel/helper-plugin-utils': 7.26.5
- '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
- '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.10)
+ '@babel/core': 7.27.1
+ '@babel/helper-annotate-as-pure': 7.27.1
+ '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.1)
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.1)
transitivePeerDependencies:
- supports-color
- '@babel/template@7.26.9':
+ '@babel/template@7.27.2':
dependencies:
- '@babel/code-frame': 7.26.2
- '@babel/parser': 7.26.10
- '@babel/types': 7.26.10
+ '@babel/code-frame': 7.27.1
+ '@babel/parser': 7.27.2
+ '@babel/types': 7.27.1
- '@babel/traverse@7.26.10':
+ '@babel/traverse@7.27.1':
dependencies:
- '@babel/code-frame': 7.26.2
- '@babel/generator': 7.26.10
- '@babel/parser': 7.26.10
- '@babel/template': 7.26.9
- '@babel/types': 7.26.10
+ '@babel/code-frame': 7.27.1
+ '@babel/generator': 7.27.1
+ '@babel/parser': 7.27.2
+ '@babel/template': 7.27.2
+ '@babel/types': 7.27.1
debug: 4.4.0
globals: 11.12.0
transitivePeerDependencies:
- supports-color
- '@babel/types@7.26.10':
+ '@babel/types@7.27.1':
dependencies:
- '@babel/helper-string-parser': 7.25.9
- '@babel/helper-validator-identifier': 7.25.9
+ '@babel/helper-string-parser': 7.27.1
+ '@babel/helper-validator-identifier': 7.27.1
'@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3)':
dependencies:
@@ -2074,26 +2281,27 @@ snapshots:
dependencies:
postcss-selector-parser: 7.1.0
- '@discourse/lint-configs@2.11.1(ember-template-lint@7.0.1(@babel/core@7.26.10))(eslint@9.22.0)(postcss@8.5.3)(prettier@3.5.3)(stylelint@16.16.0(typescript@5.8.2))':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/eslint-parser': 7.26.10(@babel/core@7.26.10)(eslint@9.22.0)
- '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.10)
- ember-template-lint: 7.0.1(@babel/core@7.26.10)
- eslint: 9.22.0
- eslint-plugin-decorator-position: 6.0.0(@babel/eslint-parser@7.26.10(@babel/core@7.26.10)(eslint@9.22.0))(eslint@9.22.0)
- eslint-plugin-ember: 12.5.0(@babel/core@7.26.10)(eslint@9.22.0)
- eslint-plugin-import: 2.31.0(eslint@9.22.0)
- eslint-plugin-qunit: 8.1.2(eslint@9.22.0)
- eslint-plugin-simple-import-sort: 12.1.1(eslint@9.22.0)
- eslint-plugin-sort-class-members: 1.21.0(eslint@9.22.0)
- globals: 16.0.0
+ '@discourse/lint-configs@2.17.2(ember-template-lint@7.6.0(@babel/core@7.27.1))(eslint@9.26.0)(postcss@8.5.3)(prettier@3.5.3)(stylelint@16.19.1(typescript@5.8.3))':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/eslint-parser': 7.27.1(@babel/core@7.27.1)(eslint@9.26.0)
+ '@babel/plugin-proposal-decorators': 7.27.1(@babel/core@7.27.1)
+ ember-template-lint: 7.6.0(@babel/core@7.27.1)
+ eslint: 9.26.0
+ eslint-plugin-decorator-position: 6.0.0(@babel/eslint-parser@7.27.1(@babel/core@7.27.1)(eslint@9.26.0))(eslint@9.26.0)
+ eslint-plugin-ember: 12.5.0(@babel/core@7.27.1)(eslint@9.26.0)
+ eslint-plugin-import: 2.31.0(eslint@9.26.0)
+ eslint-plugin-qunit: 8.1.2(eslint@9.26.0)
+ eslint-plugin-simple-import-sort: 12.1.1(eslint@9.26.0)
+ eslint-plugin-sort-class-members: 1.21.0(eslint@9.26.0)
+ globals: 16.1.0
prettier: 3.5.3
- prettier-plugin-ember-template-tag: 2.0.4(prettier@3.5.3)
- stylelint: 16.16.0(typescript@5.8.2)
- stylelint-config-standard: 37.0.0(stylelint@16.16.0(typescript@5.8.2))
- stylelint-config-standard-scss: 14.0.0(postcss@8.5.3)(stylelint@16.16.0(typescript@5.8.2))
- typescript: 5.8.2
+ prettier-plugin-ember-template-tag: 2.0.5(prettier@3.5.3)
+ stylelint: 16.19.1(typescript@5.8.3)
+ stylelint-config-standard: 38.0.0(stylelint@16.19.1(typescript@5.8.3))
+ stylelint-config-standard-scss: 14.0.0(postcss@8.5.3)(stylelint@16.19.1(typescript@5.8.3))
+ stylelint-scss: 6.12.0(stylelint@16.19.1(typescript@5.8.3))
+ typescript: 5.8.3
transitivePeerDependencies:
- '@typescript-eslint/parser'
- eslint-import-resolver-typescript
@@ -2105,14 +2313,14 @@ snapshots:
'@ember-data/rfc395-data@0.0.4': {}
- '@eslint-community/eslint-utils@4.5.1(eslint@9.22.0)':
+ '@eslint-community/eslint-utils@4.7.0(eslint@9.26.0)':
dependencies:
- eslint: 9.22.0
+ eslint: 9.26.0
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.1': {}
- '@eslint/config-array@0.19.2':
+ '@eslint/config-array@0.20.0':
dependencies:
'@eslint/object-schema': 2.1.6
debug: 4.4.0
@@ -2120,13 +2328,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@eslint/config-helpers@0.1.0': {}
+ '@eslint/config-helpers@0.2.2': {}
- '@eslint/core@0.12.0':
+ '@eslint/core@0.13.0':
dependencies:
'@types/json-schema': 7.0.15
- '@eslint/eslintrc@3.3.0':
+ '@eslint/eslintrc@3.3.1':
dependencies:
ajv: 6.12.6
debug: 4.4.0
@@ -2140,13 +2348,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@eslint/js@9.22.0': {}
+ '@eslint/js@9.26.0': {}
'@eslint/object-schema@2.1.6': {}
- '@eslint/plugin-kit@0.2.7':
+ '@eslint/plugin-kit@0.2.8':
dependencies:
- '@eslint/core': 0.12.0
+ '@eslint/core': 0.13.0
levn: 0.4.1
'@glimmer/env@0.1.7': {}
@@ -2220,7 +2428,7 @@ snapshots:
'@humanwhocodes/retry@0.3.1': {}
- '@humanwhocodes/retry@0.4.2': {}
+ '@humanwhocodes/retry@0.4.3': {}
'@jridgewell/gen-mapping@0.3.8':
dependencies:
@@ -2253,6 +2461,21 @@ snapshots:
tslib: 2.8.1
upath: 2.0.1
+ '@modelcontextprotocol/sdk@1.11.2':
+ dependencies:
+ content-type: 1.0.5
+ cors: 2.8.5
+ cross-spawn: 7.0.6
+ eventsource: 3.0.7
+ express: 5.1.0
+ express-rate-limit: 7.5.0(express@5.1.0)
+ pkce-challenge: 5.0.0
+ raw-body: 3.0.0
+ zod: 3.24.4
+ zod-to-json-schema: 3.24.5(zod@3.24.4)
+ transitivePeerDependencies:
+ - supports-color
+
'@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1':
dependencies:
eslint-scope: 5.1.1
@@ -2277,15 +2500,20 @@ snapshots:
'@types/eslint@8.56.12':
dependencies:
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.7
'@types/json-schema': 7.0.15
- '@types/estree@1.0.6': {}
+ '@types/estree@1.0.7': {}
'@types/json-schema@7.0.15': {}
'@types/json5@0.0.29': {}
+ accepts@2.0.0:
+ dependencies:
+ mime-types: 3.0.1
+ negotiator: 1.0.0
+
acorn-jsx@5.3.2(acorn@8.14.1):
dependencies:
acorn: 8.14.1
@@ -2332,9 +2560,10 @@ snapshots:
array-union@2.1.0: {}
- array.prototype.findlastindex@1.2.5:
+ array.prototype.findlastindex@1.2.6:
dependencies:
call-bind: 1.0.8
+ call-bound: 1.0.4
define-properties: 1.2.1
es-abstract: 1.23.9
es-errors: 1.3.0
@@ -2398,6 +2627,20 @@ snapshots:
inherits: 2.0.4
readable-stream: 3.6.2
+ body-parser@2.2.0:
+ dependencies:
+ bytes: 3.1.2
+ content-type: 1.0.5
+ debug: 4.4.0
+ http-errors: 2.0.0
+ iconv-lite: 0.6.3
+ on-finished: 2.4.1
+ qs: 6.14.0
+ raw-body: 3.0.0
+ type-is: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
brace-expansion@1.1.11:
dependencies:
balanced-match: 1.0.2
@@ -2407,12 +2650,12 @@ snapshots:
dependencies:
fill-range: 7.1.1
- browserslist@4.24.4:
+ browserslist@4.24.5:
dependencies:
- caniuse-lite: 1.0.30001704
- electron-to-chromium: 1.5.118
+ caniuse-lite: 1.0.30001717
+ electron-to-chromium: 1.5.151
node-releases: 2.0.19
- update-browserslist-db: 1.1.3(browserslist@4.24.4)
+ update-browserslist-db: 1.1.3(browserslist@4.24.5)
buffer@5.7.1:
dependencies:
@@ -2424,10 +2667,12 @@ snapshots:
base64-js: 1.5.1
ieee754: 1.2.1
- cacheable@1.8.9:
+ bytes@3.1.2: {}
+
+ cacheable@1.9.0:
dependencies:
- hookified: 1.8.1
- keyv: 5.3.1
+ hookified: 1.9.0
+ keyv: 5.3.3
call-bind-apply-helpers@1.0.2:
dependencies:
@@ -2448,7 +2693,7 @@ snapshots:
callsites@3.1.0: {}
- caniuse-lite@1.0.30001704: {}
+ caniuse-lite@1.0.30001717: {}
chalk@4.1.2:
dependencies:
@@ -2487,24 +2732,39 @@ snapshots:
concat-map@0.0.1: {}
+ content-disposition@1.0.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
content-tag-utils@0.3.1:
dependencies:
- content-tag: 3.1.1
+ content-tag: 3.1.3
content-tag@2.0.3: {}
- content-tag@3.1.1: {}
+ content-tag@3.1.3: {}
+
+ content-type@1.0.5: {}
convert-source-map@2.0.0: {}
- cosmiconfig@9.0.0(typescript@5.8.2):
+ cookie-signature@1.2.2: {}
+
+ cookie@0.7.2: {}
+
+ cors@2.8.5:
+ dependencies:
+ object-assign: 4.1.1
+ vary: 1.1.2
+
+ cosmiconfig@9.0.0(typescript@5.8.3):
dependencies:
env-paths: 2.2.1
import-fresh: 3.3.1
js-yaml: 4.1.0
parse-json: 5.2.0
optionalDependencies:
- typescript: 5.8.2
+ typescript: 5.8.3
cross-spawn@7.0.6:
dependencies:
@@ -2571,6 +2831,8 @@ snapshots:
has-property-descriptors: 1.0.2
object-keys: 1.1.1
+ depd@2.0.0: {}
+
dir-glob@3.0.1:
dependencies:
path-type: 4.0.0
@@ -2590,12 +2852,14 @@ snapshots:
es-errors: 1.3.0
gopd: 1.2.0
- electron-to-chromium@1.5.118: {}
+ ee-first@1.1.1: {}
+
+ electron-to-chromium@1.5.151: {}
- ember-eslint-parser@0.5.9(@babel/core@7.26.10)(eslint@9.22.0):
+ ember-eslint-parser@0.5.9(@babel/core@7.27.1)(eslint@9.26.0):
dependencies:
- '@babel/core': 7.26.10
- '@babel/eslint-parser': 7.26.10(@babel/core@7.26.10)(eslint@9.22.0)
+ '@babel/core': 7.27.1
+ '@babel/eslint-parser': 7.27.1(@babel/core@7.27.1)(eslint@9.26.0)
'@glimmer/syntax': 0.92.3
content-tag: 2.0.3
eslint-scope: 7.2.2
@@ -2607,18 +2871,18 @@ snapshots:
ember-rfc176-data@0.3.18: {}
- ember-template-lint@7.0.1(@babel/core@7.26.10):
+ ember-template-lint@7.6.0(@babel/core@7.27.1):
dependencies:
- '@babel/generator': 7.26.10
- '@babel/parser': 7.26.10
- '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.10)
- '@babel/plugin-transform-typescript': 7.26.8(@babel/core@7.26.10)
- '@babel/traverse': 7.26.10
+ '@babel/generator': 7.27.1
+ '@babel/parser': 7.27.2
+ '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.27.1)
+ '@babel/traverse': 7.27.1
'@lint-todo/utils': 13.1.1
aria-query: 5.3.2
chalk: 5.4.1
ci-info: 4.2.0
- content-tag: 3.1.1
+ content-tag: 3.1.3
content-tag-utils: 0.3.1
date-fns: 3.6.0
ember-template-recast: 6.1.5
@@ -2655,6 +2919,8 @@ snapshots:
emoji-regex@8.0.0: {}
+ encodeurl@2.0.0: {}
+
env-paths@2.2.1: {}
error-ex@1.3.2:
@@ -2742,6 +3008,8 @@ snapshots:
escalade@3.2.0: {}
+ escape-html@1.0.3: {}
+
escape-string-regexp@4.0.0: {}
eslint-formatter-kakoune@1.0.0: {}
@@ -2754,36 +3022,36 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.12.0(eslint-import-resolver-node@0.3.9)(eslint@9.22.0):
+ eslint-module-utils@2.12.0(eslint-import-resolver-node@0.3.9)(eslint@9.26.0):
dependencies:
debug: 3.2.7
optionalDependencies:
- eslint: 9.22.0
+ eslint: 9.26.0
eslint-import-resolver-node: 0.3.9
transitivePeerDependencies:
- supports-color
- eslint-plugin-decorator-position@6.0.0(@babel/eslint-parser@7.26.10(@babel/core@7.26.10)(eslint@9.22.0))(eslint@9.22.0):
+ eslint-plugin-decorator-position@6.0.0(@babel/eslint-parser@7.27.1(@babel/core@7.27.1)(eslint@9.26.0))(eslint@9.26.0):
dependencies:
- '@babel/core': 7.26.10
- '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.10)
+ '@babel/core': 7.27.1
+ '@babel/plugin-proposal-decorators': 7.27.1(@babel/core@7.27.1)
'@ember-data/rfc395-data': 0.0.4
ember-rfc176-data: 0.3.18
- eslint: 9.22.0
+ eslint: 9.26.0
snake-case: 3.0.4
optionalDependencies:
- '@babel/eslint-parser': 7.26.10(@babel/core@7.26.10)(eslint@9.22.0)
+ '@babel/eslint-parser': 7.27.1(@babel/core@7.27.1)(eslint@9.26.0)
transitivePeerDependencies:
- supports-color
- eslint-plugin-ember@12.5.0(@babel/core@7.26.10)(eslint@9.22.0):
+ eslint-plugin-ember@12.5.0(@babel/core@7.27.1)(eslint@9.26.0):
dependencies:
'@ember-data/rfc395-data': 0.0.4
css-tree: 3.1.0
- ember-eslint-parser: 0.5.9(@babel/core@7.26.10)(eslint@9.22.0)
+ ember-eslint-parser: 0.5.9(@babel/core@7.27.1)(eslint@9.26.0)
ember-rfc176-data: 0.3.18
- eslint: 9.22.0
- eslint-utils: 3.0.0(eslint@9.22.0)
+ eslint: 9.26.0
+ eslint-utils: 3.0.0(eslint@9.26.0)
estraverse: 5.3.0
lodash.camelcase: 4.3.0
lodash.kebabcase: 4.1.1
@@ -2792,18 +3060,18 @@ snapshots:
transitivePeerDependencies:
- '@babel/core'
- eslint-plugin-import@2.31.0(eslint@9.22.0):
+ eslint-plugin-import@2.31.0(eslint@9.26.0):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.8
- array.prototype.findlastindex: 1.2.5
+ array.prototype.findlastindex: 1.2.6
array.prototype.flat: 1.3.3
array.prototype.flatmap: 1.3.3
debug: 3.2.7
doctrine: 2.1.0
- eslint: 9.22.0
+ eslint: 9.26.0
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.0(eslint-import-resolver-node@0.3.9)(eslint@9.22.0)
+ eslint-module-utils: 2.12.0(eslint-import-resolver-node@0.3.9)(eslint@9.26.0)
hasown: 2.0.2
is-core-module: 2.16.1
is-glob: 4.0.3
@@ -2819,20 +3087,20 @@ snapshots:
- eslint-import-resolver-webpack
- supports-color
- eslint-plugin-qunit@8.1.2(eslint@9.22.0):
+ eslint-plugin-qunit@8.1.2(eslint@9.26.0):
dependencies:
- eslint-utils: 3.0.0(eslint@9.22.0)
+ eslint-utils: 3.0.0(eslint@9.26.0)
requireindex: 1.2.0
transitivePeerDependencies:
- eslint
- eslint-plugin-simple-import-sort@12.1.1(eslint@9.22.0):
+ eslint-plugin-simple-import-sort@12.1.1(eslint@9.26.0):
dependencies:
- eslint: 9.22.0
+ eslint: 9.26.0
- eslint-plugin-sort-class-members@1.21.0(eslint@9.22.0):
+ eslint-plugin-sort-class-members@1.21.0(eslint@9.26.0):
dependencies:
- eslint: 9.22.0
+ eslint: 9.26.0
eslint-scope@5.1.1:
dependencies:
@@ -2849,9 +3117,9 @@ snapshots:
esrecurse: 4.3.0
estraverse: 5.3.0
- eslint-utils@3.0.0(eslint@9.22.0):
+ eslint-utils@3.0.0(eslint@9.26.0):
dependencies:
- eslint: 9.22.0
+ eslint: 9.26.0
eslint-visitor-keys: 2.1.0
eslint-visitor-keys@2.1.0: {}
@@ -2860,20 +3128,21 @@ snapshots:
eslint-visitor-keys@4.2.0: {}
- eslint@9.22.0:
+ eslint@9.26.0:
dependencies:
- '@eslint-community/eslint-utils': 4.5.1(eslint@9.22.0)
+ '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0)
'@eslint-community/regexpp': 4.12.1
- '@eslint/config-array': 0.19.2
- '@eslint/config-helpers': 0.1.0
- '@eslint/core': 0.12.0
- '@eslint/eslintrc': 3.3.0
- '@eslint/js': 9.22.0
- '@eslint/plugin-kit': 0.2.7
+ '@eslint/config-array': 0.20.0
+ '@eslint/config-helpers': 0.2.2
+ '@eslint/core': 0.13.0
+ '@eslint/eslintrc': 3.3.1
+ '@eslint/js': 9.26.0
+ '@eslint/plugin-kit': 0.2.8
'@humanfs/node': 0.16.6
'@humanwhocodes/module-importer': 1.0.1
- '@humanwhocodes/retry': 0.4.2
- '@types/estree': 1.0.6
+ '@humanwhocodes/retry': 0.4.3
+ '@modelcontextprotocol/sdk': 1.11.2
+ '@types/estree': 1.0.7
'@types/json-schema': 7.0.15
ajv: 6.12.6
chalk: 4.1.2
@@ -2897,6 +3166,7 @@ snapshots:
minimatch: 3.1.2
natural-compare: 1.4.0
optionator: 0.9.4
+ zod: 3.24.4
transitivePeerDependencies:
- supports-color
@@ -2920,6 +3190,50 @@ snapshots:
esutils@2.0.3: {}
+ etag@1.8.1: {}
+
+ eventsource-parser@3.0.1: {}
+
+ eventsource@3.0.7:
+ dependencies:
+ eventsource-parser: 3.0.1
+
+ express-rate-limit@7.5.0(express@5.1.0):
+ dependencies:
+ express: 5.1.0
+
+ express@5.1.0:
+ dependencies:
+ accepts: 2.0.0
+ body-parser: 2.2.0
+ content-disposition: 1.0.0
+ content-type: 1.0.5
+ cookie: 0.7.2
+ cookie-signature: 1.2.2
+ debug: 4.4.0
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ etag: 1.8.1
+ finalhandler: 2.1.0
+ fresh: 2.0.0
+ http-errors: 2.0.0
+ merge-descriptors: 2.0.0
+ mime-types: 3.0.1
+ on-finished: 2.4.1
+ once: 1.4.0
+ parseurl: 1.3.3
+ proxy-addr: 2.0.7
+ qs: 6.14.0
+ range-parser: 1.2.1
+ router: 2.2.0
+ send: 1.2.0
+ serve-static: 2.2.0
+ statuses: 2.0.1
+ type-is: 2.0.1
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+
fast-deep-equal@3.1.3: {}
fast-glob@3.3.3:
@@ -2942,9 +3256,9 @@ snapshots:
dependencies:
reusify: 1.1.0
- file-entry-cache@10.0.7:
+ file-entry-cache@10.1.0:
dependencies:
- flat-cache: 6.1.7
+ flat-cache: 6.1.9
file-entry-cache@8.0.0:
dependencies:
@@ -2954,6 +3268,17 @@ snapshots:
dependencies:
to-regex-range: 5.0.1
+ finalhandler@2.1.0:
+ dependencies:
+ debug: 4.4.0
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ statuses: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
find-up@5.0.0:
dependencies:
locate-path: 6.0.0
@@ -2970,11 +3295,11 @@ snapshots:
flatted: 3.3.3
keyv: 4.5.4
- flat-cache@6.1.7:
+ flat-cache@6.1.9:
dependencies:
- cacheable: 1.8.9
+ cacheable: 1.9.0
flatted: 3.3.3
- hookified: 1.8.1
+ hookified: 1.9.0
flatted@3.3.3: {}
@@ -2982,6 +3307,10 @@ snapshots:
dependencies:
is-callable: 1.2.7
+ forwarded@0.2.0: {}
+
+ fresh@2.0.0: {}
+
fs-extra@9.1.0:
dependencies:
at-least-node: 1.0.0
@@ -3056,7 +3385,7 @@ snapshots:
globals@14.0.0: {}
- globals@16.0.0: {}
+ globals@16.1.0: {}
globalthis@1.0.4:
dependencies:
@@ -3076,7 +3405,7 @@ snapshots:
dependencies:
'@sindresorhus/merge-streams': 2.3.0
fast-glob: 3.3.3
- ignore: 7.0.3
+ ignore: 7.0.4
path-type: 6.0.0
slash: 5.1.0
unicorn-magic: 0.3.0
@@ -3109,15 +3438,27 @@ snapshots:
dependencies:
function-bind: 1.1.2
- hookified@1.8.1: {}
+ hookified@1.9.0: {}
html-tags@3.3.1: {}
+ http-errors@2.0.0:
+ dependencies:
+ depd: 2.0.0
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ toidentifier: 1.0.1
+
+ iconv-lite@0.6.3:
+ dependencies:
+ safer-buffer: 2.1.2
+
ieee754@1.2.1: {}
ignore@5.3.2: {}
- ignore@7.0.3: {}
+ ignore@7.0.4: {}
import-fresh@3.3.1:
dependencies:
@@ -3136,6 +3477,8 @@ snapshots:
hasown: 2.0.2
side-channel: 1.1.0
+ ipaddr.js@1.9.1: {}
+
is-array-buffer@3.0.5:
dependencies:
call-bind: 1.0.8
@@ -3210,6 +3553,8 @@ snapshots:
is-plain-object@5.0.0: {}
+ is-promise@4.0.0: {}
+
is-regex@1.2.1:
dependencies:
call-bound: 1.0.4
@@ -3289,13 +3634,13 @@ snapshots:
dependencies:
json-buffer: 3.0.1
- keyv@5.3.1:
+ keyv@5.3.3:
dependencies:
'@keyv/serialize': 1.0.3
kind-of@6.0.3: {}
- known-css-properties@0.35.0: {}
+ known-css-properties@0.36.0: {}
language-subtag-registry@0.3.23: {}
@@ -3347,10 +3692,14 @@ snapshots:
mdn-data@2.12.2: {}
- mdn-data@2.18.0: {}
+ mdn-data@2.21.0: {}
+
+ media-typer@1.1.0: {}
meow@13.2.0: {}
+ merge-descriptors@2.0.0: {}
+
merge2@1.4.1: {}
micromatch@4.0.8:
@@ -3358,6 +3707,12 @@ snapshots:
braces: 3.0.3
picomatch: 2.3.1
+ mime-db@1.54.0: {}
+
+ mime-types@3.0.1:
+ dependencies:
+ mime-db: 1.54.0
+
mimic-fn@2.1.0: {}
minimatch@3.1.2:
@@ -3370,10 +3725,12 @@ snapshots:
ms@2.1.3: {}
- nanoid@3.3.9: {}
+ nanoid@3.3.11: {}
natural-compare@1.4.0: {}
+ negotiator@1.0.0: {}
+
no-case@3.0.4:
dependencies:
lower-case: 2.0.2
@@ -3383,6 +3740,8 @@ snapshots:
normalize-path@3.0.0: {}
+ object-assign@4.1.1: {}
+
object-inspect@1.13.4: {}
object-keys@1.1.1: {}
@@ -3416,6 +3775,14 @@ snapshots:
define-properties: 1.2.1
es-object-atoms: 1.1.1
+ on-finished@2.4.1:
+ dependencies:
+ ee-first: 1.1.1
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
onetime@5.1.2:
dependencies:
mimic-fn: 2.1.0
@@ -3453,7 +3820,7 @@ snapshots:
p-limit@4.0.0:
dependencies:
- yocto-queue: 1.2.0
+ yocto-queue: 1.2.1
p-locate@5.0.0:
dependencies:
@@ -3469,11 +3836,13 @@ snapshots:
parse-json@5.2.0:
dependencies:
- '@babel/code-frame': 7.26.2
+ '@babel/code-frame': 7.27.1
error-ex: 1.3.2
json-parse-even-better-errors: 2.3.1
lines-and-columns: 1.2.4
+ parseurl@1.3.3: {}
+
path-exists@4.0.0: {}
path-exists@5.0.0: {}
@@ -3482,6 +3851,8 @@ snapshots:
path-parse@1.0.7: {}
+ path-to-regexp@8.2.0: {}
+
path-type@4.0.0: {}
path-type@6.0.0: {}
@@ -3490,6 +3861,8 @@ snapshots:
picomatch@2.3.1: {}
+ pkce-challenge@5.0.0: {}
+
possible-typed-array-names@1.1.0: {}
postcss-media-query-parser@0.2.3: {}
@@ -3513,16 +3886,16 @@ snapshots:
postcss@8.5.3:
dependencies:
- nanoid: 3.3.9
+ nanoid: 3.3.11
picocolors: 1.1.1
source-map-js: 1.2.1
prelude-ls@1.2.1: {}
- prettier-plugin-ember-template-tag@2.0.4(prettier@3.5.3):
+ prettier-plugin-ember-template-tag@2.0.5(prettier@3.5.3):
dependencies:
- '@babel/core': 7.26.10
- content-tag: 2.0.3
+ '@babel/core': 7.27.1
+ content-tag: 3.1.3
prettier: 3.5.3
transitivePeerDependencies:
- supports-color
@@ -3535,10 +3908,28 @@ snapshots:
retry: 0.12.0
signal-exit: 3.0.7
+ proxy-addr@2.0.7:
+ dependencies:
+ forwarded: 0.2.0
+ ipaddr.js: 1.9.1
+
punycode@2.3.1: {}
+ qs@6.14.0:
+ dependencies:
+ side-channel: 1.1.0
+
queue-microtask@1.2.3: {}
+ range-parser@1.2.1: {}
+
+ raw-body@3.0.0:
+ dependencies:
+ bytes: 3.1.2
+ http-errors: 2.0.0
+ iconv-lite: 0.6.3
+ unpipe: 1.0.0
+
readable-stream@3.6.2:
dependencies:
inherits: 2.0.4
@@ -3590,6 +3981,16 @@ snapshots:
reusify@1.1.0: {}
+ router@2.2.0:
+ dependencies:
+ debug: 4.4.0
+ depd: 2.0.0
+ is-promise: 4.0.0
+ parseurl: 1.3.3
+ path-to-regexp: 8.2.0
+ transitivePeerDependencies:
+ - supports-color
+
run-parallel@1.2.0:
dependencies:
queue-microtask: 1.2.3
@@ -3615,8 +4016,35 @@ snapshots:
es-errors: 1.3.0
is-regex: 1.2.1
+ safer-buffer@2.1.2: {}
+
semver@6.3.1: {}
+ send@1.2.0:
+ dependencies:
+ debug: 4.4.0
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ etag: 1.8.1
+ fresh: 2.0.0
+ http-errors: 2.0.0
+ mime-types: 3.0.1
+ ms: 2.1.3
+ on-finished: 2.4.1
+ range-parser: 1.2.1
+ statuses: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ serve-static@2.2.0:
+ dependencies:
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ parseurl: 1.3.3
+ send: 1.2.0
+ transitivePeerDependencies:
+ - supports-color
+
set-function-length@1.2.2:
dependencies:
define-data-property: 1.1.4
@@ -3639,6 +4067,8 @@ snapshots:
es-errors: 1.3.0
es-object-atoms: 1.1.1
+ setprototypeof@1.2.0: {}
+
shebang-command@2.0.0:
dependencies:
shebang-regex: 3.0.0
@@ -3696,6 +4126,8 @@ snapshots:
source-map-js@1.2.1: {}
+ statuses@2.0.1: {}
+
string-width@4.2.3:
dependencies:
emoji-regex: 8.0.0
@@ -3737,54 +4169,54 @@ snapshots:
strip-json-comments@3.1.1: {}
- stylelint-config-recommended-scss@14.1.0(postcss@8.5.3)(stylelint@16.16.0(typescript@5.8.2)):
+ stylelint-config-recommended-scss@14.1.0(postcss@8.5.3)(stylelint@16.19.1(typescript@5.8.3)):
dependencies:
postcss-scss: 4.0.9(postcss@8.5.3)
- stylelint: 16.16.0(typescript@5.8.2)
- stylelint-config-recommended: 14.0.1(stylelint@16.16.0(typescript@5.8.2))
- stylelint-scss: 6.11.1(stylelint@16.16.0(typescript@5.8.2))
+ stylelint: 16.19.1(typescript@5.8.3)
+ stylelint-config-recommended: 14.0.1(stylelint@16.19.1(typescript@5.8.3))
+ stylelint-scss: 6.12.0(stylelint@16.19.1(typescript@5.8.3))
optionalDependencies:
postcss: 8.5.3
- stylelint-config-recommended@14.0.1(stylelint@16.16.0(typescript@5.8.2)):
+ stylelint-config-recommended@14.0.1(stylelint@16.19.1(typescript@5.8.3)):
dependencies:
- stylelint: 16.16.0(typescript@5.8.2)
+ stylelint: 16.19.1(typescript@5.8.3)
- stylelint-config-recommended@15.0.0(stylelint@16.16.0(typescript@5.8.2)):
+ stylelint-config-recommended@16.0.0(stylelint@16.19.1(typescript@5.8.3)):
dependencies:
- stylelint: 16.16.0(typescript@5.8.2)
+ stylelint: 16.19.1(typescript@5.8.3)
- stylelint-config-standard-scss@14.0.0(postcss@8.5.3)(stylelint@16.16.0(typescript@5.8.2)):
+ stylelint-config-standard-scss@14.0.0(postcss@8.5.3)(stylelint@16.19.1(typescript@5.8.3)):
dependencies:
- stylelint: 16.16.0(typescript@5.8.2)
- stylelint-config-recommended-scss: 14.1.0(postcss@8.5.3)(stylelint@16.16.0(typescript@5.8.2))
- stylelint-config-standard: 36.0.1(stylelint@16.16.0(typescript@5.8.2))
+ stylelint: 16.19.1(typescript@5.8.3)
+ stylelint-config-recommended-scss: 14.1.0(postcss@8.5.3)(stylelint@16.19.1(typescript@5.8.3))
+ stylelint-config-standard: 36.0.1(stylelint@16.19.1(typescript@5.8.3))
optionalDependencies:
postcss: 8.5.3
- stylelint-config-standard@36.0.1(stylelint@16.16.0(typescript@5.8.2)):
+ stylelint-config-standard@36.0.1(stylelint@16.19.1(typescript@5.8.3)):
dependencies:
- stylelint: 16.16.0(typescript@5.8.2)
- stylelint-config-recommended: 14.0.1(stylelint@16.16.0(typescript@5.8.2))
+ stylelint: 16.19.1(typescript@5.8.3)
+ stylelint-config-recommended: 14.0.1(stylelint@16.19.1(typescript@5.8.3))
- stylelint-config-standard@37.0.0(stylelint@16.16.0(typescript@5.8.2)):
+ stylelint-config-standard@38.0.0(stylelint@16.19.1(typescript@5.8.3)):
dependencies:
- stylelint: 16.16.0(typescript@5.8.2)
- stylelint-config-recommended: 15.0.0(stylelint@16.16.0(typescript@5.8.2))
+ stylelint: 16.19.1(typescript@5.8.3)
+ stylelint-config-recommended: 16.0.0(stylelint@16.19.1(typescript@5.8.3))
- stylelint-scss@6.11.1(stylelint@16.16.0(typescript@5.8.2)):
+ stylelint-scss@6.12.0(stylelint@16.19.1(typescript@5.8.3)):
dependencies:
css-tree: 3.1.0
is-plain-object: 5.0.0
- known-css-properties: 0.35.0
- mdn-data: 2.18.0
+ known-css-properties: 0.36.0
+ mdn-data: 2.21.0
postcss-media-query-parser: 0.2.3
postcss-resolve-nested-selector: 0.1.6
postcss-selector-parser: 7.1.0
postcss-value-parser: 4.2.0
- stylelint: 16.16.0(typescript@5.8.2)
+ stylelint: 16.19.1(typescript@5.8.3)
- stylelint@16.16.0(typescript@5.8.2):
+ stylelint@16.19.1(typescript@5.8.3):
dependencies:
'@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3)
'@csstools/css-tokenizer': 3.0.3
@@ -3793,21 +4225,21 @@ snapshots:
'@dual-bundle/import-meta-resolve': 4.1.0
balanced-match: 2.0.0
colord: 2.9.3
- cosmiconfig: 9.0.0(typescript@5.8.2)
+ cosmiconfig: 9.0.0(typescript@5.8.3)
css-functions-list: 3.2.3
css-tree: 3.1.0
debug: 4.4.0
fast-glob: 3.3.3
fastest-levenshtein: 1.0.16
- file-entry-cache: 10.0.7
+ file-entry-cache: 10.1.0
global-modules: 2.0.0
globby: 11.1.0
globjoin: 0.1.4
html-tags: 3.3.1
- ignore: 7.0.3
+ ignore: 7.0.4
imurmurhash: 0.1.4
is-plain-object: 5.0.0
- known-css-properties: 0.35.0
+ known-css-properties: 0.36.0
mathml-tag-names: 2.1.3
meow: 13.2.0
micromatch: 4.0.8
@@ -3855,6 +4287,8 @@ snapshots:
dependencies:
is-number: 7.0.0
+ toidentifier@1.0.1: {}
+
tsconfig-paths@3.15.0:
dependencies:
'@types/json5': 0.0.29
@@ -3868,6 +4302,12 @@ snapshots:
dependencies:
prelude-ls: 1.2.1
+ type-is@2.0.1:
+ dependencies:
+ content-type: 1.0.5
+ media-typer: 1.1.0
+ mime-types: 3.0.1
+
typed-array-buffer@1.0.3:
dependencies:
call-bound: 1.0.4
@@ -3901,7 +4341,7 @@ snapshots:
possible-typed-array-names: 1.1.0
reflect.getprototypeof: 1.0.10
- typescript@5.8.2: {}
+ typescript@5.8.3: {}
unbox-primitive@1.1.0:
dependencies:
@@ -3916,11 +4356,13 @@ snapshots:
universalify@2.0.1: {}
+ unpipe@1.0.0: {}
+
upath@2.0.1: {}
- update-browserslist-db@1.1.3(browserslist@4.24.4):
+ update-browserslist-db@1.1.3(browserslist@4.24.5):
dependencies:
- browserslist: 4.24.4
+ browserslist: 4.24.5
escalade: 3.2.0
picocolors: 1.1.1
@@ -3932,6 +4374,8 @@ snapshots:
v8-compile-cache@2.4.0: {}
+ vary@1.1.2: {}
+
wcwidth@1.0.1:
dependencies:
defaults: 1.0.4
@@ -3995,6 +4439,8 @@ snapshots:
string-width: 4.2.3
strip-ansi: 6.0.1
+ wrappy@1.0.2: {}
+
write-file-atomic@5.0.1:
dependencies:
imurmurhash: 0.1.4
@@ -4018,4 +4464,10 @@ snapshots:
yocto-queue@0.1.0: {}
- yocto-queue@1.2.0: {}
+ yocto-queue@1.2.1: {}
+
+ zod-to-json-schema@3.24.5(zod@3.24.4):
+ dependencies:
+ zod: 3.24.4
+
+ zod@3.24.4: {}
diff --git a/test/javascripts/acceptance/activity-pub-about-test.js b/test/javascripts/acceptance/activity-pub-about-test.js
index e0d65cda..c737435b 100644
--- a/test/javascripts/acceptance/activity-pub-about-test.js
+++ b/test/javascripts/acceptance/activity-pub-about-test.js
@@ -1,11 +1,7 @@
import { visit } from "@ember/test-helpers";
import { test } from "qunit";
-import {
- acceptance,
- query,
- queryAll,
-} from "discourse/tests/helpers/qunit-helpers";
-import { default as AboutFixtures } from "../fixtures/about-fixtures";
+import { acceptance } from "discourse/tests/helpers/qunit-helpers";
+import AboutFixtures from "../fixtures/about-fixtures";
acceptance("Discourse Activity Pub | About", function (needs) {
needs.site({ activity_pub_enabled: false });
@@ -18,22 +14,18 @@ acceptance("Discourse Activity Pub | About", function (needs) {
test("lists the forum's actors", async function (assert) {
await visit("/ap/about");
- const categoryActors = queryAll(
- ".activity-pub-actors.categories .activity-pub-actor-card"
- );
- assert.strictEqual(categoryActors.length, 2);
+ assert
+ .dom(".activity-pub-actors.categories .activity-pub-actor-card")
+ .exists({ count: 2 });
- const tagActors = queryAll(
- ".activity-pub-actors.tags .activity-pub-actor-card"
- );
- assert.strictEqual(tagActors.length, 1);
+ assert
+ .dom(".activity-pub-actors.tags .activity-pub-actor-card")
+ .exists({ count: 1 });
- assert.strictEqual(
- query(
+ assert
+ .dom(
".activity-pub-actors.categories div.activity-pub-actor-card:first-of-type .follower-count"
- ).innerText.trim(),
- "4 followers",
- "shows the right follower counts"
- );
+ )
+ .hasText("4 followers", "shows the right follower counts");
});
});
diff --git a/test/javascripts/acceptance/activity-pub-admin-test.js b/test/javascripts/acceptance/activity-pub-admin-test.js
index 1b9f4179..ec4f3885 100644
--- a/test/javascripts/acceptance/activity-pub-admin-test.js
+++ b/test/javascripts/acceptance/activity-pub-admin-test.js
@@ -6,15 +6,11 @@ import pretender, {
parsePostData,
response,
} from "discourse/tests/helpers/create-pretender";
-import {
- acceptance,
- exists,
- query,
-} from "discourse/tests/helpers/qunit-helpers";
+import { acceptance } from "discourse/tests/helpers/qunit-helpers";
import selectKit from "discourse/tests/helpers/select-kit-helper";
-import { default as AdminActors } from "../fixtures/admin-actors-fixtures";
-import { default as Logs } from "../fixtures/logs-fixtures";
-import { default as SiteActors } from "../fixtures/site-actors-fixtures";
+import AdminActors from "../fixtures/admin-actors-fixtures";
+import Logs from "../fixtures/logs-fixtures";
+import SiteActors from "../fixtures/site-actors-fixtures";
const categoryActors =
AdminActors["/admin/plugins/ap/actor?model_type=category"];
@@ -58,24 +54,19 @@ acceptance("Discourse Activity Pub | Admin | Index", function (needs) {
});
await visit("/admin/plugins/ap/actor");
- assert.ok(
- exists(".activity-pub-actor-table"),
- "the actors table is visible"
- );
- assert.strictEqual(
- document.querySelectorAll(".activity-pub-actor-table-row").length,
- 2,
- "actors are visible"
- );
- assert.ok(
- exists(".activity-pub-actor-edit-btn"),
- "the actor edit btn is visible"
- );
+ assert
+ .dom(".activity-pub-actor-table")
+ .exists("the actors table is visible");
+ assert
+ .dom(".activity-pub-actor-table-row")
+ .exists({ count: 2 }, "actors are visible");
+ assert
+ .dom(".activity-pub-actor-edit-btn")
+ .exists("the actor edit btn is visible");
await click(".activity-pub-actor-edit-btn");
- assert.ok(
- exists(".admin-plugins.activity-pub.actor-show"),
- "it routes to actor show"
- );
+ assert
+ .dom(".admin-plugins.activity-pub.actor-show")
+ .exists("routes to actor show");
});
test("actor controls", async function (assert) {
@@ -98,10 +89,9 @@ acceptance("Discourse Activity Pub | Admin | Index", function (needs) {
});
await visit("/admin/plugins/ap/actor");
- assert.ok(
- exists(".activity-pub-add-actor.category"),
- "the add category actor button is visible"
- );
+ assert
+ .dom(".activity-pub-add-actor.category")
+ .exists("the add category actor button is visible");
await click(".activity-pub-add-actor");
assert.strictEqual(
queryParams.model_type,
@@ -110,10 +100,9 @@ acceptance("Discourse Activity Pub | Admin | Index", function (needs) {
);
await visit("/admin/plugins/ap/actor?model_type=tag");
- assert.ok(
- exists(".activity-pub-add-actor.tag"),
- "the add tag actor button is visible"
- );
+ assert
+ .dom(".activity-pub-add-actor.tag")
+ .exists("the add tag actor button is visible");
await click(".activity-pub-add-actor");
assert.strictEqual(
queryParams.model_type,
@@ -139,28 +128,24 @@ acceptance("Discourse Activity Pub | Admin | New Actor", function (needs) {
test("creates a new actor", async function (assert) {
await visit("/admin/plugins/ap/actor/new");
- assert.ok(
- exists(".activity-pub-actor-add"),
- "add actor container is visible"
- );
- assert.ok(
- exists(".activity-pub-new-actor-model"),
- "actor model controls are visible"
- );
+ assert
+ .dom(".activity-pub-actor-add")
+ .exists("add actor container is visible");
+ assert
+ .dom(".activity-pub-new-actor-model")
+ .exists("actor model controls are visible");
- assert.ok(
- exists(".activity-pub-category-chooser"),
- "activity pub category chooser is visible"
- );
+ assert
+ .dom(".activity-pub-category-chooser")
+ .exists("activity pub category chooser is visible");
const categories = selectKit(".activity-pub-category-chooser");
await categories.expand();
await categories.selectRowByValue(6);
- assert.ok(
- exists(".activity-pub-actor-form"),
- "activity pub actor form is visible"
- );
+ assert
+ .dom(".activity-pub-actor-form")
+ .exists("activity pub actor form is visible");
const actor = {
username: "ap_username",
@@ -218,23 +203,20 @@ acceptance("Discourse Activity Pub | Admin | New Actor", function (needs) {
test("creates a new actor with a tag model", async function (assert) {
await visit("/admin/plugins/ap/actor/new?model_type=tag");
- assert.ok(
- exists(".activity-pub-actor-add"),
- "add actor container is visible"
- );
- assert.ok(
- exists(".activity-pub-new-actor-model"),
- "actor model controls are visible"
- );
+ assert
+ .dom(".activity-pub-actor-add")
+ .exists("add actor container is visible");
+ assert
+ .dom(".activity-pub-new-actor-model")
+ .exists("actor model controls are visible");
const tags = selectKit(".activity-pub-actor-add .tag-chooser");
await tags.expand();
await tags.selectRowByName("dog");
- assert.ok(
- exists(".activity-pub-actor-form"),
- "activity pub actor form is visible"
- );
+ assert
+ .dom(".activity-pub-actor-form")
+ .exists("activity pub actor form is visible");
const actor = {
username: "ap_dog",
@@ -293,10 +275,9 @@ acceptance("Discourse Activity Pub | Admin | New Actor", function (needs) {
siteActors.tag.some((a) => a.name === createdActor.name),
"adds the actor to site actors"
);
- assert.ok(
- query(".activity-pub-actor-status.active"),
- "actor has the right status"
- );
+ assert
+ .dom(".activity-pub-actor-status")
+ .hasClass("active", "actor has the right status");
});
});
@@ -317,16 +298,13 @@ acceptance("Discourse Activity Pub | Admin | Edit Actor", function (needs) {
test("edits an actor", async function (assert) {
await visit(`/admin/plugins/ap/actor/${actor.id}`);
- assert.ok(
- exists(".activity-pub-actor-edit"),
- "edit actor container is visible"
- );
- assert.ok(exists(".activity-pub-actor-model"), "actor model is visible");
- assert.strictEqual(
- query(".activity-pub-handle .handle").innerText.trim(),
- actor.handle,
- "shows the right handle"
- );
+ assert
+ .dom(".activity-pub-actor-edit")
+ .exists("edit actor container is visible");
+ assert.dom(".activity-pub-actor-model").exists("actor model is visible");
+ assert
+ .dom(".activity-pub-handle .handle")
+ .hasText(actor.handle, "shows the right handle");
const updates = {
name: "Updated name",
@@ -372,31 +350,26 @@ acceptance("Discourse Activity Pub | Admin | Logs", function (needs) {
test("displays logs", async function (assert) {
await visit("/admin/plugins/ap/log");
- assert.ok(exists(".activity-pub-log-table"), "log table is visible");
- assert.strictEqual(
- document.querySelectorAll(".activity-pub-log-row").length,
- 2,
- "logs are visible"
- );
- assert.ok(
- exists(
+ assert.dom(".activity-pub-log-table").exists("log table is visible");
+ assert
+ .dom(".activity-pub-log-row")
+ .exists({ count: 2 }, "logs are visible");
+ assert
+ .dom(
".activity-pub-log-row:nth-of-type(1) .activity-pub-log-show-json-btn"
- ),
- "shows show json button if log has json"
- );
- assert.notOk(
- exists(
+ )
+ .exists("shows show json button if log has json");
+ assert
+ .dom(
".activity-pub-log-row:nth-of-type(2) .activity-pub-log-show-json-btn"
- ),
- "does not show json button if log does not have json"
- );
+ )
+ .doesNotExist("does not show json button if log does not have json");
await click(
".activity-pub-log-row:nth-of-type(1) .activity-pub-log-show-json-btn"
);
- assert.ok(
- exists(".modal.activity-pub-json-modal"),
- "it shows the log json modal"
- );
+ assert
+ .dom(".modal.activity-pub-json-modal")
+ .exists("shows the log json modal");
});
});
diff --git a/test/javascripts/acceptance/activity-pub-composer-test.js b/test/javascripts/acceptance/activity-pub-composer-test.js
index 5a50981d..c666ac0f 100644
--- a/test/javascripts/acceptance/activity-pub-composer-test.js
+++ b/test/javascripts/acceptance/activity-pub-composer-test.js
@@ -2,14 +2,10 @@ import { click, visit } from "@ember/test-helpers";
import { test } from "qunit";
import { cloneJSON } from "discourse/lib/object";
import Site from "discourse/models/site";
-import {
- acceptance,
- exists,
- query,
-} from "discourse/tests/helpers/qunit-helpers";
+import { acceptance } from "discourse/tests/helpers/qunit-helpers";
import selectKit from "discourse/tests/helpers/select-kit-helper";
import { i18n } from "discourse-i18n";
-import { default as SiteActors } from "../fixtures/site-actors-fixtures";
+import SiteActors from "../fixtures/site-actors-fixtures";
acceptance("Discourse Activity Pub | composer", function (needs) {
needs.user();
@@ -24,10 +20,9 @@ acceptance("Discourse Activity Pub | composer", function (needs) {
await visit("/");
await click("#create-topic");
- assert.notOk(
- exists("#reply-control .activity-pub-actor-status"),
- "the status label is not visible"
- );
+ assert
+ .dom("#reply-control .activity-pub-actor-status")
+ .doesNotExist("the status label is not visible");
});
test("with a category with activity pub ready", async function (assert) {
@@ -44,17 +39,15 @@ acceptance("Discourse Activity Pub | composer", function (needs) {
await categoryChooser.expand();
await categoryChooser.selectRowByValue(2);
- assert.ok(
- exists("#reply-control .activity-pub-actor-status"),
- "the status label is visible"
- );
- assert.strictEqual(
- query(
- "#reply-control .activity-pub-actor-status .label"
- ).innerText.trim(),
- i18n("discourse_activity_pub.visibility.label.public"),
- "the status label has the right text"
- );
+ assert
+ .dom("#reply-control .activity-pub-actor-status")
+ .exists("the status label is visible");
+ assert
+ .dom("#reply-control .activity-pub-actor-status .label")
+ .hasText(
+ i18n("discourse_activity_pub.visibility.label.public"),
+ "the status label has the right text"
+ );
});
test("when the plugin is disabled", async function (assert) {
@@ -71,9 +64,8 @@ acceptance("Discourse Activity Pub | composer", function (needs) {
await categoryChooser.expand();
await categoryChooser.selectRowByValue(2);
- assert.notOk(
- exists("#reply-control .activity-pub-actor-status"),
- "the status label is not visible"
- );
+ assert
+ .dom("#reply-control .activity-pub-actor-status")
+ .doesNotExist("the status label is not visible");
});
});
diff --git a/test/javascripts/acceptance/activity-pub-discovery-test.js b/test/javascripts/acceptance/activity-pub-discovery-test.js
index 5e4e3703..771920bd 100644
--- a/test/javascripts/acceptance/activity-pub-discovery-test.js
+++ b/test/javascripts/acceptance/activity-pub-discovery-test.js
@@ -2,17 +2,13 @@ import { click, currentURL, triggerEvent, visit } from "@ember/test-helpers";
import { test } from "qunit";
import Category from "discourse/models/category";
import Site from "discourse/models/site";
-import {
- acceptance,
- exists,
- query,
-} from "discourse/tests/helpers/qunit-helpers";
+import { acceptance } from "discourse/tests/helpers/qunit-helpers";
import selectKit from "discourse/tests/helpers/select-kit-helper";
import { i18n } from "discourse-i18n";
-import { default as Actors } from "../fixtures/actors-fixtures";
-import { default as Followers } from "../fixtures/followers-fixtures";
-import { default as Follows } from "../fixtures/follows-fixtures";
-import { default as SiteActors } from "../fixtures/site-actors-fixtures";
+import Actors from "../fixtures/actors-fixtures";
+import Followers from "../fixtures/followers-fixtures";
+import Follows from "../fixtures/follows-fixtures";
+import SiteActors from "../fixtures/site-actors-fixtures";
const actorPath = `/ap/local/actor/2`;
const followsPath = `${actorPath}/follows`;
@@ -31,10 +27,9 @@ acceptance(
test("with a non-category route", async function (assert) {
await visit("/latest");
- assert.notOk(
- exists(".activity-pub-discovery"),
- "the discovery button is not visible"
- );
+ assert
+ .dom(".activity-pub-discovery")
+ .doesNotExist("the discovery button is not visible");
});
test("with a category route without category enabled", async function (assert) {
@@ -42,10 +37,9 @@ acceptance(
await visit(category.url);
- assert.notOk(
- exists(".activity-pub-category-nav.visible"),
- "the activitypub nav button is not visible"
- );
+ assert
+ .dom(".activity-pub-category-nav.visible")
+ .doesNotExist("the ActivityPub nav button is not visible");
});
test("with a category route with category enabled", async function (assert) {
@@ -54,10 +48,9 @@ acceptance(
await visit(category.url);
- assert.notOk(
- exists(".activity-pub-category-nav.visible"),
- "the activitypub nav button is not visible"
- );
+ assert
+ .dom(".activity-pub-category-nav.visible")
+ .doesNotExist("the ActivityPub nav button is not visible");
});
}
);
@@ -111,10 +104,9 @@ acceptance(
await visit("/latest");
- assert.notOk(
- exists(".activity-pub-category-nav.visible"),
- "the activitypub nav button is not visible"
- );
+ assert
+ .dom(".activity-pub-category-nav.visible")
+ .doesNotExist("the ActivityPub nav button is not visible");
});
test("with a category without an activity pub actor", async function (assert) {
@@ -124,10 +116,9 @@ acceptance(
await visit(category.url);
- assert.notOk(
- exists(".activity-pub-category-nav.visible"),
- "the activitypub nav button is not visible"
- );
+ assert
+ .dom(".activity-pub-category-nav.visible")
+ .doesNotExist("the ActivityPub nav button is not visible");
});
test("with a category with an activity pub actor", async function (assert) {
@@ -137,19 +128,16 @@ acceptance(
await visit(category.url);
- assert.ok(
- exists(".activity-pub-route-nav.visible"),
- "the activitypub nav button is visible"
- );
+ assert
+ .dom(".activity-pub-route-nav.visible")
+ .exists("the ActivityPub nav button is visible");
await click(".activity-pub-route-nav");
- assert.ok(
- exists(".activity-pub-banner"),
- "the activitypub category banner is visible"
- );
- assert.strictEqual(
- query(".activity-pub-banner-text .desktop").textContent.trim(),
+ assert
+ .dom(".activity-pub-banner")
+ .exists("the ActivityPub category banner is visible");
+ assert.dom(".activity-pub-banner-text .desktop").hasText(
i18n("discourse_activity_pub.banner.text", {
model_name: "Cat 2",
}),
@@ -157,11 +145,12 @@ acceptance(
);
await triggerEvent(".fk-d-tooltip__trigger", "pointermove");
- assert.equal(
- query(".fk-d-tooltip__inner-content").textContent.trim(),
- i18n("discourse_activity_pub.banner.public_first_post"),
- "shows the right category banner tip"
- );
+ assert
+ .dom(".fk-d-tooltip__inner-content")
+ .hasText(
+ i18n("discourse_activity_pub.banner.public_first_post"),
+ "shows the right category banner tip"
+ );
});
test("when routing from a category with an actor to one without", async function (assert) {
@@ -170,19 +159,17 @@ acceptance(
await visit(category.url);
- assert.ok(
- exists(".activity-pub-route-nav.visible"),
- "the activitypub nav button is visible"
- );
+ assert
+ .dom(".activity-pub-route-nav.visible")
+ .exists("the ActivityPub nav button is visible");
const categoryDrop = selectKit(".category-drop");
await categoryDrop.expand();
await categoryDrop.selectRowByValue(7);
- assert.notOk(
- exists(".activity-pub-route-nav.visible"),
- "the activitypub nav button is not visible"
- );
+ assert
+ .dom(".activity-pub-route-nav.visible")
+ .doesNotExist("the ActivityPub nav button is not visible");
});
test("when routing from a tag with an actor to one without", async function (assert) {
@@ -193,19 +180,17 @@ acceptance(
await visit("/tag/monkey");
- assert.ok(
- exists(".activity-pub-route-nav.visible"),
- "the activitypub nav button is visible"
- );
+ assert
+ .dom(".activity-pub-route-nav.visible")
+ .exists("the ActivityPub nav button is visible");
const tagDrop = selectKit(".tag-drop");
await tagDrop.expand();
await tagDrop.selectRowByName("dog");
- assert.notOk(
- exists(".activity-pub-route-nav.visible"),
- "the activitypub nav button is not visible"
- );
+ assert
+ .dom(".activity-pub-route-nav.visible")
+ .doesNotExist("the ActivityPub nav button is not visible");
});
}
);
@@ -230,16 +215,15 @@ acceptance(
await visit(category.url);
await click(".activity-pub-route-nav");
- assert.notOk(
- exists(".activity-pub-banner"),
- "the activitypub banner is not visible"
- );
+ assert
+ .dom(".activity-pub-banner")
+ .doesNotExist("the ActivityPub banner is not visible");
});
}
);
acceptance(
- "Discourse Activity Pub | Discovery activitypub followers route with publishing disabled",
+ "Discourse Activity Pub | Discovery ActivityPub followers route with publishing disabled",
function (needs) {
needs.user();
needs.site({
@@ -261,7 +245,7 @@ acceptance(
);
acceptance(
- "Discourse Activity Pub | Discovery activitypub followers route without followers",
+ "Discourse Activity Pub | Discovery ActivityPub followers route without followers",
function (needs) {
needs.user();
needs.site({
@@ -279,21 +263,18 @@ acceptance(
test("with activity pub ready", async function (assert) {
await visit(followersPath);
- assert.notOk(
- exists(".activity-pub-follow-table.followers"),
- "the activitypub followers table is not visible"
- );
- assert.equal(
- query(".activity-pub-followers-container").innerText,
- i18n("search.no_results"),
- "no results shown"
- );
+ assert
+ .dom(".activity-pub-follow-table.followers")
+ .doesNotExist("the ActivityPub followers table is not visible");
+ assert
+ .dom(".activity-pub-followers-container")
+ .hasText(i18n("search.no_results"), "no results shown");
});
}
);
acceptance(
- "Discourse Activity Pub | Discovery activitypub followers route with followers",
+ "Discourse Activity Pub | Discovery ActivityPub followers route with followers",
function (needs) {
needs.user();
needs.site({
@@ -311,64 +292,52 @@ acceptance(
test("with activity pub ready", async function (assert) {
await visit(followersPath);
- assert.ok(
- exists(".activity-pub-follow-table.followers"),
- "the activitypub followers table is visible"
- );
+ assert
+ .dom(".activity-pub-follow-table.followers")
+ .exists("the ActivityPub followers table is visible");
assert.strictEqual(
document.querySelectorAll(".activity-pub-follow-table-row").length,
2,
"followers are visible"
);
- assert.ok(
- query(".activity-pub-actor-image img").src.includes(
- "/images/avatar.png"
- ),
- "follower image is visible"
- );
- assert.equal(
- query(".activity-pub-actor-name").innerText,
- "Angus",
- "follower name is visible"
- );
- assert.equal(
- query(".activity-pub-actor-handle").innerText,
- "@angus_ap@test.local",
- "follower handle is visible"
- );
- assert.ok(
- query(".activity-pub-follow-table-user a.avatar").href.includes(
- "/u/angus"
- ),
- "follower user avatar is visible"
- );
- assert.equal(
- query(".activity-pub-follow-table-followed-at").innerText,
- "Feb 8, 2013",
- "follower followed at is visible"
- );
- assert.ok(
- exists(".activity-pub-follow-btn"),
- "the activitypub follow btn is visible"
- );
+ assert
+ .dom(".activity-pub-actor-image img")
+ .hasAttribute(
+ "src",
+ /\/images\/avatar\.png/,
+ "follower image is visible"
+ );
+ assert
+ .dom(".activity-pub-actor-name")
+ .hasText("Angus", "follower name is visible");
+ assert
+ .dom(".activity-pub-actor-handle")
+ .hasText("@angus_ap@test.local", "follower handle is visible");
+ assert
+ .dom(".activity-pub-follow-table-user a.avatar")
+ .hasAttribute("href", /\/u\/angus/, "follower user avatar is visible");
+ assert
+ .dom(".activity-pub-follow-table-followed-at")
+ .hasText("Feb 8, 2013", "follower followed at is visible");
+ assert
+ .dom(".activity-pub-follow-btn")
+ .exists("the ActivityPub follow btn is visible");
await click(".activity-pub-follow-btn");
- assert.ok(
- exists(".modal.activity-pub-follow-modal"),
- "it shows the activitypub follow modal"
- );
- assert.equal(
- query("#discourse-modal-title").innerText,
+ assert
+ .dom(".modal.activity-pub-follow-modal")
+ .exists("shows the ActivityPub follow modal");
+ assert.dom("#discourse-modal-title").hasText(
i18n("discourse_activity_pub.follow.title", {
actor: "Cat 2",
}),
- "activitypub modal has the right title"
+ "ActivityPub modal has the right title"
);
});
}
);
acceptance(
- "Discourse Activity Pub | Discovery activitypub follows route with no create follow permission",
+ "Discourse Activity Pub | Discovery ActivityPub follows route with no create follow permission",
function (needs) {
needs.user();
needs.site({
@@ -390,7 +359,7 @@ acceptance(
);
acceptance(
- "Discourse Activity Pub | Discovery activitypub subcategory follows route with edit permission",
+ "Discourse Activity Pub | Discovery ActivityPub subcategory follows route with edit permission",
function (needs) {
needs.user();
needs.site({
@@ -410,16 +379,15 @@ acceptance(
test("with activity pub ready", async function (assert) {
await visit("/ap/local/actor/3/follows");
- assert.ok(
- exists(".activity-pub-follows-container"),
- "the activitypub follows route is visible"
- );
+ assert
+ .dom(".activity-pub-follows-container")
+ .exists("the ActivityPub follows route is visible");
});
}
);
acceptance(
- "Discourse Activity Pub | Discovery activitypub category follows route with edit permission with followers",
+ "Discourse Activity Pub | Discovery ActivityPub category follows route with edit permission with followers",
function (needs) {
needs.user();
needs.site({
@@ -437,75 +405,60 @@ acceptance(
test("with activity pub ready", async function (assert) {
await visit(followsPath);
- assert.ok(
- exists(".activity-pub-follow-table.follows"),
- "the activitypub follows table is visible"
- );
+ assert
+ .dom(".activity-pub-follow-table.follows")
+ .exists("the ActivityPub follows table is visible");
assert.strictEqual(
document.querySelectorAll(".activity-pub-follow-table-row").length,
2,
"follows are visible"
);
- assert.ok(
- query(".activity-pub-actor-image img").src.includes(
- "/images/avatar.png"
- ),
- "follower image is visible"
- );
- assert.equal(
- query(".activity-pub-actor-name").innerText,
- "Angus",
- "follower name is visible"
- );
- assert.equal(
- query(".activity-pub-actor-handle").innerText,
- "@angus_ap@test.local",
- "follow handle is visible"
- );
- assert.ok(
- query(".activity-pub-follow-table-user a.avatar").href.includes(
- "/u/angus"
- ),
- "follow user avatar is visible"
- );
- assert.equal(
- query(".activity-pub-follow-table-followed-at").innerText,
- "Feb 8, 2013",
- "follower followed at is visible"
- );
-
- assert.ok(
- exists(".activity-pub-actor-follow-btn"),
- "the activitypub actor follow btn is visible"
- );
+ assert
+ .dom(".activity-pub-actor-image img")
+ .hasAttribute(
+ "src",
+ /\/images\/avatar\.png/,
+ "follower image is visible"
+ );
+ assert
+ .dom(".activity-pub-actor-name")
+ .hasText("Angus", "follower name is visible");
+ assert
+ .dom(".activity-pub-actor-handle")
+ .hasText("@angus_ap@test.local", "follow handle is visible");
+ assert
+ .dom(".activity-pub-follow-table-user a.avatar")
+ .hasAttribute("href", /\/u\/angus/, "follow user avatar is visible");
+ assert
+ .dom(".activity-pub-follow-table-followed-at")
+ .hasText("Feb 8, 2013", "follower followed at is visible");
+
+ assert
+ .dom(".activity-pub-actor-follow-btn")
+ .exists("the ActivityPub actor follow btn is visible");
await click(".activity-pub-actor-follow-btn");
- assert.ok(
- exists(".modal.activity-pub-actor-follow-modal"),
- "it shows the activitypub actor follow modal"
- );
- assert.equal(
- query("#discourse-modal-title").innerText,
+ assert
+ .dom(".modal.activity-pub-actor-follow-modal")
+ .exists("shows the ActivityPub actor follow modal");
+ assert.dom("#discourse-modal-title").hasText(
i18n("discourse_activity_pub.actor_follow.title", {
actor: "Cat 2",
}),
- "activitypub actor follow modal has the right title"
+ "ActivityPub actor follow modal has the right title"
);
- assert.ok(
- exists(".activity-pub-actor-unfollow-btn"),
- "the activitypub actor unfollow btn is visible"
- );
+ assert
+ .dom(".activity-pub-actor-unfollow-btn")
+ .exists("the ActivityPub actor unfollow btn is visible");
await click(".activity-pub-actor-unfollow-btn");
- assert.ok(
- exists(".modal.activity-pub-actor-unfollow-modal"),
- "it shows the activitypub actor unfollow modal"
- );
- assert.equal(
- query("#discourse-modal-title").innerText,
+ assert
+ .dom(".modal.activity-pub-actor-unfollow-modal")
+ .exists("shows the ActivityPub actor unfollow modal");
+ assert.dom("#discourse-modal-title").hasText(
i18n("discourse_activity_pub.actor_unfollow.modal_title", {
actor: "Cat 2",
}),
- "activitypub actor unfollow modal has the right title"
+ "ActivityPub actor unfollow modal has the right title"
);
});
}
diff --git a/test/javascripts/acceptance/activity-pub-preferences-test.js b/test/javascripts/acceptance/activity-pub-preferences-test.js
index a1fd5f2b..38f8b626 100644
--- a/test/javascripts/acceptance/activity-pub-preferences-test.js
+++ b/test/javascripts/acceptance/activity-pub-preferences-test.js
@@ -2,11 +2,9 @@ import { visit } from "@ember/test-helpers";
import { test } from "qunit";
import {
acceptance,
- exists,
loggedInUser,
- query,
} from "discourse/tests/helpers/qunit-helpers";
-import { default as Authorizations } from "../fixtures/authorization-fixtures";
+import Authorizations from "../fixtures/authorization-fixtures";
acceptance("Discourse Activity Pub | Preferences", function (needs) {
needs.user();
@@ -19,34 +17,30 @@ acceptance("Discourse Activity Pub | Preferences", function (needs) {
test("displays account authorization section", async function (assert) {
await visit(`/u/${loggedInUser().username}/preferences/activity-pub`);
- assert.ok(exists(".activity-pub-authorize"));
+ assert.dom(".activity-pub-authorize").exists();
});
test("displays account authorizations", async function (assert) {
await visit(`/u/${loggedInUser().username}/preferences/activity-pub`);
- assert.ok(
- exists(".activity-pub-authorizations .activity-pub-actor-table"),
- "the authorizations table is visible"
- );
- assert.strictEqual(
- document.querySelectorAll(".activity-pub-actor-table-row").length,
- 2,
- "authorized actors are visible"
- );
- assert.ok(
- query(".activity-pub-actor-image img").src.includes("/images/avatar.png"),
- "authorized actor image is visible"
- );
- assert.equal(
- query(".activity-pub-actor-name").innerText,
- "Angus",
- "authorized actor name is visible"
- );
- assert.equal(
- query(".activity-pub-actor-handle").innerText,
- "@angus_ap@test.local",
- "authorized actor handle is visible"
- );
+ assert
+ .dom(".activity-pub-authorizations .activity-pub-actor-table")
+ .exists("the authorizations table is visible");
+ assert
+ .dom(".activity-pub-actor-table-row")
+ .exists({ count: 2 }, "authorized actors are visible");
+ assert
+ .dom(".activity-pub-actor-image img")
+ .hasAttribute(
+ "src",
+ /\/images\/avatar\.png/,
+ "authorized actor image is visible"
+ );
+ assert
+ .dom(".activity-pub-actor-name")
+ .hasText("Angus", "authorized actor name is visible");
+ assert
+ .dom(".activity-pub-actor-handle")
+ .hasText("@angus_ap@test.local", "authorized actor handle is visible");
});
});
diff --git a/test/javascripts/acceptance/activity-pub-topic-test.js b/test/javascripts/acceptance/activity-pub-topic-test.js
index 15ff41aa..d072fed1 100644
--- a/test/javascripts/acceptance/activity-pub-topic-test.js
+++ b/test/javascripts/acceptance/activity-pub-topic-test.js
@@ -6,12 +6,10 @@ import Site from "discourse/models/site";
import topicFixtures from "discourse/tests/fixtures/topic";
import {
acceptance,
- exists,
publishToMessageBus,
- query,
} from "discourse/tests/helpers/qunit-helpers";
import { i18n } from "discourse-i18n";
-import { default as SiteActors } from "../fixtures/site-actors-fixtures";
+import SiteActors from "../fixtures/site-actors-fixtures";
const createdAt = moment().subtract(2, "days");
const scheduledAt = moment().add(3, "minutes");
@@ -80,14 +78,12 @@ acceptance(
await visit("/t/280");
- assert.notOk(
- exists(".topic-map__activity-pub"),
- "the topic map is not visible"
- );
- assert.notOk(
- exists(".topic-post:nth-of-type(2) .post-info.activity-pub"),
- "the post status is not visible"
- );
+ assert
+ .dom(".topic-map__activity-pub")
+ .doesNotExist("the topic map is not visible");
+ assert
+ .dom(".topic-post:nth-of-type(2) .post-info.activity-pub")
+ .doesNotExist("the post status is not visible");
});
}
);
@@ -119,10 +115,9 @@ acceptance(
await visit("/t/280");
- assert.notOk(
- exists(".topic-map__activity-pub"),
- "the activity pub topic map is not visible"
- );
+ assert
+ .dom(".topic-map__activity-pub")
+ .doesNotExist("the activity pub topic map is not visible");
});
test("When the plugin is enabled", async function (assert) {
@@ -134,11 +129,10 @@ acceptance(
await visit("/t/280");
- assert.ok(exists(".topic-map__activity-pub"), "the topic map is visible");
- assert.ok(
- exists(".topic-post:nth-of-type(3) .post-info.activity-pub"),
- "is visible"
- );
+ assert.dom(".topic-map__activity-pub").exists("the topic map is visible");
+ assert
+ .dom(".topic-post:nth-of-type(3) .post-info.activity-pub")
+ .exists("is visible");
});
test("post status update", async function (assert) {
@@ -161,14 +155,13 @@ acceptance(
};
await publishToMessageBus("/activity-pub", postStatusUpdate);
- assert.ok(
- exists(
+ assert
+ .dom(
`.topic-post:nth-of-type(3) .activity-pub-post-status[title='Post was deleted via ActivityPub on ${deletedAt.format(
i18n("dates.time_short_day")
)}.']`
- ),
- "shows the right post status text"
- );
+ )
+ .exists("shows the right post status text");
});
}
);
@@ -199,10 +192,9 @@ acceptance(
await visit("/t/280");
- assert.notOk(
- exists(".topic-map__activity-pub"),
- "the activity pub topic map is not visible"
- );
+ assert
+ .dom(".topic-map__activity-pub")
+ .doesNotExist("the activity pub topic map is not visible");
});
test("When the plugin is enabled", async function (assert) {
@@ -214,11 +206,10 @@ acceptance(
await visit("/t/280");
- assert.ok(exists(".topic-map__activity-pub"), "the topic map is visible");
- assert.ok(
- exists(".topic-post:nth-of-type(3) .post-info.activity-pub"),
- "is visible"
- );
+ assert.dom(".topic-map__activity-pub").exists("the topic map is visible");
+ assert
+ .dom(".topic-post:nth-of-type(3) .post-info.activity-pub")
+ .exists("is visible");
});
}
);
@@ -248,15 +239,14 @@ acceptance(
await visit("/t/280");
- assert.strictEqual(
- query(
- ".topic-map__activity-pub .activity-pub-topic-status"
- ).innerText.trim(),
- `Topic is scheduled to be published via ActivityPub on ${scheduledAt.format(
- i18n("dates.time_short_day")
- )}.`,
- "shows the right status text"
- );
+ assert
+ .dom(".topic-map__activity-pub .activity-pub-topic-status")
+ .hasText(
+ `Topic is scheduled to be published via ActivityPub on ${scheduledAt.format(
+ i18n("dates.time_short_day")
+ )}.`,
+ "shows the right status text"
+ );
});
}
);
@@ -298,10 +288,9 @@ acceptance(
await visit("/t/280");
- assert.notOk(
- exists(".topic-map__activity-pub"),
- "the topic map is not visible"
- );
+ assert
+ .dom(".topic-map__activity-pub")
+ .doesNotExist("the topic map is not visible");
});
test("topic map", async function (assert) {
@@ -312,15 +301,14 @@ acceptance(
await visit("/t/280");
- assert.strictEqual(
- query(
- ".topic-map__activity-pub .activity-pub-topic-status"
- ).innerText.trim(),
- `Topic was published via ActivityPub on ${publishedAt.format(
- i18n("dates.time_short_day")
- )}.`,
- "shows the right status text"
- );
+ assert
+ .dom(".topic-map__activity-pub .activity-pub-topic-status")
+ .hasText(
+ `Topic was published via ActivityPub on ${publishedAt.format(
+ i18n("dates.time_short_day")
+ )}.`,
+ "shows the right status text"
+ );
});
test("topic status update", async function (assert) {
@@ -341,15 +329,14 @@ acceptance(
};
await publishToMessageBus("/activity-pub", topicStatusUpdate);
- assert.strictEqual(
- query(
- ".topic-map__activity-pub .activity-pub-topic-status"
- ).innerText.trim(),
- `Topic was deleted via ActivityPub on ${deletedAt.format(
- i18n("dates.time_short_day")
- )}.`,
- "shows the right status text"
- );
+ assert
+ .dom(".topic-map__activity-pub .activity-pub-topic-status")
+ .hasText(
+ `Topic was deleted via ActivityPub on ${deletedAt.format(
+ i18n("dates.time_short_day")
+ )}.`,
+ "shows the right status text"
+ );
});
test("topic info modal", async function (assert) {
@@ -361,38 +348,34 @@ acceptance(
await visit("/t/280");
await click(".topic-map__activity-pub .activity-pub-topic-status");
- assert.ok(exists(".activity-pub-topic-info-modal"), "shows the modal");
-
- assert.strictEqual(
- query(
- ".activity-pub-topic-info-modal .activity-pub-topic-status"
- ).innerText.trim(),
- `Topic was published on ${publishedAt.format(
- i18n("dates.long_with_year")
- )}.`,
- "shows the right topic status text"
- );
- assert.strictEqual(
- query(
- ".activity-pub-topic-info-modal .activity-pub-post-status"
- ).innerText.trim(),
- `Post was published on ${publishedAt.format(
- i18n("dates.long_with_year")
- )}.`,
- "shows the right post status text"
- );
- assert.ok(
- exists(
+ assert.dom(".activity-pub-topic-info-modal").exists("shows the modal");
+
+ assert
+ .dom(".activity-pub-topic-info-modal .activity-pub-topic-status")
+ .hasText(
+ `Topic was published on ${publishedAt.format(
+ i18n("dates.long_with_year")
+ )}.`,
+ "shows the right topic status text"
+ );
+ assert
+ .dom(".activity-pub-topic-info-modal .activity-pub-post-status")
+ .hasText(
+ `Post was published on ${publishedAt.format(
+ i18n("dates.long_with_year")
+ )}.`,
+ "shows the right post status text"
+ );
+ assert
+ .dom(
".activity-pub-topic-info-modal .activity-pub-attribute.object-type.collection"
- ),
- "shows the right topic object type attribute"
- );
- assert.ok(
- exists(
+ )
+ .exists("shows the right topic object type attribute");
+ assert
+ .dom(
".activity-pub-topic-info-modal .activity-pub-attribute.object-type.note"
- ),
- "shows the right post object type attribute"
- );
+ )
+ .exists("shows the right post object type attribute");
const topicStatusUpdate = {
model: {
@@ -404,15 +387,14 @@ acceptance(
};
await publishToMessageBus("/activity-pub", topicStatusUpdate);
- assert.strictEqual(
- query(
- ".activity-pub-topic-info-modal .activity-pub-topic-status"
- ).innerText.trim(),
- `Topic was deleted on ${deletedAt.format(
- i18n("dates.long_with_year")
- )}.`,
- "handles a status update"
- );
+ assert
+ .dom(".activity-pub-topic-info-modal .activity-pub-topic-status")
+ .hasText(
+ `Topic was deleted on ${deletedAt.format(
+ i18n("dates.long_with_year")
+ )}.`,
+ "handles a status update"
+ );
});
test("topic admin modal", async function (assert) {
@@ -426,26 +408,25 @@ acceptance(
await click(".topic-admin-menu-trigger");
await click(".show-activity-pub-topic-admin");
- assert.ok(exists(".activity-pub-topic-admin-modal"), "shows the modal");
- assert.ok(
- query(
+ assert.dom(".activity-pub-topic-admin-modal").exists("shows the modal");
+ assert
+ .dom(
".activity-pub-topic-admin-modal .activity-pub-topic-actions .action.publish-all"
- ),
- "shows the publish all posts action"
- );
- assert.strictEqual(
- query(
+ )
+ .exists("shows the publish all posts action");
+ assert
+ .dom(
".activity-pub-topic-admin-modal .activity-pub-topic-actions .action.publish-all .action-description"
- ).innerText.trim(),
- `Publish 18 unpublished posts in Topic #280. Posts will not be delivered to the followers of the Group Actors.`,
- "shows the right publish all description"
- );
- assert.ok(
- query(
+ )
+ .hasText(
+ "Publish 18 unpublished posts in Topic #280. Posts will not be delivered to the followers of the Group Actors.",
+ "shows the right publish all description"
+ );
+ assert
+ .dom(
".activity-pub-topic-admin-modal .activity-pub-post-actions .action.deliver"
- ),
- "shows the post deliver action"
- );
+ )
+ .exists("shows the post deliver action");
const topicStatusUpdate = {
model: {
@@ -456,13 +437,14 @@ acceptance(
},
};
await publishToMessageBus("/activity-pub", topicStatusUpdate);
- assert.strictEqual(
- query(
+ assert
+ .dom(
".activity-pub-topic-admin-modal .activity-pub-topic-actions .action.publish-all .action-description"
- ).innerText.trim(),
- `Publish all posts is disabled. All posts in Topic #280 are already published.`,
- "handles topic status updates"
- );
+ )
+ .hasText(
+ "Publish all posts is disabled. All posts in Topic #280 are already published.",
+ "handles topic status updates"
+ );
});
test("post info modal", async function (assert) {
@@ -474,24 +456,19 @@ acceptance(
await visit("/t/280");
await click(".topic-post:nth-of-type(3) .activity-pub-post-status");
- assert.ok(exists(".activity-pub-post-info-modal"), "shows the modal");
-
- assert.strictEqual(
- query(
- ".activity-pub-post-info-modal .activity-pub-post-status"
- ).innerText.trim(),
- `Post was published on ${publishedAt.format(
- i18n("dates.long_with_year")
- )}.`,
- "shows the right status text"
- );
- assert.strictEqual(
- query(
- ".activity-pub-post-info-modal .activity-pub-attribute.visibility"
- ).innerText.trim(),
- "Public",
- "shows the right visibility text"
- );
+ assert.dom(".activity-pub-post-info-modal").exists("shows the modal");
+
+ assert
+ .dom(".activity-pub-post-info-modal .activity-pub-post-status")
+ .hasText(
+ `Post was published on ${publishedAt.format(
+ i18n("dates.long_with_year")
+ )}.`,
+ "shows the right status text"
+ );
+ assert
+ .dom(".activity-pub-post-info-modal .activity-pub-attribute.visibility")
+ .hasText("Public", "shows the right visibility text");
});
test("post admin modal", async function (assert) {
@@ -505,20 +482,20 @@ acceptance(
await click(".topic-post:nth-of-type(4) .post-action-menu__show-more");
await click(".topic-post:nth-of-type(4) .post-action-menu__admin");
await click(".show-activity-pub-post-admin");
- assert.ok(exists(".activity-pub-post-admin-modal"), "shows the modal");
- assert.ok(
- query(
+ assert.dom(".activity-pub-post-admin-modal").exists("shows the modal");
+ assert
+ .dom(
".activity-pub-post-admin-modal .activity-pub-post-actions .action.publish"
- ),
- "shows the publish post action"
- );
- assert.strictEqual(
- query(
+ )
+ .exists("shows the publish post action");
+ assert
+ .dom(
".activity-pub-post-admin-modal .activity-pub-post-actions .action.publish .action-description"
- ).innerText.trim(),
- `Publish Post #3 without delivering it. The Group Actors have no followers to deliver to.`,
- "shows the right publish description"
- );
+ )
+ .hasText(
+ "Publish Post #3 without delivering it. The Group Actors have no followers to deliver to.",
+ "shows the right publish description"
+ );
const topicStatusUpdate = {
model: {
id: 280,
@@ -527,13 +504,14 @@ acceptance(
},
};
await publishToMessageBus("/activity-pub", topicStatusUpdate);
- assert.strictEqual(
- query(
+ assert
+ .dom(
".activity-pub-post-admin-modal .activity-pub-post-actions .action.publish .action-description"
- ).innerText.trim(),
- "Publish is disabled for Post #3. Topic #280 is not published.",
- "handles topic status updates"
- );
+ )
+ .hasText(
+ "Publish is disabled for Post #3. Topic #280 is not published.",
+ "handles topic status updates"
+ );
});
}
);
@@ -567,38 +545,34 @@ acceptance(
await visit("/t/280");
await click(".topic-map__activity-pub .activity-pub-topic-status");
- assert.ok(exists(".activity-pub-topic-info-modal"), "shows the modal");
-
- assert.strictEqual(
- query(
- ".activity-pub-topic-info-modal .activity-pub-topic-status"
- ).innerText.trim(),
- `Topic was published on ${publishedAt.format(
- i18n("dates.long_with_year")
- )}.`,
- "shows the right topic status text"
- );
- assert.strictEqual(
- query(
- ".activity-pub-topic-info-modal .activity-pub-post-status"
- ).innerText.trim(),
- `Post was published on ${publishedAt.format(
- i18n("dates.long_with_year")
- )}.`,
- "shows the right post status text"
- );
- assert.notOk(
- exists(
+ assert.dom(".activity-pub-topic-info-modal").exists("shows the modal");
+
+ assert
+ .dom(".activity-pub-topic-info-modal .activity-pub-topic-status")
+ .hasText(
+ `Topic was published on ${publishedAt.format(
+ i18n("dates.long_with_year")
+ )}.`,
+ "shows the right topic status text"
+ );
+ assert
+ .dom(".activity-pub-topic-info-modal .activity-pub-post-status")
+ .hasText(
+ `Post was published on ${publishedAt.format(
+ i18n("dates.long_with_year")
+ )}.`,
+ "shows the right post status text"
+ );
+ assert
+ .dom(
".activity-pub-topic-info-modal .activity-pub-attribute.object-type.collection"
- ),
- "does not show a topic object type attribute"
- );
- assert.ok(
- exists(
+ )
+ .doesNotExist("does not show a topic object type attribute");
+ assert
+ .dom(
".activity-pub-topic-info-modal .activity-pub-attribute.object-type.note"
- ),
- "shows the right post object type attribute"
- );
+ )
+ .exists("shows the right post object type attribute");
});
test("ActivityPub topic admin modal", async function (assert) {
@@ -612,12 +586,11 @@ acceptance(
await click(".topic-admin-menu-trigger");
await click(".show-activity-pub-topic-admin");
- assert.notOk(
- query(
+ assert
+ .dom(
".activity-pub-topic-admin-modal .activity-pub-topic-actions .action.publish-all"
- ),
- "does not show the publish all posts action"
- );
+ )
+ .doesNotExist("does not show the publish all posts action");
});
}
);
@@ -660,21 +633,21 @@ acceptance(
await visit("/t/280");
- assert.strictEqual(
- query(".activity-pub-topic-status").innerText.trim(),
- `Topic was published via ActivityPub by @cat_1@test.local on ${publishedAt.format(
- i18n("dates.time_short_day")
- )}.`,
- "shows the right topic status text"
- );
- assert.ok(
- exists(
+ assert
+ .dom(".activity-pub-topic-status")
+ .hasText(
+ `Topic was published via ActivityPub by @cat_1@test.local on ${publishedAt.format(
+ i18n("dates.time_short_day")
+ )}.`,
+ "shows the right topic status text"
+ );
+ assert
+ .dom(
`.topic-post:nth-of-type(3) .activity-pub-post-status[title='Post was published via ActivityPub by actor1@domain.com on ${publishedAt.format(
i18n("dates.time_short_day")
)}.']`
- ),
- "shows the right post status text"
- );
+ )
+ .exists("shows the right post status text");
});
test("ActivityPub topic info modal", async function (assert) {
@@ -686,35 +659,32 @@ acceptance(
await visit("/t/280");
await click(".topic-map__activity-pub .activity-pub-topic-status");
- assert.ok(exists(".activity-pub-topic-info-modal"), "shows the modal");
-
- assert.strictEqual(
- query(
- ".activity-pub-topic-info-modal .activity-pub-topic-status"
- ).innerText.trim(),
- `Topic was published on ${publishedAt.format(
- i18n("dates.long_with_year")
- )}.`,
- "shows the right topic status text"
- );
- assert.strictEqual(
- query(
- ".activity-pub-topic-info-modal .activity-pub-post-status"
- ).innerText.trim(),
- `Post was published on ${publishedAt.format(
- i18n("dates.long_with_year")
- )}.`,
- "shows the right post status text"
- );
- assert.strictEqual(
- query(
- ".activity-pub-topic-info-modal .activity-pub-post-status"
- ).innerText.trim(),
- `Post was published on ${publishedAt.format(
- i18n("dates.long_with_year")
- )}.`,
- "shows the right post status text"
- );
+ assert.dom(".activity-pub-topic-info-modal").exists("shows the modal");
+
+ assert
+ .dom(".activity-pub-topic-info-modal .activity-pub-topic-status")
+ .hasText(
+ `Topic was published on ${publishedAt.format(
+ i18n("dates.long_with_year")
+ )}.`,
+ "shows the right topic status text"
+ );
+ assert
+ .dom(".activity-pub-topic-info-modal .activity-pub-post-status")
+ .hasText(
+ `Post was published on ${publishedAt.format(
+ i18n("dates.long_with_year")
+ )}.`,
+ "shows the right post status text"
+ );
+ assert
+ .dom(".activity-pub-topic-info-modal .activity-pub-post-status")
+ .hasText(
+ `Post was published on ${publishedAt.format(
+ i18n("dates.long_with_year")
+ )}.`,
+ "shows the right post status text"
+ );
});
test("ActivityPub post info modal", async function (assert) {
@@ -726,23 +696,18 @@ acceptance(
await visit("/t/280");
await click(".topic-post:nth-of-type(3) .activity-pub-post-status");
- assert.ok(exists(".activity-pub-post-info-modal"), "shows the modal");
- assert.strictEqual(
- query(
- ".activity-pub-post-info-modal .activity-pub-post-status"
- ).innerText.trim(),
- `Post was published on ${publishedAt.format(
- i18n("dates.long_with_year")
- )}.`,
- "shows the right status text"
- );
- assert.strictEqual(
- query(
- ".activity-pub-post-info-modal .activity-pub-attribute.visibility"
- ).innerText.trim(),
- "Public",
- "shows the right visibility text"
- );
+ assert.dom(".activity-pub-post-info-modal").exists("shows the modal");
+ assert
+ .dom(".activity-pub-post-info-modal .activity-pub-post-status")
+ .hasText(
+ `Post was published on ${publishedAt.format(
+ i18n("dates.long_with_year")
+ )}.`,
+ "shows the right status text"
+ );
+ assert
+ .dom(".activity-pub-post-info-modal .activity-pub-attribute.visibility")
+ .hasText("Public", "shows the right visibility text");
});
}
);
diff --git a/test/javascripts/components/activity-pub-authorize-test.js b/test/javascripts/components/activity-pub-authorize-test.gjs
similarity index 72%
rename from test/javascripts/components/activity-pub-authorize-test.js
rename to test/javascripts/components/activity-pub-authorize-test.gjs
index d3fa58ef..c94e1a0a 100644
--- a/test/javascripts/components/activity-pub-authorize-test.js
+++ b/test/javascripts/components/activity-pub-authorize-test.gjs
@@ -1,19 +1,16 @@
import { click, fillIn, render, triggerKeyEvent } from "@ember/test-helpers";
-import hbs from "htmlbars-inline-precompile";
import { module, test } from "qunit";
import sinon from "sinon";
import { setupRenderingTest } from "discourse/tests/helpers/component-test";
import pretender, { response } from "discourse/tests/helpers/create-pretender";
-import { exists, query } from "discourse/tests/helpers/qunit-helpers";
import selectKit from "discourse/tests/helpers/select-kit-helper";
+import ActivityPubAuthorize from "discourse/plugins/discourse-activity-pub/discourse/components/activity-pub-authorize";
module(
"Discourse Activity Pub | Component | activity-pub-authorize",
function (hooks) {
setupRenderingTest(hooks);
- const template = hbs` `;
-
test("verifies a domain", async function (assert) {
let domain = "test.com";
let authType = "discourse";
@@ -24,12 +21,12 @@ module(
assert.strictEqual(
request.requestBody,
`domain=${domain}&auth_type=${authType}`,
- "it sets correct request parameters"
+ "sets correct request parameters"
);
return response({ success: true });
});
- await render(template);
+ await render( );
const authTypes = selectKit("#user_activity_pub_authorize_auth_type");
await authTypes.expand();
@@ -39,19 +36,15 @@ module(
await click("#user_activity_pub_authorize_verify_domain");
assert.strictEqual(requests, 1, "performs one request");
- assert.strictEqual(
- query(".activity-pub-authorize-verified-domain span").textContent,
- domain,
- "displays the verified domain"
- );
- assert.ok(
- exists("#user_activity_pub_authorize_clear_domain"),
- "displays the clear verified domain button"
- );
- assert.ok(
- exists("#user_activity_pub_authorize_authorize_domain"),
- "displays the authorize domain button"
- );
+ assert
+ .dom(".activity-pub-authorize-verified-domain span")
+ .hasText(domain, "displays the verified domain");
+ assert
+ .dom("#user_activity_pub_authorize_clear_domain")
+ .exists("displays the clear verified domain button");
+ assert
+ .dom("#user_activity_pub_authorize_authorize_domain")
+ .exists("displays the authorize domain button");
});
test("pressing Enter in input triggers domain verification", async function (assert) {
@@ -64,12 +57,12 @@ module(
assert.strictEqual(
request.requestBody,
`domain=${domain}&auth_type=${authType}`,
- "it sets correct request parameters"
+ "sets correct request parameters"
);
return response({ success: true });
});
- await render(template);
+ await render( );
const authTypes = selectKit("#user_activity_pub_authorize_auth_type");
await authTypes.expand();
@@ -90,7 +83,7 @@ module(
return response({ success: true });
});
- await render(template);
+ await render( );
const authTypes = selectKit("#user_activity_pub_authorize_auth_type");
await authTypes.expand();
@@ -100,19 +93,15 @@ module(
await click("#user_activity_pub_authorize_verify_domain");
await click("#user_activity_pub_authorize_clear_domain");
- assert.ok(
- exists("#user_activity_pub_authorize_domain"),
- "displays the domain input"
- );
- assert.strictEqual(
- query("#user_activity_pub_authorize_domain").textContent,
- "",
- "the domain input is empty"
- );
- assert.ok(
- exists("#user_activity_pub_authorize_verify_domain"),
- "displays the verify domain button"
- );
+ assert
+ .dom("#user_activity_pub_authorize_domain")
+ .exists("displays the domain input");
+ assert
+ .dom("#user_activity_pub_authorize_domain")
+ .hasNoText("the domain input is empty");
+ assert
+ .dom("#user_activity_pub_authorize_verify_domain")
+ .exists("displays the verify domain button");
});
test("authorizes a verified domain", async function (assert) {
@@ -124,7 +113,7 @@ module(
const openStub = sinon.stub(window, "open").returns(null);
- await render(template);
+ await render( );
const authTypes = selectKit("#user_activity_pub_authorize_auth_type");
await authTypes.expand();
@@ -136,7 +125,7 @@ module(
assert.true(
openStub.calledWith(`/ap/auth/authorize/${authType}`, "_self"),
- "it loads the authorize route in the current tab"
+ "loads the authorize route in the current tab"
);
});
}
diff --git a/test/javascripts/components/activity-pub-follow-domain-test.js b/test/javascripts/components/activity-pub-follow-domain-test.gjs
similarity index 61%
rename from test/javascripts/components/activity-pub-follow-domain-test.js
rename to test/javascripts/components/activity-pub-follow-domain-test.gjs
index 231b40c5..4b80fc8a 100644
--- a/test/javascripts/components/activity-pub-follow-domain-test.js
+++ b/test/javascripts/components/activity-pub-follow-domain-test.gjs
@@ -1,5 +1,4 @@
import { click, fillIn, render } from "@ember/test-helpers";
-import hbs from "htmlbars-inline-precompile";
import { module, test } from "qunit";
import sinon from "sinon";
import DiscourseURL from "discourse/lib/url";
@@ -7,9 +6,9 @@ import Category from "discourse/models/category";
import Site from "discourse/models/site";
import { setupRenderingTest } from "discourse/tests/helpers/component-test";
import pretender, { response } from "discourse/tests/helpers/create-pretender";
-import { query } from "discourse/tests/helpers/qunit-helpers";
import { i18n } from "discourse-i18n";
-import { default as Mastodon } from "../fixtures/mastodon-fixtures";
+import ActivityPubFollowDomain from "discourse/plugins/discourse-activity-pub/discourse/components/activity-pub-follow-domain";
+import Mastodon from "../fixtures/mastodon-fixtures";
const mastodonAboutPath = "api/v2/instance";
@@ -27,41 +26,55 @@ module(
this.model = category;
});
- const template = hbs` `;
-
test("with a non domain input", async function (assert) {
+ const self = this;
+
let domain = "notADomain";
- await render(template);
+ await render(
+
+
+
+ );
await fillIn("#activity_pub_follow_domain_input", domain);
await click("#activity_pub_follow_domain_button");
- assert.strictEqual(
- query(".activity-pub-follow-domain-footer.error").textContent.trim(),
- i18n("discourse_activity_pub.follow.domain.invalid"),
- "displays an invalid message"
- );
+ assert
+ .dom(".activity-pub-follow-domain-footer.error")
+ .hasText(
+ i18n("discourse_activity_pub.follow.domain.invalid"),
+ "displays an invalid message"
+ );
});
- test("with a non activitypub domain", async function (assert) {
+ test("with a non ActivityPub domain", async function (assert) {
+ const self = this;
+
let domain = "google.com";
pretender.get(`https://${domain}/${mastodonAboutPath}`, () => {
return response(404, "not found");
});
- await render(template);
+ await render(
+
+
+
+ );
await fillIn("#activity_pub_follow_domain_input", domain);
await click("#activity_pub_follow_domain_button");
- assert.strictEqual(
- query(".activity-pub-follow-domain-footer.error")?.textContent.trim(),
- i18n("discourse_activity_pub.follow.domain.invalid"),
- "displays an invalid message"
- );
+ assert
+ .dom(".activity-pub-follow-domain-footer.error")
+ .hasText(
+ i18n("discourse_activity_pub.follow.domain.invalid"),
+ "displays an invalid message"
+ );
});
- test("with an activitypub domain", async function (assert) {
+ test("with an ActivityPub domain", async function (assert) {
+ const self = this;
+
let domain = "mastodon.social";
pretender.get(`https://${domain}/${mastodonAboutPath}`, () => {
@@ -72,7 +85,11 @@ module(
.stub(DiscourseURL, "redirectAbsolute")
.returns(null);
- await render(template);
+ await render(
+
+
+
+ );
await fillIn("#activity_pub_follow_domain_input", domain);
await click("#activity_pub_follow_domain_button");
@@ -81,7 +98,7 @@ module(
)}`;
assert.true(
openStub.calledWith(url),
- "it loads the mastodon authorize interaction route in a new tab"
+ "loads the mastodon authorize interaction route in a new tab"
);
});
}
diff --git a/test/javascripts/components/activity-pub-post-test.js b/test/javascripts/components/activity-pub-post-test.gjs
similarity index 54%
rename from test/javascripts/components/activity-pub-post-test.js
rename to test/javascripts/components/activity-pub-post-test.gjs
index 8758791d..defe6421 100644
--- a/test/javascripts/components/activity-pub-post-test.js
+++ b/test/javascripts/components/activity-pub-post-test.gjs
@@ -1,41 +1,54 @@
import { click, render } from "@ember/test-helpers";
-import hbs from "htmlbars-inline-precompile";
import { module, skip } from "qunit";
+import MountWidget from "discourse/components/mount-widget";
import { setupRenderingTest } from "discourse/tests/helpers/component-test";
-import { exists } from "discourse/tests/helpers/qunit-helpers";
module("Discourse Activity Pub | Component | Widget | post", function (hooks) {
setupRenderingTest(hooks);
skip("non activity pub topic", async function (assert) {
+ const self = this;
+
this.currentUser.admin = true;
this.set("args", { canManage: true, activity_pub_enabled: false });
this.set("changePostOwner", () => (this.owned = true));
- await render(hbs`
-
- `);
+ await render(
+
+
+
+ );
await click(".post-menu-area .show-post-admin-menu");
- assert.ok(
- exists(".post-admin-menu button.change-owner"),
- "the change owner button is visible"
- );
+ assert
+ .dom(".post-admin-menu button.change-owner")
+ .exists("the change owner button is visible");
});
skip("activity pub topic", async function (assert) {
+ const self = this;
+
this.currentUser.admin = true;
this.set("args", { canManage: true, activity_pub_enabled: true });
this.set("changePostOwner", () => (this.owned = true));
- await render(hbs`
-
- `);
+ await render(
+
+
+
+ );
await click(".post-menu-area .show-post-admin-menu");
- assert.ok(
- !exists(".post-admin-menu button.change-owner"),
- "the change owner button is not visible"
- );
+ assert
+ .dom(".post-admin-menu button.change-owner")
+ .doesNotExist("the change owner button is not visible");
});
});
diff --git a/test/javascripts/components/activity-pub-status-test.js b/test/javascripts/components/activity-pub-status-test.gjs
similarity index 60%
rename from test/javascripts/components/activity-pub-status-test.js
rename to test/javascripts/components/activity-pub-status-test.gjs
index ea092ffb..5870d39b 100644
--- a/test/javascripts/components/activity-pub-status-test.js
+++ b/test/javascripts/components/activity-pub-status-test.gjs
@@ -1,10 +1,8 @@
import { getOwner } from "@ember/application";
import { render } from "@ember/test-helpers";
-import hbs from "htmlbars-inline-precompile";
import { module, test } from "qunit";
import { cloneJSON } from "discourse/lib/object";
import Site from "discourse/models/site";
-import AppEvents from "discourse/services/app-events";
import { setupRenderingTest } from "discourse/tests/helpers/component-test";
import {
currentUser,
@@ -12,7 +10,8 @@ import {
query,
} from "discourse/tests/helpers/qunit-helpers";
import { i18n } from "discourse-i18n";
-import { default as SiteActors } from "../fixtures/site-actors-fixtures";
+import ActivityPubActorStatus from "discourse/plugins/discourse-activity-pub/discourse/components/activity-pub-actor-status";
+import SiteActors from "../fixtures/site-actors-fixtures";
function setSite(context, attrs = {}) {
context.siteSettings.activity_pub_enabled = attrs.activity_pub_enabled;
@@ -38,7 +37,7 @@ function setTag(context) {
function setComposer(context, opts = {}) {
opts.user ??= currentUser();
- opts.appEvents = AppEvents.create();
+ opts.appEvents = getOwner(context).lookup("service:app-events");
const store = getOwner(context).lookup("service:store");
const composer = store.createRecord("composer", opts);
context.set("composer", composer);
@@ -48,9 +47,9 @@ module(
"Discourse Activity Pub | Component | activity-pub-actor-status with category",
function (hooks) {
setupRenderingTest(hooks);
- const template = hbs` `;
-
test("with publishing disabled", async function (assert) {
+ const self = this;
+
setSite(this, {
activity_pub_enabled: true,
activity_pub_publishing_enabled: false,
@@ -58,23 +57,35 @@ module(
});
setCategory(this);
- await render(template);
+ await render(
+
+
+
+ );
const status = query(".activity-pub-actor-status.publishing-disabled");
assert.ok(status, "has the right class");
- assert.strictEqual(
- status.title,
- i18n("discourse_activity_pub.status.title.publishing_disabled"),
- "has the right title"
- );
- assert.strictEqual(
- status.innerText.trim(),
- i18n("discourse_activity_pub.status.label.publishing_disabled"),
- "has the right label"
- );
+ assert
+ .dom(status)
+ .hasAttribute(
+ "title",
+ i18n("discourse_activity_pub.status.title.publishing_disabled"),
+ "has the right title"
+ );
+ assert
+ .dom(status)
+ .hasText(
+ i18n("discourse_activity_pub.status.label.publishing_disabled"),
+ "has the right label"
+ );
});
test("with plugin disabled", async function (assert) {
+ const self = this;
+
setSite(this, {
activity_pub_enabled: false,
activity_pub_publishing_enabled: true,
@@ -82,23 +93,35 @@ module(
});
setCategory(this);
- await render(template);
+ await render(
+
+
+
+ );
const status = query(".activity-pub-actor-status.not-active");
assert.ok(status, "has the right class");
- assert.strictEqual(
- status.title,
- i18n("discourse_activity_pub.status.title.plugin_disabled"),
- "has the right title"
- );
- assert.strictEqual(
- status.innerText.trim(),
- i18n("discourse_activity_pub.status.label.not_active"),
- "has the right label"
- );
+ assert
+ .dom(status)
+ .hasAttribute(
+ "title",
+ i18n("discourse_activity_pub.status.title.plugin_disabled"),
+ "has the right title"
+ );
+ assert
+ .dom(status)
+ .hasText(
+ i18n("discourse_activity_pub.status.label.not_active"),
+ "has the right label"
+ );
});
test("with activity pub disabled on category", async function (assert) {
+ const self = this;
+
const categoryActors = cloneJSON(SiteActors.category);
setSite(this, {
activity_pub_enabled: true,
@@ -114,25 +137,35 @@ module(
});
setCategory(this);
- await render(template);
+ await render(
+
+
+
+ );
const status = query(".activity-pub-actor-status.not-active");
assert.ok(status, "has the right class");
- assert.strictEqual(
- status.title,
+ assert.dom(status).hasAttribute(
+ "title",
i18n("discourse_activity_pub.status.title.model_disabled", {
model_type: "category",
}),
"has the right title"
);
- assert.strictEqual(
- status.innerText.trim(),
- i18n("discourse_activity_pub.status.label.not_active"),
- "has the right label"
- );
+ assert
+ .dom(status)
+ .hasText(
+ i18n("discourse_activity_pub.status.label.not_active"),
+ "has the right label"
+ );
});
test("with activity pub not ready on category", async function (assert) {
+ const self = this;
+
const categoryActors = cloneJSON(SiteActors.category);
setSite(this, {
activity_pub_enabled: true,
@@ -149,25 +182,35 @@ module(
});
setCategory(this);
- await render(template);
+ await render(
+
+
+
+ );
const status = query(".activity-pub-actor-status.not-active");
assert.ok(status, "has the right class");
- assert.strictEqual(
- status.title,
+ assert.dom(status).hasAttribute(
+ "title",
i18n("discourse_activity_pub.status.title.model_not_ready", {
model_type: "category",
}),
"has the right title"
);
- assert.strictEqual(
- status.innerText.trim(),
- i18n("discourse_activity_pub.status.label.not_active"),
- "has the right label"
- );
+ assert
+ .dom(status)
+ .hasText(
+ i18n("discourse_activity_pub.status.label.not_active"),
+ "has the right label"
+ );
});
test("with active activity pub", async function (assert) {
+ const self = this;
+
setSite(this, {
activity_pub_enabled: true,
activity_pub_publishing_enabled: true,
@@ -175,25 +218,35 @@ module(
});
setCategory(this);
- await render(template);
+ await render(
+
+
+
+ );
const status = query(".activity-pub-actor-status.active");
assert.ok(status, "has the right class");
- assert.strictEqual(
- status.title,
+ assert.dom(status).hasAttribute(
+ "title",
i18n("discourse_activity_pub.status.title.model_active.first_post", {
delay_minutes: this.siteSettings.activity_pub_delivery_delay_minutes,
}),
"has the right title"
);
- assert.strictEqual(
- status.innerText.trim(),
- i18n("discourse_activity_pub.status.label.active"),
- "has the right label"
- );
+ assert
+ .dom(status)
+ .hasText(
+ i18n("discourse_activity_pub.status.label.active"),
+ "has the right label"
+ );
});
test("updates correctly after messageBus message", async function (assert) {
+ const self = this;
+
setSite(this, {
activity_pub_enabled: true,
activity_pub_publishing_enabled: true,
@@ -201,7 +254,14 @@ module(
});
setCategory(this);
- await render(template);
+ await render(
+
+
+
+ );
await publishToMessageBus("/activity-pub", {
model: {
id: this.category.id,
@@ -213,22 +273,23 @@ module(
const status = query(".activity-pub-actor-status.not-active");
assert.ok(status, "has the right class");
- assert.strictEqual(
- status.title,
+ assert.dom(status).hasAttribute(
+ "title",
i18n("discourse_activity_pub.status.title.model_not_ready", {
model_type: "category",
}),
"has the right title"
);
- assert.strictEqual(
- status.innerText.trim(),
- i18n("discourse_activity_pub.status.label.not_active"),
- "has the right label"
- );
+ assert
+ .dom(status)
+ .hasText(
+ i18n("discourse_activity_pub.status.label.not_active"),
+ "has the right label"
+ );
});
test("when in the composer", async function (assert) {
- const composerTemplate = hbs` `;
+ const self = this;
setSite(this, {
activity_pub_enabled: true,
@@ -240,14 +301,21 @@ module(
categoryId: this.category.id,
});
- await render(composerTemplate);
-
- const label = query(".activity-pub-actor-status .label");
- assert.strictEqual(
- label.innerText.trim(),
- i18n("discourse_activity_pub.visibility.label.public"),
- "has the right label text"
+ await render(
+
+
+
);
+
+ assert
+ .dom(".activity-pub-actor-status .label")
+ .hasText(
+ i18n("discourse_activity_pub.visibility.label.public"),
+ "has the right label text"
+ );
});
}
);
@@ -256,9 +324,9 @@ module(
"Discourse Activity Pub | Component | activity-pub-actor-status with tag",
function (hooks) {
setupRenderingTest(hooks);
- const template = hbs` `;
-
test("with publishing disabled", async function (assert) {
+ const self = this;
+
setSite(this, {
activity_pub_enabled: true,
activity_pub_publishing_enabled: false,
@@ -266,23 +334,32 @@ module(
});
setTag(this);
- await render(template);
+ await render(
+
+
+
+ );
const status = query(".activity-pub-actor-status.publishing-disabled");
assert.ok(status, "has the right class");
- assert.strictEqual(
- status.title,
- i18n("discourse_activity_pub.status.title.publishing_disabled"),
- "has the right title"
- );
- assert.strictEqual(
- status.innerText.trim(),
- i18n("discourse_activity_pub.status.label.publishing_disabled"),
- "has the right label"
- );
+ assert
+ .dom(status)
+ .hasAttribute(
+ "title",
+ i18n("discourse_activity_pub.status.title.publishing_disabled"),
+ "has the right title"
+ );
+ assert
+ .dom(status)
+ .hasText(
+ i18n("discourse_activity_pub.status.label.publishing_disabled"),
+ "has the right label"
+ );
});
test("with plugin disabled", async function (assert) {
+ const self = this;
+
setSite(this, {
activity_pub_enabled: false,
activity_pub_publishing_enabled: true,
@@ -290,23 +367,32 @@ module(
});
setTag(this);
- await render(template);
+ await render(
+
+
+
+ );
const status = query(".activity-pub-actor-status.not-active");
assert.ok(status, "has the right class");
- assert.strictEqual(
- status.title,
- i18n("discourse_activity_pub.status.title.plugin_disabled"),
- "has the right title"
- );
- assert.strictEqual(
- status.innerText.trim(),
- i18n("discourse_activity_pub.status.label.not_active"),
- "has the right label"
- );
+ assert
+ .dom(status)
+ .hasAttribute(
+ "title",
+ i18n("discourse_activity_pub.status.title.plugin_disabled"),
+ "has the right title"
+ );
+ assert
+ .dom(status)
+ .hasText(
+ i18n("discourse_activity_pub.status.label.not_active"),
+ "has the right label"
+ );
});
test("with activity pub disabled on tag", async function (assert) {
+ const self = this;
+
const tagActors = cloneJSON(SiteActors.tag);
setSite(this, {
activity_pub_enabled: true,
@@ -322,25 +408,32 @@ module(
});
setTag(this);
- await render(template);
+ await render(
+
+
+
+ );
const status = query(".activity-pub-actor-status.not-active");
assert.ok(status, "has the right class");
- assert.strictEqual(
- status.title,
+ assert.dom(status).hasAttribute(
+ "title",
i18n("discourse_activity_pub.status.title.model_disabled", {
model_type: "tag",
}),
"has the right title"
);
- assert.strictEqual(
- status.innerText.trim(),
- i18n("discourse_activity_pub.status.label.not_active"),
- "has the right label"
- );
+ assert
+ .dom(status)
+ .hasText(
+ i18n("discourse_activity_pub.status.label.not_active"),
+ "has the right label"
+ );
});
test("with activity pub not ready on tag", async function (assert) {
+ const self = this;
+
const tagActors = cloneJSON(SiteActors.tag);
setSite(this, {
activity_pub_enabled: true,
@@ -357,25 +450,32 @@ module(
});
setTag(this);
- await render(template);
+ await render(
+
+
+
+ );
const status = query(".activity-pub-actor-status.not-active");
assert.ok(status, "has the right class");
- assert.strictEqual(
- status.title,
+ assert.dom(status).hasAttribute(
+ "title",
i18n("discourse_activity_pub.status.title.model_not_ready", {
model_type: "tag",
}),
"has the right title"
);
- assert.strictEqual(
- status.innerText.trim(),
- i18n("discourse_activity_pub.status.label.not_active"),
- "has the right label"
- );
+ assert
+ .dom(status)
+ .hasText(
+ i18n("discourse_activity_pub.status.label.not_active"),
+ "has the right label"
+ );
});
test("with active activity pub", async function (assert) {
+ const self = this;
+
setSite(this, {
activity_pub_enabled: true,
activity_pub_publishing_enabled: true,
@@ -383,25 +483,32 @@ module(
});
setTag(this);
- await render(template);
+ await render(
+
+
+
+ );
const status = query(".activity-pub-actor-status.active");
assert.ok(status, "has the right class");
- assert.strictEqual(
- status.title,
+ assert.dom(status).hasAttribute(
+ "title",
i18n("discourse_activity_pub.status.title.model_active.first_post", {
delay_minutes: this.siteSettings.activity_pub_delivery_delay_minutes,
}),
"has the right title"
);
- assert.strictEqual(
- status.innerText.trim(),
- i18n("discourse_activity_pub.status.label.active"),
- "has the right label"
- );
+ assert
+ .dom(status)
+ .hasText(
+ i18n("discourse_activity_pub.status.label.active"),
+ "has the right label"
+ );
});
test("updates correctly after messageBus message", async function (assert) {
+ const self = this;
+
setSite(this, {
activity_pub_enabled: true,
activity_pub_publishing_enabled: true,
@@ -409,7 +516,11 @@ module(
});
setTag(this);
- await render(template);
+ await render(
+
+
+
+ );
await publishToMessageBus("/activity-pub", {
model: {
id: this.tag.id,
@@ -421,22 +532,23 @@ module(
const status = query(".activity-pub-actor-status.not-active");
assert.ok(status, "has the right class");
- assert.strictEqual(
- status.title,
+ assert.dom(status).hasAttribute(
+ "title",
i18n("discourse_activity_pub.status.title.model_not_ready", {
model_type: "tag",
}),
"has the right title"
);
- assert.strictEqual(
- status.innerText.trim(),
- i18n("discourse_activity_pub.status.label.not_active"),
- "has the right label"
- );
+ assert
+ .dom(status)
+ .hasText(
+ i18n("discourse_activity_pub.status.label.not_active"),
+ "has the right label"
+ );
});
test("when in the composer", async function (assert) {
- const composerTemplate = hbs` `;
+ const self = this;
setSite(this, {
activity_pub_enabled: true,
@@ -448,14 +560,21 @@ module(
tags: [this.tag.name],
});
- await render(composerTemplate);
-
- const label = query(".activity-pub-actor-status .label");
- assert.strictEqual(
- label.innerText.trim(),
- i18n("discourse_activity_pub.visibility.label.public"),
- "has the right label text"
+ await render(
+
+
+
);
+
+ assert
+ .dom(".activity-pub-actor-status .label")
+ .hasText(
+ i18n("discourse_activity_pub.visibility.label.public"),
+ "has the right label text"
+ );
});
}
);