diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index ac403ef..0000000 --- a/.eslintrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "globals": { - "Stripe": true - }, - "extends": "eslint-config-discourse" -} diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000..be1a9f3 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1 @@ +module.exports = require("@discourse/lint-configs/eslint"); diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 0967ef4..0000000 --- a/.prettierrc +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/.prettierrc.cjs b/.prettierrc.cjs new file mode 100644 index 0000000..57f647b --- /dev/null +++ b/.prettierrc.cjs @@ -0,0 +1 @@ +module.exports = require("@discourse/lint-configs/prettier"); diff --git a/.template-lintrc.cjs b/.template-lintrc.cjs new file mode 100644 index 0000000..5355ea0 --- /dev/null +++ b/.template-lintrc.cjs @@ -0,0 +1 @@ +module.exports = require("@discourse/lint-configs/template-lint"); diff --git a/.template-lintrc.js b/.template-lintrc.js deleted file mode 100644 index a558b8e..0000000 --- a/.template-lintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - plugins: ["ember-template-lint-plugin-discourse"], - extends: "discourse:recommended", -}; diff --git a/Gemfile.lock b/Gemfile.lock index 8e05f5a..c8f6ddb 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -8,35 +8,45 @@ GEM remote: https://rubygems.org/ specs: ast (2.4.2) - json (2.6.2) - parallel (1.22.1) - parser (3.1.2.1) + json (2.7.1) + language_server-protocol (3.17.0.3) + parallel (1.24.0) + parser (3.3.0.4) ast (~> 2.4.1) - prettier_print (1.2.0) + racc + prettier_print (1.2.1) + racc (1.7.3) rainbow (3.1.1) - regexp_parser (2.6.0) - rexml (3.2.5) - rubocop (1.36.0) + regexp_parser (2.9.0) + rexml (3.2.6) + rubocop (1.60.0) json (~> 2.3) + language_server-protocol (>= 3.17.0) parallel (~> 1.10) - parser (>= 3.1.2.1) + parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 1.8, < 3.0) rexml (>= 3.2.5, < 4.0) - rubocop-ast (>= 1.20.1, < 2.0) + rubocop-ast (>= 1.30.0, < 2.0) ruby-progressbar (~> 1.7) - unicode-display_width (>= 1.4.0, < 3.0) - rubocop-ast (1.21.0) - parser (>= 3.1.1.0) - rubocop-discourse (3.0) - rubocop (>= 1.1.0) - rubocop-rspec (>= 2.0.0) - rubocop-rspec (2.13.2) - rubocop (~> 1.33) - ruby-progressbar (1.11.0) - syntax_tree (5.1.0) + unicode-display_width (>= 2.4.0, < 3.0) + rubocop-ast (1.30.0) + parser (>= 3.2.1.0) + rubocop-capybara (2.20.0) + rubocop (~> 1.41) + rubocop-discourse (3.6.0) + rubocop (>= 1.59.0) + rubocop-rspec (>= 2.25.0) + rubocop-factory_bot (2.25.1) + rubocop (~> 1.41) + rubocop-rspec (2.26.1) + rubocop (~> 1.40) + rubocop-capybara (~> 2.17) + rubocop-factory_bot (~> 2.22) + ruby-progressbar (1.13.0) + syntax_tree (6.2.0) prettier_print (>= 1.2.0) - unicode-display_width (2.3.0) + unicode-display_width (2.5.0) PLATFORMS ruby @@ -47,4 +57,4 @@ DEPENDENCIES translations-manager! BUNDLED WITH - 2.3.4 + 2.5.4 diff --git a/assets/javascripts/discourse/components/campaign-banner.js b/assets/javascripts/discourse/components/campaign-banner.js index 064f4af..41e34f8 100644 --- a/assets/javascripts/discourse/components/campaign-banner.js +++ b/assets/javascripts/discourse/components/campaign-banner.js @@ -1,11 +1,11 @@ -import { action } from "@ember/object"; -import { ajax } from "discourse/lib/ajax"; -import { equal } from "@ember/object/computed"; -import { setting } from "discourse/lib/computed"; import Component from "@ember/component"; -import discourseComputed, { observes } from "discourse-common/utils/decorators"; +import { action } from "@ember/object"; +import { equal } from "@ember/object/computed"; import { later } from "@ember/runloop"; import { inject as service } from "@ember/service"; +import { ajax } from "discourse/lib/ajax"; +import { setting } from "discourse/lib/computed"; +import discourseComputed, { observes } from "discourse-common/utils/decorators"; const SIDEBAR_BODY_CLASS = "subscription-campaign-sidebar"; @@ -96,6 +96,7 @@ export default Component.extend({ }, willDestroyElement() { + this._super(...arguments); document.body.classList.remove(SIDEBAR_BODY_CLASS); }, diff --git a/assets/javascripts/discourse/components/modal/admin-cancel-subscription.gjs b/assets/javascripts/discourse/components/modal/admin-cancel-subscription.gjs index b7f39af..2330e20 100644 --- a/assets/javascripts/discourse/components/modal/admin-cancel-subscription.gjs +++ b/assets/javascripts/discourse/components/modal/admin-cancel-subscription.gjs @@ -1,10 +1,10 @@ +import Component from "@glimmer/component"; +import { tracked } from "@glimmer/tracking"; +import { Input } from "@ember/component"; +import { fn, hash } from "@ember/helper"; import DButton from "discourse/components/d-button"; import DModal from "discourse/components/d-modal"; -import Component from "@glimmer/component"; -import { fn, hash } from "@ember/helper"; import i18n from "discourse-common/helpers/i18n"; -import { Input } from "@ember/component"; -import { tracked } from "@glimmer/tracking"; export default class AdminCancelSubscription extends Component { @tracked refund; diff --git a/assets/javascripts/discourse/components/product-list.js b/assets/javascripts/discourse/components/product-list.js index 11457ee..015c6a0 100644 --- a/assets/javascripts/discourse/components/product-list.js +++ b/assets/javascripts/discourse/components/product-list.js @@ -1,6 +1,6 @@ -import discourseComputed from "discourse-common/utils/decorators"; -import { isEmpty } from "@ember/utils"; import Component from "@ember/component"; +import { isEmpty } from "@ember/utils"; +import discourseComputed from "discourse-common/utils/decorators"; export default Component.extend({ classNames: ["product-list"], diff --git a/assets/javascripts/discourse/components/subscribe-ca-province-select.js b/assets/javascripts/discourse/components/subscribe-ca-province-select.js index 687f063..ce563c3 100644 --- a/assets/javascripts/discourse/components/subscribe-ca-province-select.js +++ b/assets/javascripts/discourse/components/subscribe-ca-province-select.js @@ -1,6 +1,6 @@ -import ComboBoxComponent from "select-kit/components/combo-box"; import { computed } from "@ember/object"; import I18n from "I18n"; +import ComboBoxComponent from "select-kit/components/combo-box"; export default ComboBoxComponent.extend({ pluginApiIdentifiers: ["subscribe-ca-province-select"], diff --git a/assets/javascripts/discourse/components/subscribe-card.js b/assets/javascripts/discourse/components/subscribe-card.js index 58dd4da..8ba057f 100644 --- a/assets/javascripts/discourse/components/subscribe-card.js +++ b/assets/javascripts/discourse/components/subscribe-card.js @@ -24,5 +24,8 @@ export default Component.extend({ }, }); }, - didDestroyElement() {}, + + didDestroyElement() { + this._super(...arguments); + }, }); diff --git a/assets/javascripts/discourse/components/subscribe-country-select.js b/assets/javascripts/discourse/components/subscribe-country-select.js index 65c35b5..0b7293e 100644 --- a/assets/javascripts/discourse/components/subscribe-country-select.js +++ b/assets/javascripts/discourse/components/subscribe-country-select.js @@ -1,6 +1,6 @@ -import ComboBoxComponent from "select-kit/components/combo-box"; import { computed } from "@ember/object"; import I18n from "I18n"; +import ComboBoxComponent from "select-kit/components/combo-box"; export default ComboBoxComponent.extend({ pluginApiIdentifiers: ["subscribe-country-select"], diff --git a/assets/javascripts/discourse/components/subscribe-us-state-select.js b/assets/javascripts/discourse/components/subscribe-us-state-select.js index fe7ab21..4342e69 100644 --- a/assets/javascripts/discourse/components/subscribe-us-state-select.js +++ b/assets/javascripts/discourse/components/subscribe-us-state-select.js @@ -1,6 +1,6 @@ -import ComboBoxComponent from "select-kit/components/combo-box"; import { computed } from "@ember/object"; import I18n from "I18n"; +import ComboBoxComponent from "select-kit/components/combo-box"; export default ComboBoxComponent.extend({ pluginApiIdentifiers: ["subscribe-us-state-select"], diff --git a/assets/javascripts/discourse/controllers/admin-plugins-discourse-subscriptions-coupons.js b/assets/javascripts/discourse/controllers/admin-plugins-discourse-subscriptions-coupons.js index 14ea1d7..4d76965 100644 --- a/assets/javascripts/discourse/controllers/admin-plugins-discourse-subscriptions-coupons.js +++ b/assets/javascripts/discourse/controllers/admin-plugins-discourse-subscriptions-coupons.js @@ -1,6 +1,6 @@ import Controller from "@ember/controller"; -import AdminCoupon from "discourse/plugins/discourse-subscriptions/discourse/models/admin-coupon"; import { popupAjaxError } from "discourse/lib/ajax-error"; +import AdminCoupon from "discourse/plugins/discourse-subscriptions/discourse/models/admin-coupon"; export default Controller.extend({ creating: null, diff --git a/assets/javascripts/discourse/controllers/admin-plugins-discourse-subscriptions-plans-show.js b/assets/javascripts/discourse/controllers/admin-plugins-discourse-subscriptions-plans-show.js index 13a4867..859bfae 100644 --- a/assets/javascripts/discourse/controllers/admin-plugins-discourse-subscriptions-plans-show.js +++ b/assets/javascripts/discourse/controllers/admin-plugins-discourse-subscriptions-plans-show.js @@ -1,6 +1,6 @@ import Controller from "@ember/controller"; -import { popupAjaxError } from "discourse/lib/ajax-error"; import { inject as service } from "@ember/service"; +import { popupAjaxError } from "discourse/lib/ajax-error"; export default Controller.extend({ router: service(), diff --git a/assets/javascripts/discourse/controllers/admin-plugins-discourse-subscriptions-products-show-plans-show.js b/assets/javascripts/discourse/controllers/admin-plugins-discourse-subscriptions-products-show-plans-show.js index 738aa7a..c96cddb 100644 --- a/assets/javascripts/discourse/controllers/admin-plugins-discourse-subscriptions-products-show-plans-show.js +++ b/assets/javascripts/discourse/controllers/admin-plugins-discourse-subscriptions-products-show-plans-show.js @@ -1,8 +1,8 @@ -import discourseComputed from "discourse-common/utils/decorators"; -import DiscourseURL from "discourse/lib/url"; import Controller from "@ember/controller"; import { alias } from "@ember/object/computed"; import { popupAjaxError } from "discourse/lib/ajax-error"; +import DiscourseURL from "discourse/lib/url"; +import discourseComputed from "discourse-common/utils/decorators"; const RECURRING = "recurring"; const ONE_TIME = "one_time"; diff --git a/assets/javascripts/discourse/controllers/admin-plugins-discourse-subscriptions-products-show.js b/assets/javascripts/discourse/controllers/admin-plugins-discourse-subscriptions-products-show.js index b5b3360..982342f 100644 --- a/assets/javascripts/discourse/controllers/admin-plugins-discourse-subscriptions-products-show.js +++ b/assets/javascripts/discourse/controllers/admin-plugins-discourse-subscriptions-products-show.js @@ -1,6 +1,6 @@ -import { popupAjaxError } from "discourse/lib/ajax-error"; import Controller from "@ember/controller"; import { inject as service } from "@ember/service"; +import { popupAjaxError } from "discourse/lib/ajax-error"; export default Controller.extend({ router: service(), diff --git a/assets/javascripts/discourse/controllers/admin-plugins-discourse-subscriptions-subscriptions.js b/assets/javascripts/discourse/controllers/admin-plugins-discourse-subscriptions-subscriptions.js index d2b3f87..3c294e6 100644 --- a/assets/javascripts/discourse/controllers/admin-plugins-discourse-subscriptions-subscriptions.js +++ b/assets/javascripts/discourse/controllers/admin-plugins-discourse-subscriptions-subscriptions.js @@ -1,9 +1,9 @@ -import AdminCancelSubscription from "../components/modal/admin-cancel-subscription"; -import AdminSubscription from "../models/admin-subscription"; import Controller from "@ember/controller"; import { action } from "@ember/object"; import { inject as service } from "@ember/service"; import I18n from "discourse-i18n"; +import AdminCancelSubscription from "../components/modal/admin-cancel-subscription"; +import AdminSubscription from "../models/admin-subscription"; export default Controller.extend({ modal: service(), diff --git a/assets/javascripts/discourse/controllers/admin-plugins-discourse-subscriptions.js b/assets/javascripts/discourse/controllers/admin-plugins-discourse-subscriptions.js index 018c45f..0654ee4 100644 --- a/assets/javascripts/discourse/controllers/admin-plugins-discourse-subscriptions.js +++ b/assets/javascripts/discourse/controllers/admin-plugins-discourse-subscriptions.js @@ -1,11 +1,11 @@ -import { action } from "@ember/object"; -import { ajax } from "discourse/lib/ajax"; -import { popupAjaxError } from "discourse/lib/ajax-error"; import Controller from "@ember/controller"; -import discourseComputed from "discourse-common/utils/decorators"; -import I18n from "I18n"; +import { action } from "@ember/object"; import { inject as service } from "@ember/service"; import { htmlSafe } from "@ember/template"; +import { ajax } from "discourse/lib/ajax"; +import { popupAjaxError } from "discourse/lib/ajax-error"; +import discourseComputed from "discourse-common/utils/decorators"; +import I18n from "I18n"; export default Controller.extend({ loading: false, diff --git a/assets/javascripts/discourse/controllers/subscribe-index.js b/assets/javascripts/discourse/controllers/subscribe-index.js index 6a5f0ca..6a5d820 100644 --- a/assets/javascripts/discourse/controllers/subscribe-index.js +++ b/assets/javascripts/discourse/controllers/subscribe-index.js @@ -1,6 +1,6 @@ import Controller from "@ember/controller"; -import discourseComputed from "discourse-common/utils/decorators"; import User from "discourse/models/user"; +import discourseComputed from "discourse-common/utils/decorators"; export default Controller.extend({ @discourseComputed() diff --git a/assets/javascripts/discourse/controllers/subscribe-show.js b/assets/javascripts/discourse/controllers/subscribe-show.js index 7693e5d..ef688e1 100644 --- a/assets/javascripts/discourse/controllers/subscribe-show.js +++ b/assets/javascripts/discourse/controllers/subscribe-show.js @@ -1,10 +1,11 @@ +/* global Stripe */ import Controller from "@ember/controller"; +import { not } from "@ember/object/computed"; +import { inject as service } from "@ember/service"; +import discourseComputed from "discourse-common/utils/decorators"; +import I18n from "I18n"; import Subscription from "discourse/plugins/discourse-subscriptions/discourse/models/subscription"; import Transaction from "discourse/plugins/discourse-subscriptions/discourse/models/transaction"; -import I18n from "I18n"; -import { not } from "@ember/object/computed"; -import discourseComputed from "discourse-common/utils/decorators"; -import { inject as service } from "@ember/service"; export default Controller.extend({ dialog: service(), diff --git a/assets/javascripts/discourse/controllers/user-billing-subscriptions-card.js b/assets/javascripts/discourse/controllers/user-billing-subscriptions-card.js index b6949a6..78c6872 100644 --- a/assets/javascripts/discourse/controllers/user-billing-subscriptions-card.js +++ b/assets/javascripts/discourse/controllers/user-billing-subscriptions-card.js @@ -1,14 +1,17 @@ +/* global Stripe */ import Controller from "@ember/controller"; import { action } from "@ember/object"; +import { inject as service } from "@ember/service"; import { ajax } from "discourse/lib/ajax"; import { popupAjaxError } from "discourse/lib/ajax-error"; import I18n from "I18n"; -import { inject as service } from "@ember/service"; export default Controller.extend({ dialog: service(), + loading: false, saved: false, + init() { this._super(...arguments); this.set( diff --git a/assets/javascripts/discourse/helpers/format-unix-date.js b/assets/javascripts/discourse/helpers/format-unix-date.js index 6e06df8..3a1b786 100644 --- a/assets/javascripts/discourse/helpers/format-unix-date.js +++ b/assets/javascripts/discourse/helpers/format-unix-date.js @@ -1,5 +1,5 @@ -import { autoUpdatingRelativeAge } from "discourse/lib/formatter"; import { htmlSafe } from "@ember/template"; +import { autoUpdatingRelativeAge } from "discourse/lib/formatter"; export default function formatUnixDate(timestamp) { if (timestamp) { diff --git a/assets/javascripts/discourse/initializers/setup-subscriptions.js b/assets/javascripts/discourse/initializers/setup-subscriptions.js index 6ece5aa..42339a9 100644 --- a/assets/javascripts/discourse/initializers/setup-subscriptions.js +++ b/assets/javascripts/discourse/initializers/setup-subscriptions.js @@ -5,7 +5,7 @@ export default { name: "setup-subscriptions", initialize(container) { withPluginApi("0.8.11", (api) => { - const siteSettings = container.lookup("site-settings:main"); + const siteSettings = container.lookup("service:site-settings"); const isNavLinkEnabled = siteSettings.discourse_subscriptions_extra_nav_subscribe; if (isNavLinkEnabled) { diff --git a/assets/javascripts/discourse/models/admin-coupon.js b/assets/javascripts/discourse/models/admin-coupon.js index e3b12d5..3a2d49e 100644 --- a/assets/javascripts/discourse/models/admin-coupon.js +++ b/assets/javascripts/discourse/models/admin-coupon.js @@ -1,5 +1,5 @@ -import { ajax } from "discourse/lib/ajax"; import EmberObject from "@ember/object"; +import { ajax } from "discourse/lib/ajax"; import discourseComputed from "discourse-common/utils/decorators"; const AdminCoupon = EmberObject.extend({ diff --git a/assets/javascripts/discourse/models/admin-plan.js b/assets/javascripts/discourse/models/admin-plan.js index bff7d04..dd45f43 100644 --- a/assets/javascripts/discourse/models/admin-plan.js +++ b/assets/javascripts/discourse/models/admin-plan.js @@ -1,6 +1,6 @@ -import Plan from "discourse/plugins/discourse-subscriptions/discourse/models/plan"; -import discourseComputed from "discourse-common/utils/decorators"; import { ajax } from "discourse/lib/ajax"; +import discourseComputed from "discourse-common/utils/decorators"; +import Plan from "discourse/plugins/discourse-subscriptions/discourse/models/plan"; const AdminPlan = Plan.extend({ isNew: false, diff --git a/assets/javascripts/discourse/models/admin-product.js b/assets/javascripts/discourse/models/admin-product.js index 19a967d..61d5de6 100644 --- a/assets/javascripts/discourse/models/admin-product.js +++ b/assets/javascripts/discourse/models/admin-product.js @@ -1,5 +1,5 @@ -import { ajax } from "discourse/lib/ajax"; import EmberObject from "@ember/object"; +import { ajax } from "discourse/lib/ajax"; const AdminProduct = EmberObject.extend({ isNew: false, diff --git a/assets/javascripts/discourse/models/admin-subscription.js b/assets/javascripts/discourse/models/admin-subscription.js index a8a5768..a8e185b 100644 --- a/assets/javascripts/discourse/models/admin-subscription.js +++ b/assets/javascripts/discourse/models/admin-subscription.js @@ -1,7 +1,7 @@ -import discourseComputed from "discourse-common/utils/decorators"; -import { ajax } from "discourse/lib/ajax"; import EmberObject from "@ember/object"; +import { ajax } from "discourse/lib/ajax"; import getURL from "discourse-common/lib/get-url"; +import discourseComputed from "discourse-common/utils/decorators"; const AdminSubscription = EmberObject.extend({ @discourseComputed("status") diff --git a/assets/javascripts/discourse/models/subscription.js b/assets/javascripts/discourse/models/subscription.js index 11f310d..62d3afa 100644 --- a/assets/javascripts/discourse/models/subscription.js +++ b/assets/javascripts/discourse/models/subscription.js @@ -1,6 +1,6 @@ -import discourseComputed from "discourse-common/utils/decorators"; -import { ajax } from "discourse/lib/ajax"; import EmberObject from "@ember/object"; +import { ajax } from "discourse/lib/ajax"; +import discourseComputed from "discourse-common/utils/decorators"; const Subscription = EmberObject.extend({ @discourseComputed("status") diff --git a/assets/javascripts/discourse/models/user-payment.js b/assets/javascripts/discourse/models/user-payment.js index 5494e26..0aacab6 100644 --- a/assets/javascripts/discourse/models/user-payment.js +++ b/assets/javascripts/discourse/models/user-payment.js @@ -1,6 +1,6 @@ import EmberObject from "@ember/object"; -import discourseComputed from "discourse-common/utils/decorators"; import { ajax } from "discourse/lib/ajax"; +import discourseComputed from "discourse-common/utils/decorators"; const UserPayment = EmberObject.extend({ @discourseComputed("amount") diff --git a/assets/javascripts/discourse/models/user-subscription.js b/assets/javascripts/discourse/models/user-subscription.js index 7709ae3..b815da9 100644 --- a/assets/javascripts/discourse/models/user-subscription.js +++ b/assets/javascripts/discourse/models/user-subscription.js @@ -1,8 +1,8 @@ import EmberObject from "@ember/object"; -import discourseComputed from "discourse-common/utils/decorators"; import { ajax } from "discourse/lib/ajax"; -import Plan from "discourse/plugins/discourse-subscriptions/discourse/models/plan"; +import discourseComputed from "discourse-common/utils/decorators"; import I18n from "I18n"; +import Plan from "discourse/plugins/discourse-subscriptions/discourse/models/plan"; const UserSubscription = EmberObject.extend({ @discourseComputed("status") diff --git a/assets/javascripts/discourse/routes/admin-plugins-discourse-subscriptions-coupons.js b/assets/javascripts/discourse/routes/admin-plugins-discourse-subscriptions-coupons.js index eb1a545..369e454 100644 --- a/assets/javascripts/discourse/routes/admin-plugins-discourse-subscriptions-coupons.js +++ b/assets/javascripts/discourse/routes/admin-plugins-discourse-subscriptions-coupons.js @@ -1,6 +1,6 @@ +import { action } from "@ember/object"; import Route from "@ember/routing/route"; import AdminCoupon from "discourse/plugins/discourse-subscriptions/discourse/models/admin-coupon"; -import { action } from "@ember/object"; export default Route.extend({ model() { diff --git a/assets/javascripts/discourse/routes/admin-plugins-discourse-subscriptions-products-index.js b/assets/javascripts/discourse/routes/admin-plugins-discourse-subscriptions-products-index.js index 38793e9..af5635d 100644 --- a/assets/javascripts/discourse/routes/admin-plugins-discourse-subscriptions-products-index.js +++ b/assets/javascripts/discourse/routes/admin-plugins-discourse-subscriptions-products-index.js @@ -1,8 +1,8 @@ -import Route from "@ember/routing/route"; -import AdminProduct from "discourse/plugins/discourse-subscriptions/discourse/models/admin-product"; -import I18n from "I18n"; import { action } from "@ember/object"; +import Route from "@ember/routing/route"; import { inject as service } from "@ember/service"; +import I18n from "I18n"; +import AdminProduct from "discourse/plugins/discourse-subscriptions/discourse/models/admin-product"; export default Route.extend({ dialog: service(), diff --git a/assets/javascripts/discourse/routes/admin-plugins-discourse-subscriptions-products-show-plans-show.js b/assets/javascripts/discourse/routes/admin-plugins-discourse-subscriptions-products-show-plans-show.js index 0cb3ab7..495f19c 100644 --- a/assets/javascripts/discourse/routes/admin-plugins-discourse-subscriptions-products-show-plans-show.js +++ b/assets/javascripts/discourse/routes/admin-plugins-discourse-subscriptions-products-show-plans-show.js @@ -1,7 +1,7 @@ import Route from "@ember/routing/route"; -import AdminPlan from "discourse/plugins/discourse-subscriptions/discourse/models/admin-plan"; -import Group from "discourse/models/group"; import { hash } from "rsvp"; +import Group from "discourse/models/group"; +import AdminPlan from "discourse/plugins/discourse-subscriptions/discourse/models/admin-plan"; export default Route.extend({ model(params) { diff --git a/assets/javascripts/discourse/routes/admin-plugins-discourse-subscriptions-products-show.js b/assets/javascripts/discourse/routes/admin-plugins-discourse-subscriptions-products-show.js index 028074f..facadf3 100644 --- a/assets/javascripts/discourse/routes/admin-plugins-discourse-subscriptions-products-show.js +++ b/assets/javascripts/discourse/routes/admin-plugins-discourse-subscriptions-products-show.js @@ -1,10 +1,10 @@ -import Route from "@ember/routing/route"; -import AdminProduct from "discourse/plugins/discourse-subscriptions/discourse/models/admin-product"; -import AdminPlan from "discourse/plugins/discourse-subscriptions/discourse/models/admin-plan"; -import I18n from "I18n"; -import { hash } from "rsvp"; import { action } from "@ember/object"; +import Route from "@ember/routing/route"; import { inject as service } from "@ember/service"; +import { hash } from "rsvp"; +import I18n from "I18n"; +import AdminPlan from "discourse/plugins/discourse-subscriptions/discourse/models/admin-plan"; +import AdminProduct from "discourse/plugins/discourse-subscriptions/discourse/models/admin-product"; export default Route.extend({ dialog: service(), diff --git a/assets/javascripts/discourse/routes/admin-plugins-discourse-subscriptions.js b/assets/javascripts/discourse/routes/admin-plugins-discourse-subscriptions.js index 4ff8f56..97e416c 100644 --- a/assets/javascripts/discourse/routes/admin-plugins-discourse-subscriptions.js +++ b/assets/javascripts/discourse/routes/admin-plugins-discourse-subscriptions.js @@ -1,5 +1,5 @@ -import Route from "@ember/routing/route"; import { action } from "@ember/object"; +import Route from "@ember/routing/route"; import { inject as service } from "@ember/service"; export default Route.extend({ diff --git a/assets/javascripts/discourse/routes/subscribe-index.js b/assets/javascripts/discourse/routes/subscribe-index.js index 8923fdf..4483df4 100644 --- a/assets/javascripts/discourse/routes/subscribe-index.js +++ b/assets/javascripts/discourse/routes/subscribe-index.js @@ -1,6 +1,6 @@ import Route from "@ember/routing/route"; -import Product from "discourse/plugins/discourse-subscriptions/discourse/models/product"; import { inject as service } from "@ember/service"; +import Product from "discourse/plugins/discourse-subscriptions/discourse/models/product"; export default Route.extend({ router: service(), diff --git a/assets/javascripts/discourse/routes/subscribe-show.js b/assets/javascripts/discourse/routes/subscribe-show.js index b371868..0b2255e 100644 --- a/assets/javascripts/discourse/routes/subscribe-show.js +++ b/assets/javascripts/discourse/routes/subscribe-show.js @@ -1,6 +1,6 @@ import Route from "@ember/routing/route"; -import Product from "discourse/plugins/discourse-subscriptions/discourse/models/product"; import Plan from "discourse/plugins/discourse-subscriptions/discourse/models/plan"; +import Product from "discourse/plugins/discourse-subscriptions/discourse/models/product"; import Subscription from "discourse/plugins/discourse-subscriptions/discourse/models/subscription"; export default Route.extend({ diff --git a/assets/javascripts/discourse/routes/user-billing-subscriptions-index.js b/assets/javascripts/discourse/routes/user-billing-subscriptions-index.js index 0debc89..bc567c5 100644 --- a/assets/javascripts/discourse/routes/user-billing-subscriptions-index.js +++ b/assets/javascripts/discourse/routes/user-billing-subscriptions-index.js @@ -1,8 +1,8 @@ -import Route from "@ember/routing/route"; -import UserSubscription from "discourse/plugins/discourse-subscriptions/discourse/models/user-subscription"; -import I18n from "I18n"; import { action } from "@ember/object"; +import Route from "@ember/routing/route"; import { inject as service } from "@ember/service"; +import I18n from "I18n"; +import UserSubscription from "discourse/plugins/discourse-subscriptions/discourse/models/user-subscription"; export default Route.extend({ dialog: service(), diff --git a/assets/javascripts/discourse/routes/user-billing.js b/assets/javascripts/discourse/routes/user-billing.js index 25018c7..d1c1ac3 100644 --- a/assets/javascripts/discourse/routes/user-billing.js +++ b/assets/javascripts/discourse/routes/user-billing.js @@ -1,11 +1,14 @@ import Route from "@ember/routing/route"; +import { inject as service } from "@ember/service"; export default Route.extend({ + router: service(), + templateName: "user/billing", setupController(controller, model) { if (this.currentUser.id !== this.modelFor("user").id) { - this.replaceWith("userActivity"); + this.router.replaceWith("userActivity"); } else { controller.setProperties({ model }); } diff --git a/assets/javascripts/discourse/templates/user/billing.hbs b/assets/javascripts/discourse/templates/user/billing.hbs index 42ff18c..1d6086f 100644 --- a/assets/javascripts/discourse/templates/user/billing.hbs +++ b/assets/javascripts/discourse/templates/user/billing.hbs @@ -1,12 +1,10 @@ - +{{body-class "user-billing-page"}} + +
  • @@ -20,7 +18,7 @@
  • - +
    {{outlet}} diff --git a/lib/tasks/subscriptions_import.rake b/lib/tasks/subscriptions_import.rake index 9c78ab7..3dd116f 100644 --- a/lib/tasks/subscriptions_import.rake +++ b/lib/tasks/subscriptions_import.rake @@ -90,14 +90,14 @@ def import_subscriptions(procourse_import) product_ids = DiscourseSubscriptions::Product.all.pluck(:external_id) all_customers = get_stripe_customers - puts "Total available Stripe Customers: #{all_customers.length.to_s}, the first of which is customer id: #{all_customers[0][:description]}" + puts "Total available Stripe Customers: #{all_customers.length}, the first of which is customer id: #{all_customers[0][:description]}" subscriptions = get_stripe_subscriptions - puts "Total Active Subscriptions available: #{subscriptions.length.to_s}" + puts "Total Active Subscriptions available: #{subscriptions.length}" subscriptions_for_products = subscriptions.select { |sub| product_ids.include?(sub[:items][:data][0][:price][:product]) } - puts "Total Subscriptions matching Products to Import: #{subscriptions_for_products.length.to_s}" + puts "Total Subscriptions matching Products to Import: #{subscriptions_for_products.length}" subscriptions_for_products.each do |subscription| product_id = subscription[:items][:data][0][:plan][:product] diff --git a/package.json b/package.json index 43f8c31..69e06f9 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,10 @@ { "name": "discourse-subscriptions", - "version": "1.0.0", - "repository": "https://github.com/discourse/discourse-subscriptions", - "author": "Discourse", - "license": "MIT", + "private": true, "devDependencies": { - "eslint-config-discourse": "^3.4.0" + "@discourse/lint-configs": "^1.3.5", + "ember-template-lint": "^5.13.0", + "eslint": "^8.56.0", + "prettier": "^2.8.8" } } diff --git a/plugin.rb b/plugin.rb index c745f0f..c39b69a 100644 --- a/plugin.rb +++ b/plugin.rb @@ -6,7 +6,6 @@ # version: 2.8.1 # url: https://github.com/discourse/discourse-subscriptions # authors: Rimian Perkins, Justin DiRose -# transpile_js: true enabled_site_setting :discourse_subscriptions_enabled diff --git a/spec/models/customer_spec.rb b/spec/models/customer_spec.rb index 7f4e826..a760ee0 100644 --- a/spec/models/customer_spec.rb +++ b/spec/models/customer_spec.rb @@ -2,25 +2,23 @@ require "rails_helper" -module DiscourseSubscriptions - RSpec.describe Customer do - let(:user) { Fabricate(:user) } - let(:stripe_customer) { { id: "cus_id4567" } } +RSpec.describe DiscourseSubscriptions::Customer do + let(:user) { Fabricate(:user) } + let(:stripe_customer) { { id: "cus_id4567" } } - it "has a table name" do - expect(described_class.table_name).to eq "discourse_subscriptions_customers" - end + it "has a table name" do + expect(described_class.table_name).to eq "discourse_subscriptions_customers" + end - it "creates" do - customer = described_class.create_customer(user, stripe_customer) - expect(customer.customer_id).to eq "cus_id4567" - expect(customer.user_id).to eq user.id - end + it "creates" do + customer = described_class.create_customer(user, stripe_customer) + expect(customer.customer_id).to eq "cus_id4567" + expect(customer.user_id).to eq user.id + end - it "has a user scope" do - described_class.create_customer(user, stripe_customer) - customer = described_class.find_user(user) - expect(customer.customer_id).to eq "cus_id4567" - end + it "has a user scope" do + described_class.create_customer(user, stripe_customer) + customer = described_class.find_user(user) + expect(customer.customer_id).to eq "cus_id4567" end end diff --git a/spec/requests/admin/coupons_controller_spec.rb b/spec/requests/admin/coupons_controller_spec.rb index 078726c..749793d 100644 --- a/spec/requests/admin/coupons_controller_spec.rb +++ b/spec/requests/admin/coupons_controller_spec.rb @@ -2,87 +2,83 @@ require "rails_helper" -module DiscourseSubscriptions - RSpec.describe Admin::CouponsController do - it "is a subclass of AdminController" do - expect(DiscourseSubscriptions::Admin::CouponsController < ::Admin::AdminController).to eq( - true, - ) - end +RSpec.describe DiscourseSubscriptions::Admin::CouponsController do + it "is a subclass of AdminController" do + expect(DiscourseSubscriptions::Admin::CouponsController < ::Admin::AdminController).to eq(true) + end + + context "when unauthenticated" do + it "does nothing" do + ::Stripe::PromotionCode.expects(:list).never + get "/s/admin/coupons.json" + expect(response.status).to eq(404) + end + end + + context "when authenticated" do + let(:admin) { Fabricate(:admin) } + + before { sign_in(admin) } + + describe "#index" do + it "returns a list of promo codes" do + ::Stripe::PromotionCode + .expects(:list) + .with({ limit: 100 }) + .returns({ data: [{ id: "promo_123", coupon: { valid: true } }] }) - context "when unauthenticated" do - it "does nothing" do - ::Stripe::PromotionCode.expects(:list).never get "/s/admin/coupons.json" - expect(response.status).to eq(404) + expect(response.status).to eq(200) + expect(response.parsed_body[0]["id"]).to eq("promo_123") + end + + it "only returns valid promo codes" do + ::Stripe::PromotionCode + .expects(:list) + .with({ limit: 100 }) + .returns({ data: [{ id: "promo_123", coupon: { valid: false } }] }) + + get "/s/admin/coupons.json" + expect(response.status).to eq(200) + expect(response.parsed_body).to be_blank end end - context "when authenticated" do - let(:admin) { Fabricate(:admin) } + describe "#create" do + it "creates a coupon with an amount off" do + ::Stripe::Coupon.expects(:create).returns(id: "coup_123") + ::Stripe::PromotionCode.expects(:create).returns( + { code: "p123", coupon: { amount_off: 2000 } }, + ) - before { sign_in(admin) } - - describe "#index" do - it "returns a list of promo codes" do - ::Stripe::PromotionCode - .expects(:list) - .with({ limit: 100 }) - .returns({ data: [{ id: "promo_123", coupon: { valid: true } }] }) - - get "/s/admin/coupons.json" - expect(response.status).to eq(200) - expect(response.parsed_body[0]["id"]).to eq("promo_123") - end - - it "only returns valid promo codes" do - ::Stripe::PromotionCode - .expects(:list) - .with({ limit: 100 }) - .returns({ data: [{ id: "promo_123", coupon: { valid: false } }] }) - - get "/s/admin/coupons.json" - expect(response.status).to eq(200) - expect(response.parsed_body).to be_blank - end + post "/s/admin/coupons.json", + params: { + promo: "p123", + discount_type: "amount", + discount: "2000", + active: true, + } + expect(response.status).to eq(200) + expect(response.parsed_body["code"]).to eq("p123") + expect(response.parsed_body["coupon"]["amount_off"]).to eq(2000) end - describe "#create" do - it "creates a coupon with an amount off" do - ::Stripe::Coupon.expects(:create).returns(id: "coup_123") - ::Stripe::PromotionCode.expects(:create).returns( - { code: "p123", coupon: { amount_off: 2000 } }, - ) + it "creates a coupon with a percent off" do + ::Stripe::Coupon.expects(:create).returns(id: "coup_123") + ::Stripe::PromotionCode.expects(:create).returns( + { code: "p123", coupon: { percent_off: 20 } }, + ) - post "/s/admin/coupons.json", - params: { - promo: "p123", - discount_type: "amount", - discount: "2000", - active: true, - } - expect(response.status).to eq(200) - expect(response.parsed_body["code"]).to eq("p123") - expect(response.parsed_body["coupon"]["amount_off"]).to eq(2000) - end - - it "creates a coupon with a percent off" do - ::Stripe::Coupon.expects(:create).returns(id: "coup_123") - ::Stripe::PromotionCode.expects(:create).returns( - { code: "p123", coupon: { percent_off: 20 } }, - ) - - post "/s/admin/coupons.json", - params: { - promo: "p123", - discount_type: "percent", - discount: "20", - active: true, - } - expect(response.status).to eq(200) - expect(response.parsed_body["code"]).to eq("p123") - expect(response.parsed_body["coupon"]["percent_off"]).to eq(20) - end + post "/s/admin/coupons.json", + params: { + promo: "p123", + discount_type: "percent", + discount: "20", + active: true, + } + expect(response.status).to eq(200) + expect(response.parsed_body["code"]).to eq("p123") + expect(response.parsed_body["coupon"]["percent_off"]).to eq(20) end end end diff --git a/spec/requests/admin/plans_controller_spec.rb b/spec/requests/admin/plans_controller_spec.rb index c4b546a..79d348e 100644 --- a/spec/requests/admin/plans_controller_spec.rb +++ b/spec/requests/admin/plans_controller_spec.rb @@ -2,172 +2,166 @@ require "rails_helper" -module DiscourseSubscriptions - module Admin - RSpec.describe PlansController do - it "is a subclass of AdminController" do - expect(DiscourseSubscriptions::Admin::PlansController < ::Admin::AdminController).to eq( - true, - ) +RSpec.describe DiscourseSubscriptions::Admin::PlansController do + it "is a subclass of AdminController" do + expect(DiscourseSubscriptions::Admin::PlansController < ::Admin::AdminController).to eq(true) + end + + context "when not authenticated" do + describe "index" do + it "does not get the plans" do + ::Stripe::Price.expects(:list).never + get "/s/admin/plans.json" end - context "when not authenticated" do - describe "index" do - it "does not get the plans" do - ::Stripe::Price.expects(:list).never - get "/s/admin/plans.json" - end + it "not ok" do + get "/s/admin/plans.json" + expect(response.status).to eq 404 + end + end - it "not ok" do - get "/s/admin/plans.json" - expect(response.status).to eq 404 - end - end - - describe "create" do - it "does not create a plan" do - ::Stripe::Price.expects(:create).never - post "/s/admin/plans.json", params: { name: "Rick Astley", amount: 1, interval: "week" } - end - - it "is not ok" do - post "/s/admin/plans.json", params: { name: "Rick Astley", amount: 1, interval: "week" } - expect(response.status).to eq 404 - end - end - - describe "show" do - it "does not show the plan" do - ::Stripe::Price.expects(:retrieve).never - get "/s/admin/plans/plan_12345.json" - end - - it "is not ok" do - get "/s/admin/plans/plan_12345.json" - expect(response.status).to eq 404 - end - end - - describe "update" do - it "does not update a plan" do - ::Stripe::Price.expects(:update).never - delete "/s/admin/plans/plan_12345.json" - end - end + describe "create" do + it "does not create a plan" do + ::Stripe::Price.expects(:create).never + post "/s/admin/plans.json", params: { name: "Rick Astley", amount: 1, interval: "week" } end - context "when authenticated" do - let(:admin) { Fabricate(:admin) } + it "is not ok" do + post "/s/admin/plans.json", params: { name: "Rick Astley", amount: 1, interval: "week" } + expect(response.status).to eq 404 + end + end - before { sign_in(admin) } + describe "show" do + it "does not show the plan" do + ::Stripe::Price.expects(:retrieve).never + get "/s/admin/plans/plan_12345.json" + end - describe "index" do - it "lists the plans" do - ::Stripe::Price.expects(:list).with(nil) - get "/s/admin/plans.json" - end + it "is not ok" do + get "/s/admin/plans/plan_12345.json" + expect(response.status).to eq 404 + end + end - it "lists the plans for the product" do - ::Stripe::Price.expects(:list).with({ product: "prod_id123" }) - get "/s/admin/plans.json", params: { product_id: "prod_id123" } - end - end + describe "update" do + it "does not update a plan" do + ::Stripe::Price.expects(:update).never + delete "/s/admin/plans/plan_12345.json" + end + end + end - describe "show" do - it "shows a plan" do - ::Stripe::Price.expects(:retrieve).with("plan_12345").returns(currency: "aud") - get "/s/admin/plans/plan_12345.json" - expect(response.status).to eq 200 - end + context "when authenticated" do + let(:admin) { Fabricate(:admin) } - it "upcases the currency" do - ::Stripe::Price - .expects(:retrieve) - .with("plan_12345") - .returns(currency: "aud", recurring: { interval: "year" }) - get "/s/admin/plans/plan_12345.json" + before { sign_in(admin) } - plan = response.parsed_body - expect(plan["currency"]).to eq "AUD" - expect(plan["interval"]).to eq "year" - end - end + describe "index" do + it "lists the plans" do + ::Stripe::Price.expects(:list).with(nil) + get "/s/admin/plans.json" + end - describe "create" do - it "creates a plan with a nickname" do - ::Stripe::Price.expects(:create).with(has_entry(:nickname, "Veg")) - post "/s/admin/plans.json", params: { nickname: "Veg", metadata: { group_name: "" } } - end + it "lists the plans for the product" do + ::Stripe::Price.expects(:list).with({ product: "prod_id123" }) + get "/s/admin/plans.json", params: { product_id: "prod_id123" } + end + end - it "creates a plan with a currency" do - ::Stripe::Price.expects(:create).with(has_entry(:currency, "AUD")) - post "/s/admin/plans.json", params: { currency: "AUD", metadata: { group_name: "" } } - end + describe "show" do + it "shows a plan" do + ::Stripe::Price.expects(:retrieve).with("plan_12345").returns(currency: "aud") + get "/s/admin/plans/plan_12345.json" + expect(response.status).to eq 200 + end - it "creates a plan with an interval" do - ::Stripe::Price.expects(:create).with(has_entry(recurring: { interval: "week" })) - post "/s/admin/plans.json", - params: { - type: "recurring", - interval: "week", - metadata: { - group_name: "", - }, - } - end + it "upcases the currency" do + ::Stripe::Price + .expects(:retrieve) + .with("plan_12345") + .returns(currency: "aud", recurring: { interval: "year" }) + get "/s/admin/plans/plan_12345.json" - it "creates a plan as a one-time purchase" do - ::Stripe::Price.expects(:create).with(Not(has_key(:recurring))) - post "/s/admin/plans.json", params: { metadata: { group_name: "" } } - end + plan = response.parsed_body + expect(plan["currency"]).to eq "AUD" + expect(plan["interval"]).to eq "year" + end + end - it "creates a plan with an amount" do - ::Stripe::Price.expects(:create).with(has_entry(:unit_amount, "102")) - post "/s/admin/plans.json", params: { amount: "102", metadata: { group_name: "" } } - end + describe "create" do + it "creates a plan with a nickname" do + ::Stripe::Price.expects(:create).with(has_entry(:nickname, "Veg")) + post "/s/admin/plans.json", params: { nickname: "Veg", metadata: { group_name: "" } } + end - it "creates a plan with a product" do - ::Stripe::Price.expects(:create).with(has_entry(product: "prod_walterwhite")) - post "/s/admin/plans.json", - params: { - product: "prod_walterwhite", - metadata: { - group_name: "", - }, - } - end + it "creates a plan with a currency" do + ::Stripe::Price.expects(:create).with(has_entry(:currency, "AUD")) + post "/s/admin/plans.json", params: { currency: "AUD", metadata: { group_name: "" } } + end - it "creates a plan with an active status" do - ::Stripe::Price.expects(:create).with(has_entry(:active, "false")) - post "/s/admin/plans.json", params: { active: "false", metadata: { group_name: "" } } - end + it "creates a plan with an interval" do + ::Stripe::Price.expects(:create).with(has_entry(recurring: { interval: "week" })) + post "/s/admin/plans.json", + params: { + type: "recurring", + interval: "week", + metadata: { + group_name: "", + }, + } + end - # TODO: Need to fix the metadata tests - # I think mocha has issues with the metadata fields here. + it "creates a plan as a one-time purchase" do + ::Stripe::Price.expects(:create).with(Not(has_key(:recurring))) + post "/s/admin/plans.json", params: { metadata: { group_name: "" } } + end - #it 'has metadata' do - # ::Stripe::Price.expects(:create).with(has_entry(:group_name, "discourse-user-group-name")) - # post "/s/admin/plans.json", params: { amount: "100", metadata: { group_name: 'discourse-user-group-name' } } - #end + it "creates a plan with an amount" do + ::Stripe::Price.expects(:create).with(has_entry(:unit_amount, "102")) + post "/s/admin/plans.json", params: { amount: "102", metadata: { group_name: "" } } + end - #it "creates a plan with a trial period" do - # ::Stripe::Price.expects(:create).with(has_entry(trial_period_days: '14')) - # post "/s/admin/plans.json", params: { trial_period_days: '14' } - #end - end + it "creates a plan with a product" do + ::Stripe::Price.expects(:create).with(has_entry(product: "prod_walterwhite")) + post "/s/admin/plans.json", + params: { + product: "prod_walterwhite", + metadata: { + group_name: "", + }, + } + end - describe "update" do - it "updates a plan" do - ::Stripe::Price.expects(:update) - patch "/s/admin/plans/plan_12345.json", - params: { - trial_period_days: "14", - metadata: { - group_name: "discourse-user-group-name", - }, - } - end - end + it "creates a plan with an active status" do + ::Stripe::Price.expects(:create).with(has_entry(:active, "false")) + post "/s/admin/plans.json", params: { active: "false", metadata: { group_name: "" } } + end + + # TODO: Need to fix the metadata tests + # I think mocha has issues with the metadata fields here. + + #it 'has metadata' do + # ::Stripe::Price.expects(:create).with(has_entry(:group_name, "discourse-user-group-name")) + # post "/s/admin/plans.json", params: { amount: "100", metadata: { group_name: 'discourse-user-group-name' } } + #end + + #it "creates a plan with a trial period" do + # ::Stripe::Price.expects(:create).with(has_entry(trial_period_days: '14')) + # post "/s/admin/plans.json", params: { trial_period_days: '14' } + #end + end + + describe "update" do + it "updates a plan" do + ::Stripe::Price.expects(:update) + patch "/s/admin/plans/plan_12345.json", + params: { + trial_period_days: "14", + metadata: { + group_name: "discourse-user-group-name", + }, + } end end end diff --git a/spec/requests/admin/products_controller_spec.rb b/spec/requests/admin/products_controller_spec.rb index 541e821..f9f1650 100644 --- a/spec/requests/admin/products_controller_spec.rb +++ b/spec/requests/admin/products_controller_spec.rb @@ -2,132 +2,126 @@ require "rails_helper" -module DiscourseSubscriptions - module Admin - RSpec.describe ProductsController do - it "is a subclass of AdminController" do - expect(DiscourseSubscriptions::Admin::ProductsController < ::Admin::AdminController).to eq( - true, +RSpec.describe DiscourseSubscriptions::Admin::ProductsController do + it "is a subclass of AdminController" do + expect(DiscourseSubscriptions::Admin::ProductsController < ::Admin::AdminController).to eq(true) + end + + context "when unauthenticated" do + it "does not list the products" do + ::Stripe::Product.expects(:list).never + get "/s/admin/products.json" + expect(response.status).to eq(404) + end + + it "does not create the product" do + ::Stripe::Product.expects(:create).never + post "/s/admin/products.json" + expect(response.status).to eq(404) + end + + it "does not show the product" do + ::Stripe::Product.expects(:retrieve).never + get "/s/admin/products/prod_qwerty123.json" + expect(response.status).to eq(404) + end + + it "does not update the product" do + ::Stripe::Product.expects(:update).never + put "/s/admin/products/prod_qwerty123.json" + expect(response.status).to eq(404) + end + + it "does not delete the product" do + ::Stripe::Product.expects(:delete).never + delete "/s/admin/products/u2.json" + expect(response.status).to eq(404) + end + end + + context "when authenticated" do + let(:admin) { Fabricate(:admin) } + + before { sign_in(admin) } + + describe "index" do + it "gets the empty products" do + SiteSetting.discourse_subscriptions_public_key = "public-key" + SiteSetting.discourse_subscriptions_secret_key = "secret-key" + get "/s/admin/products.json" + expect(response.parsed_body).to be_empty + end + end + + describe "create" do + it "is of product type service" do + ::Stripe::Product.expects(:create).with(has_entry(:type, "service")) + post "/s/admin/products.json", params: {} + end + + it "has a name" do + ::Stripe::Product.expects(:create).with(has_entry(:name, "Jesse Pinkman")) + post "/s/admin/products.json", params: { name: "Jesse Pinkman" } + end + + it "has an active attribute" do + ::Stripe::Product.expects(:create).with(has_entry(active: "false")) + post "/s/admin/products.json", params: { active: "false" } + end + + it "has a statement descriptor" do + ::Stripe::Product.expects(:create).with( + has_entry(statement_descriptor: "Blessed are the cheesemakers"), ) + post "/s/admin/products.json", + params: { + statement_descriptor: "Blessed are the cheesemakers", + } end - context "when unauthenticated" do - it "does not list the products" do - ::Stripe::Product.expects(:list).never - get "/s/admin/products.json" - expect(response.status).to eq(404) - end - - it "does not create the product" do - ::Stripe::Product.expects(:create).never - post "/s/admin/products.json" - expect(response.status).to eq(404) - end - - it "does not show the product" do - ::Stripe::Product.expects(:retrieve).never - get "/s/admin/products/prod_qwerty123.json" - expect(response.status).to eq(404) - end - - it "does not update the product" do - ::Stripe::Product.expects(:update).never - put "/s/admin/products/prod_qwerty123.json" - expect(response.status).to eq(404) - end - - it "does not delete the product" do - ::Stripe::Product.expects(:delete).never - delete "/s/admin/products/u2.json" - expect(response.status).to eq(404) - end + it "has no statement descriptor if empty" do + ::Stripe::Product.expects(:create).with(has_key(:statement_descriptor)).never + post "/s/admin/products.json", params: { statement_descriptor: "" } end - context "when authenticated" do - let(:admin) { Fabricate(:admin) } + it "has metadata" do + ::Stripe::Product.expects(:create).with( + has_entry( + metadata: { + description: "Oi, I think he just said bless be all the bignoses!", + repurchaseable: "false", + }, + ), + ) - before { sign_in(admin) } + post "/s/admin/products.json", + params: { + metadata: { + description: "Oi, I think he just said bless be all the bignoses!", + repurchaseable: "false", + }, + } + end + end - describe "index" do - it "gets the empty products" do - SiteSetting.discourse_subscriptions_public_key = "public-key" - SiteSetting.discourse_subscriptions_secret_key = "secret-key" - get "/s/admin/products.json" - expect(response.parsed_body).to be_empty - end - end + describe "show" do + it "retrieves the product" do + ::Stripe::Product.expects(:retrieve).with("prod_walterwhite") + get "/s/admin/products/prod_walterwhite.json" + end + end - describe "create" do - it "is of product type service" do - ::Stripe::Product.expects(:create).with(has_entry(:type, "service")) - post "/s/admin/products.json", params: {} - end + describe "update" do + it "updates the product" do + ::Stripe::Product.expects(:update) + patch "/s/admin/products/prod_walterwhite.json", params: {} + end + end - it "has a name" do - ::Stripe::Product.expects(:create).with(has_entry(:name, "Jesse Pinkman")) - post "/s/admin/products.json", params: { name: "Jesse Pinkman" } - end - - it "has an active attribute" do - ::Stripe::Product.expects(:create).with(has_entry(active: "false")) - post "/s/admin/products.json", params: { active: "false" } - end - - it "has a statement descriptor" do - ::Stripe::Product.expects(:create).with( - has_entry(statement_descriptor: "Blessed are the cheesemakers"), - ) - post "/s/admin/products.json", - params: { - statement_descriptor: "Blessed are the cheesemakers", - } - end - - it "has no statement descriptor if empty" do - ::Stripe::Product.expects(:create).with(has_key(:statement_descriptor)).never - post "/s/admin/products.json", params: { statement_descriptor: "" } - end - - it "has metadata" do - ::Stripe::Product.expects(:create).with( - has_entry( - metadata: { - description: "Oi, I think he just said bless be all the bignoses!", - repurchaseable: "false", - }, - ), - ) - - post "/s/admin/products.json", - params: { - metadata: { - description: "Oi, I think he just said bless be all the bignoses!", - repurchaseable: "false", - }, - } - end - end - - describe "show" do - it "retrieves the product" do - ::Stripe::Product.expects(:retrieve).with("prod_walterwhite") - get "/s/admin/products/prod_walterwhite.json" - end - end - - describe "update" do - it "updates the product" do - ::Stripe::Product.expects(:update) - patch "/s/admin/products/prod_walterwhite.json", params: {} - end - end - - describe "delete" do - it "deletes the product" do - ::Stripe::Product.expects(:delete).with("prod_walterwhite") - delete "/s/admin/products/prod_walterwhite.json" - end - end + describe "delete" do + it "deletes the product" do + ::Stripe::Product.expects(:delete).with("prod_walterwhite") + delete "/s/admin/products/prod_walterwhite.json" end end end diff --git a/spec/requests/admin/subscriptions_controller_spec.rb b/spec/requests/admin/subscriptions_controller_spec.rb index 82ec198..488cfba 100644 --- a/spec/requests/admin/subscriptions_controller_spec.rb +++ b/spec/requests/admin/subscriptions_controller_spec.rb @@ -2,141 +2,139 @@ require "rails_helper" -module DiscourseSubscriptions - RSpec.describe Admin::SubscriptionsController do - it "is a subclass of AdminController" do - expect( - DiscourseSubscriptions::Admin::SubscriptionsController < ::Admin::AdminController, - ).to eq(true) +RSpec.describe DiscourseSubscriptions::Admin::SubscriptionsController do + it "is a subclass of AdminController" do + expect(DiscourseSubscriptions::Admin::SubscriptionsController < ::Admin::AdminController).to eq( + true, + ) + end + + let(:user) { Fabricate(:user) } + let(:customer) do + Fabricate(:customer, user_id: user.id, customer_id: "c_123", product_id: "pr_34578") + end + + before do + Fabricate(:subscription, external_id: "sub_12345", customer_id: customer.id) + Fabricate(:subscription, external_id: "sub_77777", customer_id: customer.id) + end + + context "when unauthenticated" do + it "does nothing" do + ::Stripe::Subscription.expects(:list).never + get "/s/admin/subscriptions.json" + expect(response.status).to eq(404) end - let(:user) { Fabricate(:user) } - let(:customer) do - Fabricate(:customer, user_id: user.id, customer_id: "c_123", product_id: "pr_34578") + it "does not destroy a subscription" do + ::Stripe::Subscription.expects(:delete).never + patch "/s/admin/subscriptions/sub_12345.json" end + end - before do - Fabricate(:subscription, external_id: "sub_12345", customer_id: customer.id) - Fabricate(:subscription, external_id: "sub_77777", customer_id: customer.id) - end + context "when authenticated" do + let(:admin) { Fabricate(:admin) } - context "when unauthenticated" do - it "does nothing" do - ::Stripe::Subscription.expects(:list).never + before { sign_in(admin) } + + describe "index" do + before do + SiteSetting.discourse_subscriptions_public_key = "public-key" + SiteSetting.discourse_subscriptions_secret_key = "secret-key" + end + + it "gets the subscriptions and products" do + ::Stripe::Subscription + .expects(:list) + .with(expand: ["data.plan.product"], limit: 10, starting_after: nil) + .returns(has_more: false, data: [{ id: "sub_12345" }, { id: "sub_nope" }]) get "/s/admin/subscriptions.json" - expect(response.status).to eq(404) + subscriptions = response.parsed_body["data"][0]["id"] + + expect(response.status).to eq(200) + expect(subscriptions).to eq("sub_12345") end - it "does not destroy a subscription" do - ::Stripe::Subscription.expects(:delete).never - patch "/s/admin/subscriptions/sub_12345.json" + it "handles starting at a different point in the set" do + ::Stripe::Subscription + .expects(:list) + .with(expand: ["data.plan.product"], limit: 10, starting_after: "sub_nope") + .returns(has_more: false, data: [{ id: "sub_77777" }, { id: "sub_yepnoep" }]) + get "/s/admin/subscriptions.json", params: { last_record: "sub_nope" } + subscriptions = response.parsed_body["data"][0]["id"] + + expect(response.status).to eq(200) + expect(subscriptions).to eq("sub_77777") end end - context "when authenticated" do - let(:admin) { Fabricate(:admin) } + describe "destroy" do + let(:group) { Fabricate(:group, name: "subscribers") } - before { sign_in(admin) } + before { group.add(user) } - describe "index" do - before do - SiteSetting.discourse_subscriptions_public_key = "public-key" - SiteSetting.discourse_subscriptions_secret_key = "secret-key" - end + it "deletes a customer" do + ::Stripe::Subscription + .expects(:delete) + .with("sub_12345") + .returns(plan: { product: "pr_34578" }, customer: "c_123") - it "gets the subscriptions and products" do - ::Stripe::Subscription - .expects(:list) - .with(expand: ["data.plan.product"], limit: 10, starting_after: nil) - .returns(has_more: false, data: [{ id: "sub_12345" }, { id: "sub_nope" }]) - get "/s/admin/subscriptions.json" - subscriptions = response.parsed_body["data"][0]["id"] - - expect(response.status).to eq(200) - expect(subscriptions).to eq("sub_12345") - end - - it "handles starting at a different point in the set" do - ::Stripe::Subscription - .expects(:list) - .with(expand: ["data.plan.product"], limit: 10, starting_after: "sub_nope") - .returns(has_more: false, data: [{ id: "sub_77777" }, { id: "sub_yepnoep" }]) - get "/s/admin/subscriptions.json", params: { last_record: "sub_nope" } - subscriptions = response.parsed_body["data"][0]["id"] - - expect(response.status).to eq(200) - expect(subscriptions).to eq("sub_77777") - end + expect { delete "/s/admin/subscriptions/sub_12345.json" }.to change { + DiscourseSubscriptions::Customer.count + }.by(-1) end - describe "destroy" do - let(:group) { Fabricate(:group, name: "subscribers") } - - before { group.add(user) } - - it "deletes a customer" do - ::Stripe::Subscription - .expects(:delete) - .with("sub_12345") - .returns(plan: { product: "pr_34578" }, customer: "c_123") - - expect { delete "/s/admin/subscriptions/sub_12345.json" }.to change { - DiscourseSubscriptions::Customer.count - }.by(-1) - end - - it "removes the user from the group" do - ::Stripe::Subscription - .expects(:delete) - .with("sub_12345") - .returns( - plan: { - product: "pr_34578", - metadata: { - group_name: "subscribers", - }, + it "removes the user from the group" do + ::Stripe::Subscription + .expects(:delete) + .with("sub_12345") + .returns( + plan: { + product: "pr_34578", + metadata: { + group_name: "subscribers", }, - customer: "c_123", - ) + }, + customer: "c_123", + ) - expect { delete "/s/admin/subscriptions/sub_12345.json" }.to change { - user.groups.count - }.by(-1) - end + expect { delete "/s/admin/subscriptions/sub_12345.json" }.to change { + user.groups.count + }.by(-1) + end - it "does not remove the user from the group" do - ::Stripe::Subscription - .expects(:delete) - .with("sub_12345") - .returns( - plan: { - product: "pr_34578", - metadata: { - group_name: "group_does_not_exist", - }, + it "does not remove the user from the group" do + ::Stripe::Subscription + .expects(:delete) + .with("sub_12345") + .returns( + plan: { + product: "pr_34578", + metadata: { + group_name: "group_does_not_exist", }, - customer: "c_123", - ) + }, + customer: "c_123", + ) - expect { delete "/s/admin/subscriptions/sub_12345.json" }.not_to change { - user.groups.count - } - end + expect { delete "/s/admin/subscriptions/sub_12345.json" }.not_to change { + user.groups.count + } + end - it "refunds if params[:refund] present" do - ::Stripe::Subscription - .expects(:delete) - .with("sub_12345") - .returns(plan: { product: "pr_34578" }, customer: "c_123") - ::Stripe::Subscription - .expects(:retrieve) - .with("sub_12345") - .returns(latest_invoice: "in_123") - ::Stripe::Invoice.expects(:retrieve).with("in_123").returns(payment_intent: "pi_123") - ::Stripe::Refund.expects(:create).with({ payment_intent: "pi_123" }) + it "refunds if params[:refund] present" do + ::Stripe::Subscription + .expects(:delete) + .with("sub_12345") + .returns(plan: { product: "pr_34578" }, customer: "c_123") + ::Stripe::Subscription + .expects(:retrieve) + .with("sub_12345") + .returns(latest_invoice: "in_123") + ::Stripe::Invoice.expects(:retrieve).with("in_123").returns(payment_intent: "pi_123") + ::Stripe::Refund.expects(:create).with({ payment_intent: "pi_123" }) - delete "/s/admin/subscriptions/sub_12345.json", params: { refund: true } - end + delete "/s/admin/subscriptions/sub_12345.json", params: { refund: true } end end end diff --git a/spec/requests/admin_controller_spec.rb b/spec/requests/admin_controller_spec.rb index cebf5db..e5b4697 100644 --- a/spec/requests/admin_controller_spec.rb +++ b/spec/requests/admin_controller_spec.rb @@ -2,19 +2,17 @@ require "rails_helper" -module DiscourseSubscriptions - RSpec.describe AdminController do - let(:admin) { Fabricate(:admin) } +RSpec.describe DiscourseSubscriptions::AdminController do + let(:admin) { Fabricate(:admin) } - before { sign_in(admin) } + before { sign_in(admin) } - it "is a subclass of AdminController" do - expect(DiscourseSubscriptions::AdminController < ::Admin::AdminController).to eq(true) - end + it "is a subclass of AdminController" do + expect(DiscourseSubscriptions::AdminController < ::Admin::AdminController).to eq(true) + end - it "is ok" do - get "/s/admin.json" - expect(response.status).to eq(200) - end + it "is ok" do + get "/s/admin.json" + expect(response.status).to eq(200) end end diff --git a/spec/requests/hooks_controller_spec.rb b/spec/requests/hooks_controller_spec.rb index b016607..08247f4 100644 --- a/spec/requests/hooks_controller_spec.rb +++ b/spec/requests/hooks_controller_spec.rb @@ -2,109 +2,105 @@ require "rails_helper" -module DiscourseSubscriptions - RSpec.describe HooksController do - before { SiteSetting.discourse_subscriptions_webhook_secret = "zascharoo" } +RSpec.describe DiscourseSubscriptions::HooksController do + before { SiteSetting.discourse_subscriptions_webhook_secret = "zascharoo" } - it "contructs a webhook event" do - payload = "we-want-a-shrubbery" - headers = { HTTP_STRIPE_SIGNATURE: "stripe-webhook-signature" } + it "constructs a webhook event" do + payload = "we-want-a-shrubbery" + headers = { HTTP_STRIPE_SIGNATURE: "stripe-webhook-signature" } - ::Stripe::Webhook - .expects(:construct_event) - .with("we-want-a-shrubbery", "stripe-webhook-signature", "zascharoo") - .returns(type: "something") + ::Stripe::Webhook + .expects(:construct_event) + .with("we-want-a-shrubbery", "stripe-webhook-signature", "zascharoo") + .returns(type: "something") - post "/s/hooks.json", params: payload, headers: headers + post "/s/hooks.json", params: payload, headers: headers - expect(response.status).to eq 200 + expect(response.status).to eq 200 + end + + describe "event types" do + let(:user) { Fabricate(:user) } + let(:customer) do + Fabricate(:customer, customer_id: "c_575768", product_id: "p_8654", user_id: user.id) end + let(:group) { Fabricate(:group, name: "subscribers-group") } - describe "event types" do - let(:user) { Fabricate(:user) } - let(:customer) do - Fabricate(:customer, customer_id: "c_575768", product_id: "p_8654", user_id: user.id) - end - let(:group) { Fabricate(:group, name: "subscribers-group") } - - let(:event_data) do - { - object: { - customer: customer.customer_id, - plan: { - product: customer.product_id, - metadata: { - group_name: group.name, - }, + let(:event_data) do + { + object: { + customer: customer.customer_id, + plan: { + product: customer.product_id, + metadata: { + group_name: group.name, }, }, - } + }, + } + end + + describe "customer.subscription.updated" do + before do + event = { type: "customer.subscription.updated", data: event_data } + + ::Stripe::Webhook.stubs(:construct_event).returns(event) end - describe "customer.subscription.updated" do - before do - event = { type: "customer.subscription.updated", data: event_data } - - ::Stripe::Webhook.stubs(:construct_event).returns(event) - end - - it "is successfull" do - post "/s/hooks.json" - expect(response.status).to eq 200 - end - - describe "completing the subscription" do - it "does not add the user to the group" do - event_data[:object][:status] = "incomplete" - event_data[:previous_attributes] = { status: "incomplete" } - - expect { post "/s/hooks.json" }.not_to change { user.groups.count } - - expect(response.status).to eq 200 - end - - it "does not add the user to the group" do - event_data[:object][:status] = "incomplete" - event_data[:previous_attributes] = { status: "something-else" } - - expect { post "/s/hooks.json" }.not_to change { user.groups.count } - - expect(response.status).to eq 200 - end - - it "adds the user to the group when completing the transaction" do - event_data[:object][:status] = "complete" - event_data[:previous_attributes] = { status: "incomplete" } - - expect { post "/s/hooks.json" }.to change { user.groups.count }.by(1) - - expect(response.status).to eq 200 - end - end + it "is successfull" do + post "/s/hooks.json" + expect(response.status).to eq 200 end - describe "customer.subscription.deleted" do - before do - event = { type: "customer.subscription.deleted", data: event_data } + describe "completing the subscription" do + it "does not add the user to the group" do + event_data[:object][:status] = "incomplete" + event_data[:previous_attributes] = { status: "incomplete" } - ::Stripe::Webhook.stubs(:construct_event).returns(event) - - group.add(user) - end - - it "deletes the customer" do - expect { post "/s/hooks.json" }.to change { DiscourseSubscriptions::Customer.count }.by( - -1, - ) + expect { post "/s/hooks.json" }.not_to change { user.groups.count } expect(response.status).to eq 200 end - it "removes the user from the group" do - expect { post "/s/hooks.json" }.to change { user.groups.count }.by(-1) + it "does not add the user to the group" do + event_data[:object][:status] = "incomplete" + event_data[:previous_attributes] = { status: "something-else" } + + expect { post "/s/hooks.json" }.not_to change { user.groups.count } expect(response.status).to eq 200 end + + it "adds the user to the group when completing the transaction" do + event_data[:object][:status] = "complete" + event_data[:previous_attributes] = { status: "incomplete" } + + expect { post "/s/hooks.json" }.to change { user.groups.count }.by(1) + + expect(response.status).to eq 200 + end + end + end + + describe "customer.subscription.deleted" do + before do + event = { type: "customer.subscription.deleted", data: event_data } + + ::Stripe::Webhook.stubs(:construct_event).returns(event) + + group.add(user) + end + + it "deletes the customer" do + expect { post "/s/hooks.json" }.to change { DiscourseSubscriptions::Customer.count }.by(-1) + + expect(response.status).to eq 200 + end + + it "removes the user from the group" do + expect { post "/s/hooks.json" }.to change { user.groups.count }.by(-1) + + expect(response.status).to eq 200 end end end diff --git a/spec/requests/subscribe_controller_spec.rb b/spec/requests/subscribe_controller_spec.rb index ecb9bab..f564e85 100644 --- a/spec/requests/subscribe_controller_spec.rb +++ b/spec/requests/subscribe_controller_spec.rb @@ -2,571 +2,562 @@ require "rails_helper" -module DiscourseSubscriptions - RSpec.describe SubscribeController do - let (:user) { - Fabricate(:user) - } - let (:campaign_user) { - Fabricate(:user) - } +RSpec.describe DiscourseSubscriptions::SubscribeController do + let(:user) { Fabricate(:user) } + let(:campaign_user) { Fabricate(:user) } - context "when showing products" do - let(:product) do - { - id: "prodct_23456", - name: "Very Special Product", - metadata: { - description: - "Many people listened to my phone call with the Ukrainian President while it was being made", - repurchaseable: false, + context "when showing products" do + let(:product) do + { + id: "prodct_23456", + name: "Very Special Product", + metadata: { + description: + "Many people listened to my phone call with the Ukrainian President while it was being made", + repurchaseable: false, + }, + otherstuff: true, + } + end + + let(:prices) do + { + data: [ + { + id: "plan_id123", + unit_amount: 1220, + currency: "aud", + recurring: { + interval: "year", + }, + metadata: { + }, }, - otherstuff: true, - } - end + { + id: "plan_id234", + unit_amount: 1399, + currency: "usd", + recurring: { + interval: "year", + }, + metadata: { + }, + }, + { + id: "plan_id678", + unit_amount: 1000, + currency: "aud", + recurring: { + interval: "week", + }, + metadata: { + }, + }, + ], + } + end - let(:prices) do - { - data: [ + let(:product_ids) { ["prodct_23456"] } + + before do + sign_in(user) + Fabricate(:product, external_id: "prodct_23456") + SiteSetting.discourse_subscriptions_public_key = "public-key" + SiteSetting.discourse_subscriptions_secret_key = "secret-key" + end + + describe "#index" do + it "gets products" do + ::Stripe::Product + .expects(:list) + .with({ ids: product_ids, active: true }) + .returns(data: [product]) + + get "/s.json" + + expect(response.parsed_body).to eq( + [ { - id: "plan_id123", - unit_amount: 1220, - currency: "aud", - recurring: { - interval: "year", - }, - metadata: { - }, - }, - { - id: "plan_id234", - unit_amount: 1399, - currency: "usd", - recurring: { - interval: "year", - }, - metadata: { - }, - }, - { - id: "plan_id678", - unit_amount: 1000, - currency: "aud", - recurring: { - interval: "week", - }, - metadata: { - }, + "id" => "prodct_23456", + "name" => "Very Special Product", + "description" => + PrettyText.cook( + "Many people listened to my phone call with the Ukrainian President while it was being made", + ), + "subscribed" => false, + "repurchaseable" => false, }, ], - } + ) end - let(:product_ids) { ["prodct_23456"] } + it "is subscribed" do + Fabricate(:customer, product_id: product[:id], user_id: user.id, customer_id: "x") + ::Stripe::Product + .expects(:list) + .with({ ids: product_ids, active: true }) + .returns(data: [product]) + get "/s.json" + data = response.parsed_body + expect(data.first["subscribed"]).to eq true + end + + it "is not subscribed" do + ::DiscourseSubscriptions::Customer.delete_all + ::Stripe::Product + .expects(:list) + .with({ ids: product_ids, active: true }) + .returns(data: [product]) + + get "/s.json" + data = response.parsed_body + expect(data.first["subscribed"]).to eq false + end + end + + describe "#get_contributors" do before do - sign_in(user) - Fabricate(:product, external_id: "prodct_23456") - SiteSetting.discourse_subscriptions_public_key = "public-key" - SiteSetting.discourse_subscriptions_secret_key = "secret-key" + Fabricate(:product, external_id: "prod_campaign") + Fabricate(:customer, product_id: "prodct_23456", user_id: user.id, customer_id: "x") + Fabricate( + :customer, + product_id: "prod_campaign", + user_id: campaign_user.id, + customer_id: "y", + ) end + context "when not showing contributors" do + it "returns nothing if not set to show contributors" do + SiteSetting.discourse_subscriptions_campaign_show_contributors = false + get "/s/contributors.json" - describe "#index" do - it "gets products" do - ::Stripe::Product - .expects(:list) - .with({ ids: product_ids, active: true }) - .returns(data: [product]) - - get "/s.json" - - expect(response.parsed_body).to eq( - [ - { - "id" => "prodct_23456", - "name" => "Very Special Product", - "description" => - PrettyText.cook( - "Many people listened to my phone call with the Ukrainian President while it was being made", - ), - "subscribed" => false, - "repurchaseable" => false, - }, - ], - ) - end - - it "is subscribed" do - Fabricate(:customer, product_id: product[:id], user_id: user.id, customer_id: "x") - ::Stripe::Product - .expects(:list) - .with({ ids: product_ids, active: true }) - .returns(data: [product]) - - get "/s.json" data = response.parsed_body - expect(data.first["subscribed"]).to eq true + expect(data).to be_empty end + end - it "is not subscribed" do - ::DiscourseSubscriptions::Customer.delete_all - ::Stripe::Product - .expects(:list) - .with({ ids: product_ids, active: true }) - .returns(data: [product]) + context "when showing contributors" do + before { SiteSetting.discourse_subscriptions_campaign_show_contributors = true } + + it "filters users by campaign product if set" do + SiteSetting.discourse_subscriptions_campaign_product = "prod_campaign" + + get "/s/contributors.json" - get "/s.json" data = response.parsed_body - expect(data.first["subscribed"]).to eq false - end - end - - describe "#get_contributors" do - before do - Fabricate(:product, external_id: "prod_campaign") - Fabricate(:customer, product_id: "prodct_23456", user_id: user.id, customer_id: "x") - Fabricate( - :customer, - product_id: "prod_campaign", - user_id: campaign_user.id, - customer_id: "y", - ) - end - context "when not showing contributors" do - it "returns nothing if not set to show contributors" do - SiteSetting.discourse_subscriptions_campaign_show_contributors = false - get "/s/contributors.json" - - data = response.parsed_body - expect(data).to be_empty - end + expect(data.first["id"]).to eq campaign_user.id + expect(data.length).to eq 1 end - context "when showing contributors" do - before { SiteSetting.discourse_subscriptions_campaign_show_contributors = true } + it "shows all purchases if campaign product not set" do + SiteSetting.discourse_subscriptions_campaign_product = nil - it "filters users by campaign product if set" do - SiteSetting.discourse_subscriptions_campaign_product = "prod_campaign" + get "/s/contributors.json" - get "/s/contributors.json" - - data = response.parsed_body - expect(data.first["id"]).to eq campaign_user.id - expect(data.length).to eq 1 - end - - it "shows all purchases if campaign product not set" do - SiteSetting.discourse_subscriptions_campaign_product = nil - - get "/s/contributors.json" - - data = response.parsed_body - expect(data.length).to eq 2 - end - end - end - - describe "#show" do - it "retrieves the product" do - ::Stripe::Product.expects(:retrieve).with("prod_walterwhite").returns(product) - ::Stripe::Price - .expects(:list) - .with(active: true, product: "prod_walterwhite") - .returns(prices) - get "/s/prod_walterwhite.json" - - expect(response.parsed_body).to eq( - { - "product" => { - "id" => "prodct_23456", - "name" => "Very Special Product", - "description" => - PrettyText.cook( - "Many people listened to my phone call with the Ukrainian President while it was being made", - ), - "subscribed" => false, - "repurchaseable" => false, - }, - "plans" => [ - { - "currency" => "aud", - "id" => "plan_id123", - "recurring" => { - "interval" => "year", - }, - "unit_amount" => 1220, - }, - { - "currency" => "usd", - "id" => "plan_id234", - "recurring" => { - "interval" => "year", - }, - "unit_amount" => 1399, - }, - { - "currency" => "aud", - "id" => "plan_id678", - "recurring" => { - "interval" => "week", - }, - "unit_amount" => 1000, - }, - ], - }, - ) + data = response.parsed_body + expect(data.length).to eq 2 end end end - context "when creating subscriptions" do - context "when unauthenticated" do - it "does not create a subscription" do - ::Stripe::Customer.expects(:create).never - ::Stripe::Price.expects(:retrieve).never - ::Stripe::Subscription.expects(:create).never - post "/s/create.json", params: { plan: "plan_1234", source: "tok_1234" } + describe "#show" do + it "retrieves the product" do + ::Stripe::Product.expects(:retrieve).with("prod_walterwhite").returns(product) + ::Stripe::Price + .expects(:list) + .with(active: true, product: "prod_walterwhite") + .returns(prices) + get "/s/prod_walterwhite.json" + + expect(response.parsed_body).to eq( + { + "product" => { + "id" => "prodct_23456", + "name" => "Very Special Product", + "description" => + PrettyText.cook( + "Many people listened to my phone call with the Ukrainian President while it was being made", + ), + "subscribed" => false, + "repurchaseable" => false, + }, + "plans" => [ + { + "currency" => "aud", + "id" => "plan_id123", + "recurring" => { + "interval" => "year", + }, + "unit_amount" => 1220, + }, + { + "currency" => "usd", + "id" => "plan_id234", + "recurring" => { + "interval" => "year", + }, + "unit_amount" => 1399, + }, + { + "currency" => "aud", + "id" => "plan_id678", + "recurring" => { + "interval" => "week", + }, + "unit_amount" => 1000, + }, + ], + }, + ) + end + end + end + + context "when creating subscriptions" do + context "when unauthenticated" do + it "does not create a subscription" do + ::Stripe::Customer.expects(:create).never + ::Stripe::Price.expects(:retrieve).never + ::Stripe::Subscription.expects(:create).never + post "/s/create.json", params: { plan: "plan_1234", source: "tok_1234" } + end + end + + context "when authenticated" do + before { sign_in(user) } + + describe "#create" do + before { ::Stripe::Customer.expects(:create).returns(id: "cus_1234") } + + it "creates a subscription" do + ::Stripe::Price.expects(:retrieve).returns( + type: "recurring", + product: "product_12345", + metadata: { + group_name: "awesome", + trial_period_days: 0, + }, + ) + + ::Stripe::Subscription + .expects(:create) + .with( + customer: "cus_1234", + items: [price: "plan_1234"], + metadata: { + user_id: user.id, + username: user.username_lower, + }, + trial_period_days: 0, + promotion_code: nil, + ) + .returns(status: "active", customer: "cus_1234") + + expect { + post "/s/create.json", params: { plan: "plan_1234", source: "tok_1234" } + }.to change { DiscourseSubscriptions::Customer.count } + end + + it "creates a one time payment subscription" do + ::Stripe::Price.expects(:retrieve).returns( + type: "one_time", + product: "product_12345", + metadata: { + group_name: "awesome", + }, + ) + + ::Stripe::InvoiceItem.expects(:create) + + ::Stripe::Invoice.expects(:create).returns(status: "open", id: "in_123") + + ::Stripe::Invoice.expects(:finalize_invoice).returns( + id: "in_123", + status: "open", + payment_intent: "pi_123", + ) + + ::Stripe::Invoice.expects(:retrieve).returns( + id: "in_123", + status: "open", + payment_intent: "pi_123", + ) + + ::Stripe::PaymentIntent.expects(:retrieve).returns(status: "successful") + + ::Stripe::Invoice.expects(:pay).returns(status: "paid", customer: "cus_1234") + + expect { + post "/s/create.json", params: { plan: "plan_1234", source: "tok_1234" } + }.to change { DiscourseSubscriptions::Customer.count } + end + + it "creates a customer model" do + ::Stripe::Price.expects(:retrieve).returns(type: "recurring", metadata: {}).twice + ::Stripe::Subscription.expects(:create).returns(status: "active", customer: "cus_1234") + + expect { + post "/s/create.json", params: { plan: "plan_1234", source: "tok_1234" } + }.to change { DiscourseSubscriptions::Customer.count } + + ::Stripe::Customer.expects(:retrieve).with("cus_1234") + + expect { + post "/s/create.json", params: { plan: "plan_5678", source: "tok_5678" } + }.not_to change { DiscourseSubscriptions::Customer.count } + end + + context "with customer name & address" do + it "creates a customer & subscription when a customer address is provided" do + ::Stripe::Price.expects(:retrieve).returns(type: "recurring", metadata: {}) + ::Stripe::Subscription.expects(:create).returns(status: "active", customer: "cus_1234") + expect { + post "/s/create.json", + params: { + plan: "plan_1234", + source: "tok_1234", + cardholder_name: "A. Customer", + cardholder_address: { + line1: "123 Main Street", + city: "Anywhere", + state: "VT", + country: "US", + postal_code: "12345", + }, + } + }.to change { DiscourseSubscriptions::Customer.count } + end + end + + context "with promo code" do + context "with invalid code" do + it "prevents use of invalid coupon codes" do + ::Stripe::Price.expects(:retrieve).returns( + type: "recurring", + product: "product_12345", + metadata: { + group_name: "awesome", + trial_period_days: 0, + }, + ) + + ::Stripe::PromotionCode.expects(:list).with({ code: "invalid" }).returns(data: []) + + post "/s/create.json", + params: { + plan: "plan_1234", + source: "tok_1234", + promo: "invalid", + } + + data = response.parsed_body + expect(data["errors"]).not_to be_blank + end + end + + context "with valid code" do + before do + ::Stripe::PromotionCode + .expects(:list) + .with({ code: "123" }) + .returns(data: [{ id: "promo123", coupon: { id: "c123" } }]) + end + + it "applies promo code to recurring subscription" do + ::Stripe::Price.expects(:retrieve).returns( + type: "recurring", + product: "product_12345", + metadata: { + group_name: "awesome", + trial_period_days: 0, + }, + ) + + ::Stripe::Subscription + .expects(:create) + .with( + customer: "cus_1234", + items: [price: "plan_1234"], + metadata: { + user_id: user.id, + username: user.username_lower, + }, + trial_period_days: 0, + promotion_code: "promo123", + ) + .returns(status: "active", customer: "cus_1234") + + expect { + post "/s/create.json", + params: { + plan: "plan_1234", + source: "tok_1234", + promo: "123", + } + }.to change { DiscourseSubscriptions::Customer.count } + end + + it "applies promo code to one time purchase" do + ::Stripe::Price.expects(:retrieve).returns( + type: "one_time", + product: "product_12345", + metadata: { + group_name: "awesome", + }, + ) + + ::Stripe::InvoiceItem.expects(:create).with( + customer: "cus_1234", + price: "plan_1234", + discounts: [{ coupon: "c123" }], + ) + + ::Stripe::Invoice.expects(:create).returns(status: "open", id: "in_123") + + ::Stripe::Invoice.expects(:finalize_invoice).returns( + id: "in_123", + status: "open", + payment_intent: "pi_123", + ) + + ::Stripe::Invoice.expects(:retrieve).returns( + id: "in_123", + status: "open", + payment_intent: "pi_123", + ) + + ::Stripe::PaymentIntent.expects(:retrieve).returns(status: "successful") + + ::Stripe::Invoice.expects(:pay).returns(status: "paid", customer: "cus_1234") + + expect { + post "/s/create.json", + params: { + plan: "plan_1234", + source: "tok_1234", + promo: "123", + } + }.to change { DiscourseSubscriptions::Customer.count } + end + end end end - context "when authenticated" do - before { sign_in(user) } - - describe "#create" do - before { ::Stripe::Customer.expects(:create).returns(id: "cus_1234") } - - it "creates a subscription" do + describe "#finalize strong customer authenticated transaction" do + context "with subscription" do + it "finalizes the subscription" do ::Stripe::Price.expects(:retrieve).returns( - type: "recurring", - product: "product_12345", + id: "plan_1234", + product: "prod_1234", metadata: { - group_name: "awesome", - trial_period_days: 0, }, ) - - ::Stripe::Subscription - .expects(:create) - .with( - customer: "cus_1234", - items: [price: "plan_1234"], - metadata: { - user_id: user.id, - username: user.username_lower, - }, - trial_period_days: 0, - promotion_code: nil, - ) - .returns(status: "active", customer: "cus_1234") + ::Stripe::Subscription.expects(:retrieve).returns( + id: "sub_123", + customer: "cus_1234", + status: "active", + ) expect { - post "/s/create.json", params: { plan: "plan_1234", source: "tok_1234" } + post "/s/finalize.json", params: { plan: "plan_1234", transaction: "sub_1234" } }.to change { DiscourseSubscriptions::Customer.count } end + end - it "creates a one time payment subscription" do + context "with one-time payment" do + it "finalizes the one-time payment" do ::Stripe::Price.expects(:retrieve).returns( - type: "one_time", - product: "product_12345", + id: "plan_1234", + product: "prod_1234", metadata: { - group_name: "awesome", }, ) - - ::Stripe::InvoiceItem.expects(:create) - - ::Stripe::Invoice.expects(:create).returns(status: "open", id: "in_123") - - ::Stripe::Invoice.expects(:finalize_invoice).returns( - id: "in_123", - status: "open", - payment_intent: "pi_123", - ) - ::Stripe::Invoice.expects(:retrieve).returns( id: "in_123", - status: "open", - payment_intent: "pi_123", + customer: "cus_1234", + status: "paid", ) - ::Stripe::PaymentIntent.expects(:retrieve).returns(status: "successful") - - ::Stripe::Invoice.expects(:pay).returns(status: "paid", customer: "cus_1234") - expect { - post "/s/create.json", params: { plan: "plan_1234", source: "tok_1234" } + post "/s/finalize.json", params: { plan: "plan_1234", transaction: "in_1234" } }.to change { DiscourseSubscriptions::Customer.count } end + end + end - it "creates a customer model" do - ::Stripe::Price.expects(:retrieve).returns(type: "recurring", metadata: {}).twice - ::Stripe::Subscription.expects(:create).returns(status: "active", customer: "cus_1234") + describe "user groups" do + let(:group_name) { "group-123" } + let(:group) { Fabricate(:group, name: group_name) } - expect { - post "/s/create.json", params: { plan: "plan_1234", source: "tok_1234" } - }.to change { DiscourseSubscriptions::Customer.count } - - ::Stripe::Customer.expects(:retrieve).with("cus_1234") - - expect { - post "/s/create.json", params: { plan: "plan_5678", source: "tok_5678" } - }.not_to change { DiscourseSubscriptions::Customer.count } + context "with unauthorized group" do + before do + ::Stripe::Customer.expects(:create).returns(id: "cus_1234") + ::Stripe::Subscription.expects(:create).returns(status: "active") end - context "with customer name & address" do - it "creates a customer & subscription when a customer address is provided" do - ::Stripe::Price.expects(:retrieve).returns(type: "recurring", metadata: {}) - ::Stripe::Subscription.expects(:create).returns( - status: "active", - customer: "cus_1234", - ) - expect { - post "/s/create.json", - params: { - plan: "plan_1234", - source: "tok_1234", - cardholder_name: "A. Customer", - cardholder_address: { - line1: "123 Main Street", - city: "Anywhere", - state: "VT", - country: "US", - postal_code: "12345", - }, - } - }.to change { DiscourseSubscriptions::Customer.count } - end + it "does not add the user to the admins group" do + ::Stripe::Price.expects(:retrieve).returns( + type: "recurring", + metadata: { + group_name: "admins", + }, + ) + post "/s/create.json", params: { plan: "plan_1234", source: "tok_1234" } + expect(user.admin).to eq false end - context "with promo code" do - context "with invalid code" do - it "prevents use of invalid coupon codes" do - ::Stripe::Price.expects(:retrieve).returns( - type: "recurring", - product: "product_12345", - metadata: { - group_name: "awesome", - trial_period_days: 0, - }, - ) - - ::Stripe::PromotionCode.expects(:list).with({ code: "invalid" }).returns(data: []) - - post "/s/create.json", - params: { - plan: "plan_1234", - source: "tok_1234", - promo: "invalid", - } - - data = response.parsed_body - expect(data["errors"]).not_to be_blank - end - end - - context "with valid code" do - before do - ::Stripe::PromotionCode - .expects(:list) - .with({ code: "123" }) - .returns(data: [{ id: "promo123", coupon: { id: "c123" } }]) - end - - it "applies promo code to recurring subscription" do - ::Stripe::Price.expects(:retrieve).returns( - type: "recurring", - product: "product_12345", - metadata: { - group_name: "awesome", - trial_period_days: 0, - }, - ) - - ::Stripe::Subscription - .expects(:create) - .with( - customer: "cus_1234", - items: [price: "plan_1234"], - metadata: { - user_id: user.id, - username: user.username_lower, - }, - trial_period_days: 0, - promotion_code: "promo123", - ) - .returns(status: "active", customer: "cus_1234") - - expect { - post "/s/create.json", - params: { - plan: "plan_1234", - source: "tok_1234", - promo: "123", - } - }.to change { DiscourseSubscriptions::Customer.count } - end - - it "applies promo code to one time purchase" do - ::Stripe::Price.expects(:retrieve).returns( - type: "one_time", - product: "product_12345", - metadata: { - group_name: "awesome", - }, - ) - - ::Stripe::InvoiceItem.expects(:create).with( - customer: "cus_1234", - price: "plan_1234", - discounts: [{ coupon: "c123" }], - ) - - ::Stripe::Invoice.expects(:create).returns(status: "open", id: "in_123") - - ::Stripe::Invoice.expects(:finalize_invoice).returns( - id: "in_123", - status: "open", - payment_intent: "pi_123", - ) - - ::Stripe::Invoice.expects(:retrieve).returns( - id: "in_123", - status: "open", - payment_intent: "pi_123", - ) - - ::Stripe::PaymentIntent.expects(:retrieve).returns(status: "successful") - - ::Stripe::Invoice.expects(:pay).returns(status: "paid", customer: "cus_1234") - - expect { - post "/s/create.json", - params: { - plan: "plan_1234", - source: "tok_1234", - promo: "123", - } - }.to change { DiscourseSubscriptions::Customer.count } - end - end + it "does not add the user to other group" do + ::Stripe::Price.expects(:retrieve).returns( + type: "recurring", + metadata: { + group_name: "other", + }, + ) + post "/s/create.json", params: { plan: "plan_1234", source: "tok_1234" } + expect(user.groups).to be_empty end end - describe "#finalize strong customer authenticated transaction" do - context "with subscription" do - it "finalizes the subscription" do - ::Stripe::Price.expects(:retrieve).returns( - id: "plan_1234", - product: "prod_1234", - metadata: { - }, - ) - ::Stripe::Subscription.expects(:retrieve).returns( - id: "sub_123", - customer: "cus_1234", - status: "active", - ) - - expect { - post "/s/finalize.json", params: { plan: "plan_1234", transaction: "sub_1234" } - }.to change { DiscourseSubscriptions::Customer.count } - end + context "when plan has group in metadata" do + before do + ::Stripe::Customer.expects(:create).returns(id: "cus_1234") + ::Stripe::Price.expects(:retrieve).returns( + type: "recurring", + metadata: { + group_name: group_name, + }, + ) end - context "with one-time payment" do - it "finalizes the one-time payment" do - ::Stripe::Price.expects(:retrieve).returns( - id: "plan_1234", - product: "prod_1234", - metadata: { - }, - ) - ::Stripe::Invoice.expects(:retrieve).returns( - id: "in_123", - customer: "cus_1234", - status: "paid", - ) + it "does not add the user to the group when subscription fails" do + ::Stripe::Subscription.expects(:create).returns(status: "failed") - expect { - post "/s/finalize.json", params: { plan: "plan_1234", transaction: "in_1234" } - }.to change { DiscourseSubscriptions::Customer.count } - end - end - end - - describe "user groups" do - let(:group_name) { "group-123" } - let(:group) { Fabricate(:group, name: group_name) } - - context "with unauthorized group" do - before do - ::Stripe::Customer.expects(:create).returns(id: "cus_1234") - ::Stripe::Subscription.expects(:create).returns(status: "active") - end - - it "does not add the user to the admins group" do - ::Stripe::Price.expects(:retrieve).returns( - type: "recurring", - metadata: { - group_name: "admins", - }, - ) + expect { post "/s/create.json", params: { plan: "plan_1234", source: "tok_1234" } - expect(user.admin).to eq false - end + }.not_to change { group.users.count } - it "does not add the user to other group" do - ::Stripe::Price.expects(:retrieve).returns( - type: "recurring", - metadata: { - group_name: "other", - }, - ) - post "/s/create.json", params: { plan: "plan_1234", source: "tok_1234" } - expect(user.groups).to be_empty - end + expect(user.groups).to be_empty end - context "when plan has group in metadata" do - before do - ::Stripe::Customer.expects(:create).returns(id: "cus_1234") - ::Stripe::Price.expects(:retrieve).returns( - type: "recurring", - metadata: { - group_name: group_name, - }, - ) - end + it "adds the user to the group when the subscription is active" do + ::Stripe::Subscription.expects(:create).returns(status: "active") - it "does not add the user to the group when subscription fails" do - ::Stripe::Subscription.expects(:create).returns(status: "failed") + expect { + post "/s/create.json", params: { plan: "plan_1234", source: "tok_1234" } + }.to change { group.users.count } - expect { - post "/s/create.json", params: { plan: "plan_1234", source: "tok_1234" } - }.not_to change { group.users.count } + expect(user.groups).not_to be_empty + end - expect(user.groups).to be_empty - end + it "adds the user to the group when the subscription is trialing" do + ::Stripe::Subscription.expects(:create).returns(status: "trialing") - it "adds the user to the group when the subscription is active" do - ::Stripe::Subscription.expects(:create).returns(status: "active") + expect { + post "/s/create.json", params: { plan: "plan_1234", source: "tok_1234" } + }.to change { group.users.count } - expect { - post "/s/create.json", params: { plan: "plan_1234", source: "tok_1234" } - }.to change { group.users.count } - - expect(user.groups).not_to be_empty - end - - it "adds the user to the group when the subscription is trialing" do - ::Stripe::Subscription.expects(:create).returns(status: "trialing") - - expect { - post "/s/create.json", params: { plan: "plan_1234", source: "tok_1234" } - }.to change { group.users.count } - - expect(user.groups).not_to be_empty - end + expect(user.groups).not_to be_empty end end end diff --git a/spec/requests/user/payments_controller_spec.rb b/spec/requests/user/payments_controller_spec.rb index 07196ac..3dcac29 100644 --- a/spec/requests/user/payments_controller_spec.rb +++ b/spec/requests/user/payments_controller_spec.rb @@ -2,63 +2,61 @@ require "rails_helper" -module DiscourseSubscriptions - RSpec.describe User::PaymentsController do - it "is a subclass of ApplicationController" do - expect(DiscourseSubscriptions::User::PaymentsController < ::ApplicationController).to eq(true) +RSpec.describe DiscourseSubscriptions::User::PaymentsController do + it "is a subclass of ApplicationController" do + expect(DiscourseSubscriptions::User::PaymentsController < ::ApplicationController).to eq(true) + end + + context "when not authenticated" do + it "does not get the payment intents" do + ::Stripe::PaymentIntent.expects(:list).never + get "/s/user/payments.json" + expect(response.status).to eq(403) + end + end + + context "when authenticated" do + let(:user) { Fabricate(:user, email: "zasch@example.com") } + + before do + sign_in(user) + Fabricate(:customer, customer_id: "c_345678", user_id: user.id) + Fabricate(:product, external_id: "prod_8675309") + Fabricate(:product, external_id: "prod_8675310") end - context "when not authenticated" do - it "does not get the payment intents" do - ::Stripe::PaymentIntent.expects(:list).never - get "/s/user/payments.json" - expect(response.status).to eq(403) - end - end + it "gets payment intents" do + created_time = Time.now + ::Stripe::Invoice + .expects(:list) + .with(customer: "c_345678") + .returns( + data: [ + { id: "inv_900007", lines: { data: [plan: { product: "prod_8675309" }] } }, + { id: "inv_900008", lines: { data: [plan: { product: "prod_8675310" }] } }, + { id: "inv_900008", lines: { data: [plan: { product: "prod_8675310" }] } }, + ], + ) - context "when authenticated" do - let(:user) { Fabricate(:user, email: "zasch@example.com") } + ::Stripe::PaymentIntent + .expects(:list) + .with(customer: "c_345678") + .returns( + data: [ + { id: "pi_900008", invoice: "inv_900008", created: created_time }, + { id: "pi_900008", invoice: "inv_900008", created: created_time }, + { id: "pi_900007", invoice: "inv_900007", created: Time.now }, + { id: "pi_007", invoice: "inv_007", created: Time.now }, + ], + ) - before do - sign_in(user) - Fabricate(:customer, customer_id: "c_345678", user_id: user.id) - Fabricate(:product, external_id: "prod_8675309") - Fabricate(:product, external_id: "prod_8675310") - end + get "/s/user/payments.json" - it "gets payment intents" do - created_time = Time.now - ::Stripe::Invoice - .expects(:list) - .with(customer: "c_345678") - .returns( - data: [ - { id: "inv_900007", lines: { data: [plan: { product: "prod_8675309" }] } }, - { id: "inv_900008", lines: { data: [plan: { product: "prod_8675310" }] } }, - { id: "inv_900008", lines: { data: [plan: { product: "prod_8675310" }] } }, - ], - ) + parsed_body = response.parsed_body + invoice = parsed_body[0]["invoice"] - ::Stripe::PaymentIntent - .expects(:list) - .with(customer: "c_345678") - .returns( - data: [ - { id: "pi_900008", invoice: "inv_900008", created: created_time }, - { id: "pi_900008", invoice: "inv_900008", created: created_time }, - { id: "pi_900007", invoice: "inv_900007", created: Time.now }, - { id: "pi_007", invoice: "inv_007", created: Time.now }, - ], - ) - - get "/s/user/payments.json" - - parsed_body = response.parsed_body - invoice = parsed_body[0]["invoice"] - - expect(invoice).to eq("inv_900007") - expect(parsed_body.count).to eq(2) - end + expect(invoice).to eq("inv_900007") + expect(parsed_body.count).to eq(2) end end end diff --git a/spec/requests/user/subscriptions_controller_spec.rb b/spec/requests/user/subscriptions_controller_spec.rb index d7399c2..a0e62df 100644 --- a/spec/requests/user/subscriptions_controller_spec.rb +++ b/spec/requests/user/subscriptions_controller_spec.rb @@ -2,105 +2,103 @@ require "rails_helper" -module DiscourseSubscriptions - RSpec.describe User::SubscriptionsController do - it "is a subclass of ApplicationController" do - expect(DiscourseSubscriptions::User::SubscriptionsController < ::ApplicationController).to eq( - true, - ) +RSpec.describe DiscourseSubscriptions::User::SubscriptionsController do + it "is a subclass of ApplicationController" do + expect(DiscourseSubscriptions::User::SubscriptionsController < ::ApplicationController).to eq( + true, + ) + end + + context "when not authenticated" do + it "does not get the subscriptions" do + ::Stripe::Customer.expects(:list).never + get "/s/user/subscriptions.json" end - context "when not authenticated" do - it "does not get the subscriptions" do - ::Stripe::Customer.expects(:list).never + it "does not destroy a subscription" do + ::Stripe::Subscription.expects(:delete).never + patch "/s/user/subscriptions/sub_12345.json" + end + + it "doesn't update payment method for subscription" do + ::Stripe::Subscription.expects(:update).never + ::Stripe::PaymentMethod.expects(:attach).never + put "/s/user/subscriptions/sub_12345.json", params: { payment_method: "pm_abc123abc" } + end + end + + context "when authenticated" do + let(:user) { Fabricate(:user, email: "beanie@example.com") } + let(:customer) do + Fabricate(:customer, user_id: user.id, customer_id: "cus_23456", product_id: "prod_123") + end + + before do + sign_in(user) + Fabricate(:subscription, customer_id: customer.id, external_id: "sub_1234") + end + + describe "index" do + let(:plans) do + { + data: [ + { id: "plan_1", product: { name: "ACME Subscriptions" } }, + { id: "plan_2", product: { name: "ACME Other Subscriptions" } }, + ], + } + end + + let(:customers) do + { + data: [ + { + id: "cus_23456", + subscriptions: { + data: [ + { id: "sub_1234", items: { data: [price: { id: "plan_1" }] } }, + { id: "sub_4567", items: { data: [price: { id: "plan_2" }] } }, + ], + }, + }, + ], + } + end + + it "gets subscriptions" do + ::Stripe::Price.expects(:list).with(expand: ["data.product"], limit: 100).returns(plans) + + ::Stripe::Customer + .expects(:list) + .with(email: user.email, expand: ["data.subscriptions"]) + .returns(customers) + get "/s/user/subscriptions.json" - end - it "does not destroy a subscription" do - ::Stripe::Subscription.expects(:delete).never - patch "/s/user/subscriptions/sub_12345.json" - end + subscription = response.parsed_body.first - it "doesn't update payment method for subscription" do - ::Stripe::Subscription.expects(:update).never - ::Stripe::PaymentMethod.expects(:attach).never - put "/s/user/subscriptions/sub_12345.json", params: { payment_method: "pm_abc123abc" } - end - end - - context "when authenticated" do - let(:user) { Fabricate(:user, email: "beanie@example.com") } - let(:customer) do - Fabricate(:customer, user_id: user.id, customer_id: "cus_23456", product_id: "prod_123") - end - - before do - sign_in(user) - Fabricate(:subscription, customer_id: customer.id, external_id: "sub_1234") - end - - describe "index" do - let(:plans) do - { - data: [ - { id: "plan_1", product: { name: "ACME Subscriptions" } }, - { id: "plan_2", product: { name: "ACME Other Subscriptions" } }, - ], - } - end - - let(:customers) do - { - data: [ - { - id: "cus_23456", - subscriptions: { - data: [ - { id: "sub_1234", items: { data: [price: { id: "plan_1" }] } }, - { id: "sub_4567", items: { data: [price: { id: "plan_2" }] } }, - ], - }, - }, - ], - } - end - - it "gets subscriptions" do - ::Stripe::Price.expects(:list).with(expand: ["data.product"], limit: 100).returns(plans) - - ::Stripe::Customer - .expects(:list) - .with(email: user.email, expand: ["data.subscriptions"]) - .returns(customers) - - get "/s/user/subscriptions.json" - - subscription = response.parsed_body.first - - expect(subscription).to eq( - "id" => "sub_1234", - "items" => { - "data" => [{ "price" => { "id" => "plan_1" } }], - }, - "plan" => { - "id" => "plan_1", - "product" => { - "name" => "ACME Subscriptions", - }, - }, + expect(subscription).to eq( + "id" => "sub_1234", + "items" => { + "data" => [{ "price" => { "id" => "plan_1" } }], + }, + "plan" => { + "id" => "plan_1", "product" => { "name" => "ACME Subscriptions", }, - ) - end + }, + "product" => { + "name" => "ACME Subscriptions", + }, + ) end + end - describe "update" do - it "updates the payment method for subscription" do - ::Stripe::Subscription.expects(:update).once - ::Stripe::PaymentMethod.expects(:attach).once - put "/s/user/subscriptions/sub_1234.json", params: { payment_method: "pm_abc123abc" } - end + describe "update" do + it "updates the payment method for subscription" do + ::Stripe::Subscription.expects(:update).once + ::Stripe::PaymentMethod.expects(:attach).once + put "/s/user/subscriptions/sub_1234.json", params: { payment_method: "pm_abc123abc" } end end end diff --git a/spec/serializers/site_serializer_spec.rb b/spec/serializers/site_serializer_spec.rb index 6ea61e6..096c41e 100644 --- a/spec/serializers/site_serializer_spec.rb +++ b/spec/serializers/site_serializer_spec.rb @@ -11,6 +11,7 @@ describe SiteSerializer do SiteSetting.discourse_subscriptions_enabled = true SiteSetting.discourse_subscriptions_campaign_enabled = true end + it "is false if the goal_met date is < 7 days old" do Discourse.redis.set("subscriptions_goal_met_date", 10.days.ago) data = described_class.new(Site.new(guardian), scope: guardian, root: false).as_json diff --git a/spec/services/campaign_spec.rb b/spec/services/campaign_spec.rb index 583420b..116439a 100644 --- a/spec/services/campaign_spec.rb +++ b/spec/services/campaign_spec.rb @@ -4,12 +4,8 @@ require "rails_helper" describe DiscourseSubscriptions::Campaign do describe "campaign data is refreshed" do - let (:user) { - Fabricate(:user) - } - let (:user2) { - Fabricate(:user) - } + let(:user) { Fabricate(:user) } + let(:user2) { Fabricate(:user) } let(:subscription) do { id: "sub_1234", diff --git a/test/javascripts/acceptance/payments-test.js b/test/javascripts/acceptance/payments-test.js index 06a5f76..b81e79c 100644 --- a/test/javascripts/acceptance/payments-test.js +++ b/test/javascripts/acceptance/payments-test.js @@ -1,7 +1,7 @@ -import { acceptance, count } from "discourse/tests/helpers/qunit-helpers"; -import { stubStripe } from "discourse/plugins/discourse-subscriptions/helpers/stripe"; import { visit } from "@ember/test-helpers"; import { test } from "qunit"; +import { acceptance, count } from "discourse/tests/helpers/qunit-helpers"; +import { stubStripe } from "discourse/plugins/discourse-subscriptions/helpers/stripe"; acceptance("Discourse Subscriptions", function (needs) { needs.user(); diff --git a/test/javascripts/acceptance/subscribe-test.js b/test/javascripts/acceptance/subscribe-test.js index 0c75949..d162b43 100644 --- a/test/javascripts/acceptance/subscribe-test.js +++ b/test/javascripts/acceptance/subscribe-test.js @@ -1,8 +1,8 @@ -import { acceptance, count } from "discourse/tests/helpers/qunit-helpers"; -import { stubStripe } from "discourse/plugins/discourse-subscriptions/helpers/stripe"; import { click, visit } from "@ember/test-helpers"; import { test } from "qunit"; import pretender, { response } from "discourse/tests/helpers/create-pretender"; +import { acceptance, count } from "discourse/tests/helpers/qunit-helpers"; +import { stubStripe } from "discourse/plugins/discourse-subscriptions/helpers/stripe"; function singleProductPretender() { pretender.get("/s", () => { diff --git a/test/javascripts/integration/components/payment-options-test.js b/test/javascripts/integration/components/payment-options-test.js index 9f68bcd..662108f 100644 --- a/test/javascripts/integration/components/payment-options-test.js +++ b/test/javascripts/integration/components/payment-options-test.js @@ -1,8 +1,8 @@ -import { count, discourseModule } from "discourse/tests/helpers/qunit-helpers"; +import hbs from "htmlbars-inline-precompile"; import componentTest, { setupRenderingTest, } from "discourse/tests/helpers/component-test"; -import hbs from "htmlbars-inline-precompile"; +import { count, discourseModule } from "discourse/tests/helpers/qunit-helpers"; discourseModule("payment-options", function (hooks) { setupRenderingTest(hooks); diff --git a/test/javascripts/integration/components/payment-plan-test.js b/test/javascripts/integration/components/payment-plan-test.js index 4239374..8b65d1d 100644 --- a/test/javascripts/integration/components/payment-plan-test.js +++ b/test/javascripts/integration/components/payment-plan-test.js @@ -1,12 +1,12 @@ +import hbs from "htmlbars-inline-precompile"; +import componentTest, { + setupRenderingTest, +} from "discourse/tests/helpers/component-test"; import { count, discourseModule, query, } from "discourse/tests/helpers/qunit-helpers"; -import componentTest, { - setupRenderingTest, -} from "discourse/tests/helpers/component-test"; -import hbs from "htmlbars-inline-precompile"; discourseModule("payment-plan", function (hooks) { setupRenderingTest(hooks); diff --git a/yarn.lock b/yarn.lock index bf66982..aa74ee7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,20 +2,18 @@ # yarn lockfile v1 -"@ampproject/remapping@^2.1.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== - dependencies: - "@jridgewell/gen-mapping" "^0.1.0" - "@jridgewell/trace-mapping" "^0.3.9" +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== -"@babel/code-frame@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== +"@ampproject/remapping@^2.2.0": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== dependencies: - "@babel/highlight" "^7.18.6" + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" "@babel/code-frame@^7.22.13": version "7.22.13" @@ -25,109 +23,97 @@ "@babel/highlight" "^7.22.13" chalk "^2.4.2" -"@babel/compat-data@^7.20.5": - version "7.20.10" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.10.tgz#9d92fa81b87542fff50e848ed585b4212c1d34ec" - integrity sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg== - -"@babel/core@^7.18.5": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.7.tgz#37072f951bd4d28315445f66e0ec9f6ae0c8c35f" - integrity sha512-t1ZjCluspe5DW24bn2Rr1CDb2v9rn/hROtg9a2tmd0+QYf4bsloYfLQzjG4qHPNMhWtKdGC33R5AxGR2Af2cBw== +"@babel/code-frame@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.7" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-module-transforms" "^7.20.7" - "@babel/helpers" "^7.20.7" - "@babel/parser" "^7.20.7" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.7" - "@babel/types" "^7.20.7" - convert-source-map "^1.7.0" + "@babel/highlight" "^7.23.4" + chalk "^2.4.2" + +"@babel/compat-data@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== + +"@babel/core@^7.18.6", "@babel/core@^7.20.12", "@babel/core@^7.23.7": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.7.tgz#4d8016e06a14b5f92530a13ed0561730b5c6483f" + integrity sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.7" + "@babel/parser" "^7.23.6" + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.7" + "@babel/types" "^7.23.6" + convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" - json5 "^2.2.1" - semver "^6.3.0" + json5 "^2.2.3" + semver "^6.3.1" -"@babel/eslint-parser@^7.18.2": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.19.1.tgz#4f68f6b0825489e00a24b41b6a1ae35414ecd2f4" - integrity sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ== +"@babel/eslint-parser@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.23.3.tgz#7bf0db1c53b54da0c8a12627373554a0828479ca" + integrity sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw== dependencies: "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" eslint-visitor-keys "^2.1.0" - semver "^6.3.0" + semver "^6.3.1" -"@babel/generator@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.7.tgz#f8ef57c8242665c5929fe2e8d82ba75460187b4a" - integrity sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw== +"@babel/generator@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" + integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== dependencies: - "@babel/types" "^7.20.7" - "@jridgewell/gen-mapping" "^0.3.2" - jsesc "^2.5.1" - -"@babel/generator@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== - dependencies: - "@babel/types" "^7.23.0" + "@babel/types" "^7.23.6" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" - integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== +"@babel/helper-annotate-as-pure@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" + integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.22.5" -"@babel/helper-compilation-targets@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz#a6cd33e93629f5eb473b021aac05df62c4cd09bb" - integrity sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ== +"@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== dependencies: - "@babel/compat-data" "^7.20.5" - "@babel/helper-validator-option" "^7.18.6" - browserslist "^4.21.3" + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" lru-cache "^5.1.1" - semver "^6.3.0" + semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.7.tgz#d0e1f8d7e4ed5dac0389364d9c0c191d948ade6f" - integrity sha512-LtoWbDXOaidEf50hmdDqn9g8VEzsorMexoWMQdQODbvmqYmaF23pBP5VNPAGIFHsFQCIeKokDiz3CH5Y2jlY6w== +"@babel/helper-create-class-features-plugin@^7.23.7": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.7.tgz#b2e6826e0e20d337143655198b79d58fdc9bd43d" + integrity sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g== dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" - "@babel/helper-member-expression-to-functions" "^7.20.7" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-replace-supers" "^7.20.7" - "@babel/helper-split-export-declaration" "^7.18.6" - -"@babel/helper-environment-visitor@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" - integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-member-expression-to-functions" "^7.23.0" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + semver "^6.3.1" "@babel/helper-environment-visitor@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== -"@babel/helper-function-name@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" - integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== - dependencies: - "@babel/template" "^7.18.10" - "@babel/types" "^7.19.0" - "@babel/helper-function-name@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" @@ -143,71 +129,65 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-member-expression-to-functions@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz#a6f26e919582275a93c3aa6594756d71b0bb7f05" - integrity sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw== +"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" + integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== dependencies: - "@babel/types" "^7.20.7" + "@babel/types" "^7.23.0" -"@babel/helper-module-imports@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" - integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== +"@babel/helper-module-imports@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" + integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.22.15" -"@babel/helper-module-transforms@^7.20.7": - version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz#df4c7af713c557938c50ea3ad0117a7944b2f1b0" - integrity sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg== +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.20.2" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.19.1" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.10" - "@babel/types" "^7.20.7" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.20" -"@babel/helper-optimise-call-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" - integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== +"@babel/helper-optimise-call-expression@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" + integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.22.5" -"@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" - integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== +"@babel/helper-plugin-utils@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" + integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== -"@babel/helper-replace-supers@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz#243ecd2724d2071532b2c8ad2f0f9f083bcae331" - integrity sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A== +"@babel/helper-replace-supers@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" + integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-member-expression-to-functions" "^7.20.7" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.7" - "@babel/types" "^7.20.7" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-optimise-call-expression" "^7.22.5" -"@babel/helper-simple-access@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" - integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== dependencies: - "@babel/types" "^7.20.2" + "@babel/types" "^7.22.5" -"@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== +"@babel/helper-skip-transparent-expression-wrappers@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" + integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.22.5" "@babel/helper-split-export-declaration@^7.22.6": version "7.22.6" @@ -216,48 +196,34 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-string-parser@^7.19.4": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" - integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== - "@babel/helper-string-parser@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== -"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/helper-validator-option@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" - integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== +"@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== -"@babel/helpers@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.7.tgz#04502ff0feecc9f20ecfaad120a18f011a8e6dce" - integrity sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA== +"@babel/helpers@^7.23.7": + version "7.23.8" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.8.tgz#fc6b2d65b16847fd50adddbd4232c76378959e34" + integrity sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ== dependencies: - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.7" - "@babel/types" "^7.20.7" - -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" - js-tokens "^4.0.0" + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.7" + "@babel/types" "^7.23.6" "@babel/highlight@^7.22.13": version "7.22.20" @@ -268,42 +234,47 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.7.tgz#66fe23b3c8569220817d5feb8b9dcdc95bb4f71b" - integrity sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg== +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" -"@babel/parser@^7.22.15", "@babel/parser@^7.23.0": +"@babel/parser@^7.22.15": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== -"@babel/plugin-proposal-decorators@^7.18.2": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.7.tgz#05d37453c2ce818f3e47bbeda9468c8de947eecc" - integrity sha512-JB45hbUweYpwAGjkiM7uCyXMENH2lG+9r3G2E+ttc2PRXAoEkpfd/KW5jDg4j8RS6tLtTG1jZi9LbHZVSfs1/A== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.20.7" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-replace-supers" "^7.20.7" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/plugin-syntax-decorators" "^7.19.0" +"@babel/parser@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" + integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== -"@babel/plugin-syntax-decorators@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz#5f13d1d8fce96951bea01a10424463c9a5b3a599" - integrity sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ== +"@babel/plugin-proposal-decorators@^7.18.6", "@babel/plugin-proposal-decorators@^7.23.7": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.7.tgz#1d827902cbd3d9054e54fb2f2056cdd1eaa0e368" + integrity sha512-b1s5JyeMvqj7d9m9KhJNHKc18gEJiSyVzVX3bwbiPalQBQpuvfPh6lA9F7Kk/dWH0TIiXRpB9yicwijY6buPng== dependencies: - "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-create-class-features-plugin" "^7.23.7" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-decorators" "^7.23.3" -"@babel/template@^7.18.10", "@babel/template@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" - integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== +"@babel/plugin-syntax-decorators@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.23.3.tgz#a1d351d6c25bfdcf2e16f99b039101bc0ffcb0ca" + integrity sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA== dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/runtime@^7.21.0": + version "7.23.8" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.8.tgz#8ee6fe1ac47add7122902f257b8ddf55c898f650" + integrity sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw== + dependencies: + regenerator-runtime "^0.14.0" "@babel/template@^7.22.15": version "7.22.15" @@ -314,31 +285,22 @@ "@babel/parser" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/traverse@^7.20.10", "@babel/traverse@^7.20.7": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" - integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== +"@babel/traverse@^7.23.7": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.7.tgz#9a7bf285c928cb99b5ead19c3b1ce5b310c9c305" + integrity sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.0" - "@babel/types" "^7.23.0" - debug "^4.1.0" + "@babel/parser" "^7.23.6" + "@babel/types" "^7.23.6" + debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.20.2", "@babel/types@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.7.tgz#54ec75e252318423fc07fb644dc6a58a64c09b7f" - integrity sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg== - dependencies: - "@babel/helper-string-parser" "^7.19.4" - "@babel/helper-validator-identifier" "^7.19.1" - to-fast-properties "^2.0.0" - "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" @@ -348,19 +310,64 @@ "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" +"@babel/types@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" + integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== + dependencies: + "@babel/helper-string-parser" "^7.23.4" + "@babel/helper-validator-identifier" "^7.22.20" + to-fast-properties "^2.0.0" + +"@discourse/lint-configs@^1.3.5": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@discourse/lint-configs/-/lint-configs-1.3.5.tgz#894b5a224e8f3ef48b8baa5eee5dd42a2238bf12" + integrity sha512-GY/m3V3DWQAAY4DrY0puRsW50g/aA+QYqYwggi6RGU8LPjYTJIaSzf5z3+R5Z5SRn06+hBWuP5fTdT0AbXgRew== + dependencies: + "@babel/core" "^7.23.7" + "@babel/eslint-parser" "^7.23.3" + "@babel/plugin-proposal-decorators" "^7.23.7" + ember-template-lint "^5.13.0" + eslint "^8.56.0" + eslint-plugin-decorator-position "^5.0.2" + eslint-plugin-ember "^12.0.0" + eslint-plugin-qunit "^8.0.1" + eslint-plugin-simple-import-sort "^10.0.0" + eslint-plugin-sort-class-members "^1.19.0" + globals "^13.24.0" + prettier "^2.8.8" + prettier-plugin-ember-template-tag "^0.3.2" + "@ember-data/rfc395-data@^0.0.4": version "0.0.4" resolved "https://registry.yarnpkg.com/@ember-data/rfc395-data/-/rfc395-data-0.0.4.tgz#ecb86efdf5d7733a76ff14ea651a1b0ed1f8a843" integrity sha512-tGRdvgC9/QMQSuSuJV45xoyhI0Pzjm7A9o/MVVA3HakXIImJbbzx/k/6dO9CUEQXIyS2y0fW6C1XaYOG7rY0FQ== -"@eslint/eslintrc@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" - integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== +"@ember/edition-utils@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ember/edition-utils/-/edition-utils-1.2.0.tgz#a039f542dc14c8e8299c81cd5abba95e2459cfa6" + integrity sha512-VmVq/8saCaPdesQmftPqbFtxJWrzxNGSQ+e8x8LLe3Hjm36pJ04Q8LeORGZkAeOhldoUX9seLGmSaHeXkIqoog== + +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.6.1": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== + +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.4.0" + espree "^9.6.0" globals "^13.19.0" ignore "^5.2.0" import-fresh "^3.2.1" @@ -368,75 +375,114 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@eslint/js@8.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b" + integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== + "@glimmer/env@0.1.7", "@glimmer/env@^0.1.7": version "0.1.7" resolved "https://registry.yarnpkg.com/@glimmer/env/-/env-0.1.7.tgz#fd2d2b55a9029c6b37a6c935e8c8871ae70dfa07" integrity sha512-JKF/a9I9jw6fGoz8kA7LEQslrwJ5jms5CXhu/aqkBWk+PmZ6pTl8mlb/eJ/5ujBGTiQzBhy5AIWF712iA+4/mw== -"@glimmer/global-context@0.83.1": - version "0.83.1" - resolved "https://registry.yarnpkg.com/@glimmer/global-context/-/global-context-0.83.1.tgz#3e2d97f10ff623bcfb5b7dc29a858d546a6c6d66" - integrity sha512-OwlgqpbOJU73EjZOZdftab0fKbtdJ4x/QQeJseL9cvaAUiK3+w52M5ONFxD1T/yPBp2Mf7NCYqA/uL8tRbzY2A== +"@glimmer/global-context@0.84.3": + version "0.84.3" + resolved "https://registry.yarnpkg.com/@glimmer/global-context/-/global-context-0.84.3.tgz#f8bf2cda9562716f2ddf3f96837e7559600635c4" + integrity sha512-8Oy9Wg5IZxMEeAnVmzD2NkObf89BeHoFSzJgJROE/deutd3rxg83mvlOez4zBBGYwnTb+VGU2LYRpet92egJjA== dependencies: "@glimmer/env" "^0.1.7" -"@glimmer/interfaces@0.83.1": - version "0.83.1" - resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.83.1.tgz#fb16f5f683ddc55f130887b6141f58c0751350fe" - integrity sha512-rjAztghzX97v8I4rk3+NguM3XGYcFjc/GbJ8qrEj19KF2lUDoDBW1sB7f0tov3BD5HlrGXei/vOh4+DHfjeB5w== +"@glimmer/interfaces@0.84.3": + version "0.84.3" + resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.84.3.tgz#629777a4abe373b0785656f6c8d08989f5784805" + integrity sha512-dk32ykoNojt0mvEaIW6Vli5MGTbQo58uy3Epj7ahCgTHmWOKuw/0G83f2UmFprRwFx689YTXG38I/vbpltEjzg== dependencies: "@simple-dom/interface" "^1.4.0" -"@glimmer/reference@^0.83.1": - version "0.83.1" - resolved "https://registry.yarnpkg.com/@glimmer/reference/-/reference-0.83.1.tgz#0345b95431b5bb19843b308e6311d1ef81e36192" - integrity sha512-BThEwDlMkJB1WBPWDrww+VxgGyDbwxh5FFPvGhkovvCZnCb7fAMUCt9pi6CUZtviugkWOBFtE9P4eZZbOLkXeg== +"@glimmer/interfaces@^0.85.13": + version "0.85.13" + resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.85.13.tgz#02ec31a29977cf06af5d1bb9f685f0ad453ae613" + integrity sha512-qOEdvFgCQX1g+Gfi/nA2zbKYPmEkEbhFgzZ5esgmlQNOSQx4j8nyGiBvnG/vepHrh4wUzTvIynrCQpfr3SiKXg== + dependencies: + "@simple-dom/interface" "^1.4.0" + +"@glimmer/reference@^0.84.3": + version "0.84.3" + resolved "https://registry.yarnpkg.com/@glimmer/reference/-/reference-0.84.3.tgz#6420ad9c102633ac83939fd1b2457269d21fb632" + integrity sha512-lV+p/aWPVC8vUjmlvYVU7WQJsLh319SdXuAWoX/SE3pq340BJlAJiEcAc6q52y9JNhT57gMwtjMX96W5Xcx/qw== dependencies: "@glimmer/env" "^0.1.7" - "@glimmer/global-context" "0.83.1" - "@glimmer/interfaces" "0.83.1" - "@glimmer/util" "0.83.1" - "@glimmer/validator" "0.83.1" + "@glimmer/global-context" "0.84.3" + "@glimmer/interfaces" "0.84.3" + "@glimmer/util" "0.84.3" + "@glimmer/validator" "0.84.3" -"@glimmer/syntax@^0.83.1": - version "0.83.1" - resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.83.1.tgz#7e18dd445871c157ba0281f12a4fbf316fa49b41" - integrity sha512-n3vEd0GtjtgkOsd2gqkSimp8ecqq5KrHyana/s1XJZvVAPD5rMWT9WvAVWG8XAktns8BxjwLIUoj/vkOfA+eHg== +"@glimmer/syntax@^0.84.2", "@glimmer/syntax@^0.84.3": + version "0.84.3" + resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.84.3.tgz#4045a1708cef7fd810cff42fe6deeba40c7286d0" + integrity sha512-ioVbTic6ZisLxqTgRBL2PCjYZTFIwobifCustrozRU2xGDiYvVIL0vt25h2c1ioDsX59UgVlDkIK4YTAQQSd2A== dependencies: - "@glimmer/interfaces" "0.83.1" - "@glimmer/util" "0.83.1" + "@glimmer/interfaces" "0.84.3" + "@glimmer/util" "0.84.3" "@handlebars/parser" "~2.0.0" simple-html-tokenizer "^0.5.11" -"@glimmer/util@0.83.1": - version "0.83.1" - resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.83.1.tgz#cc7511b03164d658cf6e3262fce5a0fcb82edceb" - integrity sha512-amvjtl9dvrkxsoitXAly9W5NUaLIE3A2J2tWhBWIL1Z6DOFotfX7ytIosOIcPhJLZCtiXPHzMutQRv0G/MSMsA== +"@glimmer/syntax@^0.85.13": + version "0.85.13" + resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.85.13.tgz#841e6da0a555252f087145f83f92cf0d9cf76cb5" + integrity sha512-zMGkJh6JcHdCTx1emmBbhBrGO04gqD6CS5khmDwSJCIpVHnGH0Ejxp9rpnSMc5IW71/hFoQY6RlMgVYF2hrHhA== + dependencies: + "@glimmer/interfaces" "^0.85.13" + "@glimmer/util" "^0.85.13" + "@glimmer/wire-format" "^0.85.13" + "@handlebars/parser" "~2.0.0" + simple-html-tokenizer "^0.5.11" + +"@glimmer/util@0.84.3": + version "0.84.3" + resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.84.3.tgz#9ae0166982c0b48aa94b02d6ba8c2c81976ade4b" + integrity sha512-qFkh6s16ZSRuu2rfz3T4Wp0fylFj3HBsONGXQcrAdZjdUaIS6v3pNj6mecJ71qRgcym9Hbaq/7/fefIwECUiKw== dependencies: "@glimmer/env" "0.1.7" - "@glimmer/interfaces" "0.83.1" + "@glimmer/interfaces" "0.84.3" "@simple-dom/interface" "^1.4.0" -"@glimmer/validator@0.83.1", "@glimmer/validator@^0.83.0": - version "0.83.1" - resolved "https://registry.yarnpkg.com/@glimmer/validator/-/validator-0.83.1.tgz#7578cb2284f728c8e9302c51fc6e7660b570ac54" - integrity sha512-LaILSNnQgDHZpaUsfjVndbS1JfVn0xdTlJdFJblPbhoVklOBSReZVekens3EQ6xOr3BC612sRm1hBnEPixOY6A== +"@glimmer/util@^0.85.13": + version "0.85.13" + resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.85.13.tgz#a17824e5fd91e4e3f3847f38f600ecd3c1508dad" + integrity sha512-ogj65iukNKEPPqQ2bOD6CLsqxsFwmiGvTQbAsg1eh1MoPjxhNZMpLsT5CdQ10XE7yUALHGJ71SwxBSpAOGDmxg== + dependencies: + "@glimmer/env" "0.1.7" + "@glimmer/interfaces" "^0.85.13" + +"@glimmer/validator@0.84.3", "@glimmer/validator@^0.84.3": + version "0.84.3" + resolved "https://registry.yarnpkg.com/@glimmer/validator/-/validator-0.84.3.tgz#cd83b7f9ab78953f23cc11a32d83d7f729c54df2" + integrity sha512-RTBV4TokUB0vI31UC7ikpV7lOYpWUlyqaKV//pRC4pexYMlmqnVhkFrdiimB/R1XyNdUOQUmnIAcdic39NkbhQ== dependencies: "@glimmer/env" "^0.1.7" - "@glimmer/global-context" "0.83.1" + "@glimmer/global-context" "0.84.3" + +"@glimmer/wire-format@^0.85.13": + version "0.85.13" + resolved "https://registry.yarnpkg.com/@glimmer/wire-format/-/wire-format-0.85.13.tgz#a8df8c44646b8f0d09dda187ac64f45c33904b63" + integrity sha512-q6bHPfjSYE9jH27L75lUzyhSpBA+iONzsJVXewdwO4GdYYCC4s+pfUaJg7ZYNFDcHDuVKUcLhBb/NICDzMA5Uw== + dependencies: + "@glimmer/interfaces" "^0.85.13" + "@glimmer/util" "^0.85.13" "@handlebars/parser@~2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@handlebars/parser/-/parser-2.0.0.tgz#5e8b7298f31ff8f7b260e6b7363c7e9ceed7d9c5" integrity sha512-EP9uEDZv/L5Qh9IWuMUGJRfwhXJ4h1dqKTT4/3+tY0eu7sPis7xh23j61SYUnNF4vqCQvvUXpDo9Bh/+q1zASA== -"@humanwhocodes/config-array@^0.11.8": - version "0.11.8" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" - integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== +"@humanwhocodes/config-array@^0.11.13": + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": @@ -444,18 +490,19 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" + integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== -"@jridgewell/gen-mapping@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" - integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== +"@jridgewell/gen-mapping@^0.3.0": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== dependencies: - "@jridgewell/set-array" "^1.0.0" + "@jridgewell/set-array" "^1.0.1" "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" "@jridgewell/gen-mapping@^0.3.2": version "0.3.2" @@ -476,7 +523,7 @@ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== -"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": +"@jridgewell/set-array@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== @@ -507,17 +554,17 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" -"@lint-todo/utils@^13.0.3": - version "13.1.0" - resolved "https://registry.yarnpkg.com/@lint-todo/utils/-/utils-13.1.0.tgz#bb99b479e357f20fbf5fa200c59cafda2a02f849" - integrity sha512-uzcZPIPH7hcs+hKMiHfp58MosJpI9sTTgl1pGYau4zq34q1ppswJ6nLeohv/cDhqEBrHjtvldt8zDnVJXRvBlA== +"@lint-todo/utils@^13.1.1": + version "13.1.1" + resolved "https://registry.yarnpkg.com/@lint-todo/utils/-/utils-13.1.1.tgz#5c054d61ee037b9e552add118264771122cc1166" + integrity sha512-F5z53uvRIF4dYfFfJP3a2Cqg+4P1dgJchJsFnsZE0eZp0LK8X7g2J0CsJHRgns+skpXOlM7n5vFGwkWCWj8qJg== dependencies: - "@types/eslint" "^7.2.13" + "@types/eslint" "^8.4.9" find-up "^5.0.0" fs-extra "^9.1.0" proper-lockfile "^4.1.2" slash "^3.0.0" - tslib "^2.4.0" + tslib "^2.4.1" upath "^2.0.1" "@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": @@ -553,10 +600,10 @@ resolved "https://registry.yarnpkg.com/@simple-dom/interface/-/interface-1.4.0.tgz#e8feea579232017f89b0138e2726facda6fbb71f" integrity sha512-l5qumKFWU0S+4ZzMaLXFU8tQZsicHEMEyAxI5kDFGhJsRqDwe0a7/iPA/GdxlGyDKseQQAgIz5kzU7eXTrlSpA== -"@types/eslint@^7.2.13": - version "7.29.0" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.29.0.tgz#e56ddc8e542815272720bb0b4ccc2aff9c3e1c78" - integrity sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng== +"@types/eslint@^8.4.9": + version "8.56.2" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.2.tgz#1c72a9b794aa26a8b94ad26d5b9aa51c8a6384bb" + integrity sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw== dependencies: "@types/estree" "*" "@types/json-schema" "*" @@ -581,17 +628,43 @@ resolved "https://registry.yarnpkg.com/@types/symlink-or-copy/-/symlink-or-copy-1.2.0.tgz#4151a81b4052c80bc2becbae09f3a9ec010a9c7a" integrity sha512-Lja2xYuuf2B3knEsga8ShbOdsfNOtzT73GyJmZyY7eGl2+ajOqrs8yM5ze0fsSoYwvA6bw7/Qr7OZ7PEEmYwWg== +"@typescript-eslint/scope-manager@^6.15.0": + version "6.19.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.19.0.tgz#b6d2abb825b29ab70cb542d220e40c61c1678116" + integrity sha512-dO1XMhV2ehBI6QN8Ufi7I10wmUovmLU0Oru3n5LVlM2JuzB4M+dVphCPLkVpKvGij2j/pHBWuJ9piuXx+BhzxQ== + dependencies: + "@typescript-eslint/types" "6.19.0" + "@typescript-eslint/visitor-keys" "6.19.0" + +"@typescript-eslint/types@6.19.0": + version "6.19.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.19.0.tgz#689b0498c436272a6a2059b09f44bcbd90de294a" + integrity sha512-lFviGV/vYhOy3m8BJ/nAKoAyNhInTdXpftonhWle66XHAtT1ouBlkjL496b5H5hb8dWXHwtypTqgtb/DEa+j5A== + +"@typescript-eslint/visitor-keys@6.19.0": + version "6.19.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.0.tgz#4565e0ecd63ca1f81b96f1dd76e49f746c6b2b49" + integrity sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ== + dependencies: + "@typescript-eslint/types" "6.19.0" + eslint-visitor-keys "^3.4.1" + +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^8.8.0: - version "8.8.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" - integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== +acorn@^8.9.0: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== -ajv@^6.10.0, ajv@^6.12.4: +ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -625,12 +698,20 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -aria-query@^5.0.2: - version "5.1.3" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" - integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== +aria-query@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" + integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== dependencies: - deep-equal "^2.0.5" + dequal "^2.0.3" + +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" array-equal@^1.0.0: version "1.0.0" @@ -642,6 +723,19 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +arraybuffer.prototype.slice@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" + integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-array-buffer "^3.0.2" + is-shared-array-buffer "^1.0.2" + async-disk-cache@^1.2.1: version "1.3.5" resolved "https://registry.yarnpkg.com/async-disk-cache/-/async-disk-cache-1.3.5.tgz#cc6206ed79bb6982b878fc52e0505e4f52b62a02" @@ -655,6 +749,19 @@ async-disk-cache@^1.2.1: rsvp "^3.0.18" username-sync "^1.0.2" +async-disk-cache@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/async-disk-cache/-/async-disk-cache-2.1.0.tgz#e0f37b187ed8c41a5991518a9556d206ae2843a2" + integrity sha512-iH+boep2xivfD9wMaZWkywYIURSmsL96d6MoqrC94BnGSvXE4Quf8hnJiHGFYhw/nLeIa1XyRaf4vvcvkwAefg== + dependencies: + debug "^4.1.1" + heimdalljs "^0.2.3" + istextorbinary "^2.5.1" + mkdirp "^0.5.0" + rimraf "^3.0.0" + rsvp "^4.8.5" + username-sync "^1.0.2" + async-promise-queue@^1.0.3, async-promise-queue@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/async-promise-queue/-/async-promise-queue-1.0.5.tgz#cb23bce9fce903a133946a700cc85f27f09ea49d" @@ -685,6 +792,37 @@ babel-import-util@^0.2.0: resolved "https://registry.yarnpkg.com/babel-import-util/-/babel-import-util-0.2.0.tgz#b468bb679919601a3570f9e317536c54f2862e23" integrity sha512-CtWYYHU/MgK88rxMrLfkD356dApswtR/kWZ/c6JifG1m10e7tBBrs/366dFzWMAoqYmG5/JSh+94tUSpIwh+ag== +babel-import-util@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/babel-import-util/-/babel-import-util-2.0.1.tgz#263a2963ee9208428c04f05326c6ea32b2206ac6" + integrity sha512-N1ZfNprtf/37x0R05J0QCW/9pCAcuI+bjZIK9tlu0JEkwEST7ssdD++gxHRbD58AiG5QE5OuNYhRoEFsc1wESw== + +babel-plugin-ember-modules-api-polyfill@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-ember-modules-api-polyfill/-/babel-plugin-ember-modules-api-polyfill-3.5.0.tgz#27b6087fac75661f779f32e60f94b14d0e9f6965" + integrity sha512-pJajN/DkQUnStw0Az8c6khVcMQHgzqWr61lLNtVeu0g61LRW0k9jyK7vaedrHDWGe/Qe8sxG5wpiyW9NsMqFzA== + dependencies: + ember-rfc176-data "^0.3.17" + +babel-plugin-ember-template-compilation@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/babel-plugin-ember-template-compilation/-/babel-plugin-ember-template-compilation-2.2.1.tgz#81ad03f572e94bda92ebc2c0005d5179e3f7c980" + integrity sha512-alinprIQcLficqkuIyeKKfD4HQOpMOiHK6pt6Skj/yjoPoQYBuwAJ2BoPAlRe9k/URPeVkpMefbN3m6jEp7RsA== + dependencies: + "@glimmer/syntax" "^0.84.3" + babel-import-util "^2.0.0" + +babel-plugin-htmlbars-inline-precompile@^5.3.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/babel-plugin-htmlbars-inline-precompile/-/babel-plugin-htmlbars-inline-precompile-5.3.1.tgz#5ba272e2e4b6221522401f5f1d98a73b1de38787" + integrity sha512-QWjjFgSKtSRIcsBhJmEwS2laIdrA6na8HAlc/pEAhjHgQsah/gMiBFRZvbQTy//hWxR4BMwV7/Mya7q5H8uHeA== + dependencies: + babel-plugin-ember-modules-api-polyfill "^3.5.0" + line-column "^1.0.2" + magic-string "^0.25.7" + parse-static-imports "^1.1.0" + string.prototype.matchall "^4.0.5" + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -695,7 +833,7 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -"binaryextensions@1 || 2": +"binaryextensions@1 || 2", binaryextensions@^2.1.2: version "2.3.0" resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.3.0.tgz#1d269cbf7e6243ea886aa41453c3651ccbe13c22" integrity sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg== @@ -776,6 +914,25 @@ broccoli-merge-trees@^3.0.1: broccoli-plugin "^1.3.0" merge-trees "^2.0.0" +broccoli-node-api@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/broccoli-node-api/-/broccoli-node-api-1.7.0.tgz#391aa6edecd2a42c63c111b4162956b2fa288cb6" + integrity sha512-QIqLSVJWJUVOhclmkmypJJH9u9s/aWH4+FH6Q6Ju5l+Io4dtwqdPUNmDfw40o6sxhbZHhqGujDJuHTML1wG8Yw== + +broccoli-node-info@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/broccoli-node-info/-/broccoli-node-info-2.2.0.tgz#feb01c13020792f429e01d7f7845dc5b3a7932b3" + integrity sha512-VabSGRpKIzpmC+r+tJueCE5h8k6vON7EIMMWu6d/FyPdtijwLQ7QvzShEw+m3mHoDzUaj/kiZsDYrS8X2adsBg== + +broccoli-output-wrapper@^3.2.5: + version "3.2.5" + resolved "https://registry.yarnpkg.com/broccoli-output-wrapper/-/broccoli-output-wrapper-3.2.5.tgz#514b17801c92922a2c2f87fd145df2a25a11bc5f" + integrity sha512-bQAtwjSrF4Nu0CK0JOy5OZqw9t5U0zzv2555EA/cF8/a8SLDTIetk9UgrtMVw7qKLKdSpOZ2liZNeZZDaKgayw== + dependencies: + fs-extra "^8.1.0" + heimdalljs-logger "^0.1.10" + symlink-or-copy "^1.2.0" + broccoli-persistent-filter@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/broccoli-persistent-filter/-/broccoli-persistent-filter-2.3.1.tgz#4a052e0e0868b344c3a2977e35a3d497aa9eca72" @@ -796,6 +953,23 @@ broccoli-persistent-filter@^2.3.0: sync-disk-cache "^1.3.3" walk-sync "^1.0.0" +broccoli-persistent-filter@^3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/broccoli-persistent-filter/-/broccoli-persistent-filter-3.1.3.tgz#aca815bf3e3b0247bd0a7b567fdb0d0e08c99cc2" + integrity sha512-Q+8iezprZzL9voaBsDY3rQVl7c7H5h+bvv8SpzCZXPZgfBFCbx7KFQ2c3rZR6lW5k4Kwoqt7jG+rZMUg67Gwxw== + dependencies: + async-disk-cache "^2.0.0" + async-promise-queue "^1.0.3" + broccoli-plugin "^4.0.3" + fs-tree-diff "^2.0.0" + hash-for-dep "^1.5.0" + heimdalljs "^0.2.1" + heimdalljs-logger "^0.1.7" + promise-map-series "^0.2.1" + rimraf "^3.0.0" + symlink-or-copy "^1.0.1" + sync-disk-cache "^2.0.0" + broccoli-plugin@^1.0.0, broccoli-plugin@^1.2.1, broccoli-plugin@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/broccoli-plugin/-/broccoli-plugin-1.3.1.tgz#a26315732fb99ed2d9fb58f12a1e14e986b4fabd" @@ -816,6 +990,19 @@ broccoli-plugin@^2.1.0: rimraf "^2.3.4" symlink-or-copy "^1.1.8" +broccoli-plugin@^4.0.3: + version "4.0.7" + resolved "https://registry.yarnpkg.com/broccoli-plugin/-/broccoli-plugin-4.0.7.tgz#dd176a85efe915ed557d913744b181abe05047db" + integrity sha512-a4zUsWtA1uns1K7p9rExYVYG99rdKeGRymW0qOCNkvDPHQxVi3yVyJHhQbM3EZwdt2E0mnhr5e0c/bPpJ7p3Wg== + dependencies: + broccoli-node-api "^1.7.0" + broccoli-output-wrapper "^3.2.5" + fs-merger "^3.2.1" + promise-map-series "^0.3.0" + quick-temp "^0.1.8" + rimraf "^3.0.2" + symlink-or-copy "^1.3.1" + broccoli-stew@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/broccoli-stew/-/broccoli-stew-3.0.0.tgz#fd1d19d162ad9490b42e5c563b78c26eb1e80b95" @@ -836,15 +1023,15 @@ broccoli-stew@^3.0.0: symlink-or-copy "^1.2.0" walk-sync "^1.1.3" -browserslist@^4.21.3: - version "4.21.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" - integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== +browserslist@^4.22.2: + version "4.22.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" + integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== dependencies: - caniuse-lite "^1.0.30001400" - electron-to-chromium "^1.4.251" - node-releases "^2.0.6" - update-browserslist-db "^1.0.9" + caniuse-lite "^1.0.30001565" + electron-to-chromium "^1.4.601" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" buffer@^5.5.0: version "5.7.1" @@ -862,6 +1049,15 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" +call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== + dependencies: + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -874,12 +1070,12 @@ can-symlink@^1.0.0: dependencies: tmp "0.0.28" -caniuse-lite@^1.0.30001400: - version "1.0.30001441" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001441.tgz#987437b266260b640a23cd18fbddb509d7f69f3e" - integrity sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg== +caniuse-lite@^1.0.30001565: + version "1.0.30001576" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz#893be772cf8ee6056d6c1e2d07df365b9ec0a5c4" + integrity sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg== -chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -888,7 +1084,7 @@ chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -896,10 +1092,15 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -ci-info@^3.4.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.7.1.tgz#708a6cdae38915d597afdf3b145f2f8e1ff55f3f" - integrity sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w== +chalk@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" + integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== + +ci-info@^3.8.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== clean-up-path@^1.0.0: version "1.0.0" @@ -971,10 +1172,20 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -convert-source-map@^1.7.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== +content-tag@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/content-tag/-/content-tag-1.2.2.tgz#8cbc3cdb9957a81f7c425b138e334330dd6fd78d" + integrity sha512-9guqKIx2H+78N17otBpl8yLZbQGL5q1vBO/jDb3gF2JjixtcVpC62jDUNxjVMNoaZ09oxRX84ZOD6VX02qkVvg== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +core-js@^3.4.1: + version "3.35.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.35.0.tgz#58e651688484f83c34196ca13f099574ee53d6b4" + integrity sha512-ntakECeqg81KqMueeGJ79Q5ZgQNR+6eaE8sxGCx62zMbAIj65q+uYvatToew3m6eAGdU4gNZwpZ34NMe4GYswg== cross-spawn@^7.0.2: version "7.0.3" @@ -985,7 +1196,7 @@ cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" -css-tree@^2.0.4: +css-tree@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== @@ -993,10 +1204,12 @@ css-tree@^2.0.4: mdn-data "2.0.30" source-map-js "^1.0.1" -date-fns@^2.29.2: - version "2.29.3" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.3.tgz#27402d2fc67eb442b511b70bbdf98e6411cd68a8" - integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA== +date-fns@^2.30.0: + version "2.30.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" + integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== + dependencies: + "@babel/runtime" "^7.21.0" debug@^2.1.3, debug@^2.2.0, debug@^2.6.8: version "2.6.9" @@ -1005,34 +1218,13 @@ debug@^2.1.3, debug@^2.2.0, debug@^2.6.8: dependencies: ms "2.0.0" -debug@^4.1.0, debug@^4.1.1, debug@^4.3.2: +debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -deep-equal@^2.0.5: - version "2.1.0" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.1.0.tgz#5ba60402cf44ab92c2c07f3f3312c3d857a0e1dd" - integrity sha512-2pxgvWu3Alv1PoWEyVg7HS8YhGlUFUV7N5oOvfL6d+7xAmLSemMwv/c8Zv/i9KFzxV5Kt5CAvQc70fLwVuf4UA== - dependencies: - call-bind "^1.0.2" - es-get-iterator "^1.1.2" - get-intrinsic "^1.1.3" - is-arguments "^1.1.1" - is-date-object "^1.0.5" - is-regex "^1.1.4" - isarray "^2.0.5" - object-is "^1.1.5" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" - side-channel "^1.0.4" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.8" - deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -1045,6 +1237,15 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== + dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + define-properties@^1.1.3, define-properties@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" @@ -1053,6 +1254,20 @@ define-properties@^1.1.3, define-properties@^1.1.4: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +define-properties@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +dequal@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -1080,16 +1295,44 @@ editions@^1.1.1: resolved "https://registry.yarnpkg.com/editions/-/editions-1.3.4.tgz#3662cb592347c3168eb8e498a0ff73271d67f50b" integrity sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg== -electron-to-chromium@^1.4.251: - version "1.4.284" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" - integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== +editions@^2.2.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/editions/-/editions-2.3.1.tgz#3bc9962f1978e801312fbd0aebfed63b49bfe698" + integrity sha512-ptGvkwTvGdGfC0hfhKg0MT+TRLRKGtUiWGBInxOm5pz7ssADezahjCUaYuZ8Dr+C05FW0AECIIPt4WBxVINEhA== + dependencies: + errlop "^2.0.0" + semver "^6.3.0" + +electron-to-chromium@^1.4.601: + version "1.4.631" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.631.tgz#db2de2e1ce90fc1785b5c3f49fde594413270e05" + integrity sha512-g73CJB/rMPjdxpiNJYmV1homV7mLVUNe/R0z/HhqMfpjkt58FpYmkTjbtuv3zymdbTTJ+VOEqe1c+lkTjSOhmQ== ember-cli-babel-plugin-helpers@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ember-cli-babel-plugin-helpers/-/ember-cli-babel-plugin-helpers-1.1.1.tgz#5016b80cdef37036c4282eef2d863e1d73576879" integrity sha512-sKvOiPNHr5F/60NLd7SFzMpYPte/nnGkq/tMIfXejfKHIhaiIkYFqX8Z9UFTKWLLn+V7NOaby6niNPZUdvKCRw== +ember-cli-htmlbars@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/ember-cli-htmlbars/-/ember-cli-htmlbars-6.3.0.tgz#ac85f2bbd09788992ab7f9ca832cd044fb8e5798" + integrity sha512-N9Y80oZfcfWLsqickMfRd9YByVcTGyhYRnYQ2XVPVrp6jyUyOeRWmEAPh7ERSXpp8Ws4hr/JB9QVQrn/yZa+Ag== + dependencies: + "@ember/edition-utils" "^1.2.0" + babel-plugin-ember-template-compilation "^2.0.0" + babel-plugin-htmlbars-inline-precompile "^5.3.0" + broccoli-debug "^0.6.5" + broccoli-persistent-filter "^3.1.2" + broccoli-plugin "^4.0.3" + ember-cli-version-checker "^5.1.2" + fs-tree-diff "^2.0.1" + hash-for-dep "^1.5.1" + heimdalljs-logger "^0.1.10" + js-string-escape "^1.0.1" + semver "^7.3.4" + silent-error "^1.1.1" + walk-sync "^2.2.0" + ember-cli-version-checker@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/ember-cli-version-checker/-/ember-cli-version-checker-5.1.2.tgz#649c7b6404902e3b3d69c396e054cea964911ab0" @@ -1099,15 +1342,27 @@ ember-cli-version-checker@^5.1.2: semver "^7.3.4" silent-error "^1.1.1" -ember-rfc176-data@^0.3.15: - version "0.3.17" - resolved "https://registry.yarnpkg.com/ember-rfc176-data/-/ember-rfc176-data-0.3.17.tgz#d4fc6c33abd6ef7b3440c107a28e04417b49860a" - integrity sha512-EVzTTKqxv9FZbEh6Ktw56YyWRAA0MijKvl7H8C06wVF+8f/cRRz3dXxa4nkwjzyVwx4rzKGuIGq77hxJAQhWWw== +ember-eslint-parser@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/ember-eslint-parser/-/ember-eslint-parser-0.2.5.tgz#3c2cddcbf5134aebd0d88018357797a1b66a455d" + integrity sha512-ht3kkY6h+kWb6yW2OrqFG9TpC4pgdiTflDYMmJtHgZbbrIPD8fCeo8jVPBYCIO5HCHqxVwmT1H0rNlRRhWfUJg== + dependencies: + "@babel/eslint-parser" "^7.23.3" + "@glimmer/syntax" "^0.85.13" + "@typescript-eslint/scope-manager" "^6.15.0" + content-tag "^1.2.2" + eslint-scope "^7.2.2" + html-tags "^3.3.1" -ember-template-imports@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/ember-template-imports/-/ember-template-imports-3.4.0.tgz#c40757e2d41e289ce08c0fe80671000bf216e0ef" - integrity sha512-3Cwcj3NXA129g3ZhmrQ/nYOxksFonTmB/qxyaSNTHrLBSoc93UZys47hBz13DlcfoeSCCrNt2Qpq1j890I04PQ== +ember-rfc176-data@^0.3.17, ember-rfc176-data@^0.3.18: + version "0.3.18" + resolved "https://registry.yarnpkg.com/ember-rfc176-data/-/ember-rfc176-data-0.3.18.tgz#bb6fdcef49999981317ea81b6cc9210fb4108d65" + integrity sha512-JtuLoYGSjay1W3MQAxt3eINWXNYYQliK90tLwtb8aeCuQK8zKGCRbBodVIrkcTqshULMnRuTOS6t1P7oQk3g6Q== + +ember-template-imports@^3.4.1, ember-template-imports@^3.4.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/ember-template-imports/-/ember-template-imports-3.4.2.tgz#6cf7de7d4b8348a0fddf3aaec4947aa1211289e6" + integrity sha512-OS8TUVG2kQYYwP3netunLVfeijPoOKIs1SvPQRTNOQX4Pu8xGGBEZmrv0U1YTnQn12Eg+p6w/0UdGbUnITjyzw== dependencies: babel-import-util "^0.2.0" broccoli-stew "^3.0.0" @@ -1119,42 +1374,38 @@ ember-template-imports@^3.4.0: string.prototype.matchall "^4.0.6" validate-peer-dependencies "^1.1.0" -ember-template-lint-plugin-discourse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ember-template-lint-plugin-discourse/-/ember-template-lint-plugin-discourse-3.0.0.tgz#9212226e4d2f6dce2e35b480aaf240067d736246" - integrity sha512-4zi/qN+vXs0ZpJZrwdMfZ5hMThJbeVCFdof6iek4PmgIJhnlA0lzqIa1BrKpSKhr3ckd5K0rUMNcCAm0uKNOtg== - -ember-template-lint@^4.10.0: - version "4.18.2" - resolved "https://registry.yarnpkg.com/ember-template-lint/-/ember-template-lint-4.18.2.tgz#18e5e5fc6ea7301e7a075e024008271d2a781e1e" - integrity sha512-yI8kQ8IQ2x5HVq0tQAISXABOHr0Is5sAg6rwceO6M8CYozq7HMxUPEj0VbdcbyIE70SWw/8d24M1rBI4km544Q== +ember-template-lint@^5.13.0: + version "5.13.0" + resolved "https://registry.yarnpkg.com/ember-template-lint/-/ember-template-lint-5.13.0.tgz#e9e3864646b9e16ce77a2ec8a91a5204be85d4c4" + integrity sha512-AYxz9S9fVZfHPmTsymc7NwsD7FVmDUZyfC+KYpxDlK0wic7JSQx2FNQNqQSBFRLOuzn7VQ0/+1pX6DGqKDGswg== dependencies: - "@lint-todo/utils" "^13.0.3" - aria-query "^5.0.2" - chalk "^4.1.2" - ci-info "^3.4.0" - date-fns "^2.29.2" - ember-template-imports "^3.4.0" - ember-template-recast "^6.1.3" + "@lint-todo/utils" "^13.1.1" + aria-query "^5.3.0" + chalk "^5.3.0" + ci-info "^3.8.0" + date-fns "^2.30.0" + ember-template-imports "^3.4.2" + ember-template-recast "^6.1.4" + eslint-formatter-kakoune "^1.0.0" find-up "^6.3.0" fuse.js "^6.5.3" get-stdin "^9.0.0" - globby "^13.1.2" + globby "^13.2.2" is-glob "^4.0.3" - language-tags "^1.0.5" + language-tags "^1.0.8" micromatch "^4.0.5" - resolve "^1.22.1" + resolve "^1.22.3" v8-compile-cache "^2.3.0" - yargs "^17.5.1" + yargs "^17.7.2" -ember-template-recast@^6.1.3: - version "6.1.3" - resolved "https://registry.yarnpkg.com/ember-template-recast/-/ember-template-recast-6.1.3.tgz#1e9b256ee9da24bcaa7c213088d01f32afc88001" - integrity sha512-45lkfjrWlrMPlOd5rLFeQeePZwAvcS//x1x15kaiQTlqQdYWiYNXwbpWHqV+p9fXY6bEjl6EbyPhG/zBkgh8MA== +ember-template-recast@^6.1.4: + version "6.1.4" + resolved "https://registry.yarnpkg.com/ember-template-recast/-/ember-template-recast-6.1.4.tgz#e964c184adfd876878009f8aa0b84c95633fce20" + integrity sha512-fCh+rOK6z+/tsdkTbOE+e7f84P6ObnIRQrCCrnu21E4X05hPeradikIkRMhJdxn4NWrxitfZskQDd37TR/lsNQ== dependencies: - "@glimmer/reference" "^0.83.1" - "@glimmer/syntax" "^0.83.1" - "@glimmer/validator" "^0.83.0" + "@glimmer/reference" "^0.84.3" + "@glimmer/syntax" "^0.84.3" + "@glimmer/validator" "^0.84.3" async-promise-queue "^1.0.5" colors "^1.4.0" commander "^8.3.0" @@ -1162,7 +1413,7 @@ ember-template-recast@^6.1.3: ora "^5.4.0" slash "^3.0.0" tmp "^0.2.1" - workerpool "^6.1.5" + workerpool "^6.4.0" emoji-regex@^8.0.0: version "8.0.0" @@ -1174,6 +1425,11 @@ ensure-posix-path@^1.0.0, ensure-posix-path@^1.0.1, ensure-posix-path@^1.1.0: resolved "https://registry.yarnpkg.com/ensure-posix-path/-/ensure-posix-path-1.1.1.tgz#3c62bdb19fa4681544289edb2b382adc029179ce" integrity sha512-VWU0/zXzVbeJNXvME/5EmLuEj2TauvoaTz6aFYK1Z92JCBlDlZ3Gu0tuGR42kpW1754ywTs+QB0g5TP0oj9Zaw== +errlop@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/errlop/-/errlop-2.2.0.tgz#1ff383f8f917ae328bebb802d6ca69666a42d21b" + integrity sha512-e64Qj9+4aZzjzzFpZC7p5kmm/ccCrbLhAJplhsDXQFs87XTsXwOpH4s1Io2s90Tau/8r2j9f4l/thhDevRjzxw== + es-abstract@^1.19.0, es-abstract@^1.20.4: version "1.20.5" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.5.tgz#e6dc99177be37cacda5988e692c3fa8b218e95d2" @@ -1205,19 +1461,59 @@ es-abstract@^1.19.0, es-abstract@^1.20.4: string.prototype.trimstart "^1.0.6" unbox-primitive "^1.0.2" -es-get-iterator@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.2.tgz#9234c54aba713486d7ebde0220864af5e2b283f7" - integrity sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ== +es-abstract@^1.22.1: + version "1.22.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.0" - has-symbols "^1.0.1" - is-arguments "^1.1.0" - is-map "^2.0.2" - is-set "^2.0.2" - is-string "^1.0.5" - isarray "^2.0.5" + array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.2" + available-typed-arrays "^1.0.5" + call-bind "^1.0.5" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.2" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.12" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.1" + safe-array-concat "^1.0.1" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.8" + string.prototype.trimend "^1.0.7" + string.prototype.trimstart "^1.0.7" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.13" + +es-set-tostringtag@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" + integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== + dependencies: + get-intrinsic "^1.2.2" + has-tostringtag "^1.0.0" + hasown "^2.0.0" es-to-primitive@^1.2.1: version "1.2.1" @@ -1243,76 +1539,55 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-config-discourse@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/eslint-config-discourse/-/eslint-config-discourse-3.4.0.tgz#636a1824bca48c90aeac5bee2f8d7b993609191f" - integrity sha512-9jwu8GQPDOxAO0ByV6RbInu5r39HrFvbAHQRJ8YoGg2fuvHcX+p7fYcxEWj64LhmF4qD55cAGhN0Gmj10RVjoQ== - dependencies: - "@babel/core" "^7.18.5" - "@babel/eslint-parser" "^7.18.2" - "@babel/plugin-proposal-decorators" "^7.18.2" - ember-template-lint "^4.10.0" - ember-template-lint-plugin-discourse "^3.0.0" - eslint "^8.17.0" - eslint-plugin-discourse-ember latest - eslint-plugin-ember "^10.6.1" - eslint-plugin-lodash "^7.1.0" - eslint-plugin-node "^11.1.0" - eslint-plugin-sort-class-members "^1.14.1" - prettier "2.8.1" +eslint-formatter-kakoune@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/eslint-formatter-kakoune/-/eslint-formatter-kakoune-1.0.0.tgz#a95cc4fe1fbc06b84e0f2397e83f5f0b68340125" + integrity sha512-Uk/TVLt6Nf6Xoz7C1iYuZjOSdJxe5aaauGRke8JhKeJwD66Y61/pY2FjtLP04Ooq9PwV34bzrkKkU2UZ5FtDRA== -eslint-plugin-discourse-ember@latest: - version "0.0.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-discourse-ember/-/eslint-plugin-discourse-ember-0.0.3.tgz#69e5876c2ece38ab3d6c4a05f0a20a7dc4c21e37" - integrity sha512-EFwWU4FlOSLBa4RolKZL8QD1eGOnvSkACLt4Big+o1ZUIpW7gGvfnJPtxkbaQ4XmhtZ5HetYt6862vVqhUMv9A== +eslint-plugin-decorator-position@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-decorator-position/-/eslint-plugin-decorator-position-5.0.2.tgz#c96f46d8ef0f7dbd519ff91a67ccc4b6ba30693b" + integrity sha512-wFcRfrB9zljOP1n5udg16h6ITX1jG8cnUvuFVtIqVxw5O9BTOXFHB9hvsTaqpb8JFX2dq19fH3i/ipUeFSF87w== dependencies: - requireindex "~1.1.0" + "@babel/core" "^7.18.6" + "@babel/plugin-proposal-decorators" "^7.18.6" + "@ember-data/rfc395-data" "^0.0.4" + ember-rfc176-data "^0.3.17" + snake-case "^3.0.4" -eslint-plugin-ember@^10.6.1: - version "10.6.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-ember/-/eslint-plugin-ember-10.6.1.tgz#04ea84cc82307f64a2faa4f2855b30e5ebf9f722" - integrity sha512-R+TN3jwhYQ2ytZCA1VkfJDZSGgHFOHjsHU1DrBlRXYRepThe56PpuGxywAyDvQ7inhoAz3e6G6M60PzpvjzmNg== +eslint-plugin-ember@^12.0.0: + version "12.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-ember/-/eslint-plugin-ember-12.0.0.tgz#e53df2865bde1af47c218ad65dcf35f4dbebb7b0" + integrity sha512-+GQTzL925GeKM8lUmSVskc3HqSspz7UwvW9TV0h3Z9BoSxki0qLe0RN4dfwQBxirpHu1+/4b1tLs2BKu3UEOXQ== dependencies: "@ember-data/rfc395-data" "^0.0.4" - css-tree "^2.0.4" - ember-rfc176-data "^0.3.15" + css-tree "^2.3.1" + ember-eslint-parser "^0.2.5" + ember-rfc176-data "^0.3.18" eslint-utils "^3.0.0" - estraverse "^5.2.0" + estraverse "^5.3.0" + lodash.camelcase "^4.3.0" lodash.kebabcase "^4.1.1" requireindex "^1.2.0" snake-case "^3.0.3" -eslint-plugin-es@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893" - integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== +eslint-plugin-qunit@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-qunit/-/eslint-plugin-qunit-8.0.1.tgz#4969c2a5a13c7362cee1b38a2c0c06b60437a931" + integrity sha512-3bFOPryXoQOez95oP/JfWTxHBc/bgDQQZqTuv9uYTwH5sdIvSM2TES1iHDcy/F/LvqiqIpscDAOPAjlqSCnNPg== dependencies: - eslint-utils "^2.0.0" - regexpp "^3.0.0" + eslint-utils "^3.0.0" + requireindex "^1.2.0" -eslint-plugin-lodash@^7.1.0: - version "7.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-lodash/-/eslint-plugin-lodash-7.4.0.tgz#14a761547f126c92ff56789662a20a44f8bb6290" - integrity sha512-Tl83UwVXqe1OVeBRKUeWcfg6/pCW1GTRObbdnbEJgYwjxp5Q92MEWQaH9+dmzbRt6kvYU1Mp893E79nJiCSM8A== - dependencies: - lodash "^4.17.21" +eslint-plugin-simple-import-sort@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-10.0.0.tgz#cc4ceaa81ba73252427062705b64321946f61351" + integrity sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw== -eslint-plugin-node@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d" - integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== - dependencies: - eslint-plugin-es "^3.0.0" - eslint-utils "^2.0.0" - ignore "^5.1.1" - minimatch "^3.0.4" - resolve "^1.10.1" - semver "^6.1.0" - -eslint-plugin-sort-class-members@^1.14.1: - version "1.16.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-sort-class-members/-/eslint-plugin-sort-class-members-1.16.0.tgz#e47596d867a57713571f040024c03fe674dec3fc" - integrity sha512-8l0IqUmoupk9PvO5D4I5zJqirVe9sax5Hpfv9xQmnrSpLYkc8BSYGnUjuHGMSSe4jKuC73NIr38kQv1tPbO+Xg== +eslint-plugin-sort-class-members@^1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-sort-class-members/-/eslint-plugin-sort-class-members-1.19.0.tgz#9ad7a674c4cb477fceaddb8162515372d381c733" + integrity sha512-YayvASA1bavdPeRU9FMPnale2+Oi3aMcHGVC5EUm9b671oxm7ahvR+q8BfsU2aV+KAFezNfu47VPgdZK6gwYPw== eslint-scope@5.1.1: version "5.1.1" @@ -1322,21 +1597,14 @@ eslint-scope@5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-utils@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - eslint-utils@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" @@ -1344,11 +1612,6 @@ eslint-utils@^3.0.0: dependencies: eslint-visitor-keys "^2.0.0" -eslint-visitor-keys@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" @@ -1359,64 +1622,68 @@ eslint-visitor-keys@^3.3.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== -eslint@^8.17.0: - version "8.31.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.31.0.tgz#75028e77cbcff102a9feae1d718135931532d524" - integrity sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA== +eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@^8.56.0: + version "8.56.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15" + integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== dependencies: - "@eslint/eslintrc" "^1.4.1" - "@humanwhocodes/config-array" "^0.11.8" + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.56.0" + "@humanwhocodes/config-array" "^0.11.13" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.4.0" - esquery "^1.4.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" find-up "^5.0.0" glob-parent "^6.0.2" globals "^13.19.0" - grapheme-splitter "^1.0.4" + graphemer "^1.4.0" ignore "^5.2.0" - import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" is-path-inside "^3.0.3" - js-sdsl "^4.1.4" js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.9.1" - regexpp "^3.2.0" + optionator "^0.9.3" strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" text-table "^0.2.0" -espree@^9.4.0: - version "9.4.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" - integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: - acorn "^8.8.0" + acorn "^8.9.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" + eslint-visitor-keys "^3.4.1" -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== dependencies: estraverse "^5.1.0" @@ -1432,7 +1699,7 @@ estraverse@^4.1.1: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -estraverse@^5.1.0, estraverse@^5.2.0: +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== @@ -1447,7 +1714,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.11, fast-glob@^3.2.9: +fast-glob@^3.2.9: version "3.2.12" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== @@ -1458,6 +1725,17 @@ fast-glob@^3.2.11, fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" +fast-glob@^3.3.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -1532,7 +1810,7 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" -fs-extra@^8.0.1: +fs-extra@^8.0.1, fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== @@ -1551,6 +1829,17 @@ fs-extra@^9.1.0: jsonfile "^6.0.1" universalify "^2.0.0" +fs-merger@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/fs-merger/-/fs-merger-3.2.1.tgz#a225b11ae530426138294b8fbb19e82e3d4e0b3b" + integrity sha512-AN6sX12liy0JE7C2evclwoo0aCG3PFulLjrTLsJpWh/2mM+DinhpSGqYLbHBBbIW1PLRNcFhJG8Axtz8mQW3ug== + dependencies: + broccoli-node-api "^1.7.0" + broccoli-node-info "^2.1.0" + fs-extra "^8.0.1" + fs-tree-diff "^2.0.1" + walk-sync "^2.2.0" + fs-tree-diff@^0.5.2, fs-tree-diff@^0.5.3, fs-tree-diff@^0.5.6: version "0.5.9" resolved "https://registry.yarnpkg.com/fs-tree-diff/-/fs-tree-diff-0.5.9.tgz#a4ec6182c2f5bd80b9b83c8e23e4522e6f5fd946" @@ -1561,7 +1850,7 @@ fs-tree-diff@^0.5.2, fs-tree-diff@^0.5.3, fs-tree-diff@^0.5.6: path-posix "^1.0.0" symlink-or-copy "^1.1.8" -fs-tree-diff@^2.0.0: +fs-tree-diff@^2.0.0, fs-tree-diff@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fs-tree-diff/-/fs-tree-diff-2.0.1.tgz#343e4745ab435ec39ebac5f9059ad919cd034afa" integrity sha512-x+CfAZ/lJHQqwlD64pYM5QxWjzWhSjroaVsr8PW831zOApL55qPibed0c+xebaLWVr2BnHFoHdrwOv8pzt8R5A== @@ -1593,6 +1882,11 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + function.prototype.name@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" @@ -1603,7 +1897,17 @@ function.prototype.name@^1.1.5: es-abstract "^1.19.0" functions-have-names "^1.2.2" -functions-have-names@^1.2.2: +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + +functions-have-names@^1.2.2, functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== @@ -1623,7 +1927,7 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== @@ -1632,6 +1936,16 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@ has "^1.0.3" has-symbols "^1.0.3" +get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== + dependencies: + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + get-stdin@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-9.0.0.tgz#3983ff82e03d56f1b2ea0d3e60325f39d703a575" @@ -1694,6 +2008,20 @@ globals@^13.19.0: dependencies: type-fest "^0.20.2" +globals@^13.24.0: + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + globby@^11.0.3: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" @@ -1706,14 +2034,14 @@ globby@^11.0.3: merge2 "^1.4.1" slash "^3.0.0" -globby@^13.1.2: - version "13.1.3" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.3.tgz#f62baf5720bcb2c1330c8d4ef222ee12318563ff" - integrity sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw== +globby@^13.2.2: + version "13.2.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592" + integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w== dependencies: dir-glob "^3.0.1" - fast-glob "^3.2.11" - ignore "^5.2.0" + fast-glob "^3.3.0" + ignore "^5.2.4" merge2 "^1.4.1" slash "^4.0.0" @@ -1729,10 +2057,10 @@ graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" @@ -1756,7 +2084,19 @@ has-property-descriptors@^1.0.0: dependencies: get-intrinsic "^1.1.1" -has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: +has-property-descriptors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== + dependencies: + get-intrinsic "^1.2.2" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== @@ -1775,7 +2115,7 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -hash-for-dep@^1.5.0: +hash-for-dep@^1.5.0, hash-for-dep@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/hash-for-dep/-/hash-for-dep-1.5.1.tgz#497754b39bee2f1c4ade4521bfd2af0a7c1196e3" integrity sha512-/dQ/A2cl7FBPI2pO0CANkvuuVi/IFS5oTyJ0PsOb6jW6WbVW1js5qJXMJTNbWHXBIPdFTWFbabjB+mE0d+gelw== @@ -1787,7 +2127,14 @@ hash-for-dep@^1.5.0: resolve "^1.10.0" resolve-package-path "^1.0.11" -heimdalljs-logger@^0.1.7, heimdalljs-logger@^0.1.9: +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== + dependencies: + function-bind "^1.1.2" + +heimdalljs-logger@^0.1.10, heimdalljs-logger@^0.1.7, heimdalljs-logger@^0.1.9: version "0.1.10" resolved "https://registry.yarnpkg.com/heimdalljs-logger/-/heimdalljs-logger-0.1.10.tgz#90cad58aabb1590a3c7e640ddc6a4cd3a43faaf7" integrity sha512-pO++cJbhIufVI/fmB/u2Yty3KJD0TqNPecehFae0/eps0hkZ3b4Zc/PezUMOpYuHFQbA7FxHZxa305EhmjLj4g== @@ -1802,17 +2149,27 @@ heimdalljs@^0.2.0, heimdalljs@^0.2.1, heimdalljs@^0.2.3, heimdalljs@^0.2.5, heim dependencies: rsvp "~3.2.1" +html-tags@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce" + integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== + ieee754@^1.1.13: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@^5.1.1, ignore@^5.2.0: +ignore@^5.2.0: version "5.2.4" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== -import-fresh@^3.0.0, import-fresh@^3.2.1: +ignore@^5.2.4: + version "5.3.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" + integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== + +import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -1847,13 +2204,23 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" -is-arguments@^1.1.0, is-arguments@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== +internal-slot@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" + integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== + dependencies: + get-intrinsic "^1.2.2" + hasown "^2.0.0" + side-channel "^1.0.4" + +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== dependencies: call-bind "^1.0.2" - has-tostringtag "^1.0.0" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" is-bigint@^1.0.1: version "1.0.4" @@ -1875,6 +2242,13 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== +is-core-module@^2.13.0: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.0" + is-core-module@^2.9.0: version "2.11.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" @@ -1882,7 +2256,7 @@ is-core-module@^2.9.0: dependencies: has "^1.0.3" -is-date-object@^1.0.1, is-date-object@^1.0.5: +is-date-object@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== @@ -1911,11 +2285,6 @@ is-interactive@^1.0.0: resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== -is-map@^2.0.1, is-map@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" - integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== - is-negative-zero@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" @@ -1946,11 +2315,6 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-set@^2.0.1, is-set@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" - integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== - is-shared-array-buffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" @@ -1983,16 +2347,18 @@ is-typed-array@^1.1.10: gopd "^1.0.1" has-tostringtag "^1.0.0" +is-typed-array@^1.1.12, is-typed-array@^1.1.9: + version "1.1.12" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== + dependencies: + which-typed-array "^1.1.11" + is-unicode-supported@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -is-weakmap@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" - integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== - is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -2000,14 +2366,6 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" -is-weakset@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" - integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - isarray@1.0.0, isarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -2039,10 +2397,19 @@ istextorbinary@2.1.0: editions "^1.1.1" textextensions "1 || 2" -js-sdsl@^4.1.4: - version "4.2.0" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.2.0.tgz#278e98b7bea589b8baaf048c20aeb19eb7ad09d0" - integrity sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ== +istextorbinary@^2.5.1: + version "2.6.0" + resolved "https://registry.yarnpkg.com/istextorbinary/-/istextorbinary-2.6.0.tgz#60776315fb0fa3999add276c02c69557b9ca28ab" + integrity sha512-+XRlFseT8B3L9KyjxxLjfXSLMuErKDsd8DBNrsaxoViABMEZlOSCstwmw0qpoFX3+U6yWU1yhLudAe6/lETGGA== + dependencies: + binaryextensions "^2.1.2" + editions "^2.2.0" + textextensions "^2.5.0" + +js-string-escape@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" + integrity sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg== js-tokens@^4.0.0: version "4.0.0" @@ -2071,7 +2438,7 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json5@^2.2.1: +json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -2097,10 +2464,10 @@ language-subtag-registry@^0.3.20: resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== -language-tags@^1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.7.tgz#41cc248730f3f12a452c2e2efe32bc0bbce67967" - integrity sha512-bSytju1/657hFjgUzPAPqszxH62ouE8nQFoFaVlIQfne4wO/wXC9A4+m8jYve7YBBvi59eq0SUpcshvG8h5Usw== +language-tags@^1.0.8: + version "1.0.9" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.9.tgz#1ffdcd0ec0fafb4b1be7f8b11f306ad0f9c08777" + integrity sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA== dependencies: language-subtag-registry "^0.3.20" @@ -2134,6 +2501,11 @@ locate-path@^7.1.0: dependencies: p-locate "^6.0.0" +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + lodash.kebabcase@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" @@ -2144,7 +2516,7 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash@^4.17.14, lodash@^4.17.21: +lodash@^4.17.14: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -2192,6 +2564,14 @@ matcher-collection@^1.0.0, matcher-collection@^1.1.1: dependencies: minimatch "^3.0.2" +matcher-collection@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/matcher-collection/-/matcher-collection-2.0.1.tgz#90be1a4cf58d6f2949864f65bb3b0f3e41303b29" + integrity sha512-daE62nS2ZQsDg9raM0IlZzLmI2u+7ZapXBwdoeBUKAYERPDDIc0qNqA8E0Rp2D+gspKR7BgIFP52GeujaGXWeQ== + dependencies: + "@types/minimatch" "^3.0.3" + minimatch "^3.0.2" + mdn-data@2.0.30: version "2.0.30" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" @@ -2270,10 +2650,10 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" -node-releases@^2.0.6: - version "2.0.8" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.8.tgz#0f349cdc8fcfa39a92ac0be9bc48b7706292b9ae" - integrity sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A== +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== object-assign@^4.1.0: version "4.1.1" @@ -2285,13 +2665,10 @@ object-inspect@^1.12.2, object-inspect@^1.9.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== -object-is@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" +object-inspect@^1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== object-keys@^1.1.1: version "1.1.1" @@ -2322,17 +2699,17 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" - word-wrap "^1.2.3" ora@^5.4.0: version "5.4.1" @@ -2456,10 +2833,22 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prettier@2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.1.tgz#4e1fd11c34e2421bc1da9aea9bd8127cd0a35efc" - integrity sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg== +prettier-plugin-ember-template-tag@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/prettier-plugin-ember-template-tag/-/prettier-plugin-ember-template-tag-0.3.2.tgz#dcf4e402951d6766a9880308ea6a405c9ea5a5f1" + integrity sha512-L/15ujsvuOpuIB9y9XJJs/QOPgdot76T0U1Q34C19igS1lsaL/cdRw8rXIVC5Z2x362yZI33Qodo//7kK7ItkA== + dependencies: + "@babel/core" "^7.20.12" + "@glimmer/syntax" "^0.84.2" + ember-cli-htmlbars "^6.2.0" + ember-template-imports "^3.4.1" + prettier "^2.8.3" + ts-replace-all "^1.0.0" + +prettier@^2.8.3, prettier@^2.8.8: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== promise-map-series@^0.2.1: version "0.2.3" @@ -2468,6 +2857,11 @@ promise-map-series@^0.2.1: dependencies: rsvp "^3.0.14" +promise-map-series@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/promise-map-series/-/promise-map-series-0.3.0.tgz#41873ca3652bb7a042b387d538552da9b576f8a1" + integrity sha512-3npG2NGhTc8BWBolLLf8l/92OxMGaRLbqvIh9wjCHhDXNvk4zsxaTaCpiCunW09qWPrN2zeNSNwRLVBrQQtutA== + proper-lockfile@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-4.1.2.tgz#c8b9de2af6b2f1601067f98e01ac66baa223141f" @@ -2487,7 +2881,7 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -quick-temp@^0.1.3, quick-temp@^0.1.5: +quick-temp@^0.1.3, quick-temp@^0.1.5, quick-temp@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/quick-temp/-/quick-temp-0.1.8.tgz#bab02a242ab8fb0dd758a3c9776b32f9a5d94408" integrity sha512-YsmIFfD9j2zaFwJkzI6eMG7y0lQP7YeWzgtFgNl38pGWZBSXJooZbOWwkcRot7Vt0Fg9L23pX0tqWU3VvLDsiA== @@ -2505,6 +2899,11 @@ readable-stream@^3.4.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + regexp.prototype.flags@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" @@ -2514,10 +2913,14 @@ regexp.prototype.flags@^1.4.3: define-properties "^1.1.3" functions-have-names "^1.2.2" -regexpp@^3.0.0, regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== +regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" + integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + set-function-name "^2.0.0" require-directory@^2.1.1: version "2.1.1" @@ -2529,11 +2932,6 @@ requireindex@^1.2.0: resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.2.0.tgz#3463cdb22ee151902635aa6c9535d4de9c2ef1ef" integrity sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww== -requireindex@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.1.0.tgz#e5404b81557ef75db6e49c5a72004893fe03e162" - integrity sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg== - resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -2555,7 +2953,7 @@ resolve-package-path@^3.1.0: path-root "^0.1.1" resolve "^1.17.0" -resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.1, resolve@^1.17.0, resolve@^1.22.1: +resolve@^1.10.0, resolve@^1.11.1, resolve@^1.17.0: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -2564,6 +2962,15 @@ resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.1, resolve@^1.17.0, resolve@^1.2 path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.22.3: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" @@ -2618,6 +3025,16 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +safe-array-concat@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" + integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== + dependencies: + call-bind "^1.0.5" + get-intrinsic "^1.2.2" + has-symbols "^1.0.3" + isarray "^2.0.5" + safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -2632,7 +3049,7 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.1.3" is-regex "^1.1.4" -semver@^6.1.0, semver@^6.3.0: +semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== @@ -2644,6 +3061,26 @@ semver@^7.3.2, semver@^7.3.4: dependencies: lru-cache "^6.0.0" +set-function-length@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.0.tgz#2f81dc6c16c7059bda5ab7c82c11f03a515ed8e1" + integrity sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w== + dependencies: + define-data-property "^1.1.1" + function-bind "^1.1.2" + get-intrinsic "^1.2.2" + gopd "^1.0.1" + has-property-descriptors "^1.0.1" + +set-function-name@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" + integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + dependencies: + define-data-property "^1.0.1" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.0" + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -2692,7 +3129,7 @@ slash@^4.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== -snake-case@^3.0.3: +snake-case@^3.0.3, snake-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== @@ -2724,6 +3161,21 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string.prototype.matchall@^4.0.5: + version "4.0.10" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" + integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + regexp.prototype.flags "^1.5.0" + set-function-name "^2.0.0" + side-channel "^1.0.4" + string.prototype.matchall@^4.0.6: version "4.0.8" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" @@ -2738,6 +3190,15 @@ string.prototype.matchall@^4.0.6: regexp.prototype.flags "^1.4.3" side-channel "^1.0.4" +string.prototype.trim@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + string.prototype.trimend@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" @@ -2747,6 +3208,15 @@ string.prototype.trimend@^1.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" +string.prototype.trimend@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + string.prototype.trimstart@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" @@ -2756,6 +3226,15 @@ string.prototype.trimstart@^1.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" +string.prototype.trimstart@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -2770,7 +3249,7 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -2794,7 +3273,7 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -symlink-or-copy@^1.0.0, symlink-or-copy@^1.0.1, symlink-or-copy@^1.1.8, symlink-or-copy@^1.2.0: +symlink-or-copy@^1.0.0, symlink-or-copy@^1.0.1, symlink-or-copy@^1.1.8, symlink-or-copy@^1.2.0, symlink-or-copy@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/symlink-or-copy/-/symlink-or-copy-1.3.1.tgz#9506dd64d8e98fa21dcbf4018d1eab23e77f71fe" integrity sha512-0K91MEXFpBUaywiwSSkmKjnGcasG/rVBXFLJz5DrgGabpYD6N+3yZrfD6uUIfpuTu65DZLHi7N8CizHc07BPZA== @@ -2810,12 +3289,23 @@ sync-disk-cache@^1.3.3: rimraf "^2.2.8" username-sync "^1.0.2" +sync-disk-cache@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/sync-disk-cache/-/sync-disk-cache-2.1.0.tgz#01e879edc41c34a01fcdda5b39d47dd496e154a6" + integrity sha512-vngT2JmkSapgq0z7uIoYtB9kWOOzMihAAYq/D3Pjm/ODOGMgS4r++B+OZ09U4hWR6EaOdy9eqQ7/8ygbH3wehA== + dependencies: + debug "^4.1.1" + heimdalljs "^0.2.6" + mkdirp "^0.5.0" + rimraf "^3.0.0" + username-sync "^1.0.2" + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -"textextensions@1 || 2": +"textextensions@1 || 2", textextensions@^2.5.0: version "2.6.0" resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-2.6.0.tgz#d7e4ab13fe54e32e08873be40d51b74229b00fc4" integrity sha512-49WtAWS+tcsy93dRt6P0P3AMD2m5PvXRhuEA0kaXos5ZLlujtYmpmFsB+QvWUSxE1ZsstmYXfQ7L40+EcQgpAQ== @@ -2857,11 +3347,23 @@ tree-sync@^1.2.2: quick-temp "^0.1.5" walk-sync "^0.3.3" -tslib@^2.0.3, tslib@^2.4.0: +ts-replace-all@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ts-replace-all/-/ts-replace-all-1.0.0.tgz#ef28283ccdb4da7d69fb03cf543e09e51711659b" + integrity sha512-6uBtdkw3jHXkPtx/e9xB/5vcngMm17CyJYsS2YZeQ+9FdRnt6Ev5g931Sg2p+dxbtMGoCm13m3ax/obicTZIkQ== + dependencies: + core-js "^3.4.1" + +tslib@^2.0.3: version "2.4.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== +tslib@^2.4.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -2874,6 +3376,45 @@ type-fest@^0.20.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== +typed-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" + integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-typed-array "^1.1.10" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" @@ -2907,10 +3448,10 @@ upath@^2.0.1: resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== -update-browserslist-db@^1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" - integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== +update-browserslist-db@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" + integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== dependencies: escalade "^3.1.1" picocolors "^1.0.0" @@ -2962,6 +3503,16 @@ walk-sync@^1.0.0, walk-sync@^1.1.3: ensure-posix-path "^1.1.0" matcher-collection "^1.1.1" +walk-sync@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/walk-sync/-/walk-sync-2.2.0.tgz#80786b0657fcc8c0e1c0b1a042a09eae2966387a" + integrity sha512-IC8sL7aB4/ZgFcGI2T1LczZeFWZ06b3zoHH7jBPyHxOtIIz1jppWHjjEXkOFvFojBVAK9pV7g47xOZ4LW3QLfg== + dependencies: + "@types/minimatch" "^3.0.3" + ensure-posix-path "^1.1.0" + matcher-collection "^2.0.0" + minimatch "^3.0.4" + wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" @@ -2980,27 +3531,16 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-collection@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" - integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== - dependencies: - is-map "^2.0.1" - is-set "^2.0.1" - is-weakmap "^2.0.1" - is-weakset "^2.0.1" - -which-typed-array@^1.1.8: - version "1.1.9" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" - integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== +which-typed-array@^1.1.11, which-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== dependencies: available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.4" for-each "^0.3.3" gopd "^1.0.1" has-tostringtag "^1.0.0" - is-typed-array "^1.1.10" which@^2.0.1: version "2.0.2" @@ -3009,15 +3549,10 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -word-wrap@^1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f" - integrity sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA== - -workerpool@^6.1.5: - version "6.3.1" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.3.1.tgz#80a9b76e70556acfb1457a3984f8637717f7cdee" - integrity sha512-0x7gJm1rhpn5SPG9NENOxPtbfUZZtK/qOg6gEdSqeDBA3dTeR91RJqSPjccPRCkhNfrnnl/dWxSSj5w9CtdzNA== +workerpool@^6.4.0: + version "6.5.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.5.1.tgz#060f73b39d0caf97c6db64da004cd01b4c099544" + integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA== wrap-ansi@^7.0.0: version "7.0.0" @@ -3053,10 +3588,10 @@ yargs-parser@^21.1.1: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^17.5.1: - version "17.6.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.2.tgz#2e23f2944e976339a1ee00f18c77fedee8332541" - integrity sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw== +yargs@^17.7.2: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: cliui "^8.0.1" escalade "^3.1.1"