@sugarcube/plugin-facebook
Version:
Fetch data from facebook for sugarcube.
81 lines (70 loc) • 1.91 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.feedEntity = exports.userEntity = exports.pageEntity = void 0;
var _fp = require("lodash/fp");
var _url = require("url");
var _path = require("path");
var _dateFns = require("date-fns");
const fileName = source => {
const url = new _url.URL(source);
return (0, _path.basename)(url.pathname);
};
const termify = term => {
switch (term) {
// The cdn of fb includes changing timestamps as a query parameter. This
// includes scontent.XX.fbcdn.
case /(video|content).*fbcdn\.(com|net)/.test(term) ? term : null:
return {
term: fileName(term),
href: term
};
default:
return {
term
};
}
};
const pageEntity = (0, _fp.flow)([(0, _fp.merge)({
_sc_id_fields: ["id"]
}), (0, _fp.omit)(["feed"])]);
exports.pageEntity = pageEntity;
const userEntity = pageEntity;
exports.userEntity = userEntity;
const feedEntity = (0, _fp.map)(m => {
const created = (0, _dateFns.parse)(m.created_time);
const updated = (0, _dateFns.parse)(m.updated_time);
const media = [{
type: "url",
term: m.permalink_url
}];
if (m.link) media.push(Object.assign({
type: "url"
}, termify(m.link)));
if (m.picture) media.push(Object.assign({
type: "image"
}, termify(m.picture)));
if (m.type === "video" && m.source) {
media.push(Object.assign({
type: "video"
}, termify(m.source)));
}
return (0, _fp.flow)([(0, _fp.merge)({
_sc_pubdates: {
source: created
},
created_at: created,
updated_at: updated,
_sc_id_fields: ["id"],
_sc_content_fields: ["description", "message"],
_sc_media: media
}), (0, _fp.omit)(["created_time", "updated_time"])])(m);
});
exports.feedEntity = feedEntity;
var _default = {
pageEntity,
userEntity,
feedEntity
};
exports.default = _default;