64 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const crypto = require('crypto');
 | |
| const path = require('path');
 | |
| 
 | |
| const commonREs = require('../../utils/regEx');
 | |
| const readDir = require('../../utils/readDir');
 | |
| 
 | |
| const { isAStubRE } = commonREs;
 | |
| // default locale to english for testing
 | |
| const { NODE_ENV: env, LOCALE: locale = 'english' } = process.env;
 | |
| 
 | |
| const guideDir = `../../../${
 | |
|   env === 'production' ? 'guide' : 'mock-guide'
 | |
| }/${locale}`;
 | |
| 
 | |
| const pagesDir = path.resolve(__dirname, guideDir);
 | |
| const indexMdRe = new RegExp(`\\${path.sep}index.md$`);
 | |
| 
 | |
| function withGuidePrefix(str) {
 | |
|   return `/guide${str}`;
 | |
| }
 | |
| 
 | |
| exports.createNavigationNode = function createNavigationNode(node) {
 | |
|   const {
 | |
|     fileAbsolutePath,
 | |
|     frontmatter: { title },
 | |
|     internal: { content },
 | |
|     parent
 | |
|   } = node;
 | |
| 
 | |
|   const nodeDir = path.resolve(fileAbsolutePath).replace(indexMdRe, '');
 | |
|   const dashedName = nodeDir.split(path.sep).slice(-1)[0];
 | |
|   const nodePath = nodeDir.split(pagesDir)[1].split(path.sep).join('/');
 | |
|   const parentPath = nodePath
 | |
|     .split('/')
 | |
|     .slice(0, -1)
 | |
|     .join('/');
 | |
| 
 | |
|   const categoryChildren = readDir(nodeDir);
 | |
|   const navNode = {
 | |
|     categoryChildren,
 | |
|     hasChildren: !!categoryChildren.length,
 | |
|     dashedName,
 | |
|     isStubbed: isAStubRE.test(content),
 | |
|     path: withGuidePrefix(nodePath),
 | |
|     parentPath: withGuidePrefix(parentPath),
 | |
|     title
 | |
|   };
 | |
| 
 | |
|   const gatsbyRequired = {
 | |
|     id: fileAbsolutePath + ' >>> NavigationNode',
 | |
|     parent,
 | |
|     children: [],
 | |
|     internal: {
 | |
|       type: 'NavigationNode',
 | |
|       contentDigest: crypto
 | |
|         .createHash('md5')
 | |
|         .update(JSON.stringify(navNode))
 | |
|         .digest('hex')
 | |
|     }
 | |
|   };
 | |
| 
 | |
|   return { ...navNode, ...gatsbyRequired };
 | |
| };
 |