ghost
Version:
The professional publishing platform
52 lines (46 loc) • 1.39 kB
JavaScript
const ObjectID = require('bson-objectid').default;
/**
* @typedef {import('./MentionsAPI').IResourceService} IResourceService
*/
/**
* @implements {IResourceService}
*/
module.exports = class ResourceService {
/** @type {import('@tryghost/url-utils/lib/url-utils')} */
#urlUtils;
/** @type {import('../url')} */
#urlService;
/**
* @param {object} deps
* @param {import('@tryghost/url-utils/lib/url-utils')} deps.urlUtils
* @param {import('../url')} deps.urlService
*/
constructor(deps) {
this.#urlUtils = deps.urlUtils;
this.#urlService = deps.urlService;
}
/**
* @param {URL} url
* @returns {Promise<import('./MentionsAPI').ResourceResult>}
*/
async getByURL(url) {
const path = this.#urlUtils.absoluteToRelative(url.href, {withoutSubdirectory: true});
const resource = this.#urlService.getResource(path);
if (resource?.config?.type === 'posts') {
return {
type: 'post',
id: ObjectID.createFromHexString(resource.data.id)
};
}
if (resource?.config?.type === 'pages') {
return {
type: 'page',
id: ObjectID.createFromHexString(resource.data.id)
};
}
return {
type: null,
id: null
};
}
};