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

@omegacrm/lwc-doc-gen

v0.0.1-alpha2

Published

Documentation generation for Lightning web components

Downloads

3

Readme

Utility to speed up developing, documenting and testing of LWC OSS. It also works with Salesforce (SFDX-based) project with some limitations.

It aims zero-configuration approach, but sometimes it will not be possible. See configuring generator

Installation

To start using the tool, just require it as a dev-dependency:

npm install --save-dev @omegacrm/lwc-doc-gen

The installation will provide an binary file to be used on, for example, your npm scripts

How it works

[TODO - Expand this info]

The tolls will work in 2 main steps:

  • Generate LWC and Rollup configuration from your source files (components, examples and docs) to be consumed by a LWC app.

    • lwc.config.json info will be generated
  • Create / update an LWC OSS app that will use generated config en previous step, and bundle/serve by Rollup in the same way.

Usage

CLI usage

[TODO]

Configuration

Documentation configuration is being made using a JSON file with the following strucuture:

{
  "title": "Omega LWC doc",
  "lib": ["quill", "chart.js", "papaparse", "@popperjs/core"],
  "statics": {
    "root": "./guides",
    "items": [
      { "title" : "Installation", "relativePath": "installation.html" },
      { 
        "title": "QuickStart",
        "items": [
          { "title" : "Installation", "relativePath": "installation.html" }
        ] 
      },
      { 
        "title": "Lwc OSS",
        "files": [
          { "title" : "Use of Salesforce API", "relativePath": "installation.html" }
        ] 
      }
    ]
  },
  "defaultCategory": "Base components",
  "categories": [
    { 
      "name": "Only in Platform",
      "elements": [
        "tiny-data-loader",
        "list-view"
      ]
    },
    { 
      "name": "Only in OSS",
      "elements": [
        "app-layout",
        "global-nav",
        "docked-nav",
        "drawer",
        "drawer-item",
        "oauth2-client",
        "records-list-view",
        "router-view",
        "salesforce-api"
      ]
    }
  ]
}

Include external libraries

To allow rollup to grab your library external dependencies, add a lib key to your JSON file with an array of external modules to be resolved by node-resolve Rollup plugin instead on LWC module resolver.

For example

Documenting components

Each LWC component should be annotated in a certain way to allow the tool to be able to extract a valid component manifest. The following example of a component annotated:

/**
 * My custom component  description
 * @element my-component
 * @slot default - The description of the default slot
 */
export default class MyComponent extends LightningElement {

    /**
     * Description of the property
     * @type {'shade'|'info'|'warning'|'error'}
     */
    @api myfixedstring = 'info'

    /**
     * Description of the property
     * @type boolean
     * @default false
     */
    @api mybool = false

    /**
     * Description of the property
     * @type string
     * @default ''
     */
    @api mystring = ''

    /**
     * Desc ription of my public method
     */
    @api
    myMethod() {

    }
}

[TODO]

Folder structure for a component

A simple example of a component folder structure to follow:

component
    |-- component.js
    |-- component.html
    |-- component.css
    |-- component.svg
    |-- component.preview.svg
    |-- __tests__
        |-- myComponentJestTest.js
    |-- __examples__
        |-- myExampleBase
            |-- myExampleBase.js
            |-- myExampleBase.html
            |-- myExampleBase.css
        |-- otherExample
            |-- otherExample.js
            |-- otherExample.html
            |-- otherExample.css
    |-- __docs__
        |-- mydoc.md
        |-- otherDoc.html
    |-- __mocks__
        |-- MyController.getRecords.js
    |-- __specs__
        |-- gettingRecords.js

The proposed structure is based on lightning-base-components source code. Each LWC can have several children folders:

  • __examples__ folder containing LWC components implementing different use cases. Each component should follow the LWC folder structure convention.
  • __mocks__ JS files to mock Apex actions or and so on for this specific component.
  • __specs__ Containing JS files with E2E test, such as Playwright tests (not handled by this utility at this moment)
  • __docs__ Containing HTML and/or Markdown files documenting the component

SFDX project settings

The utility can be used to document LWC under a SFDX project (with some limitations), but first need some extra setup to allow Apex actions and others to work properly.

Mocking Apex actions

By default, the generated LWC app will alias all Apex calls to a module raising an object representing AuraHandledException type.

To make you Apex call works, you should first mock them. To do so, you can create a __mocks__ folder in you LWC component folder, or directly on your lwc folder. The second one is preferred as you will be able to share the mocks between components.

Mocking wired Apex

[TODO]

Using your mocks with Jest

The mocks you create can be used also in your Jest tests. You just have to edit your Jest config and add the route to your mock in the moduleNameMapper section. For example:

const { jestConfig } = require('@salesforce/sfdx-lwc-jest/config');

module.exports = {
    ...jestConfig,
    modulePathIgnorePatterns: ['<rootDir>/.localdevserver'],
    moduleNameMapper: {
        '^@salesforce/apex/MyClass.getAccounts': '<rootDir>/force-app/main/default/lwc/__mocks__/MyClass.getAccounts.js'
    }
};

Add files to your ignore files

.gitignore

The temporal file/folder can be safely ignored by GIT as they will be re-generated when the doc runs again:

lwc-config.json # The file generated to alias all your modules and used by LWC compiler
.lwc-docgen # This folder will be used to stored the aliased modules generated for your proyect, for example the custom labels.

.forceignore (for SFDX projects)

Add your examples, tests, mocks and specs to your force ingnore file as they are not needed by Salesforce. You can also add the 'preview' icon, For example

**/__tests__/**
**/__examples__/**
**/__mocks__/**
**/__spec__/**
**preview.svg