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

@targetprocess/dsl-suggestions

v1.2.2

Published

Parses Targetprocess API v2 DSL and provides typing suggestions

Downloads

5

Readme

Targetprocess DSL suggestions

This package provides expression parser and analysis instruments to build client-side typing suggestions, which can be integrated into various UI DSL editors.

For example, it can infer that when user types Feature., the editor should display suggestion list of fields available on Feature type: Name, Epic, PlannedStartDate, etc.

Usage example

import type { Entity } from '@targetprocess/suggestion-context'
import { buildSuggestions, getDefaultFunctions, getDefaultPrimitiveEntities, getDefaultVariables } from '@targetprocess/dsl-suggestions'

it('example', () => {
  // Describe entities which are avaible in the current context
  const entities: Entity[] = [
    // This library has some built-in entities for primitive types: String, Integer, Date, etc.
    ...getDefaultPrimitiveEntities(),
    // Add domain entities
    // In real code you will most likely get them from Targetprocess API like `/api/meta/v2`
    {
      name: 'UserStory',
      fields: [
        { name: 'Name', type: { kind: 'domain', typeName: 'String' } },
        { name: 'Feature', type: { kind: 'domain', typeName: 'Feature' } }
      ]
    },
    {
      name: 'Feature',
      fields: [{ name: 'Name', type: { kind: 'domain', typeName: 'string' } }]
    }
  ]

  // Specify functions, like IIF, Select, Where, which are available in the current context
  // This library already includes most used API functions.
  const functions = getDefaultFunctions()

  // Given the previously collected meta, DSL text, and caret position in that text,
  // build a list of suggestions to be displayed to the user.
  const result = buildSuggestions({
    rootType: { kind: 'domain', typeName: 'UserStory' },
    getScopeVariables: getDefaultVariables,
    suggestionMeta: {
      entities: new Map<string, Entity>(entities.map(e => [e.name.toLowerCase(), e])),
      functions
    },
    text: 'It.',
    caretPosition: 3
  })

  // If the input can't be parsed, the result will be `undefined`
  expect(result).toBeDefined()
  const actual = result!.suggestions.map(x => x.label)
  expect(actual).toEqual(['Name', 'Feature', 'ToString'])
})

By default, all parsing and analysis errors are logged to console. You can override the library's logger in defaultLoggerFactory, for example to disable all logging:

import { defaultLoggerFactory } from '@targetprocess/suggestion-context'

defaultLoggerFactory.logger = {
  error() {
    // do nothing
  }
}

Local development

npm ci

Changing grammar

If you make changes to ANTLR G4 grammar files:

npm run grammar-antlr4ts

Publishing

Use npm version to update "version" in package-lock.json and create a tag, e.g.:

npm version 1.0.0
git push origin 1.0.0

Wait for Gitlab pipeline to finish, and run manual publish step there.