ghost 4.15.0 → 4.17.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +7 -1
- package/content/themes/casper/assets/built/screen.css +1 -1
- package/content/themes/casper/assets/built/screen.css.map +1 -1
- package/content/themes/casper/assets/css/screen.css +1 -1
- package/content/themes/casper/default.hbs +2 -2
- package/content/themes/casper/package.json +1 -1
- package/content/themes/casper/page.hbs +28 -26
- package/content/themes/casper/partials/post-card.hbs +2 -2
- package/content/themes/casper/post.hbs +67 -65
- package/content/themes/casper/tag.hbs +2 -2
- package/core/boot.js +7 -7
- package/core/bridge.js +4 -3
- package/core/built/assets/{chunk.3.4b1d9e20e57164ac9c29.js → chunk.3.b80d3e1e6b8556aaff3c.js} +72 -71
- package/core/built/assets/ghost-dark-f7bf2dd8d8c702716f75bfa4ccd92df2.css +1 -0
- package/core/built/assets/{ghost.min-e35cfee26d942c364166f57f3dcc9e75.js → ghost.min-52a5420ffcea6bf17761b5c59cf020e2.js} +979 -908
- package/core/built/assets/ghost.min-741246f42f000c073999a5363434ea2c.css +1 -0
- package/core/built/assets/icons/discount-bubble.svg +1 -0
- package/core/built/assets/{vendor.min-ca33abc718f21a51327841d58f8875d0.js → vendor.min-1bfc9d56d27508db88ef417deb55f16f.js} +454 -434
- package/core/frontend/apps/amp/lib/helpers/amp_analytics.js +2 -2
- package/core/frontend/apps/amp/lib/helpers/amp_components.js +2 -1
- package/core/frontend/apps/amp/lib/helpers/amp_content.js +5 -1
- package/core/frontend/apps/amp/lib/helpers/amp_style.js +1 -1
- package/core/frontend/apps/amp/lib/router.js +8 -4
- package/core/frontend/apps/private-blogging/index.js +13 -5
- package/core/frontend/apps/private-blogging/lib/helpers/input_password.js +1 -1
- package/core/frontend/apps/private-blogging/lib/middleware.js +8 -3
- package/core/frontend/helpers/asset.js +10 -2
- package/core/frontend/helpers/author.js +5 -3
- package/core/frontend/helpers/authors.js +4 -3
- package/core/frontend/helpers/body_class.js +1 -1
- package/core/frontend/helpers/cancel_link.js +9 -2
- package/core/frontend/helpers/concat.js +1 -1
- package/core/frontend/helpers/content.js +1 -1
- package/core/frontend/helpers/date.js +1 -1
- package/core/frontend/helpers/encode.js +1 -1
- package/core/frontend/helpers/excerpt.js +2 -1
- package/core/frontend/helpers/facebook_url.js +2 -1
- package/core/frontend/helpers/foreach.js +11 -2
- package/core/frontend/helpers/get.js +14 -3
- package/core/frontend/helpers/ghost_foot.js +2 -1
- package/core/frontend/helpers/ghost_head.js +10 -1
- package/core/frontend/helpers/has.js +8 -3
- package/core/frontend/helpers/img_url.js +9 -3
- package/core/frontend/helpers/is.js +7 -2
- package/core/frontend/helpers/lang.js +1 -1
- package/core/frontend/helpers/link.js +11 -2
- package/core/frontend/helpers/link_class.js +11 -2
- package/core/frontend/helpers/match.js +12 -3
- package/core/frontend/helpers/navigation.js +13 -4
- package/core/frontend/helpers/pagination.js +15 -5
- package/core/frontend/helpers/plural.js +8 -2
- package/core/frontend/helpers/post_class.js +1 -1
- package/core/frontend/helpers/prev_post.js +9 -2
- package/core/frontend/helpers/price.js +11 -6
- package/core/frontend/helpers/products.js +2 -1
- package/core/frontend/helpers/reading_time.js +4 -2
- package/core/frontend/helpers/t.js +1 -1
- package/core/frontend/helpers/tags.js +3 -1
- package/core/frontend/helpers/title.js +1 -1
- package/core/frontend/helpers/twitter_url.js +2 -1
- package/core/frontend/helpers/url.js +3 -1
- package/core/frontend/services/proxy.js +34 -57
- package/core/frontend/services/rendering.js +24 -0
- package/core/frontend/services/routing/controllers/channel.js +6 -2
- package/core/frontend/services/routing/controllers/collection.js +6 -2
- package/core/frontend/services/routing/middlewares/page-param.js +6 -2
- package/core/frontend/services/theme-engine/middleware.js +23 -6
- package/core/frontend/services/theme-engine/preview.js +31 -8
- package/core/server/adapters/scheduling/post-scheduling/scheduler-intergation.js +6 -4
- package/core/server/adapters/storage/LocalFileStorage.js +10 -4
- package/core/server/api/canary/custom-theme-settings.js +22 -0
- package/core/server/api/canary/index.js +4 -0
- package/core/server/api/canary/members.js +1 -1
- package/core/server/api/canary/redirects.js +5 -5
- package/core/server/api/canary/settings.js +16 -148
- package/core/server/api/canary/utils/serializers/output/custom-theme-settings.js +13 -0
- package/core/server/api/canary/utils/serializers/output/index.js +4 -0
- package/core/server/api/canary/utils/validators/input/settings.js +23 -1
- package/core/server/api/v2/redirects.js +3 -3
- package/core/server/api/v2/settings.js +3 -4
- package/core/server/api/v3/redirects.js +5 -5
- package/core/server/api/v3/settings.js +16 -136
- package/core/server/api/v3/utils/validators/input/settings.js +23 -1
- package/core/server/data/db/state-manager.js +1 -1
- package/core/server/data/exporter/table-lists.js +3 -1
- package/core/server/data/importer/import-manager.js +398 -0
- package/core/server/data/importer/importers/data/data-importer.js +162 -0
- package/core/server/data/importer/importers/data/index.js +1 -162
- package/core/server/data/importer/index.js +1 -379
- package/core/server/data/migrations/versions/4.16/01-add-custom-theme-settings-table.js +9 -0
- package/core/server/data/migrations/versions/4.17/01-add-custom-theme-settings-permissions.js +21 -0
- package/core/server/data/migrations/versions/4.17/02-add-offers-table.js +19 -0
- package/core/server/data/migrations/versions/4.17/03-add-offers-permissions.js +35 -0
- package/core/server/data/schema/fixtures/fixtures.json +32 -0
- package/core/server/data/schema/schema.js +33 -0
- package/core/server/models/custom-theme-setting.js +9 -0
- package/core/server/models/index.js +2 -0
- package/core/server/services/custom-theme-settings.js +8 -0
- package/core/server/services/members/api.js +4 -1
- package/core/server/services/redirects/index.js +15 -0
- package/core/{frontend → server}/services/redirects/settings.js +13 -6
- package/core/server/services/redirects/validation.js +44 -0
- package/core/{frontend/services/settings → server/services/route-settings}/default-routes.yaml +0 -0
- package/core/server/services/route-settings/default-settings-manager.js +62 -0
- package/core/server/services/route-settings/index.js +32 -1
- package/core/server/services/route-settings/route-settings.js +38 -12
- package/core/server/services/route-settings/settings-loader.js +102 -0
- package/core/{frontend/services/settings → server/services/route-settings}/validate.js +38 -28
- package/core/server/services/route-settings/yaml-parser.js +53 -0
- package/core/server/services/settings/index.js +13 -16
- package/core/server/services/settings/settings-bread-service.js +188 -0
- package/core/server/services/settings/settings-utils.js +32 -0
- package/core/server/services/themes/ThemeStorage.js +5 -4
- package/core/server/services/themes/activation-bridge.js +14 -0
- package/core/server/services/themes/validate.js +5 -2
- package/core/server/web/admin/views/default-prod.html +4 -4
- package/core/server/web/admin/views/default.html +4 -4
- package/core/server/web/api/canary/admin/routes.js +5 -1
- package/core/server/web/members/app.js +3 -0
- package/core/server/web/oauth/app.js +7 -8
- package/core/server/web/shared/middlewares/custom-redirects.js +82 -59
- package/core/server/web/site/routes.js +2 -2
- package/core/shared/config/defaults.json +2 -2
- package/core/shared/config/overrides.json +1 -1
- package/core/shared/custom-theme-settings-cache.js +3 -0
- package/core/shared/i18n/translations/en.json +2 -13
- package/core/shared/labs.js +2 -2
- package/package.json +42 -41
- package/yarn.lock +916 -901
- package/core/built/assets/ghost-dark-faf931d90e92535e6c03ca16793cbe7b.css +0 -1
- package/core/built/assets/ghost.min-7aa074ad556a8455155ac88ceaca03ab.css +0 -1
- package/core/frontend/services/redirects/index.js +0 -9
- package/core/frontend/services/redirects/validation.js +0 -28
- package/core/frontend/services/settings/ensure-settings.js +0 -47
- package/core/frontend/services/settings/index.js +0 -104
- package/core/frontend/services/settings/loader.js +0 -89
- package/core/frontend/services/settings/yaml-parser.js +0 -31
|
@@ -5,92 +5,115 @@ const debug = require('@tryghost/debug')('web:shared:mw:custom-redirects');
|
|
|
5
5
|
const config = require('../../../../shared/config');
|
|
6
6
|
const urlUtils = require('../../../../shared/url-utils');
|
|
7
7
|
const errors = require('@tryghost/errors');
|
|
8
|
-
const i18n = require('../../../../shared/i18n');
|
|
9
8
|
const logging = require('@tryghost/logging');
|
|
10
|
-
const redirectsService = require('
|
|
9
|
+
const redirectsService = require('../../../services/redirects');
|
|
10
|
+
const labsService = require('../../../../shared/labs');
|
|
11
|
+
|
|
12
|
+
const messages = {
|
|
13
|
+
customRedirectsRegistrationFailure: 'Could not register custom redirects.'
|
|
14
|
+
};
|
|
11
15
|
|
|
12
16
|
const _private = {};
|
|
13
17
|
|
|
14
18
|
let customRedirectsRouter;
|
|
15
19
|
|
|
16
|
-
|
|
20
|
+
/**
|
|
21
|
+
*
|
|
22
|
+
* @param {Object} router instance of Express Router to decorate with redirects
|
|
23
|
+
* @param {Object} redirects valid redirects JSON
|
|
24
|
+
*
|
|
25
|
+
* @returns {Object} instance of express.Router express router handling redirects based on config
|
|
26
|
+
*/
|
|
27
|
+
_private.registerRoutes = (router, redirects) => {
|
|
17
28
|
debug('redirects loading');
|
|
18
29
|
|
|
19
|
-
|
|
30
|
+
if (labsService.isSet('offers')) {
|
|
31
|
+
redirects.unshift({
|
|
32
|
+
from: '/zimo50',
|
|
33
|
+
to: '/#/portal/offers/abcdefuckoff'
|
|
34
|
+
});
|
|
35
|
+
}
|
|
20
36
|
|
|
21
|
-
|
|
22
|
-
|
|
37
|
+
redirects.forEach((redirect) => {
|
|
38
|
+
/**
|
|
39
|
+
* Detect case insensitive modifier when regex is enclosed by
|
|
40
|
+
* / ... /i
|
|
41
|
+
*/
|
|
42
|
+
let options = '';
|
|
43
|
+
if (redirect.from.match(/^\/.*\/i$/)) {
|
|
44
|
+
redirect.from = redirect.from.slice(1, -2);
|
|
45
|
+
options = 'i';
|
|
46
|
+
}
|
|
23
47
|
|
|
24
|
-
|
|
48
|
+
/**
|
|
49
|
+
* always delete trailing slashes, doesn't matter if regex or not
|
|
50
|
+
* Example:
|
|
51
|
+
* - you define /my-blog-post-1/ as from property
|
|
52
|
+
* - /my-blog-post-1 or /my-blog-post-1/ should work
|
|
53
|
+
*/
|
|
25
54
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
* / ... /i
|
|
30
|
-
*/
|
|
31
|
-
let options = '';
|
|
32
|
-
if (redirect.from.match(/^\/.*\/i$/)) {
|
|
33
|
-
redirect.from = redirect.from.slice(1, -2);
|
|
34
|
-
options = 'i';
|
|
35
|
-
}
|
|
55
|
+
if (redirect.from.match(/\/$/)) {
|
|
56
|
+
redirect.from = redirect.from.slice(0, -1);
|
|
57
|
+
}
|
|
36
58
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
* - you define /my-blog-post-1/ as from property
|
|
41
|
-
* - /my-blog-post-1 or /my-blog-post-1/ should work
|
|
42
|
-
*/
|
|
59
|
+
if (redirect.from[redirect.from.length - 1] !== '$') {
|
|
60
|
+
redirect.from += '/?$';
|
|
61
|
+
}
|
|
43
62
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
63
|
+
debug('register', redirect.from);
|
|
64
|
+
router.get(new RegExp(redirect.from, options), function (req, res) {
|
|
65
|
+
const maxAge = redirect.permanent ? config.get('caching:customRedirects:maxAge') : 0;
|
|
66
|
+
const toURL = url.parse(redirect.to);
|
|
67
|
+
const toURLParams = querystring.parse(toURL.query);
|
|
68
|
+
const currentURL = url.parse(req.url);
|
|
69
|
+
const currentURLParams = querystring.parse(currentURL.query);
|
|
70
|
+
const params = Object.assign({}, currentURLParams, toURLParams);
|
|
71
|
+
const search = querystring.stringify(params);
|
|
47
72
|
|
|
48
|
-
|
|
49
|
-
|
|
73
|
+
toURL.pathname = currentURL.pathname.replace(new RegExp(redirect.from, options), toURL.pathname);
|
|
74
|
+
toURL.search = search !== '' ? `?${search}` : null;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Only if the URL is internal should we prepend the Ghost subdirectory
|
|
78
|
+
* @see https://github.com/TryGhost/Ghost/issues/10776
|
|
79
|
+
*/
|
|
80
|
+
if (!toURL.hostname) {
|
|
81
|
+
toURL.pathname = urlUtils.urlJoin(urlUtils.getSubdir(), toURL.pathname);
|
|
50
82
|
}
|
|
51
83
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
const maxAge = redirect.permanent ? config.get('caching:customRedirects:maxAge') : 0;
|
|
55
|
-
const toURL = url.parse(redirect.to);
|
|
56
|
-
const toURLParams = querystring.parse(toURL.query);
|
|
57
|
-
const currentURL = url.parse(req.url);
|
|
58
|
-
const currentURLParams = querystring.parse(currentURL.query);
|
|
59
|
-
const params = Object.assign({}, currentURLParams, toURLParams);
|
|
60
|
-
const search = querystring.stringify(params);
|
|
61
|
-
|
|
62
|
-
toURL.pathname = currentURL.pathname.replace(new RegExp(redirect.from, options), toURL.pathname);
|
|
63
|
-
toURL.search = search !== '' ? `?${search}` : null;
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Only if the URL is internal should we prepend the Ghost subdirectory
|
|
67
|
-
* @see https://github.com/TryGhost/Ghost/issues/10776
|
|
68
|
-
*/
|
|
69
|
-
if (!toURL.hostname) {
|
|
70
|
-
toURL.pathname = urlUtils.urlJoin(urlUtils.getSubdir(), toURL.pathname);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
res.set({
|
|
74
|
-
'Cache-Control': `public, max-age=${maxAge}`
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
res.redirect(redirect.permanent ? 301 : 302, url.format(toURL));
|
|
84
|
+
res.set({
|
|
85
|
+
'Cache-Control': `public, max-age=${maxAge}`
|
|
78
86
|
});
|
|
87
|
+
|
|
88
|
+
res.redirect(redirect.permanent ? 301 : 302, url.format(toURL));
|
|
79
89
|
});
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
debug('redirects loaded');
|
|
93
|
+
|
|
94
|
+
return router;
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
const loadRoutes = () => {
|
|
98
|
+
try {
|
|
99
|
+
customRedirectsRouter = express.Router('redirects');
|
|
100
|
+
|
|
101
|
+
const redirects = redirectsService.loadRedirectsFile();
|
|
102
|
+
redirectsService.validate(redirects);
|
|
103
|
+
|
|
104
|
+
_private.registerRoutes(customRedirectsRouter, redirects);
|
|
80
105
|
} catch (err) {
|
|
81
106
|
if (errors.utils.isIgnitionError(err)) {
|
|
82
107
|
logging.error(err);
|
|
83
108
|
} else {
|
|
84
109
|
logging.error(new errors.IncorrectUsageError({
|
|
85
|
-
message:
|
|
110
|
+
message: messages.customRedirectsRegistrationFailure,
|
|
86
111
|
context: err.message,
|
|
87
112
|
help: 'https://ghost.org/docs/themes/routing/#redirects',
|
|
88
113
|
err
|
|
89
114
|
}));
|
|
90
115
|
}
|
|
91
116
|
}
|
|
92
|
-
|
|
93
|
-
debug('redirects loaded');
|
|
94
117
|
};
|
|
95
118
|
|
|
96
119
|
/**
|
|
@@ -99,7 +122,7 @@ _private.registerRoutes = () => {
|
|
|
99
122
|
* - file loads synchronously, because we need to register the routes before anything else
|
|
100
123
|
*/
|
|
101
124
|
exports.use = function use(siteApp) {
|
|
102
|
-
|
|
125
|
+
loadRoutes();
|
|
103
126
|
|
|
104
127
|
// Recommended approach by express, see https://github.com/expressjs/express/issues/2596#issuecomment-81353034.
|
|
105
128
|
// As soon as the express router get's re-instantiated, the old router instance is not used anymore.
|
|
@@ -109,5 +132,5 @@ exports.use = function use(siteApp) {
|
|
|
109
132
|
};
|
|
110
133
|
|
|
111
134
|
exports.reload = function reload() {
|
|
112
|
-
|
|
135
|
+
loadRoutes();
|
|
113
136
|
};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
const debug = require('@tryghost/debug')('routing');
|
|
2
2
|
const routing = require('../../../frontend/services/routing');
|
|
3
|
-
const
|
|
3
|
+
const routeSettings = require('../../services/route-settings');
|
|
4
4
|
|
|
5
5
|
module.exports = function siteRoutes(options = {}) {
|
|
6
6
|
debug('site Routes', options);
|
|
7
|
-
options.routerSettings =
|
|
7
|
+
options.routerSettings = routeSettings.loadRouteSettingsSync();
|
|
8
8
|
return routing.bootstrap.init(options);
|
|
9
9
|
};
|
|
@@ -121,7 +121,7 @@
|
|
|
121
121
|
"emailAnalytics": true
|
|
122
122
|
},
|
|
123
123
|
"portal": {
|
|
124
|
-
"url": "https://unpkg.com/@tryghost/portal@~1.
|
|
125
|
-
"version": "1.
|
|
124
|
+
"url": "https://unpkg.com/@tryghost/portal@~1.11.0/umd/portal.min.js",
|
|
125
|
+
"version": "1.11"
|
|
126
126
|
}
|
|
127
127
|
}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"helperTemplates": "core/frontend/helpers/tpl/",
|
|
7
7
|
"adminViews": "core/server/web/admin/views/",
|
|
8
8
|
"defaultViews": "core/server/views/",
|
|
9
|
-
"defaultSettings": "core/
|
|
9
|
+
"defaultSettings": "core/server/services/route-settings/",
|
|
10
10
|
"internalAppPath": "core/frontend/apps/",
|
|
11
11
|
"internalAdaptersPath": "core/server/adapters/",
|
|
12
12
|
"migrationPath": "core/server/data/migrations",
|
|
@@ -106,8 +106,7 @@
|
|
|
106
106
|
},
|
|
107
107
|
"images": {
|
|
108
108
|
"invalidDimensions": "Could not fetch image dimensions."
|
|
109
|
-
}
|
|
110
|
-
"redirectsWrongFormat": "Incorrect redirects file format."
|
|
109
|
+
}
|
|
111
110
|
},
|
|
112
111
|
"config": {
|
|
113
112
|
"couldNotLocateConfigFile": {
|
|
@@ -157,8 +156,7 @@
|
|
|
157
156
|
"maintenance": "Site is currently undergoing maintenance, please wait a moment then retry.",
|
|
158
157
|
"maintenanceUrlService": "Site is starting up, please wait a moment then retry.",
|
|
159
158
|
"requiredOnFuture": "This will be required in future. Please see {link}",
|
|
160
|
-
"internalError": "Something went wrong."
|
|
161
|
-
"jsonParse": "Could not parse JSON: {context}."
|
|
159
|
+
"internalError": "Something went wrong."
|
|
162
160
|
},
|
|
163
161
|
"mail": {
|
|
164
162
|
"incompleteMessageData": {
|
|
@@ -539,15 +537,6 @@
|
|
|
539
537
|
}
|
|
540
538
|
},
|
|
541
539
|
"services": {
|
|
542
|
-
"settings": {
|
|
543
|
-
"yaml": {
|
|
544
|
-
"error": "Could not parse {file}: {context}.",
|
|
545
|
-
"help": "Check your {file} file for typos and fix the named issues.",
|
|
546
|
-
"validate": "The following definition \"{at}\" is invalid: {reason}"
|
|
547
|
-
},
|
|
548
|
-
"loader": "Error trying to load YAML setting for {setting} from '{path}'.",
|
|
549
|
-
"ensureSettings": "Error trying to access settings files in {path}."
|
|
550
|
-
},
|
|
551
540
|
"mega": {
|
|
552
541
|
"requestFailed": {
|
|
553
542
|
"error": "The email service was unable to send an email batch."
|
package/core/shared/labs.js
CHANGED
|
@@ -24,10 +24,10 @@ const BETA_FEATURES = [
|
|
|
24
24
|
|
|
25
25
|
const ALPHA_FEATURES = [
|
|
26
26
|
'oauthLogin',
|
|
27
|
-
'membersFiltering',
|
|
28
27
|
'emailOnlyPosts',
|
|
29
28
|
'customThemeSettings',
|
|
30
|
-
'membersActivity'
|
|
29
|
+
'membersActivity',
|
|
30
|
+
'offers'
|
|
31
31
|
];
|
|
32
32
|
|
|
33
33
|
module.exports.WRITABLE_KEYS_ALLOWLIST = [...BETA_FEATURES, ...ALPHA_FEATURES];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ghost",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.17.1",
|
|
4
4
|
"description": "The professional publishing platform",
|
|
5
5
|
"author": "Ghost Foundation",
|
|
6
6
|
"homepage": "https://ghost.org",
|
|
@@ -51,50 +51,51 @@
|
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
53
|
"@nexes/nql": "0.6.0",
|
|
54
|
-
"@sentry/node": "6.
|
|
55
|
-
"@tryghost/adapter-manager": "0.2.
|
|
54
|
+
"@sentry/node": "6.13.2",
|
|
55
|
+
"@tryghost/adapter-manager": "0.2.16",
|
|
56
56
|
"@tryghost/admin-api-schema": "2.6.0",
|
|
57
57
|
"@tryghost/bookshelf-plugins": "0.3.1",
|
|
58
|
-
"@tryghost/bootstrap-socket": "0.2.
|
|
58
|
+
"@tryghost/bootstrap-socket": "0.2.11",
|
|
59
59
|
"@tryghost/color-utils": "0.1.2",
|
|
60
|
-
"@tryghost/config-url-helpers": "0.1.
|
|
61
|
-
"@tryghost/constants": "0.1.
|
|
60
|
+
"@tryghost/config-url-helpers": "0.1.2",
|
|
61
|
+
"@tryghost/constants": "0.1.10",
|
|
62
|
+
"@tryghost/custom-theme-settings-service": "0.0.5",
|
|
62
63
|
"@tryghost/debug": "0.1.5",
|
|
63
|
-
"@tryghost/email-analytics-provider-mailgun": "1.0.
|
|
64
|
-
"@tryghost/email-analytics-service": "1.0.
|
|
65
|
-
"@tryghost/errors": "0.2.
|
|
64
|
+
"@tryghost/email-analytics-provider-mailgun": "1.0.2",
|
|
65
|
+
"@tryghost/email-analytics-service": "1.0.2",
|
|
66
|
+
"@tryghost/errors": "0.2.15",
|
|
66
67
|
"@tryghost/helpers": "1.1.52",
|
|
67
|
-
"@tryghost/image-transform": "1.0.
|
|
68
|
-
"@tryghost/job-manager": "0.8.
|
|
68
|
+
"@tryghost/image-transform": "1.0.15",
|
|
69
|
+
"@tryghost/job-manager": "0.8.9",
|
|
69
70
|
"@tryghost/kg-card-factory": "3.0.4",
|
|
70
71
|
"@tryghost/kg-default-atoms": "3.0.0",
|
|
71
72
|
"@tryghost/kg-default-cards": "5.0.7",
|
|
72
73
|
"@tryghost/kg-markdown-html-renderer": "5.0.5",
|
|
73
74
|
"@tryghost/kg-mobiledoc-html-renderer": "5.1.1",
|
|
74
|
-
"@tryghost/limit-service": "0.6.
|
|
75
|
+
"@tryghost/limit-service": "0.6.3",
|
|
75
76
|
"@tryghost/logging": "0.1.7",
|
|
76
|
-
"@tryghost/magic-link": "1.0.
|
|
77
|
-
"@tryghost/members-api": "1.
|
|
78
|
-
"@tryghost/members-csv": "1.1.
|
|
79
|
-
"@tryghost/members-importer": "0.3.
|
|
80
|
-
"@tryghost/members-ssr": "1.0.
|
|
81
|
-
"@tryghost/mw-session-from-token": "0.1.
|
|
82
|
-
"@tryghost/nodemailer": "0.3.
|
|
83
|
-
"@tryghost/package-json": "1.0.
|
|
84
|
-
"@tryghost/promise": "0.1.
|
|
77
|
+
"@tryghost/magic-link": "1.0.13",
|
|
78
|
+
"@tryghost/members-api": "1.39.1",
|
|
79
|
+
"@tryghost/members-csv": "1.1.7",
|
|
80
|
+
"@tryghost/members-importer": "0.3.3",
|
|
81
|
+
"@tryghost/members-ssr": "1.0.14",
|
|
82
|
+
"@tryghost/mw-session-from-token": "0.1.24",
|
|
83
|
+
"@tryghost/nodemailer": "0.3.3",
|
|
84
|
+
"@tryghost/package-json": "1.0.4",
|
|
85
|
+
"@tryghost/promise": "0.1.11",
|
|
85
86
|
"@tryghost/request": "0.1.5",
|
|
86
87
|
"@tryghost/root-utils": "0.3.4",
|
|
87
|
-
"@tryghost/security": "0.2.
|
|
88
|
-
"@tryghost/session-service": "0.1.
|
|
88
|
+
"@tryghost/security": "0.2.11",
|
|
89
|
+
"@tryghost/session-service": "0.1.26",
|
|
89
90
|
"@tryghost/social-urls": "0.1.26",
|
|
90
91
|
"@tryghost/string": "0.1.20",
|
|
91
|
-
"@tryghost/tpl": "0.1.
|
|
92
|
-
"@tryghost/update-check-service": "0.2.
|
|
92
|
+
"@tryghost/tpl": "0.1.5",
|
|
93
|
+
"@tryghost/update-check-service": "0.2.2",
|
|
93
94
|
"@tryghost/url-utils": "2.0.2",
|
|
94
95
|
"@tryghost/validator": "0.1.5",
|
|
95
96
|
"@tryghost/version": "0.1.4",
|
|
96
|
-
"@tryghost/vhost-middleware": "1.0.
|
|
97
|
-
"@tryghost/zip": "1.1.
|
|
97
|
+
"@tryghost/vhost-middleware": "1.0.17",
|
|
98
|
+
"@tryghost/zip": "1.1.16",
|
|
98
99
|
"amperize": "0.6.1",
|
|
99
100
|
"analytics-node": "5.1.0",
|
|
100
101
|
"bluebird": "3.7.2",
|
|
@@ -118,9 +119,9 @@
|
|
|
118
119
|
"express-session": "1.17.2",
|
|
119
120
|
"fs-extra": "10.0.0",
|
|
120
121
|
"ghost-storage-base": "0.0.6",
|
|
121
|
-
"glob": "7.
|
|
122
|
+
"glob": "7.2.0",
|
|
122
123
|
"got": "9.6.0",
|
|
123
|
-
"gscan": "4.
|
|
124
|
+
"gscan": "4.3.1",
|
|
124
125
|
"html-to-text": "5.1.1",
|
|
125
126
|
"image-size": "1.0.0",
|
|
126
127
|
"intl": "1.2.5",
|
|
@@ -134,15 +135,15 @@
|
|
|
134
135
|
"knex-migrator": "4.0.4",
|
|
135
136
|
"lodash": "4.17.21",
|
|
136
137
|
"mailgun-js": "0.22.0",
|
|
137
|
-
"metascraper": "5.24.
|
|
138
|
-
"metascraper-author": "5.24.
|
|
139
|
-
"metascraper-description": "5.24.
|
|
140
|
-
"metascraper-image": "5.24.
|
|
141
|
-
"metascraper-logo": "5.24.
|
|
142
|
-
"metascraper-logo-favicon": "5.24.
|
|
143
|
-
"metascraper-publisher": "5.24.
|
|
144
|
-
"metascraper-title": "5.24.
|
|
145
|
-
"metascraper-url": "5.24.
|
|
138
|
+
"metascraper": "5.24.7",
|
|
139
|
+
"metascraper-author": "5.24.7",
|
|
140
|
+
"metascraper-description": "5.24.7",
|
|
141
|
+
"metascraper-image": "5.24.7",
|
|
142
|
+
"metascraper-logo": "5.24.7",
|
|
143
|
+
"metascraper-logo-favicon": "5.24.7",
|
|
144
|
+
"metascraper-publisher": "5.24.7",
|
|
145
|
+
"metascraper-title": "5.24.7",
|
|
146
|
+
"metascraper-url": "5.24.7",
|
|
146
147
|
"moment": "2.24.0",
|
|
147
148
|
"moment-timezone": "0.5.23",
|
|
148
149
|
"multer": "1.4.3",
|
|
@@ -169,7 +170,7 @@
|
|
|
169
170
|
"devDependencies": {
|
|
170
171
|
"@lodder/grunt-postcss": "3.0.1",
|
|
171
172
|
"c8": "7.9.0",
|
|
172
|
-
"coffeescript": "2.
|
|
173
|
+
"coffeescript": "2.6.0",
|
|
173
174
|
"cssnano": "5.0.8",
|
|
174
175
|
"eslint": "7.32.0",
|
|
175
176
|
"eslint-plugin-ghost": "2.6.0",
|
|
@@ -185,12 +186,12 @@
|
|
|
185
186
|
"grunt-subgrunt": "1.3.0",
|
|
186
187
|
"grunt-update-submodules": "0.4.1",
|
|
187
188
|
"jwks-rsa": "2.0.4",
|
|
188
|
-
"mocha": "9.1.
|
|
189
|
+
"mocha": "9.1.2",
|
|
189
190
|
"mocha-slow-test-reporter": "0.1.2",
|
|
190
191
|
"mock-knex": "0.4.10",
|
|
191
192
|
"nock": "13.1.3",
|
|
192
193
|
"papaparse": "5.3.1",
|
|
193
|
-
"postcss": "8.3.
|
|
194
|
+
"postcss": "8.3.8",
|
|
194
195
|
"rewire": "5.0.0",
|
|
195
196
|
"should": "13.2.3",
|
|
196
197
|
"sinon": "11.1.2",
|