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

@spiralup/jfl-parser

v3.0.0

Published

Parser for JHipster Form definition Language

Downloads

7

Readme

JFL Parser

A parser for JHipster Form Language.

The JFL language enables the definition of a form as a set of composable subforms. Each form could be based on an entity and could have one or more subforms. Of course, subforms could also have a list of subforms.

The form presentation is defined by a template used to generate a form.

To define "master - detail" kind of forms a parent and linked fields could be defined on subforms.

One form could also have several views, for example a list view, edit view and show view.

The JFL grammar also enables definition of nested menus.

Definition of the JFL grammar is here. The parser is generated with peg.js.

Examples

Simple form

form formName title "Form Title" {
    entity Person
    template "default"
    fields {
        id title "ID",
        name title "Name" required
        status title "Status" default "ACTIVE"
        validFrom title "Valid from" default "today"
        validUntil title "Valid until"
    }
    views {
        list {
            fields id, name
        }
        edit {
            fields all except status
        }
        show {
            fields all
        }
    }
}   

Master - detail form

/**
* Master form
*/
form masterFormName title "Master Form Title" {
    entity Person
    template "default"
    fields {
        id title "ID" required,
        name title "Name" required
    }
    
    /**
    * Detail form
    */
    form subformName title "Subform" {
        entity PersonContact
        template "subform"
        parent fields id
        linked fields person
        fields {
            id title "ID",
            contact title "Contact",
            person title "Person"
        }
    }
    views {
        editableList {
            fields id, contact
        }
    }
}   

Menu definiton 1

menu mnuName01 title "MenuTitle01" {
    menu mnuName02 title "MenuTitle02" form formName2
    menu mnuName03 title "MenuTitle03" form formName3
}

Menu definition 2

menu mnuName01 title "MenuTitle01"
menu mnuName02 title "MenuTitle02" form formName2 parent mnuName01
menu mnuName03 title "MenuTitle03" form formName3 parent mnuName01

Usage

  1. Include jfl-parser in your code
    const formParser = require('jfl-parser');
  1. Create function that calls a parser with a list of JFL files
    parseJFL() {
        try {
            const jflObject = formParser.convertToJFL(formParser.parseFromFiles(this.jflFiles));
            this.changedForms = formParser.exportFormToJSON(jflObject.forms, this.options.force);

            this.updatedKeys = Object.keys(this.changedForms);
            if (this.updatedKeys.length > 0) {
                this.log(`Updated forms are: ${chalk.yellow(this.updatedKeys)}`);
            } else {
                this.log(chalk.yellow('No change in form configurations. No forms were updated'));
            }
        } catch (e) {
            this.debug('Error:', e);
            if (e && e.message) {
                this.log(chalk.red(`${e.name || ''}: ${e.message}`));
            }
            this.error('\nError while parsing entities from JFL\n');
        }
    }