add metadata to search index

pull/526/head
Cory LaViska 2021-09-09 09:13:55 -04:00
rodzic ba3117f435
commit ac6ae43449
4 zmienionych plików z 56 dodań i 21 usunięć

Wyświetl plik

@ -6,7 +6,7 @@ Components with the <sl-badge type="warning" pill>Experimental</sl-badge> badge
_During the beta period, these restrictions may be relaxed in the event of a mission-critical bug._ 🐛
## Next
## 2.0.0-beta.51
A number of users had trouble counting characters that repeat, so this release improves design token pattern so "t-shirt sizes" are more accessible. For example, `--sl-font-size-xxx-large` has become `--sl-font-size-3x-large`. This change applies to all design tokens that use this scale.

Wyświetl plik

@ -2,6 +2,9 @@ import fs from 'fs';
import path from 'path';
import glob from 'globby';
import lunr from 'lunr';
import { getAllComponents } from './shared.js';
const metadata = JSON.parse(fs.readFileSync('./dist/custom-elements.json', 'utf8'));
console.log('Generating search index for documentation');
@ -24,6 +27,36 @@ console.log('Generating search index for documentation');
return headings;
}
function getMembers(markdown) {
const members = [];
const headers = markdown.match(/\[component-header:([a-z-]+)\]/g);
if (!headers) {
return '';
}
headers.map(header => {
const tagName = header.match(/\[component-header:([a-z-]+)\]/)[1];
const component = getAllComponents(metadata).find(component => component.tagName === tagName);
if (component) {
const fields = ['members', 'cssProperties', 'cssParts', 'slots', 'events'];
fields.map(field => {
if (component[field]) {
component[field].map(entry => {
if (entry.name) members.push(entry.name);
if (entry.description) members.push(entry.description);
if (entry.attribute) members.push(entry.attribute);
});
}
});
}
});
return members.join(' ');
}
const files = await glob('./docs/**/*.md');
const map = {};
const searchIndex = lunr(function () {
@ -32,6 +65,7 @@ console.log('Generating search index for documentation');
this.ref('id'); // id
this.field('t', { boost: 10 }); // title
this.field('h', { boost: 5 }); // headings
this.field('m', { boost: 5 }); // members (props, methods, events, etc.)
this.field('c'); // content
files.map((file, index) => {
@ -53,8 +87,9 @@ console.log('Generating search index for documentation');
.filter(heading => heading.level > 1)
.map(heading => heading.content)
.join('\n');
const members = getMembers(content);
this.add({ id: index, t: title, h: headings, c: content });
this.add({ id: index, t: title, h: headings, m: members, c: content });
map[index] = { title, url };
});

Wyświetl plik

@ -5,30 +5,13 @@
//
import chalk from 'chalk';
import fs from 'fs';
import { getAllComponents } from './shared.js';
const metadata = JSON.parse(fs.readFileSync('./dist/custom-elements.json', 'utf8'));
function getAllComponents() {
const allComponents = [];
metadata.modules.map(module => {
module.declarations?.map(declaration => {
if (declaration.customElement) {
const component = declaration;
if (component) {
allComponents.push(component);
}
}
});
});
return allComponents;
}
console.log('Generating custom data for VS Code');
const components = getAllComponents();
const components = getAllComponents(metadata);
const vscode = { tags: [] };
components.map(component => {

17
scripts/shared.js 100644
Wyświetl plik

@ -0,0 +1,17 @@
export function getAllComponents(metadata) {
const allComponents = [];
metadata.modules.map(module => {
module.declarations?.map(declaration => {
if (declaration.customElement) {
const component = declaration;
if (component) {
allComponents.push(component);
}
}
});
});
return allComponents;
}