SpdxExpression (SpdxExpression v0.1.0)

Copy Markdown View Source

Validates and canonicalizes PEP 639-compatible SPDX license expressions.

The parser embeds SPDX License List 3.28.0, rejects deprecated identifiers, and limits input to 65,536 bytes and 128 parenthesis levels. It validates syntax and identifiers; it does not determine legal compatibility or organizational license policy.

Summary

Functions

Validates and canonicalizes an SPDX license expression.

Validates and canonicalizes an expression, raising on invalid input.

Returns the embedded SPDX License List version.

Returns whether a term is a supported, non-deprecated SPDX expression.

Functions

canonicalize(input)

@spec canonicalize(term()) :: {:ok, String.t()} | {:error, SpdxExpression.Error.t()}

Validates and canonicalizes an SPDX license expression.

Examples

iex> SpdxExpression.canonicalize("mit and (apache-2.0 or bsd-2-clause)")
{:ok, "MIT AND (Apache-2.0 OR BSD-2-Clause)"}

iex> {:error, error} = SpdxExpression.canonicalize("Unknown-License")
iex> error.kind
:unknown_license

canonicalize!(input)

@spec canonicalize!(term()) :: String.t()

Validates and canonicalizes an expression, raising on invalid input.

Examples

iex> SpdxExpression.canonicalize!("mit")
"MIT"

license_list_version()

@spec license_list_version() :: String.t()

Returns the embedded SPDX License List version.

Examples

iex> SpdxExpression.license_list_version()
"3.28.0"

valid?(input)

@spec valid?(term()) :: boolean()

Returns whether a term is a supported, non-deprecated SPDX expression.

Examples

iex> SpdxExpression.valid?("MIT OR Apache-2.0")
true

iex> SpdxExpression.valid?("Unknown-License")
false