|
@@ -0,0 +1,105 @@
|
|
|
|
|
+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();
|