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

asl-path-validator

v0.12.0

Published

Validates the path expressions for the Amazon States Language

Downloads

434,667

Readme

asl-path-validator

license npm version

NPM

What is in this library:

This library provides a parser to validate Path, Reference Path, and Payload Template expressions for the Amazon States Language

The parser produces an Abstract Syntax Tree (AST) for the expression if it's valid. Additional checks are performed if necessary to limit the operators or presence of functions based on the context.

Samples from the spec

The expressions resemble JSONPath.

$.store.book
$.store\.book
$.\stor\e.boo\k
$.store.book.title
$.foo.\.bar
$.foo\@bar.baz\[\[.\?pretty
$.&Ж中.\uD800\uDF46
$.ledgers.branch[0].pending.count
$.ledgers.branch[0]
$.ledgers[0][22][315].foo
$['store']['book']
$['store'][0]['book']

validate a single expression

expect(validatePath("$.library.movies", AslPathContext.REFERENCE_PATH)).toStrictEqual({
  isValid: true,
});

register validators as AJV formats

Provides adapters to register as custom format validators for AJV.

The AJV schemas for the Step Functions are not provided here. See asl-validator for schemas. See the provided unit tests for integrating. An example schema is defined to illustrate how to leverage AJV to invoke our custom validation.

beforeAll(() => {
  ajv = new Ajv({
    schemas: [example, payloadTemplateSchema],
    allowUnionTypes: true,
  });
  registerAll(ajv);
});
it("should accept valid input", () => {
  expect.hasAssertions();
  const input = loadDefinition("valid.json");
  const result = ajv.validate(
    "https://asl-path-validator.cloud/example.json#",
    input
  );
  expect(result).toBe(true);
});

How this is done

  1. leverage AJV to do schema validation (see asl-validator for the schemas)
  2. custom formatter validates the Path and Reference Path fields
  3. Payload Templates leverage patternProperties to validate fields ending in ".$"
  4. Generated parser from a PEG grammar provides the actual validation logic

Formal Definitions

The spec references a Java library for the syntax of the expressions.
The documentation for the referenced library has more functionality than is supported by the AWS Step Function runtimes.

| Expression Feature | Path | Reference Path | Payload Template | |:--------------------------------------------------------------------------------------------------|:-------------------|:-------------------|:-------------------| | Simple dot notation or single predicate notation$.library.movies | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| Use of operators that select multiple nodes via descent, wildcard, or a filter.. @ , : ? * | :white_check_mark: | :x: | :white_check_mark: | | Intrinsic functions States.JsonToString($.foo)See below for the supported functions | :x: | :x: | :white_check_mark: |

Context Expressions

When a Path begins with "$$", two dollar signs, this signals that it is intended to identify content within the Context Object. The first dollar sign is stripped, and the remaining text, which begins with a dollar sign, is interpreted as the JSONPath applying to the Context Object.

Intrinsic Functions

These functions are available within the context of a Payload Template only.

The relevant fields to examine are Parameters and ResultSelector.

| Intrinsic Function | Arguments | Comments | |-----------------------|-----------|--------------------------------------------| | States.Format | 1+ | arguments MAY contain one or more Path | | States.StringToJson | 1 | argument MAY be a Path |
| States.JsonToString | 1 | argument MUST be a Path | | States.Array | 0+ | arguments MAY contain onr or more Path |

Filter Expressions and Operators

Filters are logical expressions used to filter arrays. A typical filter would be [?(@.age > 18)] where @ represents the current item being processed.

Note that the comparison operators only work with numeric values in the AWS Data flow simulator

What fields should be validated

The table below includes all the fields within a Step Function that are validated.

See asl-validator 3.x branch or higher for schemas modeling ASL.

The schema provided here illustrate how to integrate and includes a recursive definition for the Payload Template context.

| Step Function Field | Expression Type | |--------------------------------|------------------| | BooleanEqualsPath | Path | | HeartbeatSecondsPath | Reference Path | | InputPath | Path | | ItemsPath | Reference Path | | NumericEqualsPath | Path | | NumericGreaterThanPath | Path | | NumericLessThanEqualsPath | Path | | NumericLessThanPath | Path | | OutputPath | Path | | Parameters | Payload Template | | ResultPath | Reference Path | | ResultSelector | Payload Template | | SecondsPath | Reference Path | | StringEqualsPath | Path | | StringGreaterThanPath | Path | | StringGreaterThanEqualsPath | Path | | StringLessThanPath | Path | | StringLessThanEqualsPath | Path | | TimeoutSecondsPath | Reference Path | | TimestampEqualsPath | Path | | TimestampGreaterThanEqualsPath | Path | | TimestampGreaterThanPath | Path | | TimestampLessThanEqualsPath | Path | | TimestampPath | Reference Path |