gatsby-node.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. const axios = require('axios');
  2. const path = require('path');
  3. const camelCase = require('camelcase');
  4. const SEMI_ICON_PKG_FILE_PATH = path.resolve(__dirname, '../../packages/semi-icons/package.json');
  5. const SEMI_ICON_META_FILE_PATH = path.resolve(__dirname, '../../packages/semi-icons/src/svgs/meta.json');
  6. const instance = axios.create();
  7. instance.interceptors.response.use(response => response.data);
  8. exports.sourceNodes = async ({ actions, createNodeId, createContentDigest }, configOptions) => {
  9. const { createNode } = actions;
  10. const pkgJson = require(SEMI_ICON_PKG_FILE_PATH);
  11. const svgData = require(SEMI_ICON_META_FILE_PATH);
  12. const iconData = svgData.map(svg => ({
  13. name: `Icon${camelCase(svg.name, { pascalCase: true })}`,
  14. category: svg.category
  15. }));
  16. const data = {
  17. iconData,
  18. pkgJson
  19. };
  20. const semiIconsNodeId = createNodeId('semiIcons');
  21. const nodeData = JSON.stringify(data);
  22. const nodeMeta = {
  23. id: semiIconsNodeId,
  24. parent: null,
  25. children: [],
  26. internal: {
  27. type: 'SemiIconNodeType',
  28. content: nodeData,
  29. contentDigest: createContentDigest(data),
  30. },
  31. };
  32. const node = Object.assign({}, data, nodeMeta);
  33. createNode(node);
  34. };