| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- const path = require('path');
- const fs = require('fs');
- const MarkdownIt = require('markdown-it')();
- const basePath = path.resolve(__dirname, './../src/packages/__VUE');
- const componentDirs = fs.readdirSync(basePath, 'utf8');
- const TYPE_IDENTIFY_OPEN = 'tbody_open';
- const TYPE_IDENTIFY_CLOSE = 'tbody_close';
- const TR_TYPE_IDENTIFY_OPEN = 'tr_open';
- const TR_TYPE_IDENTIFY_CLOSE = 'tr_close';
- const getSubSources = (sources) => {
- let sourcesMap = [];
- const startIndex = sources.findIndex((source) => source.type === TYPE_IDENTIFY_OPEN);
- const endIndex = sources.findIndex((source) => source.type === TYPE_IDENTIFY_CLOSE);
- sources = sources.slice(startIndex, endIndex + 1);
- while (sources.filter((source) => source.type === TR_TYPE_IDENTIFY_OPEN).length) {
- let trStartIndex = sources.findIndex((source) => source.type === TR_TYPE_IDENTIFY_OPEN);
- let trEndIndex = sources.findIndex((source) => source.type === TR_TYPE_IDENTIFY_CLOSE);
- sourcesMap.push(sources.slice(trStartIndex, trEndIndex + 1));
- sources.splice(trStartIndex, trEndIndex - trStartIndex + 1);
- }
- return sourcesMap;
- };
- const genaratorTags = () => {
- let componentTags = {};
- if (!componentDirs.length) return;
- for (let componentDir of componentDirs) {
- let stat = fs.lstatSync(`${basePath}/${componentDir}`);
- if (stat.isDirectory()) {
- const absolutePath = path.join(`${basePath}/${componentDir}`, 'doc.md');
- if (!fs.existsSync(absolutePath)) continue;
- const data = fs.readFileSync(absolutePath, 'utf8');
- let sources = MarkdownIt.parse(data, {});
- let sourcesMap = getSubSources(sources);
- componentTags[`nut-${componentDir}`] = { attributes: [] };
- for (let sourceMap of sourcesMap) {
- let propItem = sourceMap.filter((source) => source.type === 'inline').length
- ? `${sourceMap.filter((source) => source.type === 'inline')[0].content}`
- : '';
- componentTags[`nut-${componentDir}`]['attributes'].push(propItem);
- }
- }
- }
- return componentTags;
- };
- const genaratorAttributes = () => {
- let componentTags = {};
- if (!componentDirs.length) return;
- for (let componentDir of componentDirs) {
- let stat = fs.lstatSync(`${basePath}/${componentDir}`);
- if (stat.isDirectory()) {
- const absolutePath = path.join(`${basePath}/${componentDir}`, 'doc.md');
- if (!fs.existsSync(absolutePath)) continue;
- const data = fs.readFileSync(absolutePath, 'utf8');
- let sources = MarkdownIt.parse(data, {});
- let sourcesMap = getSubSources(sources);
- for (let sourceMap of sourcesMap) {
- const inlineItem = sourceMap.filter((source) => source.type === 'inline').length
- ? sourceMap.filter((source) => source.type === 'inline')
- : [];
- const propItem = inlineItem.length ? `${inlineItem[0].content}` : '';
- const infoItem = inlineItem.length ? `${inlineItem[1].content}` : '';
- const typeItem = inlineItem.length ? `${inlineItem[2].content.toLowerCase()}` : '';
- const defaultItem = inlineItem.length ? `${inlineItem[3].content}` : '';
- componentTags[`nut-${componentDir}/${propItem}`] = {
- type: `${typeItem}`,
- description: `属性说明:${infoItem},默认值:${defaultItem}`
- };
- }
- }
- }
- return componentTags;
- };
- const writeTags = () => {
- const componentTags = genaratorTags();
- let innerText = `${JSON.stringify(componentTags, null, 2)}`;
- const distPath = path.resolve(__dirname, './../dist');
- const componentTagsPath = path.resolve(__dirname, './../dist/smartips/tags.json');
- if (!fs.existsSync(path.join(distPath + '/smartips'))) {
- fs.mkdirSync(path.join(distPath + '/smartips'));
- }
- fs.writeFileSync(componentTagsPath, innerText);
- };
- const writeAttributes = () => {
- const componentAttributes = genaratorAttributes();
- let innerText = `${JSON.stringify(componentAttributes, null, 2)}`;
- const distPath = path.resolve(__dirname, './../dist');
- const componentAttributespPath = path.resolve(__dirname, './../dist/smartips/attributes.json');
- if (!fs.existsSync(path.join(distPath + '/smartips'))) {
- fs.mkdirSync(path.join(distPath + '/smartips'));
- }
- fs.writeFileSync(componentAttributespPath, innerText);
- };
- writeTags();
- writeAttributes();
|