spectral-function-past-tense

Test Spectral values for past tense.

Usage no npm install needed!

<script type="module">
  import spectralFunctionPastTense from 'https://cdn.skypack.dev/spectral-function-past-tense';
</script>

README

spectral-function-past-tense

A custom function for Spectral to check that the input contains a verb in the past tense. This can be useful for checking the message names in an AsyncAPI document.

Installation

npm install spectral-function-past-tense

or

yarn add spectral-function-past-tense

How it works

This custom function will attempt to parse a string of any case(snake_case, kebab-case, camelCase, etc.) and ensure it contains a past tense verb.

Usage

Note: Check out the example directory for a complete demonstration.

A Spectral ruleset can contain custom functions. By default, with the declarative syntax, these will be in a functions directory. At this time, there isn't a way to include functions from outside packages other than to wrap them in your own function or to use the JavaScript version of a Spectral ruleset.

To wrap the spectral-function-past-tense custom function, create a simple Node.js module in your functions directory named past.js with the following contents:

import past from "spectral-function-past-tense";
export default past;

Then use the following for your Spectral YAML ruleset:

functions: [past]
formats: [asyncapi2]
rules:
  rule:
    given: "$.channels.*.[publish,subscribe].message.name"
    then:
      function: past

The JavaScript version may look like this:

import past from "spectral-function-past-tense";

export default {
  rules: {
    rule: {
      given: "$.channels.*.[publish,subscribe].message.name",
      then: {
        function: past,
      },
    },
  },
};

If the input doesn't contain a past-tense word, a validation result will be produced. Example:

➜ spectral lint --ruleset=./example/ruleset.yaml ./example/streetlights.yaml

./example/streetlights.yaml
 96:13  warning  rule  Value "dimLight" must be past tense.  components.messages.dimLight.name

✖ 1 problem (0 errors, 1 warning, 0 infos, 0 hints)

Options

This custom function allows for optional overrides. It can either match on the entire string (e.g., LightShining string will match LightShining override exactly) or it will match on individual words (e.g., LightShining string will match Shining override).

In practice, with a declarative ruleset, the overrides option will look like this:

functions: [past]
formats: [asyncapi2]
rules:
  rule:
    given: "$.channels.*.[publish,subscribe].message.name"
    then:
      function: past
      functionOptions:
        overrides:
          - Shining

License

MIT