npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

skelosaurus

v2.0.12

Published

Skeleton documentation generator for Docusaurus v2 and v1

Downloads

124

Readme

npm npm bundle size (version) npm GitHub last commit GitHub Built with Docusaurus v2

Outlined with Skelosaurus

skelosaurus

Skeleton documentation generator for Docusaurus v2 and v1

Installation

Install the package globally:

npm i skelosaurus -g

The skelo command now available at the command prompt.

Usage

skelo -h

See commands and general options.

Usage: skelo [options] outlineFiles...

Skeleton documentation generator for Docusaurus (v2 and v2)

Options:
  -V, --version                 output the version number
  -h, --help                    display help for command

Commands:
  build [options] <sources...>  build doc files and sidebars file
  load [options]                load documentation parts into respective
                                files
  save [options]                save documentation parts into respective
                                files
  help [command]                display help for command

build is the default command, so you can provide its arguments and options without including the build command.

skelo help build

See arguments and options for build command.

Usage: skelo build [options] <sources...>

build doc files and sidebars file

Options:
  -c, --clear           start with a clear docs path
  -d, --docs <path>     path where markdown files are generated into (default:
                        "./docs")
  -f, --autofolder      create subfolder for categories and subtopics (default:
                        false)
  -i, --intro           create in Intro page in each subcategory
  --introTitle [title]  title to use in intro pages (default: "Overview")
  --no-v2               generate for Docusaurus v1
  -o, --out <filename>  filename to contains sidebars (default: "sidebars")
  -p, --parts [path]    path where parts will be stored (default: "./")
  -w, --website <path>  path to store sidebars content file (default: "./")
  -h, --help            display help for command

skelo help load

See arguments and options for load command.

Usage: skelo load [options]

load documentation parts into respective files

Options:
  -d, --docs <path>     path where markdown files are generated into (default:
                        "./docs")
  -w, --website <path>  path to store sidebars content file (default: "./")
  -h, --help            display help for command

skelo help save

See arguments and options for save command.

Usage: skelo save [options]

save documentation parts into respective files

Options:
  -d, --docs <path>     path where markdown files are generated into (default:
                        "./docs")
  -w, --website <path>  path to store sidebars content file (default: "./")
  -h, --help            display help for command

Quick example

Step 1: Create documentation project

Create a working folder sample and a documentation outline file sample.md which contains documention outline as Markdown.

mkdir sample
cd sample
echo Documentation outline for Docusaurus > sample.md

In sample.md copy the following:

An example of using Markdown to design documentation structure for Docusaurus v1 and v2.

## docs

- Getting started
    - Introduction
    - Building
    - Generating
        - Allowing new features
        - Delegating responsabilities
    - Controversies
- Guides
    - How to create new features
- API
    - CLI commands
    - sidebars.js

## tutorials

- Tutorial
    - Creating simple files
    - Adding content and subtopics
    - Create folders from titles

Install Docusaurus in your working folder.

npx @docusaurus/init@next init sample-doc classic

This will create the sample-doc documentation project as inside your working folder.

Step 2: Generate skeleton

Generate skeleton documentation with skelo:

skelo build sample -w ./sample-doc -d ./sample-doc/docs

The sample\sample-doc\docs folder contains .md topic source files for your documentation. The sample\sample-doc\sidebars.js contains the navigation description.

sample-doc
├── docs
│   ├── installation.md
│   └── other-topic.md
└── sidebars.js

The sample\sample-doc\sidebars.js exports the sidebar navigation design.

/**
* Sidebar definitions for Docusaurus v2
*/

module.exports = {
    "docs": {
        "Getting started": [
            "introduction",
            "building",
            {
                "type": "category",
                "label": "Generating",
                "items": [
                    "allowing-new-features",
                    "delegating-responsabilities"
                ]
            },
            "controversies"
        ],
        "Guides": [
            "how-to-create-new-features"
        ],
        "API": [
            "cli-commands",
            "sidebars-js"
        ]
    },
    "tutorials": {
        "Tutorial": [
            "creating-simple-files",
            "adding-content-and-subtopics",
            "create-folders-from-titles"
        ]
    }
}

The sample\sample-doc\docs\introduction.md has the front-matter Docusaurus expects, and is already filled with a lorem ipsum text.

---
title: Introduction
id: introduction
sidebar_label: Introduction
---

<!-- @part src="../../sample-doc-parts/introduction/h1-introduction-description.md" -->

Irure est eiusmod pariatur mollit exercitation sunt occaecat consectetur. Id nisi minim eu elit sint esse magna eiusmod commodo consequat ea sunt id amet. Et consectetur ea eiusmod aute sunt mollit est cillum sunt reprehenderit officia non qui commodo. Ad adipisicing adipisicing non cillum exercitation eiusmod est voluptate dolor pariatur nulla cupidatat fugiat. Et non anim nostrud culpa.
<!-- @/part -->

<!-- @part src="../../sample-doc-parts/introduction/h1-introduction-body.md" -->
<!-- Your content goes here, replacing this comment -->
<!-- @/part -->

Step 3: Use skeleton documentation in Docusaurus

Open the sample\sample-doc\docusaurus.config.js, and edit the themeConfig:

  themeConfig: {
    navbar: {
      title: 'My Site',
      logo: {
        alt: 'My Site Logo',
        src: 'img/logo.svg',
      },
      items: [
        {
          // to: 'docs/',
          to: 'docs/introduction',
          activeBasePath: 'docs',
          label: 'Docs',
          position: 'left',
        },
        ...

Now, start Docusaurus local server.

cd sample-doc
npm run start

Docusaurus does its magic and finally opens up the local documentation site it created. Click Docs item in the top navigation menu to see the navigation bar and basic content for each topic.

Screenshot

Creating documentation folders

Creating folders automatically

To create folders automatically, use the -f or --autofolders switch.

skelo sample -f -w ./sample-folders-doc -d ./sample-folders-doc/docs

Because build is the default command, you can skip providing the command name explicityly, like in the example above. In the example above, sample is the outline filename. If the extension of the outline file is .md, you can skip writing it.

This will generate the documentation .md files and sidebars.js file as before, but it also creates a subfolder for each topic with items. Here is the folder structure in sample/sample-folders-doc:

sample-folders-docs
├── docs
│   ├── adding-content-and-subtopics.md
│   ├── allowing-new-features.md
│   ├── building.md
│   ├── cli-commands.md
│   ├── controversies.md
│   ├── create-folders-from-titles.md
│   ├── creating-simple-files.md
│   ├── delegating-responsabilities.md
│   ├── how-to-create-new-features.md
│   ├── introduction.md
│   ├── overview-07669.md
│   ├── overview-46414.md
│   ├── overview-71580.md
│   ├── overview-96116.md
│   ├── overview.md
│   └── sidebars-js.md
├── sidebars.js
└── tree.txt

The sample\sample-folders-doc\sidebars.js is also changed to include the file paths.

module.exports = {
    "docs": {
        "Getting started": [
            "overview",
            "introduction",
            "building",
            {
                "type": "category",
                "label": "Generating",
                "items": [
                    "overview",
                    "allowing-new-features",
                    "delegating-responsabilities"
                ]
            },
            "controversies"
        ],
        "Guides": [
            "overview",
            "how-to-create-new-features"
        ],
        "API": [
            "overview",
            "cli-commands",
            "sidebars-js"
        ]
    },
    "tutorials": {
        "Tutorial": [
            "overview",
            "creating-simple-files",
            "adding-content-and-subtopics",
            "create-folders-from-titles"
        ]
    }
}

Creating folders selectively

When you want to indicate a topic as a folder in which subtopics will go:

  1. use the @f marker in your outline file
  2. do NOT include the -f (--autofolders) switch in command line.

Creating Overview pages automatically

Automatically insert an Overview documentation page as the first item in a navigation section or list of subtopics. This will save you time and make your documentation have a consistent look.

To create the Overview pages automatically, use the -i or --intro switch. By default, the title of the overview pages is set to Overview. You can specify a different title for the overview page with the --introTitle option.

skelo sample -i -f sample -w ./sample-folders-doc -d ./sample-folders-doc

Documentation

See the official documentation at https://skelosaurus.com

API

Functions

buildCategoryTopics(bulletList, [options]) ⇒ Array.Object

Build list of topics and subcategories in a category.

Kind: global function
Returns: Array.Object - List of topics and categories.

| Param | Type | Default | Description | | --- | --- | --- | --- | | bulletList | Array | | The bullet list internal representation. | | [options] | object | { 'parent': './', 'prefix': '' } | Options for building topic slug and folders |

buildHeaders(bulletlist, [level]) ⇒ Array

Build headers as template variables

Kind: global function
Returns: Array - Array of objects where each object is a set of template variables
Opts: object Command line options passed as properties

| Param | Type | Default | Description | | --- | --- | --- | --- | | bulletlist | Array | | Representation of list in Markdown abstract tree | | [level] | number | 2 | Heading level for Markdown notation |

buildSectionCategories(bulletList, [options]) ⇒ object

Build items of navigation section.

Kind: global function
Returns: object - Key-value where key is category title and value is a list of items or subcategories.

| Param | Type | Default | Description | | --- | --- | --- | --- | | bulletList | Array | | The bullet list internal representation. | | [options] | object | { 'parent': './' } | Options for building section slug |

buildTopicPage(title, [options]) ⇒ string

Create topic documentation topic in Markdown.

Kind: global function
Returns: string - Topic unique slug

| Param | Type | Default | Description | | --- | --- | --- | --- | | title | string | | Topic title | | [options] | object | { 'headers': [], 'parent': './', 'prefix': '' } | Options for creating topic file. |

getDocumentParts(sourceFile)

Get document parts in specified file

Kind: global function

| Param | Type | Description | | --- | --- | --- | | sourceFile | string | Path to documentation file @ @returns {Array.{targetPath: string, content: string}} Array of part object, each part has targetPath and content properties |

saveDocumentParts(sourceFile, program)

Create parts files for a specified topic document

Kind: global function

| Param | Type | Description | | --- | --- | --- | | sourceFile | string | Path to topic document | | program | object | Options passed on command |

getSidebars(sourceFilename) ⇒ object

Extract sidebar title and sidebar outline from a Markdown file.

Kind: global function
Returns: object - Key-value where key is the sidebar title and value is bullet list tree.

| Param | Type | Description | | --- | --- | --- | | sourceFilename | string | Filename of a Markdown file with outline |

getTopicHeaders(bulletlist, Command) ⇒ Array

Build topic top headers

Kind: global function
Returns: Array - Headers in markdown notation

| Param | Type | Description | | --- | --- | --- | | bulletlist | Array | Header list represented in Markdown abstrat tree | | Command | object | line options passed as properties |

getUniqueName(name) ⇒ string

Return a variant string

Kind: global function
Returns: string - Original string with suffixed text

| Param | Type | Description | | --- | --- | --- | | name | string | The name to check for uniqueness |

hasHeaders(topicItem) ⇒ boolean

Checks whether the topic has headers

Kind: global function
Returns: boolean - true if topic has headers, false otherwise.

| Param | Type | Description | | --- | --- | --- | | topicItem | object | Topic to test whether it has headers |

isSingleTopic(topicItem) ⇒ boolean

Checks whether a topic has children topics

Kind: global function
Returns: boolean - true if single topic, false otherwise

| Param | Type | Description | | --- | --- | --- | | topicItem | object | Topic to test whether it is single topic |

makeid(length) ⇒ string

Return a random string with digital characters of specified length

Kind: global function
Returns: string - Randomly chosen characters of specified length

| Param | Type | Description | | --- | --- | --- | | length | number | The length of string to return. |

parseTitle(topicTitle) ⇒ object

Extract topic title to extract relevant information

Kind: global function
Returns: object - Properties extracted from title

| Param | Type | Description | | --- | --- | --- | | topicTitle | object | Topic title to parse. |

saveDocument(fileName, content)

Create a text file in utf-8 format from specified name and content

Kind: global function

| Param | Type | Description | | --- | --- | --- | | fileName | string | Name of the file to create. | | content | string | String to place in the file. |

slug(source) ⇒ string

Convert specified string into a slug.

Converts spaces, tabs, and visible special characters into dashes (-) -- except backslash (). Compresses sequence of dashes or special characters into a single dash. Removes heading or trailing dashes or special characters from the specified string.

Kind: global function
Returns: string - Trimmed, lowercase string with dashes(-)

| Param | Type | Description | | --- | --- | --- | | source | string | String to covert to slug. |

License

MIT License

Copyright (c) 2020 Ion Gireada

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.