gatsby-node.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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 SEMI_ICON_LAB_META_FILE_PATH = path.resolve(__dirname, '../../packages/semi-icons-lab/src/svgs/meta.json');
  7. const instance = axios.create();
  8. instance.interceptors.response.use(response => response.data);
  9. exports.sourceNodes = async ({ actions, createNodeId, createContentDigest }, configOptions) => {
  10. const { createNode } = actions;
  11. const pkgJson = require(SEMI_ICON_PKG_FILE_PATH);
  12. const svgData = require(SEMI_ICON_META_FILE_PATH);
  13. const svgLabData = require(SEMI_ICON_LAB_META_FILE_PATH);
  14. let iconData = svgData.map(svg => ({
  15. name: `Icon${camelCase(svg.name, { pascalCase: true })}`,
  16. category: svg.category
  17. }));
  18. const iconLabData = svgLabData.map(svg => ({
  19. name: `Icon${camelCase(svg.name, { pascalCase: true })}`,
  20. category: svg.category
  21. }));
  22. // iconData = iconData.concat(iconLabData);
  23. const data = {
  24. iconData,
  25. iconLabData,
  26. pkgJson
  27. };
  28. const semiIconsNodeId = createNodeId('semiIcons');
  29. const nodeData = JSON.stringify(data);
  30. const nodeMeta = {
  31. id: semiIconsNodeId,
  32. parent: null,
  33. children: [],
  34. internal: {
  35. type: 'SemiIconNodeType',
  36. content: nodeData,
  37. contentDigest: createContentDigest(data),
  38. },
  39. };
  40. const node = Object.assign({}, data, nodeMeta);
  41. createNode(node);
  42. };