forked from gatsbyjs/gatsby-starter-hello-world
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgatsby-node.js
122 lines (108 loc) · 3.03 KB
/
gatsby-node.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
const path = require('path');
const onCreateNode = require('./gatsby/onCreateNode');
const onCreateWebpackConfig = require('./gatsby/onCreateWebpackConfig');
const config = require('./data.json');
const AppPages = require('./src/AppPages');
function queryJsonByDir(dirname) {
return `
{
allFile(filter: {relativeDirectory: {eq: "${dirname}"}}) {
edges {
node {
name
relativeDirectory
internal {
content
}
}
}
}
}
`;
}
exports.createPages = async ({graphql, actions}) => {
const {createPage} = actions;
const _createPage = ({path: pagePath, component, context}) => {
if (config.um) {
createPage({
path: pagePath,
component: path.resolve('src/Templates/UnderMaintain/index.js'),
context: {...commonContext, ...context},
});
} else {
createPage({
path: pagePath,
component: path.resolve(component),
context: {...commonContext, ...context},
});
}
};
const env = process.env.REV_ENV || 'stg';
const commonContext = {env};
for (const page of AppPages.pages) {
_createPage({
path: page.path,
component: path.resolve(page.component),
context: {...commonContext, ...page.context},
});
}
if (AppPages.config.generateAdmin) {
const adminResourcePageNodes = (
await graphql(queryJsonByDir('admin'))
).data.allFile.edges.map(({node}) => node);
const customAdminResourcePageNodes = (
await graphql(queryJsonByDir('custom-admin'))
).data.allFile.edges.map(({node}) => node);
const finalAdminNodes = new Map();
for (const node of adminResourcePageNodes) {
finalAdminNodes.set(node.name, node);
}
for (const node of customAdminResourcePageNodes) {
finalAdminNodes.set(node.name, node);
}
for (const [_, node] of finalAdminNodes) {
const {
name,
relativeDirectory,
internal: {content},
} = node;
const resource = JSON.parse(content);
console.log(
`[Admin] create ${resource.path} from ${relativeDirectory}/${name}.json...`,
);
createPage({
path: resource.path,
component: path.resolve(`src/Generators/AdminResource/index.js`),
context: {resource, config},
});
}
}
if (AppPages.config.generateMarkdown) {
const allMdNodes = (
await graphql(
`
{
allMarkdownRemark(limit: 1000) {
edges {
node {
fields {
slug
}
}
}
}
}
`,
)
).data.allMarkdownRemark.edges.map(({node}) => node);
for (const node of allMdNodes) {
createPage({
path: node.fields.slug,
component: path.resolve(`src/Templates/BlogDetail/index.js`),
context: {slug: node.fields.slug},
});
}
}
};
exports.onCreateNode = onCreateNode;
exports.onCreateWebpackConfig = onCreateWebpackConfig;