refactor: dox

This commit is contained in:
cha0s 2024-01-27 12:55:29 -06:00
parent 980ed41b9b
commit b044dbae40
15 changed files with 74 additions and 133 deletions

View File

@ -5,7 +5,14 @@
'@flecks/create:./packages/create-fleck': {} '@flecks/create:./packages/create-fleck': {}
'@flecks/db:./packages/db': {} '@flecks/db:./packages/db': {}
'@flecks/docker:./packages/docker': {} '@flecks/docker:./packages/docker': {}
'@flecks/dox:./packages/dox': {} '@flecks/dox:./packages/dox':
rewriteFilenames:
-
- '@flecks\/([^/]+)\/(.*)'
- '[@flecks/**$1**<span style={{fontSize: "80%"}}>&#8203;`/$2`</span>](https://github.com/cha0s/flecks/tree/master/packages/$1/$2)'
-
- '\((.*):([0-9]+):[0-9]+\)'
- '($1#L$2)'
'@flecks/electron:./packages/electron': {} '@flecks/electron:./packages/electron': {}
'@flecks/fleck:./packages/fleck': {} '@flecks/fleck:./packages/fleck': {}
'@flecks/governor:./packages/governor': {} '@flecks/governor:./packages/governor': {}

View File

@ -9,8 +9,8 @@
"scripts": { "scripts": {
"build": "lerna run build", "build": "lerna run build",
"clean": "lerna exec yarn clean", "clean": "lerna exec yarn clean",
"dox:gh-pages": "flecks dox docusaurus -r '@flecks\/([^/]+)\/(.*)=[@flecks/**$1**/$2](https://github.com/cha0s/flecks/tree/master/packages/$1/$2)' -r '\\((.*):([0-9]+):[0-9]+\\)=($1#L$2)' && cd website && DOCUSAURUS_GENERATED_FILES_DIR_NAME=node_modules/.cache/docusaurus node_modules/.bin/docusaurus build --out-dir ../dox-tmp && cd .. && rm -rf dox/* && mv dox-tmp/* dox && rmdir dox-tmp", "dox:gh-pages": "flecks dox docusaurus && cd website && DOCUSAURUS_GENERATED_FILES_DIR_NAME=node_modules/.cache/docusaurus node_modules/.bin/docusaurus build --out-dir ../dox-tmp && cd .. && rm -rf dox/* && mv dox-tmp/* dox && rmdir dox-tmp",
"dox": "flecks dox docusaurus -r '@flecks\/([^/]+)\/(.*)=[@flecks/**$1**/$2](https://github.com/cha0s/flecks/tree/master/packages/$1/$2)' -r '\\((.*):([0-9]+):[0-9]+\\)=($1#L$2)' && cd website && DOCUSAURUS_GENERATED_FILES_DIR_NAME=node_modules/.cache/docusaurus node_modules/.bin/docusaurus", "dox": "flecks dox docusaurus && cd website && DOCUSAURUS_GENERATED_FILES_DIR_NAME=node_modules/.cache/docusaurus node_modules/.bin/docusaurus",
"lint": "lerna run lint", "lint": "lerna run lint",
"publish": "lerna publish --conventional-commits --contents=dist --registry https://registry.npmjs.org", "publish": "lerna publish --conventional-commits --contents=dist --registry https://registry.npmjs.org",
"test": "lerna exec 'yarn && yarn test'" "test": "lerna exec 'yarn && yarn test'"

View File

@ -36,7 +36,7 @@ export const hooks = {
'@flecks/build.extensions': () => ['.coffee'], '@flecks/build.extensions': () => ['.coffee'],
/** /**
* Register build files. * Register build files. See [the build files page](./build-files) for more details.
*/ */
'@flecks/build.files': () => [ '@flecks/build.files': () => [
/** /**

View File

@ -8,7 +8,7 @@ export const hooks = {
}), }),
/** /**
* Define configuration. * Define configuration. See [the configuration page](./config) for more details.
*/ */
'@flecks/core.config': () => ({ '@flecks/core.config': () => ({
whatever: 'configuration', whatever: 'configuration',

View File

@ -1,9 +1,10 @@
const {mkdir, writeFile} = require('fs/promises'); const {mkdir, readFile, writeFile} = require('fs/promises');
const {join, relative, resolve} = require('path'); const {join, relative, resolve} = require('path');
const { const {
generateDocusaurus, generateDocusaurus,
generateJson, generateJson,
generateDocusaurusStyle,
} = require('./generate'); } = require('./generate');
const { const {
@ -33,7 +34,11 @@ module.exports = (program, flecks) => {
let output; let output;
const json = await generateJson(flecks); const json = await generateJson(flecks);
const pairs = rewriteFilenames const pairs = rewriteFilenames
.map((pair) => pair.split('=')) .map((pair) => {
const index = pair.indexOf('=');
return [pair.slice(0, index), pair.slice(index + 1)];
})
.concat(flecks.get('@flecks/dox.rewriteFilenames'))
.map(([from, to]) => [new RegExp(from, 'g'), to]); .map(([from, to]) => [new RegExp(from, 'g'), to]);
const rewrite = (array) => ( const rewrite = (array) => (
array.map( array.map(
@ -66,6 +71,7 @@ module.exports = (program, flecks) => {
Object.entries(generateDocusaurus(json)) Object.entries(generateDocusaurus(json))
.map(([type, page]) => [`${type}.mdx`, page]), .map(([type, page]) => [`${type}.mdx`, page]),
); );
output['dox.module.css'] = await generateDocusaurusStyle();
break; break;
case 'json': case 'json':
output = Object.fromEntries( output = Object.fromEntries(

View File

@ -2,4 +2,10 @@ const commands = require('./commands');
exports.hooks = { exports.hooks = {
'@flecks/build.commands': commands, '@flecks/build.commands': commands,
'@flecks/core.config': () => ({
/**
* Pattern pairs used to rewrite filenames in generated documentation.
*/
rewriteFilenames: [],
}),
}; };

View File

@ -88,6 +88,8 @@ exports.generateDocusaurusHookPage = (hooks) => {
source.push('description: All the hooks in this project.'); source.push('description: All the hooks in this project.');
source.push('---'); source.push('---');
source.push(''); source.push('');
source.push("import styles from './dox.module.css';");
source.push('');
source.push('This page documents all the hooks in this project.'); source.push('This page documents all the hooks in this project.');
source.push(''); source.push('');
Object.entries(hooks) Object.entries(hooks)
@ -121,32 +123,55 @@ exports.generateDocusaurusHookPage = (hooks) => {
}); });
source.push(''); source.push('');
} }
if (implementations.length > 0) { if (implementations.length > 0 || invocations.length > 0) {
source.push('<details>'); source.push('<div className={styles.hooks}>');
source.push('<summary>Implementations</summary>'); if (implementations.length > 0) {
source.push('<ul>'); source.push('<div>');
implementations.forEach(({filename}) => { source.push('<h3>Implementations</h3>');
source.push(`<li>${filename}</li>`); implementations.forEach(({filename}) => {
}); source.push(`<div>${filename}</div>`);
source.push('</ul>'); });
source.push('</details>'); source.push('</div>');
source.push(''); }
} if (invocations.length > 0) {
if (invocations.length > 0) { source.push('<div>');
source.push('<details>'); source.push('<h3>Invocations</h3>');
source.push('<summary>Invocations</summary>'); invocations.forEach(({filename, type}) => {
source.push('<ul>'); source.push(`<div>${filename} (\`${type}\`)</div>`);
invocations.forEach(({filename, type}) => { });
source.push(`<li>${filename} (\`${type}\`)</li>`); source.push('</div>');
}); }
source.push('</ul>'); source.push('</div>');
source.push('</details>');
source.push('');
} }
}); });
return source.join('\n'); return source.join('\n');
}; };
exports.generateDocusaurusStyle = () => `
.hooks > div {
margin-bottom: var(--ifm-heading-margin-bottom);
}
.hooks > div code {
white-space: nowrap;
}
@media screen and (min-width: 641px) {
.hooks {
display: flex;
}
.hooks > div:first-child {
width: 50%;
}
.hooks > div:last-child {
padding-left: var(--ifm-spacing-horizontal);
width: 50%;
}
.hooks > div:only-child {
padding-left: 0;
width: 100%;
}
}
`;
exports.generateDocusaurusTodoPage = (todos) => { exports.generateDocusaurusTodoPage = (todos) => {
const source = []; const source = [];
source.push('---'); source.push('---');

View File

@ -18,9 +18,7 @@
"publishConfig": { "publishConfig": {
"access": "public" "access": "public"
}, },
"files": [ "files": [],
"website"
],
"dependencies": { "dependencies": {
"@babel/core": "^7.17.2", "@babel/core": "^7.17.2",
"@babel/traverse": "^7.17.0", "@babel/traverse": "^7.17.0",

View File

@ -1,2 +0,0 @@
# This ignores the automatically-generated `flecks` subfolder.
/flecks

View File

@ -1,9 +0,0 @@
---
description: This project was built with flecks and is totally awesome!
slug: /
---
# Introduction
⚡️ Welcome to your documentation website! From here, you will want to consult the
[Docusaurus](https://docusaurus.io/) documentation to learn how to build this website out!

View File

@ -1,21 +0,0 @@
// @ts-check
// `@type` JSDoc annotations allow editor autocompletion and type checking
// (when paired with `@ts-check`).
// There are various equivalent ways to declare your Docusaurus config.
// See: https://docusaurus.io/docs/api/docusaurus-config
// eslint-disable-next-line import/no-extraneous-dependencies
const {configDefaults} = require('@flecks/dox/build/docusaurus');
module.exports = async function flecksDocusaurus() {
const defaults = configDefaults();
/** @type {import('@docusaurus/types').Config} */
const config = {
...defaults,
title: 'My documentation website',
tagline: 'built with flecks',
url: 'http://localhost',
baseUrl: '/',
};
return config;
};

View File

@ -1,41 +0,0 @@
import clsx from 'clsx';
import Link from '@docusaurus/Link';
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
import Layout from '@theme/Layout';
import Heading from '@theme/Heading';
import styles from './index.module.css';
function HomepageHeader() {
const {siteConfig} = useDocusaurusContext();
return (
<header className={clsx('hero hero--primary', styles.heroBanner)}>
<div className="container">
<Heading as="h1" className="hero__title">
{siteConfig.title}
</Heading>
<p className="hero__subtitle">{siteConfig.tagline}</p>
<div className={styles.buttons}>
<Link
className="button button--secondary button--lg"
to="/docs"
>
Your documentation here
</Link>
</div>
</div>
</header>
);
}
export default function Home() {
const {siteConfig} = useDocusaurusContext();
return (
<Layout
title={`Hello from ${siteConfig.title}`}
description="Description will go into a meta tag in <head />"
>
<HomepageHeader />
</Layout>
);
}

View File

@ -1,23 +0,0 @@
/**
* CSS files with the .module.css suffix will be treated as CSS modules
* and scoped locally.
*/
.heroBanner {
padding: 4rem 0;
text-align: center;
position: relative;
overflow: hidden;
}
@media screen and (max-width: 996px) {
.heroBanner {
padding: 2rem;
}
}
.buttons {
display: flex;
align-items: center;
justify-content: center;
}

View File

@ -1,5 +0,0 @@
export default {
sidebar: [
'introduction',
],
};

View File

@ -59,7 +59,7 @@ export default {
'flecks/hooks', 'flecks/hooks',
'flecks/config', 'flecks/config',
'flecks/build-files', 'flecks/build-files',
'flecks/todo', 'flecks/todos',
], ],
}, },
], ],