logos-docusaurus-preset init commit.

This commit is contained in:
Hossein Mehrabi
2022-10-26 14:54:41 +03:30
parent dd807252bf
commit e303aa1f41
25 changed files with 1931 additions and 0 deletions
@@ -0,0 +1,37 @@
{
"name": "@acid-info/logos-docusaurus-preset",
"version": "0.1.0",
"description": "Docusaurus preset for Logos documentation websites",
"main": "lib/index.js",
"types": "src/theme.d.ts",
"repository": {
"type": "git",
"url": "https://github.com/acid-info/logos-docusaurus-plugins.git",
"directory": "packages/logos-docusaurus-preset"
},
"license": "MIT",
"scripts": {
"build": "tsc --build",
"watch": "tsc --build --watch",
"prepublishOnly": "yarn build"
},
"dependencies": {
"@acid-info/logos-docusaurus-search-local": "^0.1.2",
"@acid-info/logos-docusaurus-theme": "^0.1.1",
"@docusaurus/core": "2.1.0",
"@docusaurus/module-type-aliases": "2.1.0",
"@docusaurus/preset-classic": "^2.1.0",
"@docusaurus/types": "2.1.0",
"@docusaurus/utils": "2.1.0",
"@docusaurus/utils-common": "2.1.0",
"@docusaurus/utils-validation": "2.1.0",
"docusaurus-plugin-sass": "^0.2.2",
"lodash": "^4.17.21"
},
"engines": {
"node": ">=16.14"
},
"devDependencies": {
"@types/lodash": "^4.14.186"
}
}
View File
@@ -0,0 +1,76 @@
import { PluginOptions as SearchPluginOptions } from '@acid-info/logos-docusaurus-search-local/src'
import classicPreset from '@docusaurus/preset-classic'
import type { LoadContext, PluginConfig, Preset } from '@docusaurus/types'
import _ from 'lodash'
import * as path from 'path'
import { siteConfigs } from './site-config/index'
import { themeConfigs } from './theme-config/index'
import { PluginOptions, ThemeNames } from './types'
import { findDocInstances, validateDocPluginOptions } from './utils/docs.utils'
const addSearchPlugin = (
plugins: PluginConfig[],
options: PluginOptions,
): PluginConfig[] => {
const docs = findDocInstances(plugins).map((plugin) =>
validateDocPluginOptions(plugin![1]),
)
return [
[
'@acid-info/logos-docusaurus-search-local',
{
hashed: true,
indexDocs: true,
indexBlog: false,
indexPages: true,
docsDir: docs.map((doc) => doc.path),
searchContextByPaths: docs.map((doc) => doc.path),
docsRouteBasePath: docs.map((doc) => doc.routeBasePath),
} as Partial<SearchPluginOptions>,
],
]
}
export default function logosPreset(
context: LoadContext,
options: PluginOptions,
): Preset {
context.siteConfig.staticDirectories.push(
path.join(__dirname, '../static/common'),
path.join(__dirname, '../static', options.businessUnit),
)
context.siteConfig = _.merge(
context.siteConfig,
siteConfigs[options.businessUnit],
)
context.siteConfig.themeConfig = themeConfigs[options.businessUnit]
const { plugins = [], themes = [] } = classicPreset(context, {
docs: {
routeBasePath: '/',
},
theme: {},
})
plugins.push('docusaurus-plugin-sass')
plugins.push(
...addSearchPlugin([...context.siteConfig.plugins, ...plugins], options),
)
if (options.theme?.name === ThemeNames.Default)
themes.push([
'@acid-info/logos-docusaurus-theme',
options.theme?.options ?? {},
])
return {
plugins,
themes,
}
}
export * from './types'
export { validateOptions } from './validateOptions'
@@ -0,0 +1,13 @@
import { SiteConfig } from '../index'
export const baseSiteConfig: SiteConfig = {
title: 'Title',
tagline: 'Tagline',
url: 'http://docs',
baseUrl: '/',
favicon: 'theme/img/favicon.ico',
onBrokenLinks: 'warn',
onBrokenMarkdownLinks: 'warn',
}
export default baseSiteConfig
@@ -0,0 +1,11 @@
import { SiteConfig } from '../index'
import baseSiteConfig from './base'
export const codexSiteConfig: SiteConfig = {
...baseSiteConfig,
title: 'Codex',
tagline: 'Codex is building a Decentralized Durability Engine',
url: 'https://codex.storage',
}
export default codexSiteConfig
@@ -0,0 +1,8 @@
import { BusinessUnits, SiteConfig } from '../types/index'
import { codexSiteConfig } from './codex'
import wakuSiteConfig from './waku'
export const siteConfigs: Record<BusinessUnits, SiteConfig> = {
[BusinessUnits.Codex]: codexSiteConfig,
[BusinessUnits.Waku]: wakuSiteConfig,
}
@@ -0,0 +1,12 @@
import { SiteConfig } from '../index'
import baseSiteConfig from './base'
export const wakuSiteConfig: SiteConfig = {
...baseSiteConfig,
title: 'Waku',
tagline:
'Waku is the communication layer for Web3. Decentralized communication that scales.',
url: 'https://waku.org',
}
export default wakuSiteConfig
@@ -0,0 +1,38 @@
import { ThemeConfig } from '@docusaurus/preset-classic'
const lightCodeTheme = require('prism-react-renderer/themes/github')
const darkCodeTheme = require('prism-react-renderer/themes/dracula')
export const baseThemeConfig: ThemeConfig = {
docs: { sidebar: { hideable: true } },
metadata: [],
colorMode: {
disableSwitch: true,
},
navbar: {
title: '',
logo: {},
items: [
{
type: 'localeDropdown',
position: 'right',
},
],
},
footer: {
logo: {},
links: [
{
title: 'Community',
items: [],
},
],
copyright: `Logos, ${new Date().getFullYear()}`,
},
prism: {
theme: lightCodeTheme,
darkTheme: darkCodeTheme,
},
}
export default baseThemeConfig
@@ -0,0 +1,59 @@
import baseThemeConfig from './base'
export const codexThemeConfig: typeof baseThemeConfig = {
...baseThemeConfig,
navbar: {
...baseThemeConfig.navbar,
logo: {
alt: 'Codex',
src: 'theme/image/logo.svg',
width: 24,
height: 26,
},
items: [
{
to: 'blog',
label: 'Blog',
},
{
type: 'localeDropdown',
position: 'right',
},
],
},
metadata: [
{ name: 'keywords', content: 'codex, storage' },
{
name: 'description',
content: 'Codex is building a Decentralized Durability Storage',
},
{ name: 'image', content: 'theme/image/preview-image.png' },
],
footer: {
...baseThemeConfig.footer,
copyright: `Codex, ${new Date().getFullYear()}`,
logo: {
alt: 'Codex',
src: 'theme/image/logo.svg',
href: '/',
width: 22,
},
links: [
{
title: 'Community',
items: [
{
label: 'Discord',
href: '4qdQN5JaWW',
},
{
label: 'Twitter',
href: 'codexstorage',
},
],
},
],
},
}
export default codexThemeConfig
@@ -0,0 +1,9 @@
import { ThemeConfig } from '@docusaurus/types'
import { BusinessUnits } from '../types'
import codexThemeConfig from './codex'
import wakuThemeConfig from './waku'
export const themeConfigs: Record<BusinessUnits, ThemeConfig> = {
[BusinessUnits.Codex]: codexThemeConfig,
[BusinessUnits.Waku]: wakuThemeConfig,
}
@@ -0,0 +1,59 @@
import baseThemeConfig from './base'
export const wakuThemeConfig: typeof baseThemeConfig = {
...baseThemeConfig,
navbar: {
...baseThemeConfig.navbar,
logo: {
alt: 'Waku',
src: 'theme/image/logo.svg',
height: 26,
},
items: [
{
to: 'blog',
label: 'Blog',
},
{
type: 'localeDropdown',
position: 'right',
},
],
},
metadata: [
{ name: 'keywords', content: 'waku, web3' },
{
name: 'description',
content:
'Waku is the communication layer for Web3. Decentralized communication that scales.',
},
{ name: 'image', content: 'theme/image/preview-image.png' },
],
footer: {
...baseThemeConfig.footer,
copyright: `Waku, ${new Date().getFullYear()}`,
logo: {
alt: 'Waku',
src: 'theme/image/logo.svg',
href: '/',
width: 22,
},
links: [
{
title: 'Community',
items: [
{
label: 'Discord',
href: '4qdQN5JaWW',
},
{
label: 'Twitter',
href: 'codexstorage',
},
],
},
],
},
}
export default wakuThemeConfig
@@ -0,0 +1,8 @@
import { Config } from '@docusaurus/types'
import { PresetConfig } from './preset'
export type PluginOptions = PresetConfig
export type SiteConfig = Partial<Config>
export * from './preset'
export * from './themes'
@@ -0,0 +1,19 @@
import { DefaultThemeOptions } from './themes'
export enum ThemeNames {
Default = 'default',
}
export enum BusinessUnits {
Codex = 'Codex',
Waku = 'Waku',
}
export type PresetConfig = {
businessUnit: BusinessUnits
theme?: {
name: ThemeNames.Default
options?: DefaultThemeOptions
}
}
@@ -0,0 +1,3 @@
export type ThemeConfig = {}
export type { PluginOptions as DefaultThemeOptions } from '@acid-info/logos-docusaurus-theme/src'
@@ -0,0 +1,13 @@
import { PluginOptions as DocPluginOptions } from '@docusaurus/plugin-content-docs'
import { PluginConfig } from '@docusaurus/types'
import { normalizePluginOptions } from '@docusaurus/utils-validation'
import { findPluginByName } from './plugin.utils'
export const findDocInstances = (plugins: PluginConfig[]): PluginConfig[] =>
findPluginByName(plugins, '@docusaurus/plugin-content-docs')
export const validateDocPluginOptions = (options: DocPluginOptions) =>
require('@docusaurus/plugin-content-docs').validateOptions({
validate: normalizePluginOptions,
options,
})
@@ -0,0 +1,15 @@
import type { PluginConfig } from '@docusaurus/types'
export const findPlugin = (
plugins: PluginConfig[],
filter: (path: string, config: any) => boolean,
): PluginConfig[] =>
plugins.filter((plugin) => {
if (!plugin || typeof plugin === 'function') return
const [path, config] = Array.isArray(plugin) ? plugin : [plugin, undefined]
return filter(path as string, config)
})
export const findPluginByName = (plugins: PluginConfig[], name: string) =>
findPlugin(plugins, (path) => path.includes(name))
@@ -0,0 +1,26 @@
import { Joi } from '@docusaurus/utils-validation'
import { BusinessUnits, PluginOptions, ThemeNames } from './types'
const schema = Joi.object<PluginOptions>({
businessUnit: Joi.string()
.valid(...Object.values(BusinessUnits))
.required(),
theme: Joi.object()
.schema({
name: Joi.string()
.valid(...Object.keys(ThemeNames))
.required(),
themeOptions: Joi.object().optional().default({}),
})
.optional()
.default({}),
})
export const validateOptions = ({
options,
validate,
}: {
options: PluginOptions
validate: any
}) => validate(schema, options ?? {})
Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

@@ -0,0 +1,10 @@
<svg width="24" height="26" viewBox="0 0 24 26" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_887_2255)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0.0296447 18.8309L5.85592 22.3332V22.3604H5.90118L11.9561 26L18.0017 22.3604H18.038V22.3385L23.8643 18.8309V18.6194L24 18.3608L23.8643 18.2961V13.2291L23.9229 13.1989L23.8643 13.0954V12.8518L23.9453 12.7088L23.8643 12.667V7.57255L23.914 7.54886L23.8643 7.45415V7.23109L23.6919 7.12589L23.6186 6.98613L23.5312 7.02776L12.0198 0L0.0296447 7.22222V12.6336L0 12.6489L0.0296447 12.7012V13.2431L0.0214515 13.2576L0.0296447 13.2618V18.2257L0.00138735 18.2391L0.0296447 18.293V18.8309ZM0.712977 13.6134V17.9001L5.0387 15.839L0.712977 13.6134ZM0.808944 12.9478L5.76023 15.4952L5.85592 15.4496V10.419L5.78735 10.3863L0.808944 12.9478ZM5.85592 16.2594V21.5775L0.830704 18.5475L5.74858 16.2042L5.85592 16.2594ZM6.38557 16.532L11.2202 19.0194L6.38557 21.5069V16.532ZM11.6822 18.5421L6.47011 15.8604L11.6822 13.377V18.5421ZM12.2119 19.5296V25.1014L17.198 22.095L12.2119 19.5296ZM17.5084 21.5397L12.61 19.0194L17.5084 16.4992V21.5397ZM18.038 10.3845L23.0206 12.9481L18.038 15.5116V10.3845ZM23.1992 13.5713L18.7511 15.8598L23.1992 17.9792V13.5713ZM18.0413 16.225L18.038 16.2267V21.5884L23.0082 18.5916L18.0413 16.225ZM12.2119 13.4475L17.3197 15.8812L12.2119 18.5092V13.4475ZM11.6822 19.4968L6.67649 22.0722L11.6822 25.0905V19.4968ZM23.1992 12.3249V7.88945L18.7234 10.0221L23.1992 12.3249ZM17.5084 9.39694V4.35584L12.6094 6.87639L17.5084 9.39694ZM12.2119 7.38694L17.2919 10.0006L12.2119 12.4212V7.38694ZM11.6822 6.39935V0.94307L6.80726 3.89118L11.6822 6.39935ZM6.38557 4.3893L11.2196 6.8764L6.38557 9.3635V4.3893ZM12.6112 12.9343L17.5084 10.601V15.2677L12.6112 12.9343ZM11.6822 7.35343V12.4917L6.49718 10.0211L11.6822 7.35343ZM11.1349 12.9343L6.38557 10.6714V15.1972L11.1349 12.9343ZM0.712977 12.2821L5.06578 10.0425L0.712977 7.96854V12.2821ZM1.00116 7.40241L5.77561 9.67733L5.85592 9.63601V4.46651L1.00116 7.40241ZM22.8398 7.35722L18.038 9.64512V4.425L22.8398 7.35722ZM12.2119 6.36586L17.0989 3.85148L12.2119 0.867175V6.36586Z" fill="black"/>
</g>
<defs>
<clipPath id="clip0_887_2255">
<rect width="24" height="26" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Some files were not shown because too many files have changed in this diff Show More