2022-01-11 22:19:51 +00:00
|
|
|
const { tags, countries, devices, normalizeTag } = require('./src/util/stats');
|
|
|
|
|
const people = require('./src/data.js');
|
2020-06-19 06:08:43 +00:00
|
|
|
|
|
|
|
|
function unique(arr) {
|
|
|
|
|
return Array.from(new Set(arr));
|
|
|
|
|
}
|
2020-01-07 20:23:53 +00:00
|
|
|
|
|
|
|
|
function sourceNodes({ actions, createNodeId, createContentDigest }) {
|
2020-06-19 06:08:43 +00:00
|
|
|
const normalizedTagMap = tags().reduce((acc, tag) => {
|
|
|
|
|
const normalizedTag = normalizeTag(tag.name);
|
|
|
|
|
acc[normalizedTag] = tag.name;
|
|
|
|
|
return acc;
|
|
|
|
|
}, {});
|
2020-01-07 20:23:53 +00:00
|
|
|
// Add People to the GraphQL API, we randomize the data on each build so no one gets their feelings hurt
|
|
|
|
|
people
|
|
|
|
|
.sort(() => Math.random() - 0.5)
|
2022-01-11 22:19:51 +00:00
|
|
|
.forEach((person) => {
|
2020-06-19 06:08:43 +00:00
|
|
|
const normalizedPerson = {
|
|
|
|
|
...person,
|
|
|
|
|
// Clean out people that added basically the same tags twice
|
|
|
|
|
tags: unique(
|
2022-01-11 22:19:51 +00:00
|
|
|
person.tags.map((tag) => normalizedTagMap[normalizeTag(tag)] || tag)
|
2020-06-19 06:08:43 +00:00
|
|
|
),
|
|
|
|
|
};
|
2020-01-07 20:23:53 +00:00
|
|
|
const nodeMeta = {
|
2020-06-19 06:08:43 +00:00
|
|
|
id: createNodeId(`person-${normalizedPerson.name}`),
|
2020-01-07 20:23:53 +00:00
|
|
|
parent: null,
|
|
|
|
|
children: [],
|
|
|
|
|
internal: {
|
|
|
|
|
type: `Person`,
|
|
|
|
|
mediaType: `text/html`,
|
2020-06-19 06:08:43 +00:00
|
|
|
content: JSON.stringify(normalizedPerson),
|
|
|
|
|
contentDigest: createContentDigest(normalizedPerson),
|
2020-01-07 20:23:53 +00:00
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
2020-06-19 06:08:43 +00:00
|
|
|
actions.createNode({ ...normalizedPerson, ...nodeMeta });
|
2020-01-07 20:23:53 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Add tags to GraphQL API
|
2022-01-11 22:19:51 +00:00
|
|
|
tags().forEach((tag) => {
|
2020-01-07 20:23:53 +00:00
|
|
|
const nodeMeta = {
|
|
|
|
|
id: createNodeId(`tag-${tag.name}`),
|
|
|
|
|
parent: null,
|
|
|
|
|
children: [],
|
|
|
|
|
internal: {
|
|
|
|
|
type: `Tag`,
|
|
|
|
|
mediaType: `text/html`,
|
|
|
|
|
content: JSON.stringify(tag),
|
|
|
|
|
contentDigest: createContentDigest(tag),
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
actions.createNode({ ...tag, ...nodeMeta });
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Add Countries to GraphQL API
|
2022-01-11 22:19:51 +00:00
|
|
|
countries().forEach((country) => {
|
2020-01-07 20:23:53 +00:00
|
|
|
const nodeMeta = {
|
|
|
|
|
id: createNodeId(`country-${country.name}`),
|
|
|
|
|
parent: null,
|
|
|
|
|
children: [],
|
|
|
|
|
internal: {
|
|
|
|
|
type: `Country`,
|
|
|
|
|
mediaType: `text/html`,
|
|
|
|
|
content: JSON.stringify(country),
|
|
|
|
|
contentDigest: createContentDigest(country),
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
actions.createNode({ ...country, ...nodeMeta });
|
|
|
|
|
});
|
2020-01-08 11:44:52 +00:00
|
|
|
|
2020-01-08 15:53:02 +00:00
|
|
|
// Add Devices to GraphQL API
|
2022-01-11 22:19:51 +00:00
|
|
|
devices().forEach((device) => {
|
2020-01-08 11:44:52 +00:00
|
|
|
const nodeMeta = {
|
2020-01-08 15:53:02 +00:00
|
|
|
id: createNodeId(`device-${device.name}`),
|
2020-01-08 11:44:52 +00:00
|
|
|
parent: null,
|
|
|
|
|
children: [],
|
|
|
|
|
internal: {
|
2020-01-08 15:53:02 +00:00
|
|
|
type: `device`,
|
2020-01-08 11:44:52 +00:00
|
|
|
mediaType: `text/html`,
|
2020-01-08 15:53:02 +00:00
|
|
|
content: JSON.stringify(device),
|
|
|
|
|
contentDigest: createContentDigest(device),
|
2020-01-08 11:44:52 +00:00
|
|
|
},
|
|
|
|
|
};
|
2020-01-08 15:53:02 +00:00
|
|
|
actions.createNode({ ...device, ...nodeMeta });
|
2020-01-08 11:44:52 +00:00
|
|
|
});
|
2020-01-07 20:23:53 +00:00
|
|
|
}
|
|
|
|
|
|
2022-01-11 22:19:51 +00:00
|
|
|
exports.sourceNodes = sourceNodes;
|