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

sveltedoc-parser

v4.2.1

Published

Generate a JSON documentation for a Svelte file

Downloads

360,001

Readme

The sveltedoc parser

Generate a JSON documentation for a Svelte file.

npm GitHub Workflow Status (branch)

Table of Contents

Changelog

[4.2.1] 15.12.2021

  • 🛠 [Fixed] - Add missed dependency.

[4.2.0] 14.12.2021

  • 🔒 [Fixed] Upgrade all dependecies to latest version to solve known vulnarability issues.
  • [Added] Add support ES6 default value assignment for method parameter Issue #75. Thanks for @ekhaled.
  • [Added] Add support of method parsing when it assigned to identifier Issue #78. Thanks for @ekhaled.
  • [Added] Extend typings to support self and trusted event modifiers [Issue #80].
  • [Added] Introduce JSDocTypeFunction to support functions types in variable definitions and provide details about function parameters and methods.
  • [Added] Extend JSDocType to support new JSDocTypeFunction.
  • [Added] Improve type infering from assigned value. Currently support simple infering: array, object, function.
  • 🛠 [Fixed] Fix the Issue #67, Issue #69: specifier comments are not parsed properly; Thanks to @ekhaled.
  • 🛠 [Fixed] Fix the Issue #72: Module context scripts look for the wrong attribute.
  • 🛠 [Fixed] Fix the Issue #83: Default value and keywords of exported aliases not merged.

[4.1.0] 19.02.2021

  • 🎉 [Misc] Update the ReadMe by @soft-decay.
  • [Added] Implement support of imported types parsing, f.ex. @type {import('../typings.d.ts').ExternalTypeClass}. In order to do this, new field importPath introduced to JSDocType, in the name property now it returns imported class name, f.ex.: ExternalTypeClass.
  • 🛠 [Fixed] Complete fix of Issue #1: Support parsing event names from top-level constant objects with accessing to their properties by naming strings. Introduce the new issue Issue #48 about supporting parse of event names by external references.
  • 🛠 [Fixed] Fix the Issue #47, now all comments in markup are parsed correctly and attached to required items in document. Support JSDoc comment markup parsing in all places where comment can be used.
  • 🛠 [Fixed] Fix the Issue #61, now slot parameter items enrich with all detailed information that was parsed from markup comment.
  • 🛠 [Fixed] Spec: add the module definition typings to typings.d.ts file.
  • 🛠 [Fixed] Fix some edge-cases in script parsing logic.
  • 🛠 [Tech] Refactor internal parser logic to make it easy to introduce new features, moves forward to TS support! ;)
  • 🔥 [Breaking] Spec: change the SvelteSlotParameter definition, to support name, description, type fields, instead of many not relevant fields that was inherited from ISvelteItem interface.
  • 🔥 [Breaking] Spec: change the SvelteSlotItem definition, to improve consistency:
    • Rename parameters property to params to be most likely the same as SvelteMethodItem. Old field still available until 5.* release.

Thanks a lot @soft-decay for contributing in this release!

[4.0.0] 25.01.2021

  • 🛠 [Fixed] Fix Issue #42
  • 🛠 [Fixed] Partially fixed Issue #1. Event names are now correctly parsed if provided by a top-level constant in the same file. Thanks to @soft-decay
  • [Added] Support complete parsing of component method arguments Issue #39. Thanks to @soft-decay
  • [Added] Support parsing of return type and description for methods in component Issue #37. Thanks to @soft-decay
  • [Added] Options validation, Thanks to @soft-decay
  • 🔥 [Breaking] API rework for component methods description:
    • args property renamed to params;
    • Change the structure of return item for methods:
      • desc property renamed to description;
      • type property now contains a JSDocType object instead of a string with a text representation of the type. This text representation is still available from the text property of the JSDocType object;
    • [Svelte2]: method arguments presented with plain array with names, now that replaced with objects of SvelteMethodParamItem type;
  • 🔥 [Breaking] Cleanup deprecated code:
    • loc property removed: Use locations instead;
    • value property of SvelteComponentItem removed: Use importPath instead;

Full changelog of release versions can be found here.

Install

npm install --save sveltedoc-parser

Features

Common

  • JSDoc support
    • Support description extraction for everything items
    • Support visibility scope from JSDoc keywords: @public, @protected, @private
  • Extract list of imported components
    • Extract relative path to imported component (supports full-syntax and short-syntax import styles)
  • Extract data properties
    • Extract description from JSDoc comment
    • Extract JS type from JSDoc (@type {string}) or parse default value if is not provided
  • Extract computed properties with list of dependencies
  • Extract list of references attached to components or HTML elements
  • Extract information about events
    • Events that propagated from child component or HTML elements <button on:click>...</button>
    • Parse event modifiers ... on:click|once
  • Extract list of used default and named slots
  • Extract component methods
    • Extract description from JSDoc comment
    • Extract parameters description from JSDoc comment
    • Extract JS type from JSDoc for parameters (@param {string} parameter)
    • Identify optional parameters using brackets (@param [parameter]) or using Google ClosureCompiler syntax (@param {string=} parameter)
      • Identify default values for optional parameters (@param [parameter=Default value])
  • Extract source locations for component symbols
    • data (props)
    • slots
    • methods
    • refs
    • events

Svelte 2

  • Extract fired events
    • Events fired by this component using the fire(...) method
    • Custom event handlers with private visibility scope
  • Extract component helpers
  • Extract component actions
  • Extract component transitions

Svelte 3

  • Extract global component description and keywords from JSDoc comment
  • Extract all dispatched events
    • Events that dispatched from script block by user-created dispatcher
    • Events that dispatched from markup expressions by user-created dispatcher

Options

The options object passed to the parse function must include filename or fileContent.

Here are the properties supported by options (see the Usage section below):

| json Path | Description | Type | Default value | |-----------|-------------|------|---------------| | filename | The filename to parse. Required, unless fileContent is passed. | string | | fileContent | The file content to parse. Required, unless filename is passed. | string | | encoding | The file encoding. | string | utf8 | | features | The component features to parse and extract. | string[] | All supported features | | ignoredVisibilities | The list of ignored visibilities. Symbols with a visibility that is ignored will not be included in the output. | string[] | ['private', 'protected'] | | includeSourceLocations | Flag, which indicates that source locations should be provided for component symbols. | boolean | false | | version | Optional. Use 2 or 3 to specify which svelte syntax should be used. When that is not provided, parser try to detect version of the syntax. | number? | undefined | | defaultVersion | Optional. Specify default version of svelte syntax, if auto-detector can't identify correct version. | number? | undefined |

Supported feature names

These are the values that can be included in the options.features array:

| Feature | Svelte 2 | Svelte 3 | Description | |---------------|:--------:|:--------:|-------------------------------------------------------| | name | ✔ | ✔ | Component's name | | description | ✔ | ✔ | Component's description | | keywords | ✔ | ✔ | List of JSDoc keywords found in the top level comment | | components | ✔ | ✔ | List of imported components | | computed | ✔ | ✔ | List of computed properties | | data | ✔ | ✔ | List of data properties (Component's props) | | events | ✔ | ✔ | List of events fired/dispatched by this component | | methods | ✔ | ✔ | List of methods | | refs | ✔ | ✔ | List of references used by this component | | slots | ✔ | ✔ | List of slots provided by this component | | actions | ✔ | | List of actions | | helpers | ✔ | | List of helpers | | transitions | ✔ | | List of transitions used by this component | | store | | | NOT SUPPORTED |

Output format

Output format is described in this document.

For Svelte 3 examples, take a look at the examples folder to check how Svelte 3 components are transformed to JSON documents.

For a Svelte 2 example, take a look at the JSON output generated from this component.

Usage

Minimal example:

const sveltedoc = require('sveltedoc-parser');
const options = {
    filename: 'main.svelte'
};

sveltedoc.parse(options)
    .then(componentDoc => {
        console.log(componentDoc);
    })
    .catch(e => {
        console.error(e);
    });

or with options customization:

const { parse } = require('sveltedoc-parser');
const { externalFileContent } = require('./local-file');
const options = {
    fileContent: externalFileContent,
    encoding: 'ascii',
    features: ['data', 'computed', 'methods'],
    ignoredVisibilities: ['private'],
    includeSourceLocations: true,
    version: 3
};
const doc = await parse(options);
console.log(doc)

API

parse(options)

Method to parse svelte component and provide doc object structure with details information.

detectVersion(options)

Method to detect the Svelte syntax used in the component. It returns, in order:

  • the value of options.version, if present; else
  • 2 or 3 if Svelte 2 syntax or Svelte 3 syntax is detected, respectively; else
  • the value of options.defaultVersion, if present; else
  • undefined if the function failed to detect the syntax to use

Issues

A list of known issues can be found here.

Found a new issue? Please contribute and write a detailed description here.

Contributors

Author Alexey Mulyukin

Inspired by Vuedoc Parser

License

MIT