UNPKG

1.55 kBJavaScriptView Raw
1const moment = require('moment-timezone');
2const { get } = require('./utils');
3
4const defaultOptions = {
5 fieldName: 'draft',
6 timezone: 'UTC',
7 nodeType: 'MarkdownRemark',
8 pickDate: node => node.frontmatter.date,
9 pickDraft: node => node.frontmatter.draft,
10 publishDraft: false,
11};
12
13/**
14 * @param {object}
15 * @param {defaultOptions} pluginOptions
16 */
17exports.onCreateNode = ({ node, actions, reporter }, pluginOptions) => {
18 const { createNodeField } = actions;
19
20 const options = {
21 ...defaultOptions,
22 ...pluginOptions,
23 };
24
25 if (node.internal.type !== options.nodeType) {
26 return;
27 }
28
29 // all node is not draft if publishDraft option is `true`
30 if (options.publishDraft === true) {
31 createNodeField({
32 node,
33 name: options.fieldName,
34 value: false,
35 });
36 return;
37 }
38
39 const date = get(() => options.pickDate(node));
40 const draft = get(() => options.pickDraft(node));
41
42 // node follows 'draft' value
43 if (draft === true) {
44 createNodeField({
45 node,
46 name: options.fieldName,
47 value: true,
48 });
49 return;
50 }
51
52 // node is draft if 'draft' value does not exist
53 if (!date) {
54 createNodeField({
55 node,
56 name: options.fieldName,
57 value: false,
58 });
59 return;
60 }
61
62 // set draft flag after comparing date value
63 const nodeDate = moment.tz(date, options.timezone);
64 const nowDate = moment().tz(options.timezone);
65 const isDraft = nowDate.isSameOrBefore(nodeDate);
66
67 createNodeField({
68 node,
69 name: options.fieldName,
70 value: isDraft,
71 });
72};