mirror of https://github.com/artf/grapesjs.git
nocodeframeworkdrag-and-dropsite-buildersite-generatortemplate-builderui-builderweb-builderweb-builder-frameworkwebsite-builderno-codepage-builder
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
4.4 KiB
116 lines
4.4 KiB
// This script uses documentation to generate API Reference files
|
|
const path = require('path');
|
|
const documentation = require('documentation');
|
|
const fs = require('fs');
|
|
const docRoot = __dirname;
|
|
const srcRoot = path.join(docRoot, '../src/');
|
|
const START_EVENTS = '{START_EVENTS}';
|
|
const END_EVENTS = '{END_EVENTS}';
|
|
const REPLACE_EVENTS = '{REPLACE_EVENTS}';
|
|
|
|
const log = (...args) => console.log(...args);
|
|
|
|
const getEventsMdFromTypes = async (filePath) => {
|
|
const dirname = filePath.replace(path.basename(filePath), '');
|
|
const typesFilePath = `${dirname}types.ts`;
|
|
|
|
if (fs.existsSync(typesFilePath) && typesFilePath.includes('canvas')) {
|
|
const resTypes = await documentation.build([typesFilePath], { shallow: true })
|
|
.then(cm => documentation.formats.md(cm, /*{ markdownToc: true }*/));
|
|
const indexFrom = resTypes.indexOf(START_EVENTS) + START_EVENTS.length;
|
|
const indexTo = resTypes.indexOf(END_EVENTS);
|
|
|
|
const result = resTypes.substring(indexFrom, indexTo)
|
|
.replace(/\n### Examples\n/gi, '')
|
|
.replace(/## /gi, '* ')
|
|
.replace(/\\`/gi, '`')
|
|
.replace(/##/gi, '')
|
|
.trim();
|
|
|
|
return result
|
|
}
|
|
|
|
return '';
|
|
}
|
|
|
|
async function generateDocs () {
|
|
log('Start API Reference generation...');
|
|
|
|
await Promise.all([
|
|
['editor/index.ts', 'editor.md'],
|
|
['asset_manager/index.ts', 'assets.md'],
|
|
['asset_manager/model/Asset.ts', 'asset.md'],
|
|
['block_manager/index.ts', 'block_manager.md'],
|
|
['block_manager/model/Block.ts', 'block.md'],
|
|
['commands/index.ts', 'commands.md'],
|
|
['dom_components/index.ts', 'components.md'],
|
|
['dom_components/model/Component.ts', 'component.md'],
|
|
['panels/index.ts', 'panels.md'],
|
|
['style_manager/index.ts', 'style_manager.md'],
|
|
['style_manager/model/Sector.ts', 'sector.md'],
|
|
['style_manager/model/Property.ts', 'property.md'],
|
|
['style_manager/model/PropertyNumber.ts', 'property_number.md'],
|
|
['style_manager/model/PropertySelect.ts', 'property_select.md'],
|
|
['style_manager/model/PropertyComposite.ts', 'property_composite.md'],
|
|
['style_manager/model/PropertyStack.ts', 'property_stack.md'],
|
|
['style_manager/model/Layer.ts', 'layer.md'],
|
|
['storage_manager/index.ts', 'storage_manager.md'],
|
|
['device_manager/index.ts', 'device_manager.md'],
|
|
['device_manager/model/Device.ts', 'device.md'],
|
|
['selector_manager/index.ts', 'selector_manager.md'],
|
|
['selector_manager/model/Selector.ts', 'selector.md'],
|
|
['selector_manager/model/State.ts', 'state.md'],
|
|
['css_composer/index.ts', 'css_composer.md'],
|
|
['css_composer/model/CssRule.ts', 'css_rule.md'],
|
|
['modal_dialog/index.ts', 'modal_dialog.md'],
|
|
['rich_text_editor/index.ts', 'rich_text_editor.md'],
|
|
['keymaps/index.ts', 'keymaps.md'],
|
|
['undo_manager/index.ts', 'undo_manager.md'],
|
|
['canvas/index.ts', 'canvas.md'],
|
|
['canvas/model/Frame.ts', 'frame.md'],
|
|
['canvas/model/CanvasSpot.ts', 'canvas_spot.md'],
|
|
['i18n/index.ts', 'i18n.md'],
|
|
['navigator/index.ts', 'layer_manager.md'],
|
|
['pages/index.ts', 'pages.md'],
|
|
['pages/model/Page.ts', 'page.md'],
|
|
['parser/index.ts', 'parser.md'],
|
|
].map(async (file) => {
|
|
const filePath = `${srcRoot}/${file[0]}`;
|
|
|
|
if (!fs.existsSync(filePath)) {
|
|
throw `File not found '${filePath}'`;
|
|
}
|
|
|
|
return documentation.build([filePath], { shallow: true })
|
|
.then(cm => documentation.formats.md(cm, /*{ markdownToc: true }*/))
|
|
.then(async (output) => {
|
|
let addLogs = [];
|
|
let result = output
|
|
.replace(/\*\*\\\[/g, '**[')
|
|
.replace(/\*\*\(\\\[/g, '**([')
|
|
.replace(/<\\\[/g, '<[')
|
|
.replace(/<\(\\\[/g, '<([')
|
|
.replace(/\| \\\[/g, '| [')
|
|
.replace(/\\n```js/g, '```js')
|
|
.replace(/docsjs\./g, '')
|
|
.replace('**Extends ModuleModel**', '')
|
|
.replace('**Extends Model**', '');
|
|
|
|
// Search for module event documentation
|
|
if (result.indexOf(REPLACE_EVENTS) >= 0) {
|
|
const eventsMd = await getEventsMdFromTypes(filePath);
|
|
if (eventsMd && result.indexOf(REPLACE_EVENTS) >= 0) {
|
|
addLogs.push('replaced events');
|
|
}
|
|
result = eventsMd ? result.replace(REPLACE_EVENTS, `## Available Events\n${eventsMd}`) : result;
|
|
}
|
|
|
|
fs.writeFileSync(`${docRoot}/api/${file[1]}`, result);
|
|
log('Created', file[1], addLogs.length ? `(${addLogs.join(', ')})` : '');
|
|
});
|
|
}));
|
|
|
|
log('API Reference generation done!');
|
|
};
|
|
|
|
generateDocs();
|
|
|