2
0
mirror of https://github.com/tenrok/vue-select.git synced 2026-06-19 09:50:33 +03:00
Files
vue-select/docs/.vuepress/generateApiDocs/utils/node/getAdditionalSlotProperties.js
T

46 lines
1.2 KiB
JavaScript

const fs = require('fs');
const path = require('path');
const cheerio = require('cheerio');
const pick = require('lodash/pick');
const prettier = require('prettier');
const compiler = require('vue-template-compiler');
const Slots = require('./Slots');
const t = require('@babel/types');
const {parse} = require('@babel/parser');
const traverse = require('@babel/traverse');
function pickBindingsFromElement ({attribs}) {
return pick(
attribs,
Object.keys(attribs)
.filter(attr => attr.indexOf(':') === 0 || attr === 'v-bind'),
);
}
/**
* @param pathToComponent
* @return {Object}
*/
function getAdditionalSlotProperties (pathToComponent) {
const slots = new Slots();
const file = fs.readFileSync(path.resolve(pathToComponent)).toString();
const {template} = compiler.parseComponent(file);
const $ = cheerio.load(template.content);
$('slot').each(function (index, element) {
const bindings = pickBindingsFromElement(element) || {};
const slotName = element.attribs.name || 'default';
const content = prettier.format($.html(element), {parser: 'html'});
slots.add(slotName, {
content,
bindings,
});
});
return slots.definitions;
}
module.exports = getAdditionalSlotProperties;