Dropped ember-cli-moment-shim dependency

no issue

Since `ember-moment@10.0` it's not been necessary to use the `ember-cli-moment-shim` package, with `moment` instead being usable directly via `ember-auto-import`. Getting rid of the shim package is necessary for compatibility with `embroider`, Ember's new build tooling.

- dropped `ember-cli-moment-shim` dependency
- added `moment-timezone` dependency and updated all imports to reflect the different package
- worked around `ember-power-calendar` having `ember-cli-moment-shim` as a sub-dependency
  - added empty in-repo-addon `ember-power-calendar-moment` to avoid `ember-power-calendar` complaining about a missing package
  - added `ember-power-calendar-utils` in-repo-addon that is a copy of `ember-power-calendar-moment` but without the build-time renaming of the tree for better compatibility with embroider
This commit is contained in:
Kevin Ansfield 2022-09-23 19:15:08 +02:00
parent 9bbafc3ccf
commit fa84808048
74 changed files with 311 additions and 140 deletions

View File

@ -4,7 +4,7 @@ import Application from '@ember/application';
import Resolver from 'ember-resolver';
import config from 'ghost-admin/config/environment';
import loadInitializers from 'ember-load-initializers';
import moment from 'moment';
import moment from 'moment-timezone';
import {registerWarnHandler} from '@ember/debug';
moment.updateLocale('en', {

View File

@ -1,7 +1,7 @@
/* global Chart */
import Component from '@glimmer/component';
import moment from 'moment';
import moment from 'moment-timezone';
import {action} from '@ember/object';
import {getSymbol} from 'ghost-admin/utils/currency';
import {inject as service} from '@ember/service';
@ -82,7 +82,7 @@ export default class Anchor extends Component {
}
}
@action
@action
onDisplayChange(selected) {
this.chartDisplay = selected.value;
}
@ -112,7 +112,7 @@ export default class Anchor extends Component {
}
get hasTrends() {
return this.dashboardStats.memberCounts !== null
return this.dashboardStats.memberCounts !== null
&& this.dashboardStats.memberCountsTrend !== null;
}
@ -181,16 +181,16 @@ export default class Anchor extends Component {
const canvasLine = document.createElement('canvas');
const ctxLine = canvasLine.getContext('2d');
const gradientLine = ctxLine.createLinearGradient(0, 0, 1000, 0);
gradientLine.addColorStop(0, 'rgba(250, 45, 142, 1');
gradientLine.addColorStop(0, 'rgba(250, 45, 142, 1');
gradientLine.addColorStop(1, 'rgba(143, 66, 255, 1');
// gradient for fill
const canvasFill = document.createElement('canvas');
const ctxFill = canvasFill.getContext('2d');
const gradientFill = ctxFill.createLinearGradient(0, 0, 1000, 0);
gradientFill.addColorStop(0, 'rgba(250, 45, 142, 0.2');
gradientFill.addColorStop(0, 'rgba(250, 45, 142, 0.2');
gradientFill.addColorStop(1, 'rgba(143, 66, 255, 0.1');
return {
labels: labels,
datasets: [{
@ -217,7 +217,7 @@ export default class Anchor extends Component {
if (this.dashboardStats.mrrStats === null) {
return '';
}
const firstCurrency = this.dashboardStats.mrrStats[0] ? this.dashboardStats.mrrStats[0].currency : 'usd';
return getSymbol(firstCurrency);
}
@ -263,7 +263,7 @@ export default class Anchor extends Component {
// only show tooltip when active
if (tooltip.opacity === 0) {
tooltipEl.style.opacity = 0;
return;
return;
}
// update tooltip styles

View File

@ -1,7 +1,7 @@
/* global Chart */
import Component from '@glimmer/component';
import moment from 'moment';
import moment from 'moment-timezone';
import {action} from '@ember/object';
import {getSymbol} from 'ghost-admin/utils/currency';
import {inject as service} from '@ember/service';
@ -85,7 +85,7 @@ export default class Anchor extends Component {
}
}
@action
@action
onDisplayChange(selected) {
this.chartDisplay = selected.value;
}
@ -115,7 +115,7 @@ export default class Anchor extends Component {
}
get hasTrends() {
return this.dashboardStats.memberCounts !== null
return this.dashboardStats.memberCounts !== null
&& this.dashboardStats.memberCountsTrend !== null;
}
@ -187,16 +187,16 @@ export default class Anchor extends Component {
const canvasLine = document.createElement('canvas');
const ctxLine = canvasLine.getContext('2d');
const gradientLine = ctxLine.createLinearGradient(0, 0, 1000, 0);
gradientLine.addColorStop(0, 'rgba(250, 45, 142, 1');
gradientLine.addColorStop(0, 'rgba(250, 45, 142, 1');
gradientLine.addColorStop(1, 'rgba(143, 66, 255, 1');
// gradient for fill
const canvasFill = document.createElement('canvas');
const ctxFill = canvasFill.getContext('2d');
const gradientFill = ctxFill.createLinearGradient(0, 0, 1000, 0);
gradientFill.addColorStop(0, 'rgba(250, 45, 142, 0.2');
gradientFill.addColorStop(0, 'rgba(250, 45, 142, 0.2');
gradientFill.addColorStop(1, 'rgba(143, 66, 255, 0.1');
return {
labels: labels,
datasets: [{
@ -223,7 +223,7 @@ export default class Anchor extends Component {
if (this.dashboardStats.mrrStats === null) {
return '';
}
const firstCurrency = this.dashboardStats.mrrStats[0] ? this.dashboardStats.mrrStats[0].currency : 'usd';
return getSymbol(firstCurrency);
}
@ -269,7 +269,7 @@ export default class Anchor extends Component {
// only show tooltip when active
if (tooltip.opacity === 0) {
tooltipEl.style.opacity = 0;
return;
return;
}
// update tooltip styles

View File

@ -1,7 +1,7 @@
/* globals Chart */
import Component from '@glimmer/component';
import moment from 'moment';
import moment from 'moment-timezone';
import {action} from '@ember/object';
import {inject as service} from '@ember/service';

View File

@ -1,7 +1,7 @@
/* global Chart */
import Component from '@glimmer/component';
import moment from 'moment';
import moment from 'moment-timezone';
import {getSymbol} from 'ghost-admin/utils/currency';
import {ghPriceAmount} from '../../../helpers/gh-price-amount';
import {inject as service} from '@ember/service';
@ -76,7 +76,7 @@ export default class PaidMrr extends Component {
if (this.dashboardStats.mrrStats === null) {
return '';
}
const firstCurrency = this.dashboardStats.mrrStats[0] ? this.dashboardStats.mrrStats[0].currency : 'usd';
return getSymbol(firstCurrency);
}
@ -111,7 +111,7 @@ export default class PaidMrr extends Component {
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
const gradient = ctx.createLinearGradient(0, 0, 0, 120);
gradient.addColorStop(0, 'rgba(143, 66, 255, 0.15');
gradient.addColorStop(0, 'rgba(143, 66, 255, 0.15');
gradient.addColorStop(1, 'rgba(143, 66, 255, 0.0');
return {
@ -178,7 +178,7 @@ export default class PaidMrr extends Component {
// only show tooltip when active
if (tooltip.opacity === 0) {
tooltipEl.style.opacity = 0;
return;
return;
}
let offsetX = 0;
@ -190,7 +190,7 @@ export default class PaidMrr extends Component {
tooltipEl.style.opacity = 1;
tooltipEl.style.position = 'absolute';
tooltipEl.style.left = tooltip.x - offsetX + 'px';
tooltipEl.style.top = tooltip.y + 'px';
tooltipEl.style.top = tooltip.y + 'px';
},
callbacks: {
label: (tooltipItems, data) => {

View File

@ -1,5 +1,5 @@
import Component from '@glimmer/component';
import moment from 'moment';
import moment from 'moment-timezone';
import {htmlSafe} from '@ember/template';
import {isArray} from '@ember/array';
import {isServerUnreachableError} from 'ghost-admin/services/ajax';

View File

@ -1,5 +1,5 @@
import Component from '@glimmer/component';
import moment from 'moment';
import moment from 'moment-timezone';
import {action} from '@ember/object';
import {inject as service} from '@ember/service';

View File

@ -1,5 +1,5 @@
import Component from '@glimmer/component';
import moment from 'moment';
import moment from 'moment-timezone';
import {action} from '@ember/object';
import {isBlank} from '@ember/utils';
import {tracked} from '@glimmer/tracking';

View File

@ -1,6 +1,6 @@
import Component from '@ember/component';
import classic from 'ember-classic-decorator';
import moment from 'moment';
import moment from 'moment-timezone';
import {action, computed} from '@ember/object';
import {isBlank, isEmpty} from '@ember/utils';
import {or, reads} from '@ember/object/computed';

View File

@ -1,5 +1,5 @@
import Component from '@glimmer/component';
import moment from 'moment';
import moment from 'moment-timezone';
import {action} from '@ember/object';
import {getNonDecimal, getSymbol} from 'ghost-admin/utils/currency';
import {inject as service} from '@ember/service';

View File

@ -1,7 +1,7 @@
import Component from '@ember/component';
import boundOneWay from 'ghost-admin/utils/bound-one-way';
import classic from 'ember-classic-decorator';
import moment from 'moment';
import moment from 'moment-timezone';
import {action, computed} from '@ember/object';
import {alias, or} from '@ember/object/computed';
import {inject as service} from '@ember/service';

View File

@ -1,6 +1,6 @@
import Component from '@ember/component';
import classic from 'ember-classic-decorator';
import moment from 'moment';
import moment from 'moment-timezone';
import {action, computed} from '@ember/object';
import {classNames} from '@ember-decorators/component';
import {mapBy} from '@ember/object/computed';

View File

@ -1,6 +1,6 @@
import Component from '@ember/component';
import classic from 'ember-classic-decorator';
import moment from 'moment';
import moment from 'moment-timezone';
import {computed} from '@ember/object';
import {tagName} from '@ember-decorators/component';

View File

@ -1,5 +1,5 @@
import Component from '@glimmer/component';
import moment from 'moment';
import moment from 'moment-timezone';
import {action} from '@ember/object';
import {isNotFoundError} from 'ember-ajax/errors';
import {inject as service} from '@ember/service';

View File

@ -1,5 +1,5 @@
import Component from '@glimmer/component';
import moment from 'moment';
import moment from 'moment-timezone';
import nql from '@tryghost/nql-lang';
import {TrackedArray} from 'tracked-built-ins';
import {action} from '@ember/object';
@ -196,7 +196,7 @@ export default class MembersFilter extends Component {
/**
* This method is not super clean as it uses did-update, but for now this is required to make URL changes work
* properly.
* properly.
* Problem: filter parameter is changed in the members controller by modifying the URL directly
* -> the filters property is not updated in the members controller because the new parameter is not parsed again
* -> we need to listen for changes in the property and parse it again

View File

@ -1,7 +1,7 @@
import Component from '@glimmer/component';
import config from 'ghost-admin/config/environment';
import fetch from 'fetch';
import moment from 'moment';
import moment from 'moment-timezone';
import {action} from '@ember/object';
import {inject as service} from '@ember/service';
import {task} from 'ember-concurrency';

View File

@ -1,5 +1,5 @@
import ModalComponent from 'ghost-admin/components/modal-base';
import moment from 'moment';
import moment from 'moment-timezone';
// TODO: expose this via a helper
import {IMAGE_EXTENSIONS} from 'ghost-admin/components/gh-image-uploader';
import {action} from '@ember/object';

View File

@ -1,6 +1,6 @@
import ModalComponent from 'ghost-admin/components/modal-base';
import ghostPaths from 'ghost-admin/utils/ghost-paths';
import moment from 'moment';
import moment from 'moment-timezone';
import unparse from '@tryghost/members-csv/lib/unparse';
import {
AcceptedResponse,

View File

@ -1,5 +1,5 @@
import ModalComponent from 'ghost-admin/components/modal-base';
import moment from 'moment';
import moment from 'moment-timezone';
import {action} from '@ember/object';
import {inject as service} from '@ember/service';
import {task} from 'ember-concurrency';

View File

@ -6,7 +6,7 @@ import boundOneWay from 'ghost-admin/utils/bound-one-way';
import classic from 'ember-classic-decorator';
import config from 'ghost-admin/config/environment';
import isNumber from 'ghost-admin/utils/isNumber';
import moment from 'moment';
import moment from 'moment-timezone';
import {action, computed} from '@ember/object';
import {alias, mapBy} from '@ember/object/computed';
import {capitalize} from '@ember/string';

View File

@ -6,7 +6,7 @@ import boundOneWay from 'ghost-admin/utils/bound-one-way';
import classic from 'ember-classic-decorator';
import config from 'ghost-admin/config/environment';
import isNumber from 'ghost-admin/utils/isNumber';
import moment from 'moment';
import moment from 'moment-timezone';
import {action, computed} from '@ember/object';
import {alias, mapBy} from '@ember/object/computed';
import {capitalize} from '@ember/string';

View File

@ -1,7 +1,7 @@
import Controller, {inject as controller} from '@ember/controller';
import EmberObject, {action, defineProperty} from '@ember/object';
import boundOneWay from 'ghost-admin/utils/bound-one-way';
import moment from 'moment';
import moment from 'moment-timezone';
import {inject as service} from '@ember/service';
import {task} from 'ember-concurrency';
import {tracked} from '@glimmer/tracking';

View File

@ -4,7 +4,7 @@ import BulkRemoveMembersLabelModal from '../components/members/modals/bulk-remov
import BulkUnsubscribeMembersModal from '../components/members/modals/bulk-unsubscribe';
import Controller from '@ember/controller';
import ghostPaths from 'ghost-admin/utils/ghost-paths';
import moment from 'moment';
import moment from 'moment-timezone';
import {A} from '@ember/array';
import {action} from '@ember/object';
import {capitalize} from '@ember/string';

View File

@ -1,5 +1,5 @@
import Helper from '@ember/component/helper';
import moment from 'moment';
import moment from 'moment-timezone';
import {assert} from '@ember/debug';
import {inject as service} from '@ember/service';

View File

@ -1,4 +1,4 @@
import moment from 'moment';
import moment from 'moment-timezone';
import {Resource} from 'ember-could-get-used-to-this';
import {TrackedArray} from 'tracked-built-ins';
import {action} from '@ember/object';

View File

@ -1,5 +1,5 @@
import Helper from '@ember/component/helper';
import moment from 'moment';
import moment from 'moment-timezone';
import {inject as service} from '@ember/service';
export default class IsMomentToday extends Helper {

View File

@ -1,4 +1,4 @@
import moment from 'moment';
import moment from 'moment-timezone';
import {Resource} from 'ember-could-get-used-to-this';
import {TrackedArray} from 'tracked-built-ins';
import {action} from '@ember/object';
@ -17,7 +17,7 @@ export default class MembersEventsFetcher extends Resource {
@tracked errorMessage = null;
@tracked hasReachedEnd = false;
/**
/**
* Keep track whether we have multiple newsletters (required for parsing events)
*/
@tracked hasMultipleNewsletters = null;

View File

@ -1,5 +1,5 @@
import Helper from '@ember/component/helper';
import moment from 'moment';
import moment from 'moment-timezone';
import {inject as service} from '@ember/service';
export default class MomentSiteTz extends Helper {

View File

@ -1,4 +1,4 @@
import moment from 'moment';
import moment from 'moment-timezone';
import {helper} from '@ember/component/helper';
export function mostRecentlyUpdated(objs) {

View File

@ -1,5 +1,5 @@
import Helper from '@ember/component/helper';
import moment from 'moment';
import moment from 'moment-timezone';
import {getNonDecimal, getSymbol} from 'ghost-admin/utils/currency';
import {inject as service} from '@ember/service';

View File

@ -2,7 +2,7 @@ import Ember from 'ember';
import Model, {attr, belongsTo, hasMany} from '@ember-data/model';
import ValidationEngine from 'ghost-admin/mixins/validation-engine';
import boundOneWay from 'ghost-admin/utils/bound-one-way';
import moment from 'moment';
import moment from 'moment-timezone';
import {BLANK_DOC as BLANK_MOBILEDOC} from 'koenig-editor/components/koenig-editor';
import {compare, isBlank} from '@ember/utils';
import {computed, observer} from '@ember/object';
@ -260,7 +260,7 @@ export default Model.extend(Comparable, ValidationEngine, {
if (!this.count || !this.count.clicks) {
return 0;
}
return Math.round(this.count.clicks / this.email.emailCount * 100);
}),

View File

@ -1,7 +1,7 @@
import AjaxService from 'ember-ajax/services/ajax';
import classic from 'ember-classic-decorator';
import config from 'ghost-admin/config/environment';
import moment from 'moment';
import moment from 'moment-timezone';
import {AjaxError, isAjaxError, isForbiddenError} from 'ember-ajax/errors';
import {captureMessage} from '@sentry/browser';
import {get} from '@ember/object';

View File

@ -1,7 +1,7 @@
import Service from '@ember/service';
import classic from 'ember-classic-decorator';
import config from 'ghost-admin/config/environment';
import moment from 'moment';
import moment from 'moment-timezone';
import {run} from '@ember/runloop';
const ONE_SECOND = 1000;

View File

@ -1,5 +1,5 @@
import Service, {inject as service} from '@ember/service';
import moment from 'moment';
import moment from 'moment-timezone';
import {task} from 'ember-concurrency';
import {tracked} from '@glimmer/tracking';

View File

@ -1,5 +1,5 @@
import Service, {inject as service} from '@ember/service';
import moment from 'moment';
import moment from 'moment-timezone';
import {action} from '@ember/object';
import {ghPluralize} from 'ghost-admin/helpers/gh-pluralize';
import {task} from 'ember-concurrency';

View File

@ -1,5 +1,5 @@
import Service, {inject as service} from '@ember/service';
import moment from 'moment';
import moment from 'moment-timezone';
import {task} from 'ember-concurrency';
import {tracked} from '@glimmer/tracking';

View File

@ -1,6 +1,6 @@
import Service, {inject as service} from '@ember/service';
import fetch from 'fetch';
import moment from 'moment';
import moment from 'moment-timezone';
import {action, computed} from '@ember/object';
import {isEmpty} from '@ember/utils';
import {task} from 'ember-concurrency';

View File

@ -1,5 +1,5 @@
import Transform from '@ember-data/serializer/transform';
import moment from 'moment';
import moment from 'moment-timezone';
export default class MomentDate extends Transform {
deserialize(serialized) {

View File

@ -1,5 +1,5 @@
import Transform from '@ember-data/serializer/transform';
import moment from 'moment';
import moment from 'moment-timezone';
export default class MomentUtc extends Transform {
deserialize(serialized) {

View File

@ -1,4 +1,4 @@
import moment from 'moment';
import moment from 'moment-timezone';
import {action, get} from '@ember/object';
import {task} from 'ember-concurrency';
import {tracked} from '@glimmer/tracking';

View File

@ -1,5 +1,5 @@
import BaseValidator from './base';
import moment from 'moment';
import moment from 'moment-timezone';
import validator from 'validator';
import {isBlank, isEmpty, isPresent} from '@ember/utils';

View File

@ -33,10 +33,6 @@ module.exports = function (environment) {
'ember-simple-auth': { },
moment: {
includeTimezone: 'all'
},
'@sentry/ember': {
disablePerformance: true,
sentry: {}

View File

@ -0,0 +1,10 @@
/* eslint-env node */
'use strict';
module.exports = {
name: 'ember-power-calendar-moment',
isDevelopingAddon() {
return true;
}
};

View File

@ -0,0 +1,12 @@
{
"name": "ember-power-calendar-moment",
"version": "0.0.1",
"description": "Blank addon to avoid ember-power-calendar complaining about missing package. The actual package code is in ember-power-calendar-utils.",
"license": "MIT",
"private": true,
"keywords": [
"ember-addon"
],
"dependencies": {
}
}

View File

@ -0,0 +1,165 @@
import moment from 'moment-timezone';
export function add(date, quantity, unit) {
return moment(date)
.add(quantity, unit)
.toDate();
}
export function formatDate(date, format, locale = null) {
if (locale) {
return withLocale(locale, () => moment(date).format(format));
} else {
return moment(date).format(format);
}
}
export function startOf(date, unit) {
return moment(date)
.startOf(unit)
.toDate();
}
export function endOf(date, unit) {
return moment(date)
.endOf(unit)
.toDate();
}
export function weekday(date) {
return moment(date).weekday();
}
export function isoWeekday(date) {
return moment(date).isoWeekday();
}
export function getWeekdaysShort() {
return moment.weekdaysShort();
}
export function getWeekdaysMin() {
return moment.weekdaysMin();
}
export function getWeekdays() {
return moment.weekdays();
}
export function isAfter(date1, date2) {
return moment(date1).isAfter(date2);
}
export function isBefore(date1, date2) {
return moment(date1).isBefore(date2);
}
export function isSame(date1, date2, unit) {
return moment(date1).isSame(date2, unit);
}
export function isBetween(date, start, end, unit, inclusivity) {
return moment(date).isBetween(start, end, unit, inclusivity);
}
export function diff(date1, date2) {
return moment(date1).diff(date2);
}
export function normalizeDate(dateOrMoment) {
if (
dateOrMoment === undefined ||
dateOrMoment === null ||
dateOrMoment === '' ||
dateOrMoment instanceof Date
) {
return dateOrMoment;
} else {
return dateOrMoment.toDate();
}
}
export function normalizeRangeActionValue(val) {
return {
date: val.date,
moment: {
start: val.date.start ? moment(val.date.start) : val.date.start,
end: val.date.end ? moment(val.date.end) : val.date.end
}
};
}
export function normalizeMultipleActionValue(val) {
return {
date: val.date,
moment: val.date ? val.date.map(e => moment(e)) : val.date
};
}
export function normalizeCalendarDay(day) {
day.moment = moment(day.date);
return day;
}
export function withLocale(locale, fn) {
let returnValue;
if (locale) {
let previousLocale = moment.locale();
moment.locale(locale);
returnValue = fn();
moment.locale(previousLocale);
} else {
returnValue = fn();
}
return returnValue;
}
export function normalizeCalendarValue(value) {
if (value) {
return {date: value.date, moment: value.date ? moment(value.date) : undefined};
}
return {date: undefined, moment: undefined};
}
export function normalizeDuration(value) {
if (value === null) {
return null;
}
if (moment.isDuration(value)) {
return value.asMilliseconds();
}
if (typeof value === 'number') {
return value;
}
if (typeof value === 'string') {
let [, quantity, units] = value.match(/(\d+)(.*)/);
units = units.trim() || 'days';
return moment.duration(parseInt(quantity, 10), units).asMilliseconds();
}
}
export function getDefaultLocale() {
return moment.locale();
}
export function localeStartOfWeek(locale) {
let now = new Date();
let day = withLocale(locale, () => formatDate(startOf(now, 'week'), 'dddd'));
let idx = withLocale(locale, getWeekdays).indexOf(day);
return idx >= 0 ? idx : 0;
}
export function startOfWeek(day, startOfWeek) {
while (isoWeekday(day) % 7 !== startOfWeek) {
day = add(day, -1, 'day');
}
return day;
}
export function endOfWeek(day, startOfWeek) {
let eow = (startOfWeek + 6) % 7;
while (isoWeekday(day) % 7 !== eow) {
day = add(day, 1, 'day');
}
return day;
}

View File

@ -0,0 +1,10 @@
/* eslint-env node */
'use strict';
module.exports = {
name: 'ember-power-calendar-utils',
isDevelopingAddon() {
return true;
}
};

View File

@ -0,0 +1,14 @@
{
"name": "ember-power-calendar-utils",
"version": "0.0.1",
"description": "Copy of ember-power-calendar-moment without the ember-cli-moment-shim dependency.",
"license": "MIT",
"private": true,
"keywords": [
"ember-addon"
],
"dependencies": {
"ember-cli-babel": "7.26.11",
"moment-timezone": "0.5.23"
}
}

View File

@ -1,4 +1,4 @@
import moment from 'moment';
import moment from 'moment-timezone';
import {Response} from 'miragejs';
import {paginatedResponse} from '../utils';

View File

@ -1,4 +1,4 @@
import moment from 'moment';
import moment from 'moment-timezone';
import {Response} from 'miragejs';
import {paginatedResponse} from '../utils';

View File

@ -1,5 +1,5 @@
import faker from 'faker';
import moment from 'moment';
import moment from 'moment-timezone';
import nql from '@tryghost/nql';
import {Response} from 'miragejs';
import {extractFilterParam, paginateModelCollection} from '../utils';

View File

@ -1,4 +1,4 @@
import moment from 'moment';
import moment from 'moment-timezone';
import {Response} from 'miragejs';
import {dasherize} from '@ember/string';
import {isArray} from '@ember/array';

View File

@ -1,4 +1,4 @@
import moment from 'moment';
import moment from 'moment-timezone';
import {Response} from 'miragejs';
import {dasherize} from '@ember/string';
import {extractFilterParam, paginateModelCollection} from '../utils';

View File

@ -1,4 +1,4 @@
import moment from 'moment';
import moment from 'moment-timezone';
import {Factory} from 'miragejs';
export default Factory.extend({

View File

@ -1,4 +1,4 @@
import moment from 'moment';
import moment from 'moment-timezone';
import {Factory} from 'miragejs';
export default Factory.extend({

View File

@ -1,4 +1,4 @@
import moment from 'moment';
import moment from 'moment-timezone';
import {Factory} from 'miragejs';
export default Factory.extend({

View File

@ -1,4 +1,4 @@
import moment from 'moment';
import moment from 'moment-timezone';
import {Factory} from 'miragejs';
export default Factory.extend({

View File

@ -1,5 +1,5 @@
import faker from 'faker';
import moment from 'moment';
import moment from 'moment-timezone';
import {Factory} from 'miragejs';
const EVENT_TYPES = [

View File

@ -1,5 +1,5 @@
import faker from 'faker';
import moment from 'moment';
import moment from 'moment-timezone';
import {Factory, trait} from 'miragejs';
let randomDate = function randomDate(start = moment().subtract(30, 'days').toDate(), end = new Date()) {

View File

@ -1,5 +1,5 @@
import faker from 'faker';
import moment from 'moment';
import moment from 'moment-timezone';
import {Factory} from 'miragejs';
let randomDate = function randomDate(start = moment().subtract(30, 'days').toDate(), end = new Date()) {

View File

@ -1,4 +1,4 @@
import moment from 'moment';
import moment from 'moment-timezone';
import {AVAILABLE_EVENTS} from 'ghost-admin/helpers/event-name';
import {Factory} from 'miragejs';

View File

@ -1,5 +1,5 @@
/* eslint-disable camelcase */
import moment from 'moment';
import moment from 'moment-timezone';
let id = 0;

View File

@ -81,7 +81,6 @@
"ember-cli-htmlbars": "6.1.1",
"ember-cli-inject-live-reload": "2.1.0",
"ember-cli-mirage": "2.4.0",
"ember-cli-moment-shim": "3.8.0",
"ember-cli-node-assets": "0.2.2",
"ember-cli-postcss": "6.0.1",
"ember-cli-shims": "1.2.0",
@ -108,7 +107,6 @@
"ember-modifier": "3.2.7",
"ember-moment": "10.0.0",
"ember-one-way-select": "4.0.1",
"ember-power-calendar-moment": "0.1.7",
"ember-power-datepicker": "cibernox/ember-power-datepicker",
"ember-power-select": "4.1.5",
"ember-resolver": "8.0.3",
@ -138,6 +136,7 @@
"markdown-it-sub": "1.0.0",
"markdown-it-sup": "1.0.0",
"miragejs": "0.1.45",
"moment-timezone": "0.5.23",
"normalize.css": "3.0.3",
"papaparse": "5.3.2",
"postcss-color-mod-function": "3.0.3",
@ -160,12 +159,16 @@
"ember-addon": {
"paths": [
"lib/asset-delivery",
"lib/koenig-editor"
"lib/koenig-editor",
"lib/ember-power-calendar-utils",
"lib/ember-power-calendar-moment"
]
},
"resolutions": {
"ember-basic-dropdown": "4.0.5",
"ember-in-viewport": "4.0.2"
"ember-in-viewport": "4.0.2",
"moment": "2.24.0",
"moment-timezone": "0.5.23"
},
"ember": {
"edition": "octane"
@ -174,4 +177,4 @@
"path-browserify": "1.0.1",
"webpack": "5.74.0"
}
}
}

View File

@ -1,5 +1,5 @@
import ctrlOrCmd from 'ghost-admin/utils/ctrl-or-cmd';
import moment from 'moment';
import moment from 'moment-timezone';
import sinon from 'sinon';
import {Response} from 'miragejs';
import {authenticateSession, invalidateSession} from 'ember-simple-auth/test-support';

View File

@ -1,5 +1,5 @@
import loginAsRole from '../../helpers/login-as-role';
import moment from 'moment';
import moment from 'moment-timezone';
import {blur, click, fillIn, find, findAll} from '@ember/test-helpers';
import {clickTrigger, selectChoose} from 'ember-power-select/test-support/helpers';
import {disableMailgun, enableMailgun} from '../../helpers/mailgun';

View File

@ -1,4 +1,4 @@
import moment from 'moment';
import moment from 'moment-timezone';
import {authenticateSession, invalidateSession} from 'ember-simple-auth/test-support';
import {beforeEach, describe, it} from 'mocha';
import {blur, click, currentURL, fillIn, find, findAll, settled} from '@ember/test-helpers';

View File

@ -1,4 +1,4 @@
import moment from 'moment';
import moment from 'moment-timezone';
import sinon from 'sinon';
import {authenticateSession} from 'ember-simple-auth/test-support';
import {blur, click, currentURL, fillIn, find, findAll, focus} from '@ember/test-helpers';

View File

@ -1,4 +1,4 @@
import moment from 'moment';
import moment from 'moment-timezone';
import {authenticateSession, invalidateSession} from 'ember-simple-auth/test-support';
import {beforeEach, describe, it} from 'mocha';
import {blur, click, currentURL, fillIn, find, findAll, settled} from '@ember/test-helpers';

View File

@ -1,5 +1,5 @@
import ctrlOrCmd from 'ghost-admin/utils/ctrl-or-cmd';
import moment from 'moment';
import moment from 'moment-timezone';
import windowProxy from 'ghost-admin/utils/window-proxy';
import {Response} from 'miragejs';
import {afterEach, beforeEach, describe, it} from 'mocha';

View File

@ -1,6 +1,6 @@
// import Service from '@ember/service';
import hbs from 'htmlbars-inline-precompile';
import moment from 'moment';
import moment from 'moment-timezone';
import sinon from 'sinon';
import {blur, click, fillIn, find, focus, render, triggerKeyEvent, typeIn} from '@ember/test-helpers';
import {datepickerSelect} from 'ember-power-datepicker/test-support';

View File

@ -1,6 +1,6 @@
import Service from '@ember/service';
import hbs from 'htmlbars-inline-precompile';
import moment from 'moment';
import moment from 'moment-timezone';
import sinon from 'sinon';
import {blur, click, fillIn, find, render} from '@ember/test-helpers';
import {datepickerSelect} from 'ember-power-datepicker/test-support';

View File

@ -1,5 +1,5 @@
import hbs from 'htmlbars-inline-precompile';
import moment from 'moment';
import moment from 'moment-timezone';
import sinon from 'sinon';
import {describe, it} from 'mocha';
import {expect} from 'chai';

View File

@ -1,4 +1,4 @@
import moment from 'moment';
import moment from 'moment-timezone';
import {describe, it} from 'mocha';
import {expect} from 'chai';
import {mostRecentlyUpdated} from 'ghost-admin/helpers/most-recently-updated';

View File

@ -1,4 +1,4 @@
import moment from 'moment';
import moment from 'moment-timezone';
import {describe, it} from 'mocha';
import {expect} from 'chai';
import {setupTest} from 'ember-mocha';

View File

@ -2164,7 +2164,7 @@
resolve "^1.20.0"
semver "^7.3.2"
"@embroider/macros@1.8.3", "@embroider/macros@^0.50.0 || ^1.0.0", "@embroider/macros@^1.0.0", "@embroider/macros@^1.6.0", "@embroider/macros@^1.8.0":
"@embroider/macros@1.8.3", "@embroider/macros@^1.0.0", "@embroider/macros@^1.6.0", "@embroider/macros@^1.8.0":
version "1.8.3"
resolved "https://registry.yarnpkg.com/@embroider/macros/-/macros-1.8.3.tgz#2f0961ab8871f6ad819630208031d705b357757e"
integrity sha512-gnIOfTL/pUkoD6oI7JyWOqXlVIUgZM+CnbH10/YNtZr2K0hij9eZQMdgjOZZVgN0rKOFw9dIREqc1ygrJHRYQA==
@ -9818,7 +9818,7 @@ ember-cli-babel-plugin-helpers@^1.0.0, ember-cli-babel-plugin-helpers@^1.1.0, em
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-babel@7.26.11, ember-cli-babel@^7.0.0, ember-cli-babel@^7.1.0, ember-cli-babel@^7.1.2, ember-cli-babel@^7.1.3, ember-cli-babel@^7.10.0, ember-cli-babel@^7.11.0, ember-cli-babel@^7.12.0, ember-cli-babel@^7.13.0, ember-cli-babel@^7.13.2, ember-cli-babel@^7.17.2, ember-cli-babel@^7.18.0, ember-cli-babel@^7.19.0, ember-cli-babel@^7.20.5, ember-cli-babel@^7.21.0, ember-cli-babel@^7.22.1, ember-cli-babel@^7.23.0, ember-cli-babel@^7.23.1, ember-cli-babel@^7.26.0, ember-cli-babel@^7.26.10, ember-cli-babel@^7.26.11, ember-cli-babel@^7.26.2, ember-cli-babel@^7.26.3, ember-cli-babel@^7.26.4, ember-cli-babel@^7.26.5, ember-cli-babel@^7.26.6, ember-cli-babel@^7.4.0, ember-cli-babel@^7.4.1, ember-cli-babel@^7.5.0, ember-cli-babel@^7.7.3, ember-cli-babel@~7.26.6:
ember-cli-babel@7.26.11, ember-cli-babel@^7.0.0, ember-cli-babel@^7.1.0, ember-cli-babel@^7.1.3, ember-cli-babel@^7.10.0, ember-cli-babel@^7.11.0, ember-cli-babel@^7.12.0, ember-cli-babel@^7.13.0, ember-cli-babel@^7.13.2, ember-cli-babel@^7.17.2, ember-cli-babel@^7.18.0, ember-cli-babel@^7.19.0, ember-cli-babel@^7.20.5, ember-cli-babel@^7.21.0, ember-cli-babel@^7.22.1, ember-cli-babel@^7.23.0, ember-cli-babel@^7.23.1, ember-cli-babel@^7.26.0, ember-cli-babel@^7.26.10, ember-cli-babel@^7.26.11, ember-cli-babel@^7.26.2, ember-cli-babel@^7.26.3, ember-cli-babel@^7.26.4, ember-cli-babel@^7.26.5, ember-cli-babel@^7.26.6, ember-cli-babel@^7.4.0, ember-cli-babel@^7.4.1, ember-cli-babel@^7.5.0, ember-cli-babel@^7.7.3, ember-cli-babel@~7.26.6:
version "7.26.11"
resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-7.26.11.tgz#50da0fe4dcd99aada499843940fec75076249a9f"
integrity sha512-JJYeYjiz/JTn34q7F5DSOjkkZqy8qwFOOxXfE6pe9yEJqWGu4qErKxlz8I22JoVEQ/aBUO+OcKTpmctvykM9YA==
@ -10029,11 +10029,6 @@ ember-cli-htmlbars@^5.0.0, ember-cli-htmlbars@^5.1.0, ember-cli-htmlbars@^5.1.2,
strip-bom "^4.0.0"
walk-sync "^2.2.0"
ember-cli-import-polyfill@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/ember-cli-import-polyfill/-/ember-cli-import-polyfill-0.2.0.tgz#c1a08a8affb45c97b675926272fe78cf4ca166f2"
integrity sha512-vq19edejqzNN3u4ZtETSPqppLrDHSh7LwC6nHaqV7gddJQMVgCtu/fZzPAGM6WfrFK/4vwPMLYyu0c+3MbATvQ==
ember-cli-inject-live-reload@2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/ember-cli-inject-live-reload/-/ember-cli-inject-live-reload-2.1.0.tgz#ef63c733c133024d5726405a3c247fa12e88a385"
@ -10069,23 +10064,6 @@ ember-cli-mirage@2.4.0:
lodash-es "^4.17.11"
miragejs "^0.1.43"
ember-cli-moment-shim@3.8.0, ember-cli-moment-shim@^3.7.1:
version "3.8.0"
resolved "https://registry.yarnpkg.com/ember-cli-moment-shim/-/ember-cli-moment-shim-3.8.0.tgz#dc61bbac9dce4963394e60dd42726d4ba38e2bc1"
integrity sha512-dN5ImjrjZevEqB7xhwFXaPWwxdKGSFiR1kqy9gDVB+A5EGnhCL1uveKugcyJE/MICVhXUAHBUu6G2LFWEPF2YA==
dependencies:
broccoli-funnel "^2.0.0"
broccoli-merge-trees "^2.0.0"
broccoli-source "^1.1.0"
broccoli-stew "^1.5.0"
chalk "^1.1.3"
ember-cli-babel "^7.1.2"
ember-cli-import-polyfill "^0.2.0"
ember-get-config ""
lodash.defaults "^4.2.0"
moment "^2.19.3"
moment-timezone "^0.5.13"
ember-cli-node-assets@0.2.2, ember-cli-node-assets@^0.2.2:
version "0.2.2"
resolved "https://registry.yarnpkg.com/ember-cli-node-assets/-/ember-cli-node-assets-0.2.2.tgz#d2d55626e7cc6619f882d7fe55751f9266022708"
@ -10595,14 +10573,6 @@ ember-fetch@8.1.2:
node-fetch "^2.6.1"
whatwg-fetch "^3.6.2"
ember-get-config@:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ember-get-config/-/ember-get-config-2.1.1.tgz#bede76c25d95dbefab8d30064abf7aa00bc19235"
integrity sha512-uNmv1cPG/4qsac8oIf5txJ2FZ8p88LEpG4P3dNcjsJS98Y8hd0GPMFwVqpnzI78Lz7VYRGQWY4jnE4qm5R3j4g==
dependencies:
"@embroider/macros" "^0.50.0 || ^1.0.0"
ember-cli-babel "^7.26.6"
"ember-get-config@0.2.4 - 0.5.0":
version "0.5.0"
resolved "https://registry.yarnpkg.com/ember-get-config/-/ember-get-config-0.5.0.tgz#8195f3e4c0ff0742182c81ae54aad78d07a24bcf"
@ -10786,15 +10756,6 @@ ember-one-way-select@4.0.1:
ember-cli-babel "^7.22.1"
ember-cli-htmlbars "^5.3.1"
ember-power-calendar-moment@0.1.7:
version "0.1.7"
resolved "https://registry.yarnpkg.com/ember-power-calendar-moment/-/ember-power-calendar-moment-0.1.7.tgz#2e79125f449bdcc94e62afff4e5411012792ed43"
integrity sha512-tkxGrSfJJq3MkgDQXfKr3o2vJp8kTokcyZnSxwGC1KByMv/TgtDp4+74cTzaK/Di0qnj5AYeeElwEEcGIn4F3A==
dependencies:
broccoli-funnel "^2.0.2"
ember-cli-babel "^7.7.3"
ember-cli-moment-shim "^3.7.1"
ember-power-calendar@^0.16.3:
version "0.16.5"
resolved "https://registry.yarnpkg.com/ember-power-calendar/-/ember-power-calendar-0.16.5.tgz#e09b5145f324be6657678e48abec2260b47889b8"
@ -17112,7 +17073,7 @@ mock-knex@TryGhost/mock-knex#8ecb8c227bf463c991c3d820d33f59efc3ab9682:
lodash "^4.14.2"
semver "^5.3.0"
moment-timezone@0.5.23, moment-timezone@0.5.34, moment-timezone@^0.5.13, moment-timezone@^0.5.23, moment-timezone@^0.5.31, moment-timezone@^0.5.33:
moment-timezone@0.5.23, moment-timezone@0.5.34, moment-timezone@^0.5.23, moment-timezone@^0.5.31, moment-timezone@^0.5.33:
version "0.5.23"
resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.23.tgz#7cbb00db2c14c71b19303cb47b0fb0a6d8651463"
integrity sha512-WHFH85DkCfiNMDX5D3X7hpNH3/PUhjTGcD0U1SgfBGZxJ3qUmJh5FdvaFjcClxOvB3rzdfj4oRffbI38jEnC1w==