Skip to content
This repository has been archived by the owner on Mar 13, 2022. It is now read-only.

Commit

Permalink
Integrate @stoplight/elements into Docusaurus
Browse files Browse the repository at this point in the history
  • Loading branch information
yhuard committed Feb 22, 2022
1 parent 90f0230 commit f55eebb
Show file tree
Hide file tree
Showing 7 changed files with 2,250 additions and 84 deletions.
14 changes: 14 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Exclude everything
*

# Only add what is necessary
!babel.config.js
!docusaurus.config.js
!package.json
!sidebars.js
!tsconfig.json
!yarn.lock
!blog
!docs
!src
!static
13 changes: 13 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
FROM node:16.13.2-alpine3.15
WORKDIR /usr/src/app
COPY package.json yarn.lock ./
RUN yarn install --frozen-lockfile --silent && yarn cache clean
COPY babel.config.js docusaurus.config.js sidebars.js tsconfig.json ./
COPY blog blog
COPY docs docs
COPY src src
COPY static static
RUN yarn build
EXPOSE 3000
CMD ["yarn", "serve"]

7 changes: 7 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
version: "3.7"

services:
docusaurus-stoplight-elements:
build: .
ports:
- "3000:3000"
123 changes: 80 additions & 43 deletions docusaurus.config.js
Original file line number Diff line number Diff line change
@@ -1,107 +1,144 @@
// @ts-check
// Note: type annotations allow type checking and IDEs autocompletion

const lightCodeTheme = require('prism-react-renderer/themes/github');
const darkCodeTheme = require('prism-react-renderer/themes/dracula');
const { ProvidePlugin } = require("webpack");
const lightCodeTheme = require("prism-react-renderer/themes/github");
const darkCodeTheme = require("prism-react-renderer/themes/dracula");

/** @type {import('@docusaurus/types').Config} */
const config = {
title: 'My Site',
tagline: 'Dinosaurs are cool',
url: 'https://your-docusaurus-test-site.com',
baseUrl: '/',
onBrokenLinks: 'throw',
onBrokenMarkdownLinks: 'warn',
favicon: 'img/favicon.ico',
organizationName: 'facebook', // Usually your GitHub org/user name.
projectName: 'docusaurus', // Usually your repo name.
title: "My Site",
tagline: "Dinosaurs are cool",
url: "https://your-docusaurus-test-site.com",
baseUrl: "/",
onBrokenLinks: "throw",
onBrokenMarkdownLinks: "warn",
favicon: "img/favicon.ico",
organizationName: "facebook", // Usually your GitHub org/user name.
projectName: "docusaurus", // Usually your repo name.

presets: [
[
'classic',
"classic",
/** @type {import('@docusaurus/preset-classic').Options} */
({
docs: {
sidebarPath: require.resolve('./sidebars.js'),
sidebarPath: require.resolve("./sidebars.js"),
// Please change this to your repo.
editUrl: 'https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/',
editUrl:
"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/",
},
blog: {
showReadingTime: true,
// Please change this to your repo.
editUrl:
'https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/',
"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/",
},
theme: {
customCss: require.resolve('./src/css/custom.css'),
customCss: require.resolve("./src/css/custom.css"),
},
}),
],
],

plugins: [
// Add custom webpack config to make @stoplight/elements work
() => ({
name: "custom-webpack-config",
configureWebpack: () => {
return {
module: {
rules: [
{
test: /\.m?js/,
resolve: {
fullySpecified: false,
},
},
],
},
plugins: [
new ProvidePlugin({
process: require.resolve("process/browser"),
}),
],
resolve: {
fallback: {
buffer: require.resolve("buffer"),
stream: false,
path: false,
process: false,
},
},
};
},
}),
],

themeConfig:
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
({
navbar: {
title: 'My Site',
title: "My Site",
logo: {
alt: 'My Site Logo',
src: 'img/logo.svg',
alt: "My Site Logo",
src: "img/logo.svg",
},
items: [
{
type: 'doc',
docId: 'intro',
position: 'left',
label: 'Tutorial',
type: "doc",
docId: "intro",
position: "left",
label: "Tutorial",
},
{to: '/blog', label: 'Blog', position: 'left'},
{ to: "/blog", label: "Blog", position: "left" },
{ to: "/api", label: "API", position: "left" },
{
href: 'https://github.com/facebook/docusaurus',
label: 'GitHub',
position: 'right',
href: "https://github.com/facebook/docusaurus",
label: "GitHub",
position: "right",
},
],
},
footer: {
style: 'dark',
style: "dark",
links: [
{
title: 'Docs',
title: "Docs",
items: [
{
label: 'Tutorial',
to: '/docs/intro',
label: "Tutorial",
to: "/docs/intro",
},
],
},
{
title: 'Community',
title: "Community",
items: [
{
label: 'Stack Overflow',
href: 'https://stackoverflow.com/questions/tagged/docusaurus',
label: "Stack Overflow",
href: "https://stackoverflow.com/questions/tagged/docusaurus",
},
{
label: 'Discord',
href: 'https://discordapp.com/invite/docusaurus',
label: "Discord",
href: "https://discordapp.com/invite/docusaurus",
},
{
label: 'Twitter',
href: 'https://twitter.com/docusaurus',
label: "Twitter",
href: "https://twitter.com/docusaurus",
},
],
},
{
title: 'More',
title: "More",
items: [
{
label: 'Blog',
to: '/blog',
label: "Blog",
to: "/blog",
},
{
label: 'GitHub',
href: 'https://github.com/facebook/docusaurus',
label: "GitHub",
href: "https://github.com/facebook/docusaurus",
},
],
},
Expand Down
3 changes: 3 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,11 @@
"@docusaurus/core": "2.0.0-beta.15",
"@docusaurus/preset-classic": "2.0.0-beta.15",
"@mdx-js/react": "^1.6.21",
"@stoplight/elements": "^7.5.13",
"buffer": "^6.0.3",
"clsx": "^1.1.1",
"prism-react-renderer": "^1.2.1",
"process": "^0.11.10",
"react": "^17.0.1",
"react-dom": "^17.0.1"
},
Expand Down
20 changes: 20 additions & 0 deletions src/pages/api.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import React from "react";
import Layout from "@theme/Layout";
import "@stoplight/elements/styles.min.css";
import { API } from "@stoplight/elements";
import BrowserOnly from "@docusaurus/BrowserOnly";

export default function Api() {
return (
<Layout title="API example">
<BrowserOnly>
{() => (
<API
apiDescriptionUrl="https://api.apis.guru/v2/specs/github.com/1.1.4/openapi.yaml"
router="hash"
/>
)}
</BrowserOnly>
</Layout>
);
}
Loading

0 comments on commit f55eebb

Please sign in to comment.