diff --git a/.eslintrc.js b/.eslintrc.js index 3fc9fee3d..0f98516f8 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,12 +1,18 @@ /* eslint-env node */ module.exports = { root: true, - parser: 'babel-eslint', + parser: '@babel/eslint-parser', parserOptions: { ecmaVersion: 2018, sourceType: 'module', + allowImportExportEverywhere: false, ecmaFeatures: { + globalReturn: false, legacyDecorators: true + }, + requireConfigFile: false, + babelOptions: { + plugins: ['@babel/plugin-proposal-class-properties', ['@babel/plugin-proposal-decorators', {legacy: true}]] } }, plugins: [ diff --git a/app/components/gh-alerts.js b/app/components/gh-alerts.js index d23cfb66c..fec683ba0 100644 --- a/app/components/gh-alerts.js +++ b/app/components/gh-alerts.js @@ -11,5 +11,5 @@ export default class GhAlerts extends Component { @service notifications; @alias('notifications.alerts') - messages; + messages; } diff --git a/app/components/gh-basic-dropdown.js b/app/components/gh-basic-dropdown.js index 66d67f8f0..1ca6ec61a 100644 --- a/app/components/gh-basic-dropdown.js +++ b/app/components/gh-basic-dropdown.js @@ -2,7 +2,7 @@ import BasicDropdown from 'ember-basic-dropdown/components/basic-dropdown'; import {inject as service} from '@ember/service'; class GhBasicDropdown extends BasicDropdown { - @service dropdown + @service dropdown; constructor() { super(...arguments); diff --git a/app/components/gh-billing-update-button.js b/app/components/gh-billing-update-button.js index 1e3a7dfde..df80fe8d4 100644 --- a/app/components/gh-billing-update-button.js +++ b/app/components/gh-billing-update-button.js @@ -15,7 +15,7 @@ export default class GhBillingUpdateButton extends Component { subscription = null; @reads('billing.subscription.isActiveTrial') - showUpgradeButton; + showUpgradeButton; @action openBilling() { diff --git a/app/components/gh-cm-editor.js b/app/components/gh-cm-editor.js index 629608546..f460f280c 100644 --- a/app/components/gh-cm-editor.js +++ b/app/components/gh-cm-editor.js @@ -33,7 +33,7 @@ class CmEditorComponent extends Component { update = () => {}; @boundOneWay('value') - _value; // make sure a value exists + _value; // make sure a value exists didReceiveAttrs() { super.didReceiveAttrs(...arguments); @@ -77,7 +77,7 @@ class CmEditorComponent extends Component { scheduleOnce('afterRender', this, this._initCodeMirror); }) - initCodeMirror; + initCodeMirror; _initCodeMirror() { let options = this.getProperties('lineNumbers', 'lineWrapping', 'indentUnit', 'mode', 'theme', 'autofocus'); diff --git a/app/components/gh-date-time-picker.js b/app/components/gh-date-time-picker.js index ee3607059..b955e7383 100644 --- a/app/components/gh-date-time-picker.js +++ b/app/components/gh-date-time-picker.js @@ -32,10 +32,10 @@ export default class GhDateTimePicker extends Component { setTypedDateError() {} @reads('settings.timezone') - blogTimezone; + blogTimezone; @or('dateError', 'timeError') - hasError; + hasError; @computed('_date', '_scratchDate') get dateValue() { diff --git a/app/components/gh-launch-wizard/connect-stripe.js b/app/components/gh-launch-wizard/connect-stripe.js index e3b3bccc3..b60a97027 100644 --- a/app/components/gh-launch-wizard/connect-stripe.js +++ b/app/components/gh-launch-wizard/connect-stripe.js @@ -13,7 +13,6 @@ export default class GhLaunchWizardConnectStripeComponent extends Component { @service ghostPaths; @service settings; @service store; - @service settings; @tracked hasActiveStripeSubscriptions = false; @tracked showDisconnectStripeConnectModal = false; diff --git a/app/components/gh-member-activity-feed.js b/app/components/gh-member-activity-feed.js index 0f3c97448..dd7573653 100644 --- a/app/components/gh-member-activity-feed.js +++ b/app/components/gh-member-activity-feed.js @@ -19,7 +19,7 @@ class MemberActivity { iconClass: 'red-d2', tooltip: 'Email delivery failed' } - } + }; constructor(props) { Object.assign(this, props); diff --git a/app/components/gh-member-settings-form.js b/app/components/gh-member-settings-form.js index 1e2055fa2..8a127b0cb 100644 --- a/app/components/gh-member-settings-form.js +++ b/app/components/gh-member-settings-form.js @@ -7,12 +7,12 @@ import {task} from 'ember-concurrency'; import {tracked} from '@glimmer/tracking'; export default class extends Component { - @service membersUtils - @service ghostPaths - @service ajax - @service store - @service feature - @service settings + @service membersUtils; + @service ghostPaths; + @service ajax; + @service store; + @service feature; + @service settings; constructor(...args) { super(...args); diff --git a/app/components/gh-nav-menu/footer.js b/app/components/gh-nav-menu/footer.js index ee9a45b21..1b5eed526 100644 --- a/app/components/gh-nav-menu/footer.js +++ b/app/components/gh-nav-menu/footer.js @@ -13,10 +13,10 @@ export default class Footer extends Component { @service feature; @and('config.clientExtensions.dropdown', 'session.user.isOwnerOnly') - showDropdownExtension; + showDropdownExtension; @match('router.currentRouteName', /^settings/) - isSettingsRoute; + isSettingsRoute; // equivalent to "left: auto; right: -20px" userDropdownPosition(trigger, dropdown) { diff --git a/app/components/gh-nav-menu/main.js b/app/components/gh-nav-menu/main.js index 9fcfcb28b..8f5f63c36 100644 --- a/app/components/gh-nav-menu/main.js +++ b/app/components/gh-nav-menu/main.js @@ -34,27 +34,27 @@ export default class Main extends Component.extend(ShortcutsMixin) { shortcuts = null; @match('router.currentRouteName', /^settings\.integration/) - isIntegrationRoute; + isIntegrationRoute; // HACK: {{link-to}} should be doing this automatically but there appears to // be a bug in Ember that's preventing it from working immediately after login @equal('router.currentRouteName', 'site') - isOnSite; + isOnSite; @or('session.user.isAdmin', 'session.user.isEditor') - showTagsNavigation; + showTagsNavigation; @and('config.clientExtensions.menu', 'session.user.isOwnerOnly') - showMenuExtension; + showMenuExtension; @and('config.clientExtensions.script', 'session.user.isOwnerOnly') - showScriptExtension; + showScriptExtension; @reads('config.hostSettings.billing.enabled') - showBilling; + showBilling; @reads('settings.stripeConnectAccountId') - isStripeConnected; + isStripeConnected; init() { super.init(...arguments); @@ -123,7 +123,7 @@ export default class Main extends Component.extend(ShortcutsMixin) { return false; } }) - _loadMemberCountsTask; + _loadMemberCountsTask; _setIconStyle() { let icon = this.icon; diff --git a/app/components/gh-notifications.js b/app/components/gh-notifications.js index 3902b8d78..f90527bf3 100644 --- a/app/components/gh-notifications.js +++ b/app/components/gh-notifications.js @@ -11,5 +11,5 @@ export default class GhNotifications extends Component { @service notifications; @alias('notifications.notifications') - messages; + messages; } diff --git a/app/components/gh-portal-links.js b/app/components/gh-portal-links.js index 4b37fcec0..c667d8960 100644 --- a/app/components/gh-portal-links.js +++ b/app/components/gh-portal-links.js @@ -77,7 +77,7 @@ export default class GhPortalLinks extends Component { }); } }) - fetchProducts; + fetchProducts; @task(function* (id) { this.set('copiedPrice', id); @@ -90,7 +90,7 @@ export default class GhPortalLinks extends Component { copyTextToClipboard(data); yield timeout(this.isTesting ? 50 : 3000); }) - copyStaticLink; + copyStaticLink; @task(function* (interval) { this.set('copiedSignupInterval', interval); @@ -103,5 +103,5 @@ export default class GhPortalLinks extends Component { copyTextToClipboard(data); yield timeout(this.isTesting ? 50 : 3000); }) - copyProductSignupLink; + copyProductSignupLink; } diff --git a/app/components/gh-post-settings-menu.js b/app/components/gh-post-settings-menu.js index 2aa5852f4..a6d705bd4 100644 --- a/app/components/gh-post-settings-menu.js +++ b/app/components/gh-post-settings-menu.js @@ -25,43 +25,43 @@ export default class GhPostSettingsMenu extends Component { isViewingSubview = false; @alias('post.canonicalUrlScratch') - canonicalUrlScratch; + canonicalUrlScratch; @alias('post.customExcerptScratch') - customExcerptScratch; + customExcerptScratch; @alias('post.codeinjectionFootScratch') - codeinjectionFootScratch; + codeinjectionFootScratch; @alias('post.codeinjectionHeadScratch') - codeinjectionHeadScratch; + codeinjectionHeadScratch; @alias('post.metaDescriptionScratch') - metaDescriptionScratch; + metaDescriptionScratch; @alias('post.metaTitleScratch') - metaTitleScratch; + metaTitleScratch; @alias('post.ogDescriptionScratch') - ogDescriptionScratch; + ogDescriptionScratch; @alias('post.ogTitleScratch') - ogTitleScratch; + ogTitleScratch; @alias('post.twitterDescriptionScratch') - twitterDescriptionScratch; + twitterDescriptionScratch; @alias('post.twitterTitleScratch') - twitterTitleScratch; + twitterTitleScratch; @boundOneWay('post.slug') - slugValue; + slugValue; @boundOneWay('post.uuid') - uuidValue; + uuidValue; @or('metaDescriptionScratch', 'customExcerptScratch', 'post.excerpt') - seoDescription; + seoDescription; @or( 'ogDescriptionScratch', @@ -71,7 +71,7 @@ export default class GhPostSettingsMenu extends Component { 'settings.description', '' ) - facebookDescription; + facebookDescription; @or( 'post.ogImage', @@ -79,10 +79,10 @@ export default class GhPostSettingsMenu extends Component { 'settings.ogImage', 'settings.coverImage' ) - facebookImage; + facebookImage; @or('ogTitleScratch', 'seoTitle') - facebookTitle; + facebookTitle; @or( 'twitterDescriptionScratch', @@ -92,7 +92,7 @@ export default class GhPostSettingsMenu extends Component { 'settings.description', '' ) - twitterDescription; + twitterDescription; @or( 'post.twitterImage', @@ -100,24 +100,24 @@ export default class GhPostSettingsMenu extends Component { 'settings.twitterImage', 'settings.coverImage' ) - twitterImage; + twitterImage; @or('twitterTitleScratch', 'seoTitle') - twitterTitle; + twitterTitle; @or( 'session.user.isOwnerOnly', 'session.user.isAdminOnly', 'session.user.isEditor' ) - showVisibilityInput; + showVisibilityInput; @or( 'session.user.isOwnerOnly', 'session.user.isAdminOnly', 'session.user.isEditor' ) - showEmailNewsletter; + showEmailNewsletter; @computed('metaTitleScratch', 'post.titleScratch') get seoTitle() { diff --git a/app/components/gh-post-settings-menu/email.js b/app/components/gh-post-settings-menu/email.js index 8c1ef2c81..0618a31c8 100644 --- a/app/components/gh-post-settings-menu/email.js +++ b/app/components/gh-post-settings-menu/email.js @@ -26,16 +26,16 @@ export default class Email extends Component { close() {} @or('emailSubjectScratch', 'post.title') - emailSubject; + emailSubject; @alias('post.emailSubjectScratch') - emailSubjectScratch; + emailSubjectScratch; @oneWay('session.user.email') - testEmailAddress; + testEmailAddress; @not('mailgunIsEnabled') - mailgunError; + mailgunError; @computed( 'settings.{mailgunApiKey,mailgunDomain,mailgunBaseUrl}', @@ -109,7 +109,7 @@ export default class Email extends Component { } } }).drop()) - sendTestEmail; + sendTestEmail; @task(function* () { let {email} = this.post; @@ -136,5 +136,5 @@ export default class Email extends Component { return true; }) - retryEmail; + retryEmail; } diff --git a/app/components/gh-psm-tags-input.js b/app/components/gh-psm-tags-input.js index 63e9f7405..04a8950ed 100644 --- a/app/components/gh-psm-tags-input.js +++ b/app/components/gh-psm-tags-input.js @@ -20,7 +20,7 @@ export default class GhPsmTagsInput extends Component { // ignorePunctuation means the # in internal tag names is ignored return tagA.name.localeCompare(tagB.name, undefined, {ignorePunctuation: true}); }) - availableTags; + availableTags; @computed('availableTags.@each.name') get availableTagNames() { diff --git a/app/components/gh-psm-template-select.js b/app/components/gh-psm-template-select.js index ade754a9b..5bec64c7e 100644 --- a/app/components/gh-psm-template-select.js +++ b/app/components/gh-psm-template-select.js @@ -75,5 +75,5 @@ export default class GhPsmTemplateSelect extends Component { this.set('activeTheme', activeTheme); }) - loadActiveTheme; + loadActiveTheme; } diff --git a/app/components/gh-search-input.js b/app/components/gh-search-input.js index a0bb25be7..939280b1b 100644 --- a/app/components/gh-search-input.js +++ b/app/components/gh-search-input.js @@ -42,7 +42,7 @@ export default class GhSearchInputComponent extends Component { fields: ['slug', 'name'], idField: 'slug', titleField: 'name' - }] + }]; @action openSelected(selected) { diff --git a/app/components/gh-simplemde.js b/app/components/gh-simplemde.js index f4450e63a..466ece379 100644 --- a/app/components/gh-simplemde.js +++ b/app/components/gh-simplemde.js @@ -117,5 +117,5 @@ export default class GhSimplemde extends TextArea { this.onEditorInit(this._editor); }) - initSimpleMDE; + initSimpleMDE; } diff --git a/app/components/gh-timezone-select.js b/app/components/gh-timezone-select.js index b6786f055..44a4f86c3 100644 --- a/app/components/gh-timezone-select.js +++ b/app/components/gh-timezone-select.js @@ -18,7 +18,7 @@ export default class GhTimezoneSelect extends Component { update = () => {}; @mapBy('availableTimezones', 'name') - availableTimezoneNames; + availableTimezoneNames; @computed('timezone', 'availableTimezoneNames') get hasTimezoneOverride() { diff --git a/app/components/gh-token-input/tag-token.js b/app/components/gh-token-input/tag-token.js index fbe47022b..675b4a047 100644 --- a/app/components/gh-token-input/tag-token.js +++ b/app/components/gh-token-input/tag-token.js @@ -10,7 +10,7 @@ import {readOnly} from '@ember/object/computed'; @classNameBindings('internal:tag-token--internal') export default class TagToken extends DraggableObject { @readOnly('content.isInternal') - internal; + internal; @computed('idx', 'internal') get primary() { diff --git a/app/components/members/filter.js b/app/components/members/filter.js index 3a5091af1..482190cd0 100644 --- a/app/components/members/filter.js +++ b/app/components/members/filter.js @@ -118,7 +118,7 @@ class Filter { } export default class MembersFilter extends Component { - @service session + @service session; @tracked filters = A([ new Filter({ diff --git a/app/components/modal-custom-view-form.js b/app/components/modal-custom-view-form.js index 62485fedb..4c469da24 100644 --- a/app/components/modal-custom-view-form.js +++ b/app/components/modal-custom-view-form.js @@ -35,7 +35,7 @@ export default class ModalCustomViewForm extends ModalComponent { this.send('closeModal'); return view; }) - saveTask; + saveTask; @task(function* () { let view = yield this.customViews.deleteViewTask.perform(this.model); @@ -44,7 +44,7 @@ export default class ModalCustomViewForm extends ModalComponent { this.router.transitionTo(routeName, {queryParams: resetQueryParams(routeName)}); return view; }) - deleteTask; + deleteTask; // this is a hack to get around radio buttons not working with liquid-fire. // The DOM is duplicated whilst animating-in so browsers end up setting the @@ -54,5 +54,5 @@ export default class ModalCustomViewForm extends ModalComponent { yield timeout(200); this.set('delayedModelColor', this.model.color); }) - _setDelayedModelColor; + _setDelayedModelColor; } diff --git a/app/components/modal-free-membership-settings.js b/app/components/modal-free-membership-settings.js index 603b8365b..0104f5595 100644 --- a/app/components/modal-free-membership-settings.js +++ b/app/components/modal-free-membership-settings.js @@ -41,7 +41,7 @@ export default class ModalFreeMembershipSettings extends ModalBase { validateFreeSignupRedirect() { return this._validateSignupRedirect(this.freeSignupRedirect, 'membersFreeSignupRedirect'); } - } + }; @task({drop: true}) *save() { diff --git a/app/components/modal-import-members/csv-file-select.js b/app/components/modal-import-members/csv-file-select.js index ac672fa1d..7e03fbcc1 100644 --- a/app/components/modal-import-members/csv-file-select.js +++ b/app/components/modal-import-members/csv-file-select.js @@ -4,12 +4,12 @@ import {action} from '@ember/object'; import {tracked} from '@glimmer/tracking'; export default class CsvFileSelect extends Component { - labelText = 'Select or drop a CSV file' + labelText = 'Select or drop a CSV file'; @tracked - error = null + error = null; @tracked - dragClass = null + dragClass = null; /* constructor(...args) { diff --git a/app/components/modal-member-product.js b/app/components/modal-member-product.js index 2632a1230..d3a943a8f 100644 --- a/app/components/modal-member-product.js +++ b/app/components/modal-member-product.js @@ -105,5 +105,5 @@ export default class ModalMemberProduct extends ModalComponent { closeModal() { this.close(); } - } + }; } diff --git a/app/components/modal-product-price.js b/app/components/modal-product-price.js index 9a2ccb1cb..079125a7e 100644 --- a/app/components/modal-product-price.js +++ b/app/components/modal-product-price.js @@ -139,5 +139,5 @@ export default class ModalProductPrice extends ModalBase { closeModal() { this.close(); } - } + }; } diff --git a/app/components/modal-product.js b/app/components/modal-product.js index 29ec086df..9e41a43b3 100644 --- a/app/components/modal-product.js +++ b/app/components/modal-product.js @@ -32,7 +32,7 @@ export default class ModalProductPrice extends ModalBase { @tracked stripePlanError = ''; @tracked benefits = emberA([]); @tracked newBenefit = null; - @tracked welcomePageURL + @tracked welcomePageURL; confirm() {} @@ -99,6 +99,7 @@ export default class ModalProductPrice extends ModalBase { return this.config.get('blogUrl'); } + // eslint-disable-next-line no-dupe-class-members get welcomePageURL() { return this.model.product.welcomePageURL; } @@ -257,5 +258,5 @@ export default class ModalProductPrice extends ModalBase { closeModal() { this.close(); } - } + }; } diff --git a/app/components/modal-select-user-role.js b/app/components/modal-select-user-role.js index 8f63a3c7c..72133c34b 100644 --- a/app/components/modal-select-user-role.js +++ b/app/components/modal-select-user-role.js @@ -35,5 +35,5 @@ export default class ModalPostPreviewComponent extends ModalBase { closeModal() { this.close(); } - } + }; } diff --git a/app/components/modal-stripe-connect.js b/app/components/modal-stripe-connect.js index 6867c06aa..9b82aef89 100644 --- a/app/components/modal-stripe-connect.js +++ b/app/components/modal-stripe-connect.js @@ -56,5 +56,5 @@ export default class ModalStripeConnect extends ModalBase { closeModal() { this.close(); } - } + }; } diff --git a/app/components/settings/members-email.js b/app/components/settings/members-email.js index 4ac36af7f..a5cd73e49 100644 --- a/app/components/settings/members-email.js +++ b/app/components/settings/members-email.js @@ -202,7 +202,7 @@ export default class MembersEmail extends Component { return false; } }).drop()) - updateFromAddress; + updateFromAddress; _getDerivedRecipientsSelectValue() { const defaultEmailRecipients = this.settings.get('editorDefaultEmailRecipients'); diff --git a/app/controllers/application.js b/app/controllers/application.js index 3751e04d0..6a1240113 100644 --- a/app/controllers/application.js +++ b/app/controllers/application.js @@ -17,7 +17,7 @@ export default class ApplicationController extends Controller { @service ui; @reads('config.hostSettings.billing.enabled') - showBilling; + showBilling; @computed( 'router.currentRouteName', diff --git a/app/controllers/billing.js b/app/controllers/billing.js index 561b41028..e82f91358 100644 --- a/app/controllers/billing.js +++ b/app/controllers/billing.js @@ -8,5 +8,5 @@ export default class BillingController extends Controller { action = null; @alias('model') - guid; + guid; } diff --git a/app/controllers/editor.js b/app/controllers/editor.js index 386a3121c..1fe6b53ac 100644 --- a/app/controllers/editor.js +++ b/app/controllers/editor.js @@ -123,15 +123,15 @@ export default class EditorController extends Controller { /* computed properties ---------------------------------------------------*/ @alias('model') - post; + post; // store the desired post status locally without updating the model, // the model will only be updated when a save occurs @boundOneWay('post.isPublished') - willPublish; + willPublish; @boundOneWay('post.isScheduled') - willSchedule; + willSchedule; // updateSlugTask and saveTask should always be enqueued so that we don't run into // problems with concurrency, for example when Cmd-S is pressed whilst the @@ -139,10 +139,10 @@ export default class EditorController extends Controller { // slug update and save resulting in ember data errors and inconsistent save // results @(taskGroup().enqueue()) - saveTasks; + saveTasks; @mapBy('post.tags', 'name') - _tagNames; + _tagNames; @computed(...watchedProps) get hasDirtyAttributes() { @@ -950,7 +950,7 @@ export default class EditorController extends Controller { yield timeout(AUTOSAVE_TIMEOUT); this.autosaveTask.perform(); }).restartable()) - _autosaveTask; + _autosaveTask; // save at 60 seconds even if the user doesn't stop typing @(task(function* () { @@ -963,7 +963,7 @@ export default class EditorController extends Controller { this.autosaveTask.perform(); } }).drop()) - _timedSaveTask; + _timedSaveTask; /* Private methods -------------------------------------------------------*/ diff --git a/app/controllers/error.js b/app/controllers/error.js index ff6076552..d5cd895da 100644 --- a/app/controllers/error.js +++ b/app/controllers/error.js @@ -8,7 +8,7 @@ export default class ErrorController extends Controller { stack = false; @readOnly('model') - error; + error; @computed('error.status') get code() { diff --git a/app/controllers/pages-loading.js b/app/controllers/pages-loading.js index c5ac13623..f60e36221 100644 --- a/app/controllers/pages-loading.js +++ b/app/controllers/pages-loading.js @@ -7,7 +7,7 @@ import {inject as service} from '@ember/service'; @classic export default class PagesLoadingController extends PostsLoadingController { @controller('pages') - postsController; + postsController; @service ui; } diff --git a/app/controllers/posts-loading.js b/app/controllers/posts-loading.js index 2bc1cbe36..744bf5f8c 100644 --- a/app/controllers/posts-loading.js +++ b/app/controllers/posts-loading.js @@ -7,39 +7,39 @@ import {inject as service} from '@ember/service'; @classic export default class PostsLoadingController extends Controller { @controller('posts') - postsController; + postsController; @service session; @service ui; @service config; @readOnly('postsController.availableTypes') - availableTypes; + availableTypes; @readOnly('postsController.selectedType') - selectedType; + selectedType; @readOnly('postsController.selectedVisibility') - selectedVisibility; + selectedVisibility; @readOnly('postsController.availableVisibilities') - availableVisibilities; + availableVisibilities; @readOnly('postsController.availableTags') - availableTags; + availableTags; @readOnly('postsController.selectedTag') - selectedTag; + selectedTag; @readOnly('postsController.availableAuthors') - availableAuthors; + availableAuthors; @readOnly('postsController.selectedAuthor') - selectedAuthor; + selectedAuthor; @readOnly('postsController.availableOrders') - availableOrders; + availableOrders; @readOnly('postsController.selectedOrder') - selectedOrder; + selectedOrder; } diff --git a/app/controllers/posts.js b/app/controllers/posts.js index 277c859d0..c304d095a 100644 --- a/app/controllers/posts.js +++ b/app/controllers/posts.js @@ -81,7 +81,7 @@ export default class PostsController extends Controller { } @alias('model') - postsInfinityModel; + postsInfinityModel; @computed('type', 'author', 'tag') get showingAll() { diff --git a/app/controllers/settings/code-injection.js b/app/controllers/settings/code-injection.js index 84c32253b..72d8f3465 100644 --- a/app/controllers/settings/code-injection.js +++ b/app/controllers/settings/code-injection.js @@ -66,5 +66,5 @@ export default class CodeInjectionController extends Controller { throw error; } }) - saveTask; + saveTask; } diff --git a/app/controllers/settings/design/change-theme.js b/app/controllers/settings/design/change-theme.js index de61c831a..8d2ca7093 100644 --- a/app/controllers/settings/design/change-theme.js +++ b/app/controllers/settings/design/change-theme.js @@ -102,7 +102,7 @@ export default class ChangeThemeController extends Controller { previewUrl: 'https://london.ghost.io', ref: 'TryGhost/London', image: 'assets/img/themes/London.jpg' - }] + }]; get themesList() { const activeTheme = this.themes.findBy('active', true); diff --git a/app/controllers/settings/general.js b/app/controllers/settings/general.js index 463057e2a..159a3f864 100644 --- a/app/controllers/settings/general.js +++ b/app/controllers/settings/general.js @@ -298,5 +298,5 @@ export default class GeneralController extends Controller { throw error; } }) - saveTask; + saveTask; } diff --git a/app/controllers/settings/integration.js b/app/controllers/settings/integration.js index 74b5e1e66..d1221d754 100644 --- a/app/controllers/settings/integration.js +++ b/app/controllers/settings/integration.js @@ -31,7 +31,7 @@ export default class IntegrationController extends Controller { } @alias('model') - integration; + integration; @computed get apiUrl() { @@ -188,23 +188,23 @@ export default class IntegrationController extends Controller { @task(function* () { return yield this.integration.save(); }) - saveTask; + saveTask; @task(function* () { copyTextToClipboard(this.integration.contentKey.secret); yield timeout(this.isTesting ? 50 : 3000); }) - copyContentKey; + copyContentKey; @task(function* () { copyTextToClipboard(this.integration.adminKey.secret); yield timeout(this.isTesting ? 50 : 3000); }) - copyAdminKey; + copyAdminKey; @task(function* () { copyTextToClipboard(this.apiUrl); yield timeout(this.isTesting ? 50 : 3000); }) - copyApiUrl; + copyApiUrl; } diff --git a/app/controllers/settings/integration/webhooks/edit.js b/app/controllers/settings/integration/webhooks/edit.js index 74a033f4a..6e33dcf3c 100644 --- a/app/controllers/settings/integration/webhooks/edit.js +++ b/app/controllers/settings/integration/webhooks/edit.js @@ -6,7 +6,7 @@ import {alias} from '@ember/object/computed'; @classic export default class EditController extends Controller { @alias('model') - webhook; + webhook; @action save() { diff --git a/app/controllers/settings/integration/webhooks/new.js b/app/controllers/settings/integration/webhooks/new.js index 21e1831ae..2032e2f2d 100644 --- a/app/controllers/settings/integration/webhooks/new.js +++ b/app/controllers/settings/integration/webhooks/new.js @@ -6,7 +6,7 @@ import {alias} from '@ember/object/computed'; @classic export default class NewController extends Controller { @alias('model') - webhook; + webhook; @action save() { diff --git a/app/controllers/settings/integrations.js b/app/controllers/settings/integrations.js index a81ea9acc..9ba89aed3 100644 --- a/app/controllers/settings/integrations.js +++ b/app/controllers/settings/integrations.js @@ -38,7 +38,7 @@ export default class IntegrationsController extends Controller { @task(function* () { return yield this.store.findAll('integration'); }) - fetchIntegrations; + fetchIntegrations; // used by individual integration routes' `model` hooks integrationModelHook(prop, value, route, transition) { diff --git a/app/controllers/settings/integrations/amp.js b/app/controllers/settings/integrations/amp.js index 6ff9a18c7..042d981b0 100644 --- a/app/controllers/settings/integrations/amp.js +++ b/app/controllers/settings/integrations/amp.js @@ -72,5 +72,5 @@ export default class AmpController extends Controller { throw error; } }).drop()) - saveTask; + saveTask; } diff --git a/app/controllers/settings/integrations/firstpromoter.js b/app/controllers/settings/integrations/firstpromoter.js index 37eff5cb0..a8b99179d 100644 --- a/app/controllers/settings/integrations/firstpromoter.js +++ b/app/controllers/settings/integrations/firstpromoter.js @@ -72,5 +72,5 @@ export default class FirstpromoterController extends Controller { throw error; } }).drop()) - saveTask; + saveTask; } diff --git a/app/controllers/settings/integrations/slack.js b/app/controllers/settings/integrations/slack.js index 42c47ce91..92fba3b83 100644 --- a/app/controllers/settings/integrations/slack.js +++ b/app/controllers/settings/integrations/slack.js @@ -24,10 +24,10 @@ export default class SlackController extends Controller { } @boundOneWay('settings.slack.firstObject') - slackSettings; + slackSettings; @empty('slackSettings.url') - testNotificationDisabled; + testNotificationDisabled; @action save() { @@ -122,7 +122,7 @@ export default class SlackController extends Controller { } } }).drop()) - saveTask; + saveTask; @(task(function* () { let notifications = this.notifications; @@ -141,5 +141,5 @@ export default class SlackController extends Controller { } } }).drop()) - sendTestNotification; + sendTestNotification; } diff --git a/app/controllers/settings/integrations/unsplash.js b/app/controllers/settings/integrations/unsplash.js index a6bc8a262..2eae1ef7b 100644 --- a/app/controllers/settings/integrations/unsplash.js +++ b/app/controllers/settings/integrations/unsplash.js @@ -72,5 +72,5 @@ export default class UnsplashController extends Controller { throw error; } }).drop()) - saveTask; + saveTask; } diff --git a/app/controllers/settings/integrations/zapier.js b/app/controllers/settings/integrations/zapier.js index ac71343f1..9284865ea 100644 --- a/app/controllers/settings/integrations/zapier.js +++ b/app/controllers/settings/integrations/zapier.js @@ -23,7 +23,7 @@ export default class ZapierController extends Controller { } @alias('model') - integration; + integration; @computed get apiUrl() { @@ -63,11 +63,11 @@ export default class ZapierController extends Controller { copyTextToClipboard(this.integration.adminKey.secret); yield timeout(this.isTesting ? 50 : 3000); }) - copyAdminKey; + copyAdminKey; @task(function* () { copyTextToClipboard(this.apiUrl); yield timeout(this.isTesting ? 50 : 3000); }) - copyApiUrl; + copyApiUrl; } diff --git a/app/controllers/settings/labs.js b/app/controllers/settings/labs.js index c05d5247f..a2d7a8296 100644 --- a/app/controllers/settings/labs.js +++ b/app/controllers/settings/labs.js @@ -243,7 +243,7 @@ export default class LabsController extends Controller { this.set('redirectFailure', null); return true; }).drop()) - redirectUploadResult; + redirectUploadResult; @(task(function* (success) { this.set('routesSuccess', success); @@ -255,7 +255,7 @@ export default class LabsController extends Controller { this.set('routesFailure', null); return true; }).drop()) - routesUploadResult; + routesUploadResult; reset() { this.set('importErrors', null); diff --git a/app/controllers/settings/members-email.js b/app/controllers/settings/members-email.js index 17dbc95f7..21ee2429e 100644 --- a/app/controllers/settings/members-email.js +++ b/app/controllers/settings/members-email.js @@ -9,7 +9,7 @@ export default class MembersEmailController extends Controller { @service session; @service settings; - queryParams = ['showEmailDesignSettings'] + queryParams = ['showEmailDesignSettings']; // from/supportAddress are set here so that they can be reset to saved values on save // to avoid it looking like they've been saved when they have a separate update process diff --git a/app/controllers/settings/staff/index.js b/app/controllers/settings/staff/index.js index bf3bd40be..3d11abd49 100644 --- a/app/controllers/settings/staff/index.js +++ b/app/controllers/settings/staff/index.js @@ -24,19 +24,19 @@ export default class IndexController extends Controller { } @alias('model') - currentUser; + currentUser; @sort('filteredInvites', 'inviteOrder') - sortedInvites; + sortedInvites; @sort('activeUsers', 'userOrder') - sortedActiveUsers; + sortedActiveUsers; @sort('suspendedUsers', 'userOrder') - sortedSuspendedUsers; + sortedSuspendedUsers; @filterBy('invites', 'isNew', false) - filteredInvites; + filteredInvites; @computed get invites() { @@ -82,12 +82,12 @@ export default class IndexController extends Controller { this.send('error', error); } }) - backgroundUpdate; + backgroundUpdate; @task(function* () { yield this.store.query('user', {limit: 'all'}); }) - fetchUsers; + fetchUsers; @task(function* () { if (this.currentUser.isAuthorOrContributor) { @@ -101,5 +101,5 @@ export default class IndexController extends Controller { return yield this.store.query('invite', {limit: 'all'}); }) - fetchInvites; + fetchInvites; } diff --git a/app/controllers/setup.js b/app/controllers/setup.js index 305b3ecac..e58eeb364 100644 --- a/app/controllers/setup.js +++ b/app/controllers/setup.js @@ -11,7 +11,7 @@ export default class SetupController extends Controller { @service router; @match('router.currentRouteName', /^setup\.(two|three)$/) - showBackLink; + showBackLink; @computed('router.currentRouteName') get backRoute() { diff --git a/app/controllers/setup/two.js b/app/controllers/setup/two.js index 884fcdff6..75a59efc2 100644 --- a/app/controllers/setup/two.js +++ b/app/controllers/setup/two.js @@ -52,7 +52,7 @@ export default class TwoController extends Controller.extend(ValidationEngine) { @task(function* () { return yield this._passwordSetup(); }) - setupTask; + setupTask; @task(function* (authStrategy, authentication) { // we don't want to redirect after sign-in during setup @@ -82,7 +82,7 @@ export default class TwoController extends Controller.extend(ValidationEngine) { } } }) - authenticate; + authenticate; /** * Uploads the given data image, then sends the changed user image property to the server diff --git a/app/controllers/signin.js b/app/controllers/signin.js index 9a6737163..bf747a0f3 100644 --- a/app/controllers/signin.js +++ b/app/controllers/signin.js @@ -16,7 +16,7 @@ import {task} from 'ember-concurrency'; @classic export default class SigninController extends Controller.extend(ValidationEngine) { @controller - application; + application; @service ajax; @service config; @@ -40,7 +40,7 @@ export default class SigninController extends Controller.extend(ValidationEngine } @alias('model') - signin; + signin; @computed('config.accent_color') get accentColor() { @@ -106,7 +106,7 @@ export default class SigninController extends Controller.extend(ValidationEngine return false; } }).drop()) - authenticateTask; + authenticateTask; @(task(function* () { let signin = this.signin; @@ -128,7 +128,7 @@ export default class SigninController extends Controller.extend(ValidationEngine this.set('flowErrors', 'Please fill out the form to sign in.'); } }).drop()) - validateAndAuthenticate; + validateAndAuthenticate; @task(function* () { let email = this.get('signin.identification'); @@ -170,5 +170,5 @@ export default class SigninController extends Controller.extend(ValidationEngine } } }) - forgotten; + forgotten; } diff --git a/app/controllers/site.js b/app/controllers/site.js index 3656b0f06..ea1b193c6 100644 --- a/app/controllers/site.js +++ b/app/controllers/site.js @@ -5,5 +5,5 @@ import {alias} from '@ember/object/computed'; @classic export default class SiteController extends Controller { @alias('model') - guid; + guid; } diff --git a/app/controllers/tag.js b/app/controllers/tag.js index 6c11cc6ad..56f73f120 100644 --- a/app/controllers/tag.js +++ b/app/controllers/tag.js @@ -17,7 +17,7 @@ export default class TagController extends Controller { showDeleteTagModal = false; @alias('model') - tag; + tag; @computed('tag') get scratchTag() { @@ -111,7 +111,7 @@ export default class TagController extends Controller { } } }).drop()) - saveTask; + saveTask; @task(function* (slug) { this.set('isLoading', true); @@ -122,7 +122,7 @@ export default class TagController extends Controller { return tag; }); }) - fetchTag; + fetchTag; _saveTagProperty(propKey, newValue) { let tag = this.tag; diff --git a/app/controllers/tags.js b/app/controllers/tags.js index ce045f1ee..951abba6a 100644 --- a/app/controllers/tags.js +++ b/app/controllers/tags.js @@ -12,7 +12,7 @@ export default class TagsController extends Controller { type = 'public'; @alias('model') - tags; + tags; @computed('tags.@each.isNew', 'type') get filteredTags() { @@ -26,7 +26,7 @@ export default class TagsController extends Controller { // ignorePunctuation means the # in internal tag names is ignored return tagA.name.localeCompare(tagB.name, undefined, {ignorePunctuation: true}); }) - sortedTags; + sortedTags; @action changeType(type) { diff --git a/app/routes/editor/edit.js b/app/routes/editor/edit.js index f9418a918..cf4c04e48 100644 --- a/app/routes/editor/edit.js +++ b/app/routes/editor/edit.js @@ -24,6 +24,7 @@ export default class EditRoute extends AuthenticatedRoute { } let query = { + // eslint-disable-next-line camelcase id: post_id }; diff --git a/app/routes/settings/membership.js b/app/routes/settings/membership.js index d9e3628de..cedc4652e 100644 --- a/app/routes/settings/membership.js +++ b/app/routes/settings/membership.js @@ -24,7 +24,7 @@ export default class MembershipSettingsRoute extends AdminRoute { willTransition(transition) { return this.controller.leaveRoute(transition); } - } + }; buildRouteInfoMetadata() { return { diff --git a/app/routes/settings/product.js b/app/routes/settings/product.js index 53e4f645a..111b5160e 100644 --- a/app/routes/settings/product.js +++ b/app/routes/settings/product.js @@ -3,7 +3,7 @@ import {action} from '@ember/object'; import {inject as service} from '@ember/service'; export default class ProductRoute extends AdminRoute { - @service store + @service store; @service router; _requiresBackgroundRefresh = true; diff --git a/app/routes/settings/products.js b/app/routes/settings/products.js index 72919a3ae..1db8d6adb 100644 --- a/app/routes/settings/products.js +++ b/app/routes/settings/products.js @@ -2,7 +2,7 @@ import AdminRoute from 'ghost-admin/routes/admin'; import {inject as service} from '@ember/service'; export default class ProductsRoute extends AdminRoute { - @service store + @service store; buildRouteInfoMetadata() { return { diff --git a/app/serializers/action.js b/app/serializers/action.js index a1728ed86..37dd737ad 100644 --- a/app/serializers/action.js +++ b/app/serializers/action.js @@ -4,5 +4,5 @@ import ApplicationSerializer from 'ghost-admin/serializers/application'; export default class ActionSerializer extends ApplicationSerializer { attrs = { createdAtUTC: {key: 'created_at'} - } + }; } diff --git a/app/serializers/api-key.js b/app/serializers/api-key.js index 8ed9e1fde..8b040dd9c 100644 --- a/app/serializers/api-key.js +++ b/app/serializers/api-key.js @@ -5,5 +5,5 @@ export default class ApiKeySerializer extends ApplicationSerializer { lastSeenAtUTC: {key: 'last_seen_at'}, createdAtUTC: {key: 'created_at'}, updatedAtUTC: {key: 'updated_at'} - } + }; } diff --git a/app/serializers/custom-theme-setting-list.js b/app/serializers/custom-theme-setting-list.js index e3f40daff..30cdd0f08 100644 --- a/app/serializers/custom-theme-setting-list.js +++ b/app/serializers/custom-theme-setting-list.js @@ -4,7 +4,7 @@ import {EmbeddedRecordsMixin} from '@ember-data/serializer/rest'; export default class CustomThemeSettingList extends ApplicationSerializer.extend(EmbeddedRecordsMixin) { attrs = { customThemeSettings: {embedded: 'always'} - } + }; serializeIntoHash(hash, type, record, options) { // replace the whole request hash with the embedded custom_theme_settings array diff --git a/app/serializers/email-recipient.js b/app/serializers/email-recipient.js index c289ee449..e89c63a9f 100644 --- a/app/serializers/email-recipient.js +++ b/app/serializers/email-recipient.js @@ -9,5 +9,5 @@ export default class EmailRecipientSerializer extends ApplicationSerializer.exte openedAtUTC: {key: 'opened_at'}, failedAtUTC: {key: 'failed_at'}, email: {embedded: 'always'} - } + }; } diff --git a/app/serializers/email.js b/app/serializers/email.js index c37a0a9e2..7fa660729 100644 --- a/app/serializers/email.js +++ b/app/serializers/email.js @@ -6,5 +6,5 @@ export default class EmailSerializer extends ApplicationSerializer { createdAtUTC: {key: 'created_at'}, updatedAtUTC: {key: 'updated_at'}, submittedAtUTC: {key: 'submitted_at'} - } + }; } diff --git a/app/serializers/integration.js b/app/serializers/integration.js index ae9aab22f..1f9bc935e 100644 --- a/app/serializers/integration.js +++ b/app/serializers/integration.js @@ -7,5 +7,5 @@ export default class IntegrationSerializer extends ApplicationSerializer.extend( webhooks: {embedded: 'always'}, createdAtUTC: {key: 'created_at'}, updatedAtUTC: {key: 'updated_at'} - } + }; } diff --git a/app/serializers/invite.js b/app/serializers/invite.js index 542987454..be029576b 100644 --- a/app/serializers/invite.js +++ b/app/serializers/invite.js @@ -4,5 +4,5 @@ export default class InviteSerializer extends ApplicationSerializer { attrs = { createdAtUTC: {key: 'created_at'}, updatedAtUTC: {key: 'updated_at'} - } + }; } diff --git a/app/serializers/label.js b/app/serializers/label.js index 6f08778fc..d9dfca221 100644 --- a/app/serializers/label.js +++ b/app/serializers/label.js @@ -6,7 +6,7 @@ export default class LabelSerializer extends ApplicationSerializer { attrs = { createdAtUTC: {key: 'created_at'}, updatedAtUTC: {key: 'updated_at'} - } + }; serialize(/*snapshot, options*/) { let json = super.serialize(...arguments); diff --git a/app/serializers/member.js b/app/serializers/member.js index 7f1f953f3..3ca601efe 100644 --- a/app/serializers/member.js +++ b/app/serializers/member.js @@ -7,7 +7,7 @@ export default class MemberSerializer extends ApplicationSerializer.extend(Embed createdAtUTC: {key: 'created_at'}, labels: {embedded: 'always'}, emailRecipients: {embedded: 'always'} - } + }; serialize(/*snapshot, options*/) { let json = super.serialize(...arguments); diff --git a/app/serializers/notification.js b/app/serializers/notification.js index 57d14e52d..4d37911ec 100644 --- a/app/serializers/notification.js +++ b/app/serializers/notification.js @@ -3,5 +3,5 @@ import ApplicationSerializer from 'ghost-admin/serializers/application'; export default class NotificationSerializer extends ApplicationSerializer { attrs = { key: {key: 'location'} - } + }; } diff --git a/app/serializers/post.js b/app/serializers/post.js index 5db39db58..0fe66ccc7 100644 --- a/app/serializers/post.js +++ b/app/serializers/post.js @@ -12,7 +12,7 @@ export default class PostSerializer extends ApplicationSerializer.extend(Embedde createdAtUTC: {key: 'created_at'}, updatedAtUTC: {key: 'updated_at'}, email: {embedded: 'always'} - } + }; normalizeSingleResponse(store, primaryModelClass, payload) { let root = this.keyForAttribute(primaryModelClass.modelName); diff --git a/app/serializers/role.js b/app/serializers/role.js index 308a6234f..dcd979fc7 100644 --- a/app/serializers/role.js +++ b/app/serializers/role.js @@ -4,5 +4,5 @@ export default class ActionSerializer extends ApplicationSerializer { attrs = { createdAtUTC: {key: 'created_at'}, updatedAtUTC: {key: 'updated_at'} - } + }; } diff --git a/app/serializers/tag.js b/app/serializers/tag.js index 0fd9e5b85..49ba8efa4 100644 --- a/app/serializers/tag.js +++ b/app/serializers/tag.js @@ -6,7 +6,7 @@ export default class TagSerializer extends ApplicationSerializer { attrs = { createdAtUTC: {key: 'created_at'}, updatedAtUTC: {key: 'updated_at'} - } + }; serialize(/*snapshot, options*/) { let json = super.serialize(...arguments); diff --git a/app/serializers/user.js b/app/serializers/user.js index 02d6c1edc..31077d9a2 100644 --- a/app/serializers/user.js +++ b/app/serializers/user.js @@ -8,7 +8,7 @@ export default class UserSerializer extends ApplicationSerializer.extend(Embedde lastLoginUTC: {key: 'last_seen'}, createdAtUTC: {key: 'created_at'}, updatedAtUTC: {key: 'updated_at'} - } + }; extractSingle(store, primaryType, payload) { let root = this.keyForAttribute(primaryType.modelName); diff --git a/app/serializers/webhook.js b/app/serializers/webhook.js index e32b6d1fd..058624472 100644 --- a/app/serializers/webhook.js +++ b/app/serializers/webhook.js @@ -5,5 +5,5 @@ export default class ActionSerializer extends ApplicationSerializer { lastTriggeredAtUTC: {key: 'last_triggered_at'}, createdAtUTC: {key: 'created_at'}, updatedAtUTC: {key: 'updated_at'} - } + }; } diff --git a/app/services/feature.js b/app/services/feature.js index 71c48ac03..012ec2c32 100644 --- a/app/services/feature.js +++ b/app/services/feature.js @@ -50,42 +50,42 @@ export default class FeatureService extends Service { // features @feature('emailAnalytics') - emailAnalytics; + emailAnalytics; // user-specific flags @feature('nightShift', {user: true, onChange: '_setAdminTheme'}) - nightShift; + nightShift; @feature('dashboardHideGettingStarted', {user: true}) - dashboardHideGettingStarted; + dashboardHideGettingStarted; // labs flags @feature('multipleProducts') - multipleProducts; + multipleProducts; @feature('oauthLogin') - oauthLogin; + oauthLogin; @feature('membersActivity') - membersActivity; + membersActivity; @feature('urlCache') - urlCache; + urlCache; @feature('beforeAfterCard') - beforeAfterCard; + beforeAfterCard; @feature('tweetGridCard') - tweetGridCard; + tweetGridCard; @feature('membersActivityFeed') - membersActivityFeed; + membersActivityFeed; @feature('improvedOnboarding') - improvedOnboarding; + improvedOnboarding; @feature('tierWelcomePages') - tierWelcomePages; + tierWelcomePages; @feature('tierName') tierName; diff --git a/app/services/modals.js b/app/services/modals.js index 4d5e6a0f6..e02358e1d 100644 --- a/app/services/modals.js +++ b/app/services/modals.js @@ -8,7 +8,7 @@ export default class ModalsService extends EPMModalsService { DEFAULT_OPTIONS = { className: 'fullscreen-modal-action fullscreen-modal-wide' - } + }; MODAL_OPTIONS = { 'modals/custom-view-form': { @@ -28,7 +28,7 @@ export default class ModalsService extends EPMModalsService { className: 'fullscreen-modal-total-overlay', omitBackdrop: true } - } + }; // we manually close modals on backdrop clicks and escape rather than letting focus-trap // handle it so we can intercept/abort closing for things like unsaved change confirmations diff --git a/app/services/notifications.js b/app/services/notifications.js index 3b3cbe34a..2d70e785e 100644 --- a/app/services/notifications.js +++ b/app/services/notifications.js @@ -39,13 +39,13 @@ export default class NotificationsService extends Service { let status = get(notification, 'status'); return status === 'alert'; }) - alerts; + alerts; @filter('content', function (notification) { let status = get(notification, 'status'); return status === 'notification'; }) - notifications; + notifications; handleNotification(message, delayed) { // If this is an alert message from the server, treat it as html safe diff --git a/app/services/theme-management.js b/app/services/theme-management.js index 968c1e98f..e12e44cc0 100644 --- a/app/services/theme-management.js +++ b/app/services/theme-management.js @@ -28,7 +28,7 @@ export default class ThemeManagementService extends Service { }, { name: 'post', label: 'Post' - }] + }]; get latestPublishedPost() { return this.allPosts.toArray().filterBy('status', 'published').sort((a, b) => { diff --git a/lib/koenig-editor/addon/components/koenig-card-audio.js b/lib/koenig-editor/addon/components/koenig-card-audio.js index b7d06f6f9..d09dc3d63 100644 --- a/lib/koenig-editor/addon/components/koenig-card-audio.js +++ b/lib/koenig-editor/addon/components/koenig-card-audio.js @@ -48,7 +48,7 @@ export default class KoenigCardAudioComponent extends Component { audioMimeTypes = AUDIO_MIME_TYPES; imageExtensions = IMAGE_EXTENSIONS; imageMimeTypes = IMAGE_MIME_TYPES; - placeholder = PLACEHOLDERS[Math.floor(Math.random() * PLACEHOLDERS.length)] + placeholder = PLACEHOLDERS[Math.floor(Math.random() * PLACEHOLDERS.length)]; payloadAudioAttrs = ['src', 'title', 'duration', 'mimeType', 'thumbnailSrc']; diff --git a/lib/koenig-editor/addon/components/koenig-card-bookmark.js b/lib/koenig-editor/addon/components/koenig-card-bookmark.js index 655f2ce03..ee9625610 100644 --- a/lib/koenig-editor/addon/components/koenig-card-bookmark.js +++ b/lib/koenig-editor/addon/components/koenig-card-bookmark.js @@ -177,7 +177,7 @@ export default class KoenigCardBookmark extends Component { this.set('hasError', true); } }).drop()) - convertUrl; + convertUrl; _focusInput() { let urlInput = this.element.querySelector('[name="url"]'); diff --git a/lib/koenig-editor/addon/components/koenig-card-embed.js b/lib/koenig-editor/addon/components/koenig-card-embed.js index 79ee75b27..ca9d2b0c4 100644 --- a/lib/koenig-editor/addon/components/koenig-card-embed.js +++ b/lib/koenig-editor/addon/components/koenig-card-embed.js @@ -210,7 +210,7 @@ export default class KoenigCardEmbed extends Component { this.set('hasError', true); } }).drop()) - convertUrl; + convertUrl; _focusInput() { let urlInput = this.element.querySelector('[name="url"]'); diff --git a/lib/koenig-editor/addon/components/koenig-card-file.js b/lib/koenig-editor/addon/components/koenig-card-file.js index 3f84b7fe5..9d586defc 100644 --- a/lib/koenig-editor/addon/components/koenig-card-file.js +++ b/lib/koenig-editor/addon/components/koenig-card-file.js @@ -33,7 +33,7 @@ export default class KoenigCardFileComponent extends Component { // at which point it will be saved to the real payload and the preview deleted @tracked previewPayload = new TrackedObject({}); - placeholder = PLACEHOLDERS[Math.floor(Math.random() * PLACEHOLDERS.length)] + placeholder = PLACEHOLDERS[Math.floor(Math.random() * PLACEHOLDERS.length)]; payloadFileAttrs = ['src', 'fileName', 'fileTitle', 'fileCaption', 'fileSize', 'mimeType']; diff --git a/lib/koenig-editor/addon/components/koenig-card-markdown.js b/lib/koenig-editor/addon/components/koenig-card-markdown.js index bca8a5710..026a5c2f7 100644 --- a/lib/koenig-editor/addon/components/koenig-card-markdown.js +++ b/lib/koenig-editor/addon/components/koenig-card-markdown.js @@ -233,5 +233,5 @@ export default class KoenigCardMarkdown extends Component { yield timeout(500); this.set('preventClick', false); }) - _preventAccidentalClick; + _preventAccidentalClick; } diff --git a/lib/koenig-editor/addon/components/koenig-card-video.js b/lib/koenig-editor/addon/components/koenig-card-video.js index 9e164926e..56f2e0cb1 100644 --- a/lib/koenig-editor/addon/components/koenig-card-video.js +++ b/lib/koenig-editor/addon/components/koenig-card-video.js @@ -58,7 +58,7 @@ export default class KoenigCardVideoComponent extends Component { imageExtensions = IMAGE_EXTENSIONS; imageMimeTypes = IMAGE_MIME_TYPES; - placeholder = PLACEHOLDERS[Math.floor(Math.random() * PLACEHOLDERS.length)] + placeholder = PLACEHOLDERS[Math.floor(Math.random() * PLACEHOLDERS.length)]; payloadVideoAttrs = ['src', 'fileName', 'width', 'height', 'duration', 'mimeType', 'thumbnailSrc', 'thumbnailWidth', 'thumbnailHeight']; diff --git a/lib/koenig-editor/addon/components/koenig-editor.js b/lib/koenig-editor/addon/components/koenig-editor.js index b5eaadcb6..71472775c 100644 --- a/lib/koenig-editor/addon/components/koenig-editor.js +++ b/lib/koenig-editor/addon/components/koenig-editor.js @@ -1327,7 +1327,7 @@ export default class KoenigEditor extends Component { this._cleanupScheduled = false; }) - _cleanupTask; + _cleanupTask; // nested editor.run loops will create additional undo steps so this is a // shortcut for when we already have a postEditor diff --git a/lib/koenig-editor/addon/components/koenig-toolbar.js b/lib/koenig-editor/addon/components/koenig-toolbar.js index 6c239d746..b58f7a5ba 100644 --- a/lib/koenig-editor/addon/components/koenig-toolbar.js +++ b/lib/koenig-editor/addon/components/koenig-toolbar.js @@ -187,7 +187,7 @@ export default class KoenigToolbar extends Component { this._skipMousemove = false; }).restartable()) - _toggleVisibility; + _toggleVisibility; _handleMousedown(event) { // we only care about the left mouse button diff --git a/lib/koenig-editor/addon/utils/oembed.js b/lib/koenig-editor/addon/utils/oembed.js index 1353f76f3..d2c4d5c34 100644 --- a/lib/koenig-editor/addon/utils/oembed.js +++ b/lib/koenig-editor/addon/utils/oembed.js @@ -29,7 +29,9 @@ export default function providers() { let domain = hostname ? hostname.replace('www.', '') : ''; return { + // eslint-disable-next-line camelcase provider_name, + // eslint-disable-next-line camelcase provider_url, schemes, domain, diff --git a/package.json b/package.json index ffbf67701..3d54022ed 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,9 @@ "node": "^12.22.1 || ^14.17.0 || ^16.13.0" }, "devDependencies": { + "@babel/eslint-parser": "^7.17.0", + "@babel/plugin-proposal-class-properties": "^7.16.7", + "@babel/plugin-proposal-decorators": "^7.17.2", "@ember/jquery": "2.0.0", "@ember/optional-features": "2.0.0", "@ember/render-modifiers": "2.0.4", @@ -45,7 +48,6 @@ "@tryghost/string": "0.1.22", "@tryghost/timezone-data": "0.2.55", "autoprefixer": "9.8.6", - "babel-eslint": "10.1.0", "blueimp-md5": "2.19.0", "broccoli-asset-rev": "3.0.0", "broccoli-concat": "4.2.5", @@ -116,7 +118,7 @@ "ember-truth-helpers": "3.0.0", "ember-useragent": "0.11.0", "emberx-file-input": "1.2.1", - "eslint": "7.32.0", + "eslint": "8.8.0", "eslint-plugin-ghost": "2.12.0", "faker": "5.5.3", "fs-extra": "10.0.0", diff --git a/yarn.lock b/yarn.lock index 58c1e8671..479ae91e0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,13 +2,6 @@ # yarn lockfile v1 -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" @@ -63,6 +56,15 @@ semver "^6.3.0" source-map "^0.5.0" +"@babel/eslint-parser@^7.17.0": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.17.0.tgz#eabb24ad9f0afa80e5849f8240d0e5facc2d90d6" + integrity sha512-PUEJ7ZBXbRkbq3qqM/jZ2nIuakUBqCYc7Qf52Lj7dlZ6zERnqisdHioL0l4wwQZnmskMeasqUNzLBFKs3nylXA== + dependencies: + eslint-scope "^5.1.1" + eslint-visitor-keys "^2.1.0" + semver "^6.3.0" + "@babel/generator@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.7.tgz#b42bf46a3079fa65e1544135f32e7958f048adbb" @@ -119,6 +121,19 @@ "@babel/helper-replace-supers" "^7.16.7" "@babel/helper-split-export-declaration" "^7.16.7" +"@babel/helper-create-class-features-plugin@^7.17.1": + version "7.17.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz#9699f14a88833a7e055ce57dcd3ffdcd25186b21" + integrity sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-create-regexp-features-plugin@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz#0cb82b9bac358eb73bfbd73985a776bfa6b14d48" @@ -288,7 +303,7 @@ "@babel/traverse" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/highlight@^7.10.4", "@babel/highlight@^7.16.7": +"@babel/highlight@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.7.tgz#81a01d7d675046f0d96f82450d9d9578bdfd6b0b" integrity sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw== @@ -297,7 +312,7 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.12.3", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.4.5", "@babel/parser@^7.7.0": +"@babel/parser@^7.12.3", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.4.5": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.7.tgz#d372dda9c89fcec340a82630a9f533f2fe15877e" integrity sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA== @@ -358,6 +373,17 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-decorators" "^7.16.7" +"@babel/plugin-proposal-decorators@^7.17.2": + version "7.17.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.2.tgz#c36372ddfe0360cac1ee331a238310bddca11493" + integrity sha512-WH8Z95CwTq/W8rFbMqb9p3hicpt4RX4f0K659ax2VHxgOyT6qQmUaEVEjIh4WR9Eh9NymkVn5vwsrE68fAQNUw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.17.1" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/plugin-syntax-decorators" "^7.17.0" + charcodes "^0.2.0" + "@babel/plugin-proposal-dynamic-import@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" @@ -488,6 +514,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-syntax-decorators@^7.17.0": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.0.tgz#a2be3b2c9fe7d78bd4994e790896bc411e2f166d" + integrity sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" @@ -998,7 +1031,7 @@ "@babel/parser" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/traverse@^7.1.6", "@babel/traverse@^7.12.1", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0": +"@babel/traverse@^7.1.6", "@babel/traverse@^7.12.1", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.4.5": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.7.tgz#dac01236a72c2560073658dd1a285fe4e0865d76" integrity sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ== @@ -1030,7 +1063,7 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.1.6", "@babel/types@^7.12.1", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.7.2": +"@babel/types@^7.1.6", "@babel/types@^7.12.1", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.4.4", "@babel/types@^7.7.2": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.7.tgz#4ed19d51f840ed4bd5645be6ce40775fecf03159" integrity sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg== @@ -1614,18 +1647,18 @@ broccoli-funnel "^3.0.5" ember-cli-babel "^7.23.1" -"@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== +"@eslint/eslintrc@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.5.tgz#33f1b838dbf1f923bfa517e008362b78ddbbf318" + integrity sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ== dependencies: ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" + debug "^4.3.2" + espree "^9.2.0" globals "^13.9.0" ignore "^4.0.6" import-fresh "^3.2.1" - js-yaml "^3.13.1" + js-yaml "^4.1.0" minimatch "^3.0.4" strip-json-comments "^3.1.1" @@ -1853,16 +1886,16 @@ ember-compatibility-helpers "^1.2.1" ember-raf-scheduler "0.2.0" -"@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== +"@humanwhocodes/config-array@^0.9.2": + version "0.9.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.3.tgz#f2564c744b387775b436418491f15fce6601f63e" + integrity sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ== dependencies: - "@humanwhocodes/object-schema" "^1.2.0" + "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" minimatch "^3.0.4" -"@humanwhocodes/object-schema@^1.2.0": +"@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== @@ -2540,12 +2573,12 @@ acorn@^6.0.7, acorn@^6.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -acorn@^7.1.0, acorn@^7.1.1, acorn@^7.4.0: +acorn@^7.1.0, acorn@^7.1.1: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.2.4: +acorn@^8.2.4, acorn@^8.7.0: version "8.7.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== @@ -2577,16 +2610,6 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.9.1: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.1: - version "8.8.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.8.2.tgz#01b4fef2007a28bf75f0b7fc009f62679de4abbb" - integrity sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - alphanum-sort@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" @@ -2612,11 +2635,6 @@ amdefine@>=0.0.4: resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= -ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" @@ -2850,11 +2868,6 @@ astral-regex@^1.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - 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" @@ -2996,18 +3009,6 @@ babel-core@^6.26.0, babel-core@^6.26.3: slash "^1.0.0" source-map "^0.5.7" -babel-eslint@10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" - integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - eslint-visitor-keys "^1.0.0" - resolve "^1.12.0" - babel-generator@^6.26.0: version "6.26.1" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" @@ -4857,6 +4858,11 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2, chalk@~4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +charcodes@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/charcodes/-/charcodes-0.2.0.tgz#5208d327e6cc05f99eb80ffc814707572d1f14e4" + integrity sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ== + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -5788,7 +5794,7 @@ debug@2.6.9, debug@^2.1.0, debug@^2.1.1, debug@^2.1.3, debug@^2.2.0, debug@^2.3. dependencies: ms "2.0.0" -debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1, debug@~4.3.1, debug@~4.3.2: +debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1, debug@^4.3.2, debug@~4.3.1, debug@~4.3.2: version "4.3.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== @@ -7592,13 +7598,6 @@ enhanced-resolve@^4.0.0, enhanced-resolve@^4.5.0: memory-fs "^0.5.0" tapable "^1.0.0" -enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - ensure-posix-path@^1.0.0, ensure-posix-path@^1.0.1, ensure-posix-path@^1.0.2, ensure-posix-path@^1.1.0, ensure-posix-path@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ensure-posix-path/-/ensure-posix-path-1.1.1.tgz#3c62bdb19fa4681544289edb2b382adc029179ce" @@ -7823,6 +7822,14 @@ eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" +eslint-scope@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.0.tgz#c1f6ea30ac583031f203d65c73e723b01298f153" + integrity sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + eslint-utils@^1.3.1: version "1.4.3" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" @@ -7830,7 +7837,7 @@ eslint-utils@^1.3.1: dependencies: eslint-visitor-keys "^1.1.0" -eslint-utils@^2.0.0, eslint-utils@^2.1.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== @@ -7844,59 +7851,59 @@ eslint-utils@^3.0.0: dependencies: eslint-visitor-keys "^2.0.0" -eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: +eslint-visitor-keys@^1.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.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" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint@7.32.0: - version "7.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" - integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== +eslint-visitor-keys@^3.1.0, eslint-visitor-keys@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz#6fbb166a6798ee5991358bc2daa1ba76cc1254a1" + integrity sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ== + +eslint@8.8.0: + version "8.8.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.8.0.tgz#9762b49abad0cb4952539ffdb0a046392e571a2d" + integrity sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ== dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" + "@eslint/eslintrc" "^1.0.5" + "@humanwhocodes/config-array" "^0.9.2" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" - debug "^4.0.1" + debug "^4.3.2" doctrine "^3.0.0" - enquirer "^2.3.5" escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" + eslint-scope "^7.1.0" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.2.0" + espree "^9.3.0" esquery "^1.4.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" + glob-parent "^6.0.1" globals "^13.6.0" - ignore "^4.0.6" + ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - js-yaml "^3.13.1" + js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" minimatch "^3.0.4" natural-compare "^1.4.0" optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" + regexpp "^3.2.0" + strip-ansi "^6.0.1" strip-json-comments "^3.1.0" - table "^6.0.9" text-table "^0.2.0" v8-compile-cache "^2.0.3" @@ -7956,14 +7963,14 @@ espree@^5.0.1: acorn-jsx "^5.0.0" eslint-visitor-keys "^1.0.0" -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== +espree@^9.2.0, espree@^9.3.0: + version "9.3.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.0.tgz#c1240d79183b72aaee6ccfa5a90bc9111df085a8" + integrity sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ== dependencies: - acorn "^7.4.0" + acorn "^8.7.0" acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" + eslint-visitor-keys "^3.1.0" esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: version "4.0.1" @@ -9004,6 +9011,13 @@ glob-parent@^5.1.2, glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + glob@3.2.11: version "3.2.11" resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.11.tgz#4a973f635b9190f715d10987d5c00fd2815ebe3d" @@ -10261,6 +10275,13 @@ js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.14.0, js-yaml@^3.2.5, js-yaml@^3.2. argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -10334,11 +10355,6 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - json-schema@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" @@ -10911,11 +10927,6 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "^3.0.0" -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= - lodash.uniq@^4.2.0, lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" @@ -13430,7 +13441,7 @@ regexpp@^2.0.1: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== -regexpp@^3.0.0, regexpp@^3.1.0: +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== @@ -13533,11 +13544,6 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - require-relative@^0.8.7: version "0.8.7" resolved "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz#7999539fc9e047a37928fa196f8e1563dabd36de" @@ -13630,7 +13636,7 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.15.1, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.3.3, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.8.1, resolve@^1.9.0: +resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.1, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.15.1, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.3.3, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.8.1, resolve@^1.9.0: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -13881,7 +13887,7 @@ semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: +semver@^7.1.3, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== @@ -14069,15 +14075,6 @@ slice-ansi@^2.1.0: astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - snake-case@^3.0.3: version "3.0.4" resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" @@ -14665,17 +14662,6 @@ table@^5.2.3: slice-ansi "^2.1.0" string-width "^3.0.0" -table@^6.0.9: - version "6.7.5" - resolved "https://registry.yarnpkg.com/table/-/table-6.7.5.tgz#f04478c351ef3d8c7904f0e8be90a1b62417d238" - integrity sha512-LFNeryOqiQHqCVKzhkymKwt6ozeRhlm8IL1mE8rNUurkir4heF6PzMyRgaTa4tlyPTGGgXuvVOF/OLWiH09Lqw== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - tap-parser@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/tap-parser/-/tap-parser-7.0.0.tgz#54db35302fda2c2ccc21954ad3be22b2cba42721"