diff --git a/.gitignore b/.gitignore index cc3e4e13dd..baff07f3d8 100644 --- a/.gitignore +++ b/.gitignore @@ -59,3 +59,8 @@ CTestTestfile.cmake # CMake output for Ninja *.ninja + +# Antora code +node_modules/ +# Antora build output +build/ diff --git a/antora-playbook.yml b/antora-playbook.yml new file mode 100644 index 0000000000..2a4659647d --- /dev/null +++ b/antora-playbook.yml @@ -0,0 +1,18 @@ +site: + title: Neon Language + start_page: neon-lang::index.adoc + url: https://neon-lang.dev +content: + sources: + - url: /home/greg/neon-lang + start_path: docs +ui: + bundle: + url: https://gitlab.com/antora/antora-ui-default/-/jobs/artifacts/HEAD/raw/build/ui-bundle.zip?job=bundle-stable + snapshot: True + supplemental_files: + - path: partials/header-content.hbs + contents: ./supplemental-ui/partials/header-content.hbs +#antora: +# extensions: +# - '@antora/lunr-extension' -- requires newer version of nodejs diff --git a/docs/.gitignore b/docs/.gitignore deleted file mode 100644 index 69fa449dd9..0000000000 --- a/docs/.gitignore +++ /dev/null @@ -1 +0,0 @@ -_build/ diff --git a/docs/Makefile b/docs/Makefile deleted file mode 100644 index 0bcfa6743d..0000000000 --- a/docs/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = python3 -msphinx -SPHINXPROJ = Neon -SOURCEDIR = . -BUILDDIR = _build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/_static/.gitignore b/docs/_static/.gitignore deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/docs/_templates/.gitignore b/docs/_templates/.gitignore deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/docs/antora.yml b/docs/antora.yml new file mode 100644 index 0000000000..a7a550a497 --- /dev/null +++ b/docs/antora.yml @@ -0,0 +1,9 @@ +name: neon-lang +title: Neon +version: 0.1 +prerelease: "-alpha" +start_page: intro.adoc +nav: +- modules/ROOT/nav-start.adoc +- modules/reference/nav.adoc +- modules/ROOT/nav-end.adoc diff --git a/docs/conf.py b/docs/conf.py deleted file mode 100644 index a18c27d5bc..0000000000 --- a/docs/conf.py +++ /dev/null @@ -1,172 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Neon documentation build configuration file, created by -# sphinx-quickstart on Sun Aug 6 21:46:03 2017. -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -# -# import os -# import sys -# sys.path.insert(0, os.path.abspath('.')) - - -# -- General configuration ------------------------------------------------ - -# If your documentation needs a minimal Sphinx version, state it here. -# -# needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -# -# source_suffix = ['.rst', '.md'] -source_suffix = '.rst' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'Neon' -copyright = u'2017, Greg Hewgill' -author = u'Greg Hewgill' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = u'1.0' -# The full version, including alpha/beta/rc tags. -release = u'1.0' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = None - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This patterns also effect to html_static_path and html_extra_path -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = False - -highlight_language = "none" - -# -- Options for HTML output ---------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# -html_theme = 'alabaster' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -# -# html_theme_options = {} - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# Custom sidebar templates, must be a dictionary that maps document names -# to template names. -# -# This is required for the alabaster theme -# refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars -html_sidebars = { - '**': [ - 'about.html', - 'navigation.html', - 'relations.html', # needs 'show_related': True theme option to display - 'searchbox.html', - 'donate.html', - ] -} - - -# -- Options for HTMLHelp output ------------------------------------------ - -# Output file base name for HTML help builder. -htmlhelp_basename = 'Neondoc' - - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - # - # 'papersize': 'letterpaper', - - # The font size ('10pt', '11pt' or '12pt'). - # - # 'pointsize': '10pt', - - # Additional stuff for the LaTeX preamble. - # - # 'preamble': '', - - # Latex figure (float) alignment - # - # 'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - (master_doc, 'Neon.tex', u'Neon Documentation', - u'Greg Hewgill', 'manual'), -] - - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - (master_doc, 'neon', u'Neon Documentation', - [author], 1) -] - - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - (master_doc, 'Neon', u'Neon Documentation', - author, 'Neon', 'One line description of project.', - 'Miscellaneous'), -] - - - diff --git a/docs/extensions.rst b/docs/extensions.rst deleted file mode 100644 index 75a647aa7a..0000000000 --- a/docs/extensions.rst +++ /dev/null @@ -1,3 +0,0 @@ -Extensions -========== - diff --git a/docs/index.rst b/docs/index.rst deleted file mode 100644 index 00ac2863d2..0000000000 --- a/docs/index.rst +++ /dev/null @@ -1,28 +0,0 @@ -.. Neon documentation master file, created by - sphinx-quickstart on Sun Aug 6 21:46:03 2017. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -Neon Documentation -================== - -.. toctree:: - :maxdepth: 2 - :caption: Contents: - :numbered: - - intro - manifesto - tutorial - Overview (for experienced programmers) - reference/index - library - extensions - samples - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` diff --git a/docs/library.rst b/docs/library.rst deleted file mode 100644 index 753ee19e6c..0000000000 --- a/docs/library.rst +++ /dev/null @@ -1,4 +0,0 @@ -Standard Library -================ - -See `Standard Library <../html/>`_. diff --git a/docs/make.bat b/docs/make.bat deleted file mode 100644 index 0578afd7f5..0000000000 --- a/docs/make.bat +++ /dev/null @@ -1,36 +0,0 @@ -@ECHO OFF - -pushd %~dp0 - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=python -msphinx -) -set SOURCEDIR=. -set BUILDDIR=_build -set SPHINXPROJ=Neon - -if "%1" == "" goto help - -%SPHINXBUILD% >NUL 2>NUL -if errorlevel 9009 ( - echo. - echo.The Sphinx module was not found. Make sure you have Sphinx installed, - echo.then set the SPHINXBUILD environment variable to point to the full - echo.path of the 'sphinx-build' executable. Alternatively you may add the - echo.Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.http://sphinx-doc.org/ - exit /b 1 -) - -%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% -goto end - -:help -%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% - -:end -popd diff --git a/docs/modules/ROOT/nav-end.adoc b/docs/modules/ROOT/nav-end.adoc new file mode 100644 index 0000000000..ea7659905f --- /dev/null +++ b/docs/modules/ROOT/nav-end.adoc @@ -0,0 +1,3 @@ +* xref:library.adoc[Standard Library] +* xref:extensions.adoc[Extensions] +* xref:samples.adoc[Samples] diff --git a/docs/modules/ROOT/nav-start.adoc b/docs/modules/ROOT/nav-start.adoc new file mode 100644 index 0000000000..39346a50f6 --- /dev/null +++ b/docs/modules/ROOT/nav-start.adoc @@ -0,0 +1,4 @@ +* xref:intro.adoc[Introduction] +* xref:manifesto.adoc[Manifesto] +* xref:tutorial.adoc[Tutorial] +* xref:overview.adoc[Overview] diff --git a/docs/modules/ROOT/pages/extensions.adoc b/docs/modules/ROOT/pages/extensions.adoc new file mode 100644 index 0000000000..534058dc6f --- /dev/null +++ b/docs/modules/ROOT/pages/extensions.adoc @@ -0,0 +1 @@ += Extensions diff --git a/docs/intro.rst b/docs/modules/ROOT/pages/intro.adoc similarity index 96% rename from docs/intro.rst rename to docs/modules/ROOT/pages/intro.adoc index f00728040c..5e80739485 100644 --- a/docs/intro.rst +++ b/docs/modules/ROOT/pages/intro.adoc @@ -1,5 +1,4 @@ -Introduction -============ += Introduction Neon is a high-level, statically typed, garbage collected, imperative programming language intended for teaching and learning the craft of programming. Its design borrows features from many popular languages, yet carefully avoids common errors encountered by beginning programmers in other languages. diff --git a/docs/modules/ROOT/pages/library.adoc b/docs/modules/ROOT/pages/library.adoc new file mode 100644 index 0000000000..2308bc8640 --- /dev/null +++ b/docs/modules/ROOT/pages/library.adoc @@ -0,0 +1,3 @@ += Standard Library + +See link:../../../html/[Standard Library]. diff --git a/docs/manifesto.rst b/docs/modules/ROOT/pages/manifesto.adoc similarity index 71% rename from docs/manifesto.rst rename to docs/modules/ROOT/pages/manifesto.adoc index 1be58b529d..190b054237 100644 --- a/docs/manifesto.rst +++ b/docs/modules/ROOT/pages/manifesto.adoc @@ -1,12 +1,10 @@ -Manifesto -========= += Manifesto Programming languages today are full of features, and there is a trend toward brevity. Brevity is highly expressive, for an expert who understands the notation. However, for a new learner or a casual user, brevity promotes unreadable code. -Principles of Design --------------------- +== Principles of Design * Prefer keywords over punctuation * Good error messages @@ -16,37 +14,30 @@ Principles of Design * Principle of least surprise * Easy lookup -Prefer keywords over punctuation -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +== Prefer keywords over punctuation Punctuation is important, but it should be used sparingly. -Good error messages -^^^^^^^^^^^^^^^^^^^ +== Good error messages Error messages should explain what is wrong, with suggestions of ways to correct the problem. -Avoid implicit behaviour -^^^^^^^^^^^^^^^^^^^^^^^^ +== Avoid implicit behaviour There will be no hidden, implicit, or automatic calls made to code that is not expressly visible in the source. -Explicit declarations -^^^^^^^^^^^^^^^^^^^^^ +== Explicit declarations Everything is declared, and identifiers from modules are always qualified. -Single meaning per keyword/operator -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +== Single meaning per keyword/operator To the greatest reasonable extent, keywords and operators only have one meaning. -Principle of least surprise -^^^^^^^^^^^^^^^^^^^^^^^^^^^ +== Principle of least surprise This one is hard to quantify, but it's good. -Easy lookup -^^^^^^^^^^^ +== Easy lookup By using keywords instead of punctuation, and by using explicit declarations, it is easy to look up unknown things in the documentation. diff --git a/docs/modules/ROOT/pages/overview.adoc b/docs/modules/ROOT/pages/overview.adoc new file mode 100644 index 0000000000..328fee9b3b --- /dev/null +++ b/docs/modules/ROOT/pages/overview.adoc @@ -0,0 +1,307 @@ += Neon Overview + +The following is a brief description of Neon for experienced programmers. +There are plenty of examples, because experienced programmers know how to read code, and can pick up concepts more quickly by reading code than by reading a description of code. + +Neon is a statically typed imperative language, with roots in Pascal, Modula-2, Ada, and link:../../../motivation.html[others]. +Program structure and modules are influenced by Python. + +[source,neon] +---- +-- This sample program greets the user +-- until an empty line is entered. + +IMPORT console + +LOOP + LET ir: console.InputResult := console.input("What is your name? ") + CHECK ir ISA console.InputResult.line ELSE + EXIT LOOP + END CHECK + LET name: String := ir.line + IF name = "" THEN + EXIT LOOP + END IF + print("Hello, \(name).") +END LOOP +---- + +== General + +All identifiers are case sensitive. +Language defined keywords are all upper case. +Semicolons are not used. +Identifier scope is defined by program block structure. +Assignments have value semantics (deep copy). +Forward declarations are not required. +All variables must be explicitly initialised before use. + +== Types + +The scalar types are: + +- `Boolean` (`TRUE` or `FALSE`) +- `Number` (decimal floating point) +- `String` (Unicode text) +- `Bytes` (arbitrary blocks of bytes) +- enumerations (named values) + +Aggregate types are: + +- `RECORD` (named fields) +- `CLASS` (dynamically allocated objects) +- `Array` (arbitrary size vector) +- `Dictionary` (map indexed by a `String` key) + +There is a dynamic `Object` type which can hold values of any of the concrete types. + +[source,neon] +---- +VAR x: Object +x := 5 +print(str(x)) +x := "hello" +print(x) +---- + +Dynamic heap allocation is supported by a `POINTER` type. + +[source,neon] +---- +TYPE Colour IS ENUM + red + green + blue +END ENUM + +TYPE Person IS RECORD + name: String + eyes: Colour +END RECORD + +TYPE Node IS CLASS + value: String + next: POINTER TO Node +END CLASS + +LET b: Boolean := TRUE +LET n: Number := 123.456 +LET s: String := "Hello world" +LET y: Bytes := HEXBYTES "00 01 02 03" +LET e: Colour := Colour.green +LET r: Person := Person(name WITH "Alice", eyes WITH Colour.green) +LET a: Array := ["fork", "knife", "spoon"] +LET d: Dictionary := {"fork": 5, "knife": 6, "spoon": 1} +LET p: POINTER TO Node := NEW Node(value WITH "green") +---- + +== Expressions + +There is a rich expression syntax including arithmetic, array slicing, conditionals, and string interpolation. + +[source,neon] +---- +LET x: Number := 5 +LET y: Number := (6 + x) / 2 +ASSERT y = 5.5 + +LET a: Array := ["fork", "knife", "spoon"] +ASSERT a[1 TO LAST] = ["knife", "spoon"] + +LET r: String := (IF y < 5 THEN "small" ELSE "big") +ASSERT r = "big" + +LET t: String := "y is a \(r) value" +ASSERT t = "y is a big value" +---- + +== Statements + +There are two variable declarations: `LET` (read-only value), and `VAR` (modifiable value). + +[source,neon] +---- +LET a: Number := 5 + +VAR b: Number +b := a +b := 6 + +print("\(a), \(b)") +---- + +There are two conditional blocks: `CASE` (multiple branches), and `IF` (single test). + +[source,neon] +---- +FOR a := 0 TO 9 DO + VAR s: String + CASE a + WHEN < 2 DO + s := "less than two" + WHEN 2 DO + s := "two" + WHEN 3 TO 5 DO + s := "three to five" + WHEN 7, 9 DO + s := "seven or nine" + WHEN OTHERS DO + s := "something else" + END CASE + print("\(a) is \(s)") +END FOR + +IMPORT random +IF random.uint32() < 10 THEN + print("small") +END IF +---- + +There are four kinds of loops: `FOR` (bounded iteration), `LOOP` (infinite loop), `REPEAT` (bottom-tested condition), and `WHILE` (top-tested condition). +The `EXIT` and `NEXT` statements branch out of the loop or to the next iteration, respectively. + +[source,neon] +---- +FOR i := 1 TO 10 DO + print("\(i)") +END FOR + +VAR a: Number := 1 +LOOP + print("\(a)") + IF a = 10 THEN + EXIT LOOP + END IF + INC a +END LOOP + +a := 1 +REPEAT + print("\(a)") + INC a +UNTIL a = 10 + +a := 1 +WHILE a <= 10 DO + print("\(a)") + INC a +END WHILE +---- + +The exception handling statements are `TRY` (introduces a new handling scope), and `RAISE` to raise an exception. + +[source,neon] +---- +EXCEPTION PrinterOutOfPaperException + +FUNCTION printFile(name: String) + -- Save the trees, don't print anything. + RAISE PrinterOutOfPaperException +END FUNCTION + +TRY + printFile("hello.txt") +TRAP PrinterOutOfPaperException DO + print("Sorry, out of paper.") +END TRY +---- + +The `ASSERT` statement is used to check program invariants. +Execution stops with a diagnostic dump if the condition is not satisfied. + +[source,neon] +---- +FUNCTION setRatio(percent: Number) + ASSERT 0 <= percent <= 100 + -- ... use percent value +END FUNCTION +---- + +== Functions + +Functions may or may not return a value. +If a function returns a value, then the return value cannot be silently ignored by the caller. +Function parameters can be `IN` (default), `OUT` (passed back to caller), or `INOUT` (references caller value). + +[source,neon] +---- +IMPORT string + +FUNCTION func(name: String, OUT result: String, INOUT count: Number) + result := string.upper(name) + INC count +END FUNCTION + +VAR uname: String +VAR n: Number := 0 + +-- The parameter mode (if not IN) must be explicitly indicated +-- on the function call. +func("charlie", OUT uname, INOUT n) + +-- The caller may choose to pass parameters in a different +-- order using the WITH keyword. +func("charlie", INOUT count WITH n, OUT result WITH uname) + +ASSERT uname = "CHARLIE" +ASSERT n = 2 +---- + +== Methods + +Records and classes may have methods attached to them, to be called with the usual method syntax. + +[source,neon] +---- +TYPE Rectangle IS RECORD + width: Number + height: Number +END RECORD + +FUNCTION Rectangle.area(self: Rectangle): Number + RETURN self.width * self.height +END FUNCTION + +FUNCTION Rectangle.expand(INOUT self: Rectangle, edge: Number) + self.width := self.width + 2 * edge + self.height := self.height + 2 * edge +END FUNCTION + +LET r: Rectangle := Rectangle(width WITH 4, height WITH 5) +ASSERT r.area() = 20 +r.expand(1) +ASSERT r.area() = 42 +---- + +== Pointers + +Pointers can only point to classes. +Pointers are declared with `POINTER TO` and allocated with `NEW`. + +[source,neon] +---- +TYPE Person IS CLASS + name: String + age: Number +END CLASS + +LET p: POINTER TO Person := NEW Person +p->name := "Alice" +p->age := 23 +---- + +Pointers must be checked for validity (non-NIL) before they can be used using the `IF VALID` block. + +[source,neon] +---- +TYPE Person IS CLASS + name: String + age: Number +END CLASS + +FUNCTION incrementAge(p: POINTER TO Person) + IF VALID p THEN + INC p->age + END IF +END FUNCTION +---- diff --git a/docs/modules/ROOT/pages/samples.adoc b/docs/modules/ROOT/pages/samples.adoc new file mode 100644 index 0000000000..b47170911e --- /dev/null +++ b/docs/modules/ROOT/pages/samples.adoc @@ -0,0 +1,3 @@ += Samples + +See link:../../../samples/[Samples]. diff --git a/docs/modules/ROOT/pages/tutorial.adoc b/docs/modules/ROOT/pages/tutorial.adoc new file mode 100644 index 0000000000..19194a2818 --- /dev/null +++ b/docs/modules/ROOT/pages/tutorial.adoc @@ -0,0 +1,3 @@ += Tutorial + +TODO: Tutorial goes here diff --git a/docs/modules/reference/nav.adoc b/docs/modules/reference/nav.adoc new file mode 100644 index 0000000000..27c35f2571 --- /dev/null +++ b/docs/modules/reference/nav.adoc @@ -0,0 +1,10 @@ +* xref:reference.adoc[Language Reference] +** xref:lexical.adoc[Lexical Structure] +** xref:types.adoc[Types] +** xref:declarations.adoc[Declarations] +** xref:expressions.adoc[Expressions] +** xref:statements.adoc[Statements] +** xref:functions.adoc[Functions] +** xref:classes.adoc[Classes] +** xref:modules.adoc[Modules] +** xref:grammar.adoc[Grammar] diff --git a/docs/modules/reference/pages/classes.adoc b/docs/modules/reference/pages/classes.adoc new file mode 100644 index 0000000000..b44ee323e1 --- /dev/null +++ b/docs/modules/reference/pages/classes.adoc @@ -0,0 +1,79 @@ += Classes + +Classes are similar to records with some additional features: + +* Instances of classes must be dynamically allocated with `NEW`. +* Class instances are always referenced by pointer. +* Classes support interfaces. + +== Declaration + +Classes are declared using `TYPE` with `CLASS`: + +[source,neon] +TYPE Person IS CLASS + name: String + phone: String + pets: Number +END CLASS + +Like records, classes may declare `PRIVATE` fields. + +== Allocation + +A new instance of a class must be created using the `NEW` keyword: + +[source,neon] +---- +TYPE Person IS CLASS + name: String + phone: String + pets: Number +END CLASS + +LET p: POINTER TO Person := NEW Person(name WITH "Alice") +print(p->name) +---- + +== Interfaces + +An interface is declared using the `INTERFACE` declaration: + +[source,neon] +---- +INTERFACE Animal + FUNCTION voice(self: Animal) +END INTERFACE + +------------------------- + +TYPE Cat IS CLASS IMPLEMENTS Animal + furColour: String +END CLASS + +FUNCTION Cat.voice(self: VALID POINTER TO Cat) + print("meow") +END FUNCTION + +------------------------- + +TYPE Bird IS CLASS IMPLEMENTS Animal + featherColour: String +END CLASS + +FUNCTION Bird.voice(self: VALID POINTER TO Bird) + print("chirp") +END FUNCTION + +------------------------- + +VAR animals: Array := [] +animals.append(NEW Cat) +animals.append(NEW Bird) +FOREACH x IN animals DO + x->voice() +END FOREACH +---- + +Each class that implements the interface uses the `IMPLEMENTS` keyword to indicate. +The type `POINTER TO Animal` refers to instances of classes that implement the `Animal` interface. diff --git a/docs/modules/reference/pages/declarations.adoc b/docs/modules/reference/pages/declarations.adoc new file mode 100644 index 0000000000..dcfcdc334a --- /dev/null +++ b/docs/modules/reference/pages/declarations.adoc @@ -0,0 +1,126 @@ += Declarations + +== Types + +New type names are introduced using the `TYPE` keyword: + +[source,neon] +---- +TYPE Length IS Number + +VAR len: Length +---- + +In the above case, `Length` is an alias for `Number` and the two can be used interchangeably. + +More often the `TYPE` keyword is used for introducing aggregate types: + +[source,neon] +---- +TYPE Widget IS RECORD + size: Number + colour: String +END RECORD + +VAR r: Widget +---- + +== Constants + +Constants are defined using the `CONSTANT` keyword: + +[source,neon] +---- +CONSTANT Pi: Number := 3.141592653589793 +CONSTANT Sky: String := "blue" +---- + +The value assigned to a constant must be able to be evaluated at compile time. +This may be an expression: + +[source,neon] +---- +CONSTANT Pi: Number := 3.141592653589793 +CONSTANT Pi2: Number := Pi ^ 2 + +CONSTANT Greeting: String := "Hello " & "world" +---- + +== Variables + +Variables are declared using the `VAR` keyword: + +[source,neon] +---- +VAR count: Number +VAR colour: String +---- + +Variables declared outside a function are *global* variables. +Variables declared inside a function are visible only from within the scope where they are declared. + +Read-only values (therefore not actually *variables*) are declared with the `LET` keyword: + +[source,neon] +---- +IMPORT os + +LET path: String := os.getenv("PATH") +---- + +NOTE: The difference between `LET` and `CONSTANT` is that a `CONSTANT` value must be able to be evaluated at *compile* time. +A `LET` value can be initialised from data that is known only at runtime. + +TIP: If you calculate a value, or save the return value from a function call, then usually `LET` is what you want to use. +Use `VAR` only when necessary in the case where your program logic needs to modify the variable later. + +== Exceptions + +Exceptions are declared with the `EXCEPTION` keyword: + +[source,neon] +---- +EXCEPTION PrinterOutOfPaperException +---- + +Exception names must end with the word `Exception`. + +Exceptions may also declare *subexceptions*: + +[source,neon] +---- +EXCEPTION PrinterException +EXCEPTION PrinterException.OutOfPaper +---- + +== Interfaces + +Interfaces are declared with the `INTERFACE` keyword: + +[source,neon] +---- +INTERFACE Shape + FUNCTION perimeter(self: Shape): Number + FUNCTION area(self: Shape): Number +END INTERFACE +---- + +Interfaces are used with classes to declare that a class must implement a specific set of functions. + +== Exports + +Identifiers can be exported using the `EXPORT` keyword: + +[source,neon] +---- +EXPORT name + +VAR name: String +---- + +The `EXPORT` keyword may be combined with the declaration: + +[source,neon] +---- +EXPORT VAR name: String +---- diff --git a/docs/modules/reference/pages/expressions.adoc b/docs/modules/reference/pages/expressions.adoc new file mode 100644 index 0000000000..0c9c0badb4 --- /dev/null +++ b/docs/modules/reference/pages/expressions.adoc @@ -0,0 +1,279 @@ += Expressions + +Expressions are combinations of operands and operators. +Operands are values in themselves, which may be expressions surrounded by `( )`. +Operators are logical, arithmetic, or string and the valid operators depend on the types of the operands. + +== Literal Values + +Literal values can be individual lexical elements such as xref:lexical#_identifiers[identifiers], xref:lexical#_numbers[numbers], and xref:lexical#_strings[strings]. + +Literal arrays are sequences of comma-separated values surrounded by brackets `[ ]`. + +Example: + +[source,neon] +---- +LET a: Array := [1, 2, 3] +---- + +Literal dictionaries are sequences of comma-separated name/value pairs surrounded by braces `{ }`. + +Example: + +[source,neon] +---- +LET d: Dictionary := { + "one": 1, + "two": 2, + "three": 3 +} +---- + +For convenience, both literal arrays and dictionaries accept a trailing comma after the final element: + +[source,neon] +---- +LET numbers: Array := [ + "zero", + "one", + "two", +] +---- + +== Boolean Operators + +The following operator takes one boolean value. + +[cols="1,2"] +|=== +| Operator | Description + +| `NOT` | logical negation +|=== + +The following operators take two boolean values. + +[cols="1,2"] +|=== +| Operator | Description + +| `=` | equality +| `<>` | inequality +| `AND` | logical conjunction +| `OR` | logical disjunction +|=== + +== Numeric Operators + +The following operators take one number value. + +[cols="1,2"] +|=== +| Operator | Description + +| `+` | identity (provided for symmetry with `-`) +| `-` | arithmetic negation +|=== + +The following operators take two number values. + +[cols="1,2"] +|=== +| Operator | Description + +| `+` | addition +| `-` | subtraction +| `*` | multiplication +| `/` | division +| `INTDIV` | integer division +| `MOD` | modulo (remainder) +| `^` | exponentiation +| `=` | equality +| `<>` | inequality +| `<` | less than +| `>` | greater than +| `<=` | less than or equal +| `>=` | greater than or equal +|=== + +== String Operators + +The following operators take two string values. + +[cols="1,2"] +|=== +| Operator | Description + +| `&` | concatenation +| `=` | equality +| `<>` | inequality +| `<` | lexicographical less than +| `>` | lexicographical greater than +| `<=` | lexicographical less than or equal +| `>=` | lexicographical greater than or equal +|=== + +== Array Operators + +[cols="1,2"] +|=== +| Operator | Description + +| `IN` | membership test (*O(n)* complexity) +| `NOT IN` | membership test (*O(n)* complexity) +|=== + +== Dictionary Operators + +[cols="1,2"] +|=== +| Operator | Description + +| `IN` | membership test (*O(log n)* complexity) +| `NOT IN` | membership test (*O(log n)* complexity) +|=== + +== Object Operator + +[cols="1,2"] +|=== +| Operator | Description + +| `ISA` | type test (`object ISA Type`) +|=== + +== Pointer Operator + +[cols="1,2"] +|=== +| Operator | Description + +| `->` | pointer dereference +|=== + +== Operator Precedence + +The operator precedence is as follows, highest to lowest: + +[cols="1,2"] +|=== +| Operator | Description + +| `( )` | subexpression +| `^` | exponentiation +| `*` `/` `MOD` `INTDIV` | multiplication, division, modulo +| `+` `-` `&` | addition, subtraction, concatenation +| `=` `<>` `<` `>` `<=` `>=` | comparison +| `IN` `NOT IN` | membership +| `AND` | conjunction +| `OR` | disjunction +| `IF` | conditional +|=== + +== Array Subscripts + +Array subscripts are normally integers greater than or equal to zero: + +[source,neon] +---- +LET a: Array := ["foo", "bar", "baz"] +print(a[0]) +print(a[2]) +---- + +Two special values may be used, `FIRST` and `LAST`: + +[source,neon] +---- +LET a: Array := ["foo", "bar", "baz"] +print(a[FIRST]) +print(a[LAST]) +---- + +`FIRST` always means the same as `0` and is provided for completeness. +`LAST` refers to the index of the last element of the array (if the array is not empty). + +Array slices are also possible using the `TO` keyword. +Both indexes are inclusive: + +[source,neon] +---- +LET a: Array := ["foo", "bar", "baz"] +LET b: Array := a[0 TO 1] +LET c: Array := a[LAST-1 TO LAST] +---- + +In the above example, `b` contains `["foo", "bar"]` and `c` contains `["bar", "baz"]`. + +== Dictionary Subscripts + +Dictionary subscripts are strings: + +[source,neon] +---- +LET d: Dictionary := { + "apple": "red", + "orange": "orange", + "banana": "yellow" +} +print(d["apple"]) +print(d["banana"]) +---- + +== Conditional Expression + +A conditional expression is like an inline `IF` statement: + +[source,neon] +---- +LET n: Number := 5 +LET s: String := (IF n >= 0 THEN "positive" ELSE "negative") +---- + +The condition following `IF` is evaluated. +If it is true, then the `THEN` expression is evaluated and is the result of the expression. +Otherwise, the `ELSE` expression is evaluated and is the result of the expression. + +The parentheses around the entire conditional expression are required. + +NOTE: The branch not taken is _not_ evaluated. +This means that if a branch not taken is a function call, the function will not be called. + +== Try Expression + +A try expression is like an inline `TRY` statement: + +[source,neon] +---- +EXCEPTION TestException +FUNCTION f(): Number + RAISE TestException +END FUNCTION +LET n: Number := (TRY f() TRAP TestException GIVES -1) +---- + +The expression following `TRY` is evaluated. +If an exception is raised, then it is matched against the `TRAP` clauses. +A matching `TRAP` clause with a `GIVES` keyword evalues the `GIVES` expression and returns that as the value of the try expression. + +The keyword `DO` can be used instead of `GIVES`. +The `DO` keywords introduces a new statement block which must end with a block-exiting statement (`EXIT`, `NEXT`, `RAISE`, or `RETURN`). + +== Expression Substitution + +Literal strings may contain embedded expressions surrounded by the special escape `\( )`. +These expressions are evaluated at run time. +The type of the embedded expression must have a `.toString()` method which will be called automatically to convert the result to a string. + +Example: + +[source,neon] +---- +LET a: Array := ["one", "two", "three"] +FOR i := 0 TO 2 DO + print("i is \(i) and the array element is \(a[i])") +END FOR +---- + +TODO: formatting specifiers diff --git a/docs/modules/reference/pages/functions.adoc b/docs/modules/reference/pages/functions.adoc new file mode 100644 index 0000000000..b5f1f52c9b --- /dev/null +++ b/docs/modules/reference/pages/functions.adoc @@ -0,0 +1,74 @@ += Functions + +Functions are declared using the `FUNCTION` keyword: + +[source,neon] +---- +FUNCTION square(x: Number): Number + RETURN x ^ 2 +END FUNCTION +---- + +The return type of a function (appearing after the `)`) is optional. +The `RETURN` statement is not permitted inside a function that does not return a value (use `EXIT FUNCTION` instead). + +== Parameter Modes + +Function parameters may be declared with a parameter mode: + +* `IN` - The function parameter is passed from the caller into the function, and may not be modified within the function. +* `INOUT` - A reference to the function argument is passed to the function, and the parameter may be modified within the function. +* `OUT` - No value is passed into the function, but any value assigned within the function is passed back to the caller. + +The default parameter mode is `IN`. +For `INOUT` and `OUT` parameters, the caller must supply an actual variable rather than the result of an expression. + +When calling a function with a parameter that has `INOUT` or `OUT` modes, the parameter mode must also be declared in the call: + +[source,neon] +---- +FUNCTION double(INOUT x: Number) + x := x * 2 +END FUNCTION + +VAR a: Number := 5 +double(INOUT a) +---- + +== Default Parameter Value + +Function parameters may be declared with a default value. + +Example: + +[source,neon] +---- +FUNCTION add(INOUT x: Number, delta: Number DEFAULT 1) + x := x + delta +END FUNCTION + +VAR value: Number := 5 +add(INOUT value) +add(INOUT value, 2) +---- + +When a parameter is not specified and it has a default value, the function call is executed as if the parameter were present and had the given value. +Default parameter values only apply to `IN` mode parameters. + +== Named Parameters + +When calling a function, function parameters may be named using the `WITH` keyword. + +Example: + +[source,neon] +---- +FUNCTION birthdayParty(name: String, balloons: Number, cake: String, clown: Boolean) + -- ... +END FUNCTION + +birthdayParty(name WITH "Helen", balloons WITH 10, cake WITH "Chocolate", clown WITH TRUE) +---- + +Parameters may be passed in order without using `WITH`, and then switch to using `WITH` for the remainder of the function call. +Each non-default parameter must be specified exactly once in the function call. diff --git a/docs/modules/reference/pages/grammar.adoc b/docs/modules/reference/pages/grammar.adoc new file mode 100644 index 0000000000..80bdcf07c1 --- /dev/null +++ b/docs/modules/reference/pages/grammar.adoc @@ -0,0 +1,3 @@ += Grammar + +See ../../grammar.xhtml[Grammar Railroad Diagrams]. diff --git a/docs/modules/reference/pages/lexical.adoc b/docs/modules/reference/pages/lexical.adoc new file mode 100644 index 0000000000..e0af26b5f9 --- /dev/null +++ b/docs/modules/reference/pages/lexical.adoc @@ -0,0 +1,175 @@ += Lexical Structure + +Neon source code is encoded in UTF-8. +All keywords and identifiers are case sensitive. + +== Comments + +The comment lead-in character sequence is `--`. +A single line comment is a `--` followed by arbitrary text to the end of the line. +A block comment is introduced with `/\*` and ends with `*/`. +Block comments may span multiple lines. +Block comments may not nest. + +Example: + +[source,neon] +---- +-- The following line prints some text. +print("Hello, World.") + +/* This comment spans multiple + lines of text until the comment + closing characters. */ +---- + +== Keywords + +All words that consist of only uppercase letters are reserved for keywords. +The following keywords are defined by the language. + +[cols="1,2"] +|=== +| Keyword | Description + +| `ALIAS` | used in `IMPORT` to optionally rename a module +| `AND` | logical conjunction +| `AS` | names a tested expression in `IF VALID` statement +| `ASSERT` | assert that an expression is true, used for diagnostics +| `Array` | generic array type +| `BEGIN` | used in `BEGIN MAIN` to indicate a program entry point +| `CASE` | multiple value matching from a range +| `CONSTANT` | constant declaration +| `DECLARE` | exception and forward function declaration +| `DEFAULT` | default value for function parameter +| `DEC` | decrement a `Number` variable +| `Dictionary` | generic dictionary type +| `DO` | used in `CASE`, `FOR`, and `WHILE` statements +| `ELSE` | alternative condition in `IF` statement +| `ELSIF` | alternative and test in `IF` statement +| `EMBED` | include an external file directly into the compiled code +| `ENUM` | enumeration type declaration +| `END` | end of most kinds of blocks of code +| `EXCEPTION` | exception declaration +| `EXIT` | early exit from loops +| `EXPORT` | export identifier from module +| `FALSE` | boolean constant +| `FIRST` | indicates first value in array subscript +| `FOR` | loop with a sequential control variable +| `FOREACH` | loop over an array of values +| `FUNCTION` | definition of subprogram +| `HEXBYTES` | literal `Bytes` value +| `IF` | conditional test and branch +| `IN` | function parameter passing mode; aggregate membership test +| `INC` | increment a `Number` variable +| `INDEX` | used in `FOREACH` statement for counting values +| `INOUT` | function parameter passing mode +| `IMPORT` | access code in another module +| `IS` | used in a `TYPE` declaration +| `LAST` | indicates last value in array subscript +| `LET` | assignment to read-only value +| `LOOP` | generic loop +| `MAIN` | used in `BEGIN MAIN` to indicate a program entry point +| `MOD` | arithmetic modulus +| `NATIVE` | declares a predefined function in the standard library +| `NEXT` | early skip to next loop iteration +| `NEW` | dynamic memory allocation +| `NIL` | pointer value constant +| `NOT` | logical negation +| `OF` | used in `FOREACH` statement +| `OR` | logical disjunction +| `OUT` | function parameter passing mode +| `OTHERS` | alternative condition in a `CASE` statement +| `POINTER` | pointer type declaration +| `PRIVATE` | private record field +| `RAISE` | initiate exception search +| `RECORD` | named aggregate type declaration +| `REPEAT` | bottom-tested loop +| `RETURN` | early exit and value return from function +| `STEP` | used in `FOR` loop for increment value +| `THEN` | used in `IF` statement +| `TO` | used in `FOR` loop; part of pointer declaration +| `TRUE` | boolean constant +| `TRY` | start of exception-checked block +| `TYPE` | define named type +| `UNTIL` | used at end of `REPEAT` loop +| `VAR` | variable declaration +| `VALID` | used in `IF VALID` pointer test statement +| `WHEN` | used in `CASE` statement +| `WHILE` | top-tested loop +| `WITH` | parameter specification for named parameters +|=== + +== Identifiers + +An identifier is a letter followed by any number of letters, digits, or underscore. +Identifiers which consist of all uppercase letters are reserved for <<_keywords>>. + +== Numbers + +Literal numbers are in base 10 by default. + +Numbers may be specified in a variety of bases (these support integers only): + +* Binary preceded by `0b` +* Octal preceded by `0o` +* Hexadecimal preceded by `0x` + +For base 10 numbers, they may contain a fractional portion following a decimal point `.`. +Additionally, they may have an exponent following `e` or `E`. + +== Strings + +Strings are sequences of Unicode characters surrounded by double quotes. +The only special character within a string is the backslash, used for character escapes. +The allowed character escapes are: + +[cols="1,1,3"] +|=== +| Escape | Replacement | Description +| `\"` | " | double quote +| `\\` | \\ | backslash +| `\b` | chr(8) | backspace +| `\f` | chr(11) | form feed +| `\n` | chr(10) | newline +| `\r` | chr(13) | carriage return +| `\t` | chr(9) | tab +| `\uXXXX` | chr(XXXX) | Unicode character XXXX (where XXXX is a 4-digit hex number) +| `\UXXXXXXXX` | chr(XXXXXXXX) | Unicode character XXXXXXXX (where XXXXXXXX is a 8-digit hex number) +| `\u\{NAME\}` | character | Unicode character named NAME from the https://unicode.org/versions/latest/[Unicode standard] +| `\()` | expression | see xref:expressions.adoc#_expression_substitution[Expression Substitution] +|=== + +Example: + +[source,neon] +---- +VAR s: String + +s := "Hello, World" +---- + +Literal strings may need to contain backslashes (such as when used for regular expressions). +Instead of using normal double-quoted strings, there are two varieties of "raw strings". +The first can contain any character except `"`: + +[source,neon] +---- +CONSTANT s: String := @"This string contains backslash (\) characters" +---- + +The second type of string uses arbitrary delimiters so that any literal string can be included in source. +The simplest form is: + +[source,neon] +---- +CONSTANT s: String := @@"This string contains backslashes (\) and "quotes"."@@ +---- + +If there is a need to include the sequence `"@@` within the string, an arbitrary identifier may appear between the `@` at the start and end of the stiring. +For example: + +[source,neon] +---- +CONSTANT s: String := @raw@"A raw string example is @@"like this"@@."@raw@ +---- diff --git a/docs/modules/reference/pages/modules.adoc b/docs/modules/reference/pages/modules.adoc new file mode 100644 index 0000000000..66c46238de --- /dev/null +++ b/docs/modules/reference/pages/modules.adoc @@ -0,0 +1,46 @@ += Modules + +Neon code can be divided into modules, which are separate source files. +A module named `example` would be found in a file called `example.neon`. + +Module source code must *export* identifiers before they can be used outside the module file. +This is done with the `EXPORT` declaration: + +[source,neon] +---- +EXPORT hello + +FUNCTION hello() + print("Hello world") +END FUNCTION +---- + +In order to use an identifier exported by another module, the `IMPORT` declaration must be used. + +Example: + +[source,neon] +---- +IMPORT os + +print(os.getenv("PATH")) +---- + +Individual identifiers may also be imported: + +[source,neon] +---- +IMPORT os.getenv + +print(getenv("PATH")) +---- + +== Module Path + +When a module is imported, the compiler must be able to locate the code for the imported module. +The followed directories are searched in order: + +. Same directory as the importing source file +. The current directory +. The directories in the environment variable `NEONPATH` +. The directories listed in the `.neonpath` file in the current directory diff --git a/docs/modules/reference/pages/reference.adoc b/docs/modules/reference/pages/reference.adoc new file mode 100644 index 0000000000..1770a204e6 --- /dev/null +++ b/docs/modules/reference/pages/reference.adoc @@ -0,0 +1,3 @@ += Language Reference + +This section documents the language as a technical reference manual. diff --git a/docs/modules/reference/pages/statements.adoc b/docs/modules/reference/pages/statements.adoc new file mode 100644 index 0000000000..6f57222749 --- /dev/null +++ b/docs/modules/reference/pages/statements.adoc @@ -0,0 +1,379 @@ += Statements + +== Assignment + +Assignment evaluates the expression on the right hand side and assigns it to the storage location identified on the left hand side. + +Example: + +[source,neon] +---- +VAR a: Number + +a := 5 +---- + +== Function Call + +A function call statement is the same as a function call in an expression, except that the function cannot return a value. +See xref:functions.adoc[Functions] for complete information about function calls. + +== ASSERT + +The `ASSERT` statement evaluates an expression and if the expression is `FALSE`, prints a diagnostic message and raises an exception. + +For example: + +[source,neon] +LET s: String := "foo" +ASSERT s[0] = "x" -- exception + +The output is: + +[source,neon] +---- +Assert failed (test.neon line 2): +ASSERT s[0] = "x" +Assert expression dump: + s[0] is f + s[0] = "x" is FALSE +Unhandled exception AssertFailedException (ASSERT s[0] = "x") (code 0) + Stack frame #1: file test.neon line 2 address 213 + ASSERT s[0] = "x" +---- + +== CASE + +The `CASE` statement selects one of a number of alternative code paths based on the value of an expression. + +Example: + +[source,neon] +---- +VAR x: Number := 0 + +CASE x + WHEN < 2 DO + print("less than two") + WHEN 2 DO + print("is two") + WHEN 3 TO 5 DO + print("three to five") + WHEN 7, 9 DO + print("seven or nine") + WHEN OTHERS DO + print("is something else") +END CASE +---- + +The `CASE` statement expression may be of type `Number`, `String`, or an enumeration. +The possible kinds of `WHEN` clauses are: + +[cols="1,1"] +|=== +| Form | Meaning + +| `WHEN ` | equality match +| `WHEN ` | relational operator comparison (one of `=`, `<>`, `<`, `>`, `<=`, `>=`) +| `WHEN TO ` | range check (both endpoints inclusive) +|=== + +More than one of the above forms may be included in a `WHEN` clause, separated by commas. +The values of `WHEN` clauses must not overlap. +The optional `WHEN OTHERS` clause is executed when no other `WHEN` clauses match. + +== CHECK + +The `CHECK` statement evaluates a boolean expression and, if it is `FALSE`, evaluates a block: + +[source,neon] +---- +FUNCTION foo(n: Number) + CHECK n >= 0 ELSE + PANIC "Value out of range" + END CHECK + print("\(n)") +END FUNCTION +---- + +The block of statements must end in a block-exiting statement which is one of `EXIT`, `NEXT`, `PANIC`, `RAISE`, or `RETURN`. +This statement is useful to check a condition while guaranteeing that execution will not continue after the `END CHECK` if the condition is false. + +== EXEC + +TODO + +== EXIT + +The `EXIT` statement has five different forms: + +[cols="1,2"] +|=== +| Form | Description + +| `EXIT FOR` | stop iteration of the nearest enclosing `FOR` loop +| `EXIT FOREACH` | stop iteration of the nearest enclosing `FOREACH` loop +| `EXIT FUNCTION` | immediately return from a function (only for functions that do not return a value) +| `EXIT LOOP` | stop iteration of the nearest enclosing `LOOP` loop +| `EXIT REPEAT` | stop iteration of the nearest enclosing `REPEAT` loop +| `EXIT WHILE` | stop iteration of the nearest enclosing `WHILE` loop +|=== + +== FOR + +The `FOR` loop iterates a numeric variable over a range of values. +The loop control variable is implicitly a `Number` and must not be already declared outside the `FOR` statement. + +Example: + +[source,neon] +---- +FOR i := 1 TO 10 STEP 2 DO + print("i is \(i)") +END FOR +---- + +The above example is equivalent to: + +[source,neon] +---- +VAR i: Number + +i := 1 +WHILE i <= 10 DO + print("i is \(i)") + i := i + 2 +END WHILE +---- + +The exception is that in the `FOR` loop, the value of `i` cannot be modified. + +The `STEP` value is optional and defaults to 1. +It may be any number, including fractional values, except 0. +It must, however, be a compile time constant. + +== FOREACH + +The `FOREACH` loop iterates through an array from the first element to a last, executing the statements within the block. +The loop control variable is implicitly declared and must not be already declared outside the `FOREACH` statement. + +Example: + +[source,neon] +---- +LET a: Array := ["one", "two", "three"] +FOREACH x IN a DO + print(x) +END FOREACH +---- + +== IF + +The `IF` statement tests a condition of type `Boolean` and executes one of two alternatives. + +Example: + +[source,neon] +---- +VAR x: Number := 0 + +IF x < 10 THEN + print("x is less than 10") +ELSE + print("not less than 10") +END IF +---- + +The `ELSE` clause is optional. + +Additional alternatives may be introduced with the `ELSIF` clause: + +[source,neon] +---- +VAR x: Number := 0 + +IF x < 10 THEN + print("x is less than 10") +ELSIF x < 20 THEN + print("x is less than 20") +ELSE + print("not less than 20") +END IF +---- + +The `IF VALID` form is used to test a pointer value to check whether it is `NIL`, and capture the pointer value in a new variable for use within the `IF VALID` block: + +[source,neon] +---- +TYPE Record IS CLASS + name: String +END CLASS + +VAR p: POINTER TO Record := NIL + +IF VALID p AS q THEN + print(q->name) +END IF +---- + +== INC + +The `INC` statement increments a variable of type `Number`. + +Example: + +[source,neon] +---- +VAR x: Number := 5 +INC x +ASSERT x = 6 +---- + +In this example, `INC x` is equivalent to `x := x + 1`. + +== LET + +The `LET` statement introduces a new read-only variable and assigns a value (which can be an arbitrary expression, evaluated at run time). + +Example: + +[source,neon] +---- +FUNCTION five(): Number + RETURN 5 +END FUNCTION + +LET ten: Number := 2 * five() +---- + +== LOOP + +The `LOOP` statement begins a loop with no specific exit condition. +There is normally an `EXIT LOOP` statement within the loop for a termination condition. + +Example: + +[source,neon] +---- +VAR i: Number := 0 + +LOOP + INC i + IF i >= 10 THEN + EXIT LOOP + END IF + print("i is \(i)") +END LOOP +---- + +== NEXT + +The `NEXT` statement has four different forms: + +[cols="1,2"] +|=== +| Form | Description + +| `NEXT FOR` | next iteration of the nearest enclosing `FOR` loop +| `NEXT FOREACH` | next iteration of the nearest enclosing `FOREACH` loop +| `NEXT LOOP` | next iteration of the nearest enclosing `LOOP` loop +| `NEXT REPEAT` | next iteration of the nearest enclosing `REPEAT` loop +| `NEXT WHILE` | next iteration of the nearest enclosing `WHILE` loop +|=== + +When using `NEXT FOR`, the loop control variable is incremented (or decremented, according to the `STEP` value) before continuing to the next iteration. + +When using `NEXT REPEAT` or `NEXT WHILE`, the loop condition is tested before continuing to the next iteration. + +== RAISE + +The `RAISE` statement raises an exception. + +Example: + +[source,neon] +---- +EXCEPTION InvalidWidgetSizeException + +VAR size: Number := 3 +IF size > 4 THEN + RAISE InvalidWidgetSizeException(size.toString()) +END IF +---- + +The executor searches for an exception handler that can handle the given expression type, and execution resumes with the exception handler. +If no exception handler is found, the program terminates with a message and stack trace. + +== REPEAT + +The `REPEAT` statement begins a loop with a bottom-tested condition. +Execution always proceeds into the loop body at least once. + +Example: + +[source,neon] +---- +VAR x: Number := 0 + +REPEAT + print("x is \(x)") + INC x +UNTIL x = 10 +---- + +The above loop will print the whole numbers 0 through 9. + +== RETURN + +The `RETURN` statement returns a value from a function. +The type of the expression in the `RETURN` statement must match the return type declared in the function header (which means that it is only valid to use `RETURN` for a function that actually returns a value). + +Example: + +[source,neon] +---- +FUNCTION square(x: Number): Number + RETURN x ^ 2 +END FUNCTION +---- + +== TRY + +The `TRY` statement introduces a block that handles exceptions. +After entering a `TRY` block, any exception that happens within the block is checked against the `TRAP` clauses. +If an exception matching a clause is raised, the corresponding exception handler starts running. + +Example: + +[source,neon] +---- +EXCEPTION InvalidWidgetSizeException + +VAR size: Number := 5 +TRY + IF size > 4 THEN + RAISE InvalidWidgetSizeException(size.toString()) + END IF +TRAP InvalidWidgetSizeException AS x DO + print("Invalid size \(x.info)") +END TRY +---- + +== WHILE + +The `WHILE` statement begins a loop with a top-tested condition. +The condition is tested before every loop iteration, including the first one. + +Example: + +[source,neon] +---- +VAR x: Number := 0 + +WHILE x < 10 DO + print("x is \(x)") + INC x +END WHILE +---- + +The above loop will print the whole numbers 0 through 9. diff --git a/docs/modules/reference/pages/types.adoc b/docs/modules/reference/pages/types.adoc new file mode 100644 index 0000000000..6cfcae18d1 --- /dev/null +++ b/docs/modules/reference/pages/types.adoc @@ -0,0 +1,227 @@ += Types + +Neon is statically and strongly typed. +Every value has a definite type, and there are no automatic conversions of values between types. + +There is a dynamic `Object` type which can hold values of any of the concrete types. + +== Boolean + +Boolean values can take on two values, `FALSE` or `TRUE`. + +Example + +[source,neon] +---- +LET b: Boolean := TRUE +---- + +== Number + +Number values are 128-bit decimal floating point (specifically, https://en.wikipedia.org/wiki/Decimal128_floating-point_format[decimal128]). +The valid magnitude range of numbers are (in addition to zero): + +* Minimum: 1.000000000000000000000000000000000e-6143 +* Maximum: 9.999999999999999999999999999999999e6144 + +Example: + +[source,neon] +---- +LET n: Number := 2.997924580e+8 +---- + +== String + +String values are sequences of Unicode code points. + +== Bytes + +Bytes values are sequences of 8-bit bytes. +Values of this type are used for buffers when doing file and network I/O, for example. + +== Enumeration + +Enumeration values are one of a set of valid values defined in the `ENUM` definition. + +Example: + +[source,neon] +---- +TYPE Colour IS ENUM + red + green + blue +END ENUM + +LET e: Colour := Colour.green +---- + +== Record + +Records are aggregate types that contain named elements with independent types. + +Example: + +[source,neon] +---- +TYPE Item IS RECORD + name: String + size: Number +END RECORD + +VAR r: Item := Item() + +r.name := "Widget" +r.size := 5 +---- + +Records may have associated functions called methods, which can be called using a typical method call syntax. + +Example: + +[source,neon] +---- +TYPE Cart IS RECORD + apples: Number + oranges: Number +END RECORD + +FUNCTION Cart.totalFruit(self: Cart): Number + RETURN self.apples + self.oranges +END FUNCTION + +VAR c: Cart := Cart() +c.apples := 5 +c.oranges := 6 +print(str(c.totalFruit())) +---- + +Record fields may be marked `PRIVATE`, which means that only code within associated methods may access that field. + +Example: + +[source,neon] +---- +TYPE Cart IS RECORD + apples: Number + oranges: Number + PRIVATE nuts: Number +END RECORD +---- + +== Class + +Classes are aggregate types similar to records, but have different semantics and are always allocated dynamically. + +Example: + +[source,neon] +---- +TYPE Item IS CLASS + name: String + size: Number +END CLASS + +LET p: POINTER TO Item := NEW Item() + +p->name := "Widget" +p->size := 5 +---- + +Classes may also have methods: + +[source,neon] +---- +TYPE Cart IS CLASS + apples: Number + oranges: Number +END CLASS + +FUNCTION Cart.totalFruit(self: VALID POINTER TO Cart): Number + RETURN self->apples + self->oranges +END FUNCTION + +LET c: POINTER TO Cart := NEW Cart() +c->apples := 5 +c->oranges := 6 +print(str(c->totalFruit())) +---- + +== Array + +Arrays are variable size sequences of values indexed by nonnegative integers. +Arrays are dynamically sized as needed. + +Example: + +[source,neon] +---- +VAR a: Array := [] + +a[0] := "Hello" +a[1] := "World" +---- + +== Dictionary + +Dictionaries are an associative map which pairs a unique `String` with a value of some type. + +Example: + +[source,neon] +---- +VAR d: Dictionary := {} + +d["gold"] := 1 +d["silver"] := 2 +d["bronze"] := 3 +---- + +== Pointers + +Pointers are addresses of dynamically allocated class objects. +The `NEW` keyword allocates a new object of a given type and returns a pointer to it. +Pointers may have the value `NIL` that does not point to any object. +To use (dereference) a pointer, it must first be checked for validity (not `NIL`) using the `IF VALID` construct. + +Example: + +[source,neon] +---- +TYPE Item IS CLASS + name: String + size: Number +END CLASS + +VAR item: POINTER TO Item + +item := NEW Item +IF VALID item AS p THEN + p->name := "Widget" + p->size := 5 +END IF +---- + +== Object + +The `Object` type can hold values of any of the concrete types. +When used, `Object` values are converted back to the required concrete type when used. +If the value is of the wrong type (eg. a `Number` where a `String` is required), then a `DynamicConversionException` is raised. + +Example: + +[source,neon] +---- +VAR x: Object + +x := "hello" +print(x) + +x := 5 +TRY + print(x) +TRAP DynamicConversionException DO + print("Exception raised") +END TRY +---- diff --git a/docs/overview.rst b/docs/overview.rst deleted file mode 100644 index 19f6ff6521..0000000000 --- a/docs/overview.rst +++ /dev/null @@ -1,302 +0,0 @@ -Neon Overview -============= - -The following is a brief description of Neon for experienced programmers. -There are plenty of examples, because experienced programmers know how to read code, and can pick up concepts more quickly by reading code than by reading a description of code. - -Neon is a statically typed imperative language, with roots in Pascal, Modula-2, Ada, and `others `_. -Program structure and modules are influenced by Python. - -:: - - -- This sample program greets the user - -- until an empty line is entered. - - IMPORT console - - LOOP - LET ir: console.InputResult := console.input("What is your name? ") - CHECK ir ISA console.InputResult.line ELSE - EXIT LOOP - END CHECK - LET name: String := ir.line - IF name = "" THEN - EXIT LOOP - END IF - print("Hello, \(name).") - END LOOP - -General -------- - -All identifiers are case sensitive. -Language defined keywords are all upper case. -Semicolons are not used. -Identifier scope is defined by program block structure. -Assignments have value semantics (deep copy). -Forward declarations are not required. -All variables must be explicitly initialised before use. - -Types ------ - -The scalar types are: - -- ``Boolean`` (``TRUE`` or ``FALSE``) -- ``Number`` (decimal floating point) -- ``String`` (Unicode text) -- ``Bytes`` (arbitrary blocks of bytes) -- enumerations (named values) - -Aggregate types are: - -- ``RECORD`` (named fields) -- ``CLASS`` (dynamically allocated objects) -- ``Array`` (arbitrary size vector) -- ``Dictionary`` (map indexed by a ``String`` key) - -There is a dynamic ``Object`` type which can hold values of any of the concrete types. - -:: - - VAR x: Object - x := 5 - print(str(x)) - x := "hello" - print(x) - -Dynamic heap allocation is supported by a ``POINTER`` type. - -:: - - TYPE Colour IS ENUM - red - green - blue - END ENUM - - TYPE Person IS RECORD - name: String - eyes: Colour - END RECORD - - TYPE Node IS CLASS - value: String - next: POINTER TO Node - END CLASS - - LET b: Boolean := TRUE - LET n: Number := 123.456 - LET s: String := "Hello world" - LET y: Bytes := HEXBYTES "00 01 02 03" - LET e: Colour := Colour.green - LET r: Person := Person(name WITH "Alice", eyes WITH Colour.green) - LET a: Array := ["fork", "knife", "spoon"] - LET d: Dictionary := {"fork": 5, "knife": 6, "spoon": 1} - LET p: POINTER TO Node := NEW Node(value WITH "green") - -Expressions ------------ - -There is a rich expression syntax including arithmetic, array slicing, conditionals, and string interpolation. - -:: - - LET x: Number := 5 - LET y: Number := (6 + x) / 2 - ASSERT y = 5.5 - - LET a: Array := ["fork", "knife", "spoon"] - ASSERT a[1 TO LAST] = ["knife", "spoon"] - - LET r: String := (IF y < 5 THEN "small" ELSE "big") - ASSERT r = "big" - - LET t: String := "y is a \(r) value" - ASSERT t = "y is a big value" - -Statements ----------- - -There are two variable declarations: ``LET`` (read-only value), and ``VAR`` (modifiable value). - -:: - - LET a: Number := 5 - - VAR b: Number - b := a - b := 6 - - print("\(a), \(b)") - -There are two conditional blocks: ``CASE`` (multiple branches), and ``IF`` (single test). - -:: - - FOR a := 0 TO 9 DO - VAR s: String - CASE a - WHEN < 2 DO - s := "less than two" - WHEN 2 DO - s := "two" - WHEN 3 TO 5 DO - s := "three to five" - WHEN 7, 9 DO - s := "seven or nine" - WHEN OTHERS DO - s := "something else" - END CASE - print("\(a) is \(s)") - END FOR - - IMPORT random - IF random.uint32() < 10 THEN - print("small") - END IF - -There are four kinds of loops: ``FOR`` (bounded iteration), ``LOOP`` (infinite loop), ``REPEAT`` (bottom-tested condition), and ``WHILE`` (top-tested condition). -The ``EXIT`` and ``NEXT`` statements branch out of the loop or to the next iteration, respectively. - -:: - - FOR i := 1 TO 10 DO - print("\(i)") - END FOR - - VAR a: Number := 1 - LOOP - print("\(a)") - IF a = 10 THEN - EXIT LOOP - END IF - INC a - END LOOP - - a := 1 - REPEAT - print("\(a)") - INC a - UNTIL a = 10 - - a := 1 - WHILE a <= 10 DO - print("\(a)") - INC a - END WHILE - -The exception handling statements are ``TRY`` (introduces a new handling scope), and ``RAISE`` to raise an exception. - -:: - - EXCEPTION PrinterOutOfPaperException - - FUNCTION printFile(name: String) - -- Save the trees, don't print anything. - RAISE PrinterOutOfPaperException - END FUNCTION - - TRY - printFile("hello.txt") - TRAP PrinterOutOfPaperException DO - print("Sorry, out of paper.") - END TRY - -The ``ASSERT`` statement is used to check program invariants. -Execution stops with a diagnostic dump if the condition is not satisfied. - -:: - - FUNCTION setRatio(percent: Number) - ASSERT 0 <= percent <= 100 - -- ... use percent value - END FUNCTION - -Functions ---------- - -Functions may or may not return a value. -If a function returns a value, then the return value cannot be silently ignored by the caller. -Function parameters can be ``IN`` (default), ``OUT`` (passed back to caller), or ``INOUT`` (references caller value). - -:: - - IMPORT string - - FUNCTION func(name: String, OUT result: String, INOUT count: Number) - result := string.upper(name) - INC count - END FUNCTION - - VAR uname: String - VAR n: Number := 0 - - -- The parameter mode (if not IN) must be explicitly indicated - -- on the function call. - func("charlie", OUT uname, INOUT n) - - -- The caller may choose to pass parameters in a different - -- order using the WITH keyword. - func("charlie", INOUT count WITH n, OUT result WITH uname) - - ASSERT uname = "CHARLIE" - ASSERT n = 2 - -Methods -------- - -Records and classes may have methods attached to them, to be called with the usual method syntax. - -:: - - TYPE Rectangle IS RECORD - width: Number - height: Number - END RECORD - - FUNCTION Rectangle.area(self: Rectangle): Number - RETURN self.width * self.height - END FUNCTION - - FUNCTION Rectangle.expand(INOUT self: Rectangle, edge: Number) - self.width := self.width + 2 * edge - self.height := self.height + 2 * edge - END FUNCTION - - LET r: Rectangle := Rectangle(width WITH 4, height WITH 5) - ASSERT r.area() = 20 - r.expand(1) - ASSERT r.area() = 42 - -Pointers --------- - -Pointers can only point to classes. -Pointers are declared with ``POINTER TO`` and allocated with ``NEW``. - -:: - - TYPE Person IS CLASS - name: String - age: Number - END CLASS - - LET p: POINTER TO Person := NEW Person - p->name := "Alice" - p->age := 23 - -Pointers must be checked for validity (non-NIL) before they can be used using the ``IF VALID`` block. - -:: - - TYPE Person IS CLASS - name: String - age: Number - END CLASS - - FUNCTION incrementAge(p: POINTER TO Person) - IF VALID p THEN - INC p->age - END IF - END FUNCTION diff --git a/docs/reference/classes.rst b/docs/reference/classes.rst deleted file mode 100644 index fd6d017994..0000000000 --- a/docs/reference/classes.rst +++ /dev/null @@ -1,76 +0,0 @@ -Classes -======= - -Classes are similar to records with some additional features: - -- Instances of classes must be dynamically allocated with ``NEW``. -- Class instances are always referenced by pointer. -- Classes support interfaces. - -Declaration ------------ - -Classes are declared using ``TYPE`` with ``CLASS``:: - - TYPE Person IS CLASS - name: String - phone: String - pets: Number - END CLASS - -Like records, classes may declare ``PRIVATE`` fields. - -Allocation ----------- - -A new instance of a class must be created using the ``NEW`` keyword:: - - TYPE Person IS CLASS - name: String - phone: String - pets: Number - END CLASS - - LET p: POINTER TO Person := NEW Person(name WITH "Alice") - print(p->name) - -Interfaces ----------- - -An interface is declared using the ``INTERFACE`` declaration:: - - INTERFACE Animal - FUNCTION voice(self: Animal) - END INTERFACE - - ------------------------- - - TYPE Cat IS CLASS IMPLEMENTS Animal - furColour: String - END CLASS - - FUNCTION Cat.voice(self: VALID POINTER TO Cat) - print("meow") - END FUNCTION - - ------------------------- - - TYPE Bird IS CLASS IMPLEMENTS Animal - featherColour: String - END CLASS - - FUNCTION Bird.voice(self: VALID POINTER TO Bird) - print("chirp") - END FUNCTION - - ------------------------- - - VAR animals: Array := [] - animals.append(NEW Cat) - animals.append(NEW Bird) - FOREACH x IN animals DO - x->voice() - END FOREACH - -Each class that implements the interface uses the ``IMPLEMENTS`` keyword to indicate. -The type ``POINTER TO Animal`` refers to instances of classes that implement the ``Animal`` interface. diff --git a/docs/reference/declarations.rst b/docs/reference/declarations.rst deleted file mode 100644 index 2cb9b52a56..0000000000 --- a/docs/reference/declarations.rst +++ /dev/null @@ -1,104 +0,0 @@ -Declarations -============ - -Types ------ - -New type names are introduced using the ``TYPE`` keyword:: - - TYPE Length IS Number - - VAR len: Length - -In the above case, ``Length`` is an alias for ``Number`` and the two can be used interchangeably. - -More often the ``TYPE`` keyword is used for introducing aggregate types:: - - TYPE Widget IS RECORD - size: Number - colour: String - END RECORD - - VAR r: Widget - -Constants ---------- - -Constants are defined using the ``CONSTANT`` keyword:: - - CONSTANT Pi: Number := 3.141592653589793 - CONSTANT Sky: String := "blue" - -The value assigned to a constant must be able to be evaluated at compile time. -This may be an expression:: - - CONSTANT Pi: Number := 3.141592653589793 - CONSTANT Pi2: Number := Pi ^ 2 - - CONSTANT Greeting: String := "Hello " & "world" - -Variables ---------- - -Variables are declared using the ``VAR`` keyword:: - - VAR count: Number - VAR colour: String - -Variables declared outside a function are *global* variables. -Variables declared inside a function are visible only from within the scope where they are declared. - -Read-only values (therefore not actually *variables*) are declared with the ``LET`` keyword:: - - IMPORT os - - LET path: String := os.getenv("PATH") - -.. note:: - - The difference between ``LET`` and ``CONSTANT`` is that a ``CONSTANT`` value must be able to be evaluated at *compile* time. - A ``LET`` value can be initialised from data that is known only at runtime. - -.. tip:: - - If you calculate a value, or save the return value from a function call, then usually ``LET`` is what you want to use. - Use ``VAR`` only when necessary in the case where your program logic needs to modify the variable later. - -Exceptions ----------- - -Exceptions are declared with the ``EXCEPTION`` keyword:: - - EXCEPTION PrinterOutOfPaperException - -Exception names must end with the word ``Exception``. - -Exceptions may also declare *subexceptions*:: - - EXCEPTION PrinterException - EXCEPTION PrinterException.OutOfPaper - -Interfaces ----------- - -Interfaces are declared with the ``INTERFACE`` keyword:: - - INTERFACE Shape - FUNCTION perimeter(self: Shape): Number - FUNCTION area(self: Shape): Number - END INTERFACE - -Interfaces are used with classes to declare that a class must implement a specific set of functions. - -Exports -------- - -Identifiers can be exported using the ``EXPORT`` keyword:: - - EXPORT name - - VAR name: String - -The ``EXPORT`` keyword may be combined with the declaration:: - - EXPORT VAR name: String diff --git a/docs/reference/expressions.rst b/docs/reference/expressions.rst deleted file mode 100644 index 6a644211af..0000000000 --- a/docs/reference/expressions.rst +++ /dev/null @@ -1,258 +0,0 @@ -Expressions -=========== - -Expressions are combinations of operands and operators. -Operands are values in themselves, which may be expressions surrounded by ``( )``. -Operators are logical, arithmetic, or string and the valid operators depend on the types of the operands. - -Literal Values --------------- - -Literal values can be individual lexical elements such as :ref:`identifiers `, :ref:`numbers `, and :ref:`strings `. - -Literal arrays are sequences of comma-separated values surrounded by brackets ``[ ]``. - -Example:: - - LET a: Array := [1, 2, 3] - -Literal dictionaries are sequences of comma-separated name/value pairs surrounded by braces ``{ }``. - -Example:: - - LET d: Dictionary := { - "one": 1, - "two": 2, - "three": 3 - } - -For convenience, both literal arrays and dictionaries accept a trailing comma after the final element:: - - LET numbers: Array := [ - "zero", - "one", - "two", - ] - -Boolean Operators ------------------ - -The following operator takes one boolean value. - -======== ============ -Operator Description -======== ============ -``NOT`` logical negation -======== ============ - -The following operators take two boolean values. - -======== ============ -Operator Description -======== ============ -``=`` equality -``<>`` inequality -``AND`` logical conjunction -``OR`` logical disjunction -======== ============ - -Numeric Operators ------------------ - -The following operators take one number value. - -======== =========== -Operator Description -======== =========== -``+`` identity (provided for symmetry with ``-``) -``-`` arithmetic negation -======== =========== - -The following operators take two number values. - -========== =========== -Operator Description -========== =========== -``+`` addition -``-`` subtraction -``*`` multiplication -``/`` division -``INTDIV`` integer division -``MOD`` modulo (remainder) -``^`` exponentiation -``=`` equality -``<>`` inequality -``<`` less than -``>`` greater than -``<=`` less than or equal -``>=`` greater than or equal -========== =========== - -String Operators ----------------- - -The following operators take two string values. - -======== =========== -Operator Description -======== =========== -``&`` concatenation -``=`` equality -``<>`` inequality -``<`` lexicographical less than -``>`` lexicographical greater than -``<=`` lexicographical less than or equal -``>=`` lexicographical greater than or equal -======== =========== - -Array Operators ---------------- - -========== =========== -Operator Description -========== =========== -``IN`` membership test (*O(n)* complexity) -``NOT IN`` membership test (*O(n)* complexity) -========== =========== - -Dictionary Operators --------------------- - -========== =========== -Operator Description -========== =========== -``IN`` membership test (*O(log n)* complexity) -``NOT IN`` membership test (*O(log n)* complexity) -========== =========== - -Object Operator ---------------- - -======== =========== -Operator Description -======== =========== -``ISA`` type test (``object ISA Type``) -======== =========== - -Pointer Operator ----------------- - -======== =========== -Operator Description -======== =========== -``->`` pointer dereference -======== =========== - -Operator Precedence -------------------- - -The operator precedence is as follows, highest to lowest: - -====================================== =========== -Operator Description -====================================== =========== -``( )`` subexpression -``^`` exponentiation -``*`` ``/`` ``MOD`` ``INTDIV`` multiplication, division, modulo -``+`` ``-`` ``&`` addition, subtraction, concatenation -``=`` ``<>`` ``<`` ``>`` ``<=`` ``>=`` comparison -``IN`` ``NOT IN`` membership -``AND`` conjunction -``OR`` disjunction -``IF`` conditional -====================================== =========== - -Array Subscripts ----------------- - -Array subscripts are normally integers greater than or equal to zero:: - - LET a: Array := ["foo", "bar", "baz"] - print(a[0]) - print(a[2]) - -Two special values may be used, ``FIRST`` and ``LAST``:: - - LET a: Array := ["foo", "bar", "baz"] - print(a[FIRST]) - print(a[LAST]) - -``FIRST`` always means the same as `0` and is provided for completeness. -``LAST`` refers to the index of the last element of the array (if the array is not empty). - -Array slices are also possible using the ``TO`` keyword. -Both indexes are inclusive:: - - LET a: Array := ["foo", "bar", "baz"] - LET b: Array := a[0 TO 1] - LET c: Array := a[LAST-1 TO LAST] - -In the above example, ``b`` contains ``["foo", "bar"]`` and ``c`` contains ``["bar", "baz"]``. - -Dictionary Subscripts ---------------------- - -Dictionary subscripts are strings:: - - LET d: Dictionary := { - "apple": "red", - "orange": "orange", - "banana": "yellow" - } - print(d["apple"]) - print(d["banana"]) - -Conditional Expression ----------------------- - -A conditional expression is like an inline ``IF`` statement:: - - LET n: Number := 5 - LET s: String := (IF n >= 0 THEN "positive" ELSE "negative") - -The condition following ``IF`` is evaluated. -If it is true, then the ``THEN`` expression is evaluated and is the result of the expression. -Otherwise, the ``ELSE`` expression is evaluated and is the result of the expression. - -The parentheses around the entire conditional expression are required. - -.. note:: - - The branch not taken is *not* evaluated. - This means that if a branch not taken is a function call, the function will not be called. - -Try Expression --------------- - -A try expression is like an inline ``TRY`` statement:: - - EXCEPTION TestException - FUNCTION f(): Number - RAISE TestException - END FUNCTION - LET n: Number := (TRY f() TRAP TestException GIVES -1) - -The expression following ``TRY`` is evaluated. -If an exception is raised, then it is matched against the ``TRAP`` clauses. -A matching ``TRAP`` clause with a ``GIVES`` keyword evalues the ``GIVES`` expression and returns that as the value of the try expression. - -The keyword ``DO`` can be used instead of ``GIVES``. -The ``DO`` keywords introduces a new statement block which must end with a block-exiting statement (``EXIT``, ``NEXT``, ``RAISE``, or ``RETURN``). - -Expression Substitution ------------------------ - -Literal strings may contain embedded expressions surrounded by the special escape ``\( )``. -These expressions are evaluated at run time. -The type of the embedded expression must have a ``.toString()`` method which will be called automatically to convert the result to a string. - -Example:: - - LET a: Array := ["one", "two", "three"] - FOR i := 0 TO 2 DO - print("i is \(i) and the array element is \(a[i])") - END FOR - -.. admonition:: TODO - - formatting specifiers diff --git a/docs/reference/functions.rst b/docs/reference/functions.rst deleted file mode 100644 index 6f4ceed8a9..0000000000 --- a/docs/reference/functions.rst +++ /dev/null @@ -1,66 +0,0 @@ -Functions -========= - -Functions are declared using the ``FUNCTION`` keyword:: - - FUNCTION square(x: Number): Number - RETURN x ^ 2 - END FUNCTION - -The return type of a function (appearing after the ``)``) is optional. -The ``RETURN`` statement is not permitted inside a function that does not return a value (use ``EXIT FUNCTION`` instead). - -Parameter Modes ---------------- - -Function parameters may be declared with a parameter mode: - -* ``IN`` - The function parameter is passed from the caller into the function, and may not be modified within the function. -* ``INOUT`` - A reference to the function argument is passed to the function, and the parameter may be modified within the function. -* ``OUT`` - No value is passed into the function, but any value assigned within the function is passed back to the caller. - -The default parameter mode is ``IN``. -For ``INOUT`` and ``OUT`` parameters, the caller must supply an actual variable rather than the result of an expression. - -When calling a function with a parameter that has ``INOUT`` or ``OUT`` modes, the parameter mode must also be declared in the call:: - - FUNCTION double(INOUT x: Number) - x := x * 2 - END FUNCTION - - VAR a: Number := 5 - double(INOUT a) - -Default Parameter Value ------------------------ - -Function parameters may be declared with a default value. - -Example:: - - FUNCTION add(INOUT x: Number, delta: Number DEFAULT 1) - x := x + delta - END FUNCTION - - VAR value: Number := 5 - add(INOUT value) - add(INOUT value, 2) - -When a parameter is not specified and it has a default value, the function call is executed as if the parameter were present and had the given value. -Default parameter values only apply to ``IN`` mode parameters. - -Named Parameters ----------------- - -When calling a function, function parameters may be named using the ``WITH`` keyword. - -Example:: - - FUNCTION birthdayParty(name: String, balloons: Number, cake: String, clown: Boolean) - -- ... - END FUNCTION - - birthdayParty(name WITH "Helen", balloons WITH 10, cake WITH "Chocolate", clown WITH TRUE) - -Parameters may be passed in order without using ``WITH``, and then switch to using ``WITH`` for the remainder of the function call. -Each non-default parameter must be specified exactly once in the function call. diff --git a/docs/reference/grammar.rst b/docs/reference/grammar.rst deleted file mode 100644 index 90258e6e98..0000000000 --- a/docs/reference/grammar.rst +++ /dev/null @@ -1,4 +0,0 @@ -Grammar -======= - -See `Grammar Railroad Diagrams <../../grammar.xhtml>`_. diff --git a/docs/reference/index.rst b/docs/reference/index.rst deleted file mode 100644 index b85d2f6c93..0000000000 --- a/docs/reference/index.rst +++ /dev/null @@ -1,18 +0,0 @@ -Language Reference -================== - -This section documents the language as a technical reference manual. - -.. toctree:: - :maxdepth: 2 - :caption: Contents: - - lexical - types - declarations - expressions - statements - functions - classes - modules - grammar diff --git a/docs/reference/lexical.rst b/docs/reference/lexical.rst deleted file mode 100644 index e9f0a925f3..0000000000 --- a/docs/reference/lexical.rst +++ /dev/null @@ -1,171 +0,0 @@ -Lexical Structure -================= - -Neon source code is encoded in UTF-8. -All keywords and identifiers are case sensitive. - -Comments --------- - -The comment lead-in character sequence is ``--``. -A single line comment is a ``--`` followed by arbitrary text to the end of the line. -A block comment is introduced with ``/*`` and ends with ``*/``. -Block comments may span multiple lines. -Block comments may not nest. - -Example:: - - -- The following line prints some text. - print("Hello, World.") - - /* This comment spans multiple - lines of text until the comment - closing characters. */ - -Keywords --------- - -All words that consist of only uppercase letters are reserved for keywords. -The following keywords are defined by the language. - -=============== =========== -Keyword Description -=============== =========== -``ALIAS`` used in ``IMPORT`` to optionally rename a module -``AND`` logical conjunction -``AS`` names a tested expression in ``IF VALID`` statement -``ASSERT`` assert that an expression is true, used for diagnostics -``Array`` generic array type -``BEGIN`` used in ``BEGIN MAIN`` to indicate a program entry point -``CASE`` multiple value matching from a range -``CONSTANT`` constant declaration -``DECLARE`` exception and forward function declaration -``DEFAULT`` default value for function parameter -``DEC`` decrement a ``Number`` variable -``Dictionary`` generic dictionary type -``DO`` used in ``CASE``, ``FOR``, and ``WHILE`` statements -``ELSE`` alternative condition in ``IF`` statement -``ELSIF`` alternative and test in ``IF`` statement -``EMBED`` include an external file directly into the compiled code -``ENUM`` enumeration type declaration -``END`` end of most kinds of blocks of code -``EXCEPTION`` exception declaration -``EXIT`` early exit from loops -``EXPORT`` export identifier from module -``FALSE`` boolean constant -``FIRST`` indicates first value in array subscript -``FOR`` loop with a sequential control variable -``FOREACH`` loop over an array of values -``FUNCTION`` definition of subprogram -``HEXBYTES`` literal ``Bytes`` value -``IF`` conditional test and branch -``IN`` function parameter passing mode; aggregate membership test -``INC`` increment a ``Number`` variable -``INDEX`` used in ``FOREACH`` statement for counting values -``INOUT`` function parameter passing mode -``IMPORT`` access code in another module -``IS`` used in a ``TYPE`` declaration -``LAST`` indicates last value in array subscript -``LET`` assignment to read-only value -``LOOP`` generic loop -``MAIN`` used in ``BEGIN MAIN`` to indicate a program entry point -``MOD`` arithmetic modulus -``NATIVE`` declares a predefined function in the standard library -``NEXT`` early skip to next loop iteration -``NEW`` dynamic memory allocation -``NIL`` pointer value constant -``NOT`` logical negation -``OF`` used in ``FOREACH`` statement -``OR`` logical disjunction -``OUT`` function parameter passing mode -``OTHERS`` alternative condition in a ``CASE`` statement -``POINTER`` pointer type declaration -``PRIVATE`` private record field -``RAISE`` initiate exception search -``RECORD`` named aggregate type declaration -``REPEAT`` bottom-tested loop -``RETURN`` early exit and value return from function -``STEP`` used in ``FOR`` loop for increment value -``THEN`` used in ``IF`` statement -``TO`` used in ``FOR`` loop; part of pointer declaration -``TRUE`` boolean constant -``TRY`` start of exception-checked block -``TYPE`` define named type -``UNTIL`` used at end of ``REPEAT`` loop -``VAR`` variable declaration -``VALID`` used in ``IF VALID`` pointer test statement -``WHEN`` used in ``CASE`` statement -``WHILE`` top-tested loop -``WITH`` parameter specification for named parameters -=============== =========== - -.. _identifiers: - -Identifiers ------------ - -An identifier is a letter followed by any number of letters, digits, or underscore. -Identifiers which consist of all uppercase letters are reserved for keywords_. - -.. _numbers: - -Numbers -------- - -Literal numbers are in base 10 by default. - -Numbers may be specified in a variety of bases (these support integers only): - -* Binary preceded by ``0b`` -* Octal preceded by ``0o`` -* Hexadecimal preceded by ``0x`` - -For base 10 numbers, they may contain a fractional portion following a decimal point ``.``. -Additionally, they may have an exponent following ``e`` or ``E``. - -.. _strings: - -Strings -------- - -Strings are sequences of Unicode characters surrounded by double quotes. -The only special character within a string is the backslash, used for character escapes. -The allowed character escapes are: - -============== ============= =========== -Escape Replacement Description -============== ============= =========== -``\"`` " double quote -``\\`` \\ backslash -``\b`` chr(8) backspace -``\f`` chr(11) form feed -``\n`` chr(10) newline -``\r`` chr(13) carriage return -``\t`` chr(9) tab -``\uXXXX`` chr(XXXX) Unicode character XXXX (where XXXX is a 4-digit hex number) -``\UXXXXXXXX`` chr(XXXXXXXX) Unicode character XXXXXXXX (where XXXXXXXX is a 8-digit hex number) -``\u{NAME}`` character Unicode character named NAME from the `Unicode standard `_ -``\()`` expression see `expression substitution`_ -============== ============= =========== - -Example:: - - VAR s: String - - s := "Hello, World" - -Literal strings may need to contain backslashes (such as when used for regular expressions). -Instead of using normal double-quoted strings, there are two varieties of "raw strings". -The first can contain any character except ``"``:: - - CONSTANT s: String := @"This string contains backslash (\) characters" - -The second type of string uses arbitrary delimiters so that any literal string can be included in source. -The simplest form is:: - - CONSTANT s: String := @@"This string contains backslashes (\) and "quotes"."@@ - -If there is a need to include the sequence ``"@@`` within the string, an arbitrary identifier may appear between the ``@`` at the start and end of the stiring. -For example:: - - CONSTANT s: String := @raw@"A raw string example is @@"like this"@@."@raw@ diff --git a/docs/reference/modules.rst b/docs/reference/modules.rst deleted file mode 100644 index b142fda2e9..0000000000 --- a/docs/reference/modules.rst +++ /dev/null @@ -1,39 +0,0 @@ -Modules -======= - -Neon code can be divided into modules, which are separate source files. -A module named ``example`` would be found in a file called ``example.neon``. - -Module source code must *export* identifiers before they can be used outside the module file. -This is done with the ``EXPORT`` declaration:: - - EXPORT hello - - FUNCTION hello() - print("Hello world") - END FUNCTION - -In order to use an identifier exported by another module, the ``IMPORT`` declaration must be used. - -Example:: - - IMPORT os - - print(os.getenv("PATH")) - -Individual identifiers may also be imported:: - - IMPORT os.getenv - - print(getenv("PATH")) - -Module Path ------------ - -When a module is imported, the compiler must be able to locate the code for the imported module. -The followed directories are searched in order: - -1. Same directory as the importing source file -2. The current directory -3. The directories in the environment variable ``NEONPATH`` -4. The directories listed in the ``.neonpath`` file in the current directory diff --git a/docs/reference/statements.rst b/docs/reference/statements.rst deleted file mode 100644 index 07da1c2f5a..0000000000 --- a/docs/reference/statements.rst +++ /dev/null @@ -1,343 +0,0 @@ -Statements -========== - -Assignment ----------- - -Assignment evaluates the expression on the right hand side and assigns it to the storage location identified on the left hand side. - -Example:: - - VAR a: Number - - a := 5 - -Function Call -------------- - -A function call statement is the same as a function call in an expression, except that the function cannot return a value. -See Functions_ for complete information about function calls. - -``ASSERT`` ----------- - -The ``ASSERT`` statement evaluates an expression and if the expression is ``FALSE``, prints a diagnostic message and raises an exception. - -For example:: - - LET s: String := "foo" - ASSERT s[0] = "x" -- exception - -The output is:: - - Assert failed (test.neon line 2): - ASSERT s[0] = "x" - Assert expression dump: - s[0] is f - s[0] = "x" is FALSE - Unhandled exception AssertFailedException (ASSERT s[0] = "x") (code 0) - Stack frame #1: file test.neon line 2 address 213 - ASSERT s[0] = "x" - -``CASE`` --------- - -The ``CASE`` statement selects one of a number of alternative code paths based on the value of an expression. - -Example:: - - VAR x: Number := 0 - - CASE x - WHEN < 2 DO - print("less than two") - WHEN 2 DO - print("is two") - WHEN 3 TO 5 DO - print("three to five") - WHEN 7, 9 DO - print("seven or nine") - WHEN OTHERS DO - print("is something else") - END CASE - -The ``CASE`` statement expression may be of type ``Number``, ``String``, or an enumeration. -The possible kinds of ``WHEN`` clauses are: - -=========================== ========= -Form Meaning -=========================== ========= -``WHEN `` equality match -``WHEN `` relational operator comparison (one of ``=``, ``<>``, ``<``, ``>``, ``<=``, ``>=``) -``WHEN TO `` range check (both endpoints inclusive) -=========================== ========= - -More than one of the above forms may be included in a ``WHEN`` clause, separated by commas. -The values of ``WHEN`` clauses must not overlap. -The optional ``WHEN OTHERS`` clause is executed when no other ``WHEN`` clauses match. - -``CHECK`` ---------- - -The ``CHECK`` statement evaluates a boolean expression and, if it is ``FALSE``, evaluates a block:: - - FUNCTION foo(n: Number) - CHECK n >= 0 ELSE - PANIC "Value out of range" - END CHECK - print("\(n)") - END FUNCTION - -The block of statements must end in a block-exiting statement which is one of ``EXIT``, ``NEXT``, ``PANIC``, ``RAISE``, or ``RETURN``. -This statement is useful to check a condition while guaranteeing that execution will not continue after the ``END CHECK`` if the condition is false. - -``EXEC`` --------- - -.. admonition:: TODO - - EXEC - -``EXIT`` --------- - -The ``EXIT`` statement has five different forms: - -================= =========== -Form Description -================= =========== -``EXIT FOR`` stop iteration of the nearest enclosing `FOR` loop -``EXIT FOREACH`` stop iteration of the nearest enclosing `FOREACH` loop -``EXIT FUNCTION`` immediately return from a function (only for functions that do not return a value) -``EXIT LOOP`` stop iteration of the nearest enclosing `LOOP` loop -``EXIT REPEAT`` stop iteration of the nearest enclosing `REPEAT` loop -``EXIT WHILE`` stop iteration of the nearest enclosing `WHILE` loop -================= =========== - -``FOR`` -------- - -The ``FOR`` loop iterates a numeric variable over a range of values. -The loop control variable is implicitly a ``Number`` and must not be already declared outside the ``FOR`` statement. - -Example:: - - FOR i := 1 TO 10 STEP 2 DO - print("i is \(i)") - END FOR - -The above example is equivalent to:: - - VAR i: Number - - i := 1 - WHILE i <= 10 DO - print("i is \(i)") - i := i + 2 - END WHILE - -The exception is that in the ``FOR`` loop, the value of ``i`` cannot be modified. - -The ``STEP`` value is optional and defaults to 1. -It may be any number, including fractional values, except 0. -It must, however, be a compile time constant. - -``FOREACH`` ------------ - -The ``FOREACH`` loop iterates through an array from the first element to a last, executing the statements within the block. -The loop control variable is implicitly declared and must not be already declared outside the ``FOREACH`` statement. - -Example:: - - LET a: Array := ["one", "two", "three"] - FOREACH x IN a DO - print(x) - END FOREACH - -``IF`` ------- - -The ``IF`` statement tests a condition of type ``Boolean`` and executes one of two alternatives. - -Example:: - - VAR x: Number := 0 - - IF x < 10 THEN - print("x is less than 10") - ELSE - print("not less than 10") - END IF - -The ``ELSE`` clause is optional. - -Additional alternatives may be introduced with the ``ELSIF`` clause:: - - VAR x: Number := 0 - - IF x < 10 THEN - print("x is less than 10") - ELSIF x < 20 THEN - print("x is less than 20") - ELSE - print("not less than 20") - END IF - -The ``IF VALID`` form is used to test a pointer value to check whether it is ``NIL``, and capture the pointer value in a new variable for use within the ``IF VALID`` block:: - - TYPE Record IS CLASS - name: String - END CLASS - - VAR p: POINTER TO Record := NIL - - IF VALID p AS q THEN - print(q->name) - END IF - -``INC`` -------- - -The ``INC`` statement increments a variable of type ``Number``. - -Example:: - - VAR x: Number := 5 - INC x - ASSERT x = 6 - -In this example, ``INC x`` is equivalent to ``x := x + 1``. - -``LET`` -------- - -The ``LET`` statement introduces a new read-only variable and assigns a value (which can be an arbitrary expression, evaluated at run time). - -Example:: - - FUNCTION five(): Number - RETURN 5 - END FUNCTION - - LET ten: Number := 2 * five() - -``LOOP`` --------- - -The ``LOOP`` statement begins a loop with no specific exit condition. -There is normally an ``EXIT LOOP`` statement within the loop for a termination condition. - -Example:: - - VAR i: Number := 0 - - LOOP - INC i - IF i >= 10 THEN - EXIT LOOP - END IF - print("i is \(i)") - END LOOP - -``NEXT`` --------- - -The `NEXT` statement has four different forms: - -================= =========== -Form Description -================= =========== -``NEXT FOR`` next iteration of the nearest enclosing `FOR` loop -``NEXT FOREACH`` next iteration of the nearest enclosing `FOREACH` loop -``NEXT LOOP`` next iteration of the nearest enclosing `LOOP` loop -``NEXT REPEAT`` next iteration of the nearest enclosing `REPEAT` loop -``NEXT WHILE`` next iteration of the nearest enclosing `WHILE` loop -================= =========== - -When using ``NEXT FOR``, the loop control variable is incremented (or decremented, according to the ``STEP`` value) before continuing to the next iteration. - -When using ``NEXT REPEAT`` or ``NEXT WHILE``, the loop condition is tested before continuing to the next iteration. - -``RAISE`` ---------- - -The ``RAISE`` statement raises an exception. - -Example:: - - EXCEPTION InvalidWidgetSizeException - - VAR size: Number := 3 - IF size > 4 THEN - RAISE InvalidWidgetSizeException(size.toString()) - END IF - -The executor searches for an exception handler that can handle the given expression type, and execution resumes with the exception handler. -If no exception handler is found, the program terminates with a message and stack trace. - -``REPEAT`` ----------- - -The ``REPEAT`` statement begins a loop with a bottom-tested condition. -Execution always proceeds into the loop body at least once. - -Example:: - - VAR x: Number := 0 - - REPEAT - print("x is \(x)") - INC x - UNTIL x = 10 - -The above loop will print the whole numbers 0 through 9. - -``RETURN`` ----------- - -The ``RETURN`` statement returns a value from a function. -The type of the expression in the ``RETURN`` statement must match the return type declared in the function header (which means that it is only valid to use ``RETURN`` for a function that actually returns a value). - -Example:: - - FUNCTION square(x: Number): Number - RETURN x ^ 2 - END FUNCTION - -``TRY`` -------- - -The ``TRY`` statement introduces a block that handles exceptions. -After entering a ``TRY`` block, any exception that happens within the block is checked against the ``TRAP`` clauses. -If an exception matching a clause is raised, the corresponding exception handler starts running. - -Example:: - - EXCEPTION InvalidWidgetSizeException - - VAR size: Number := 5 - TRY - IF size > 4 THEN - RAISE InvalidWidgetSizeException(size.toString()) - END IF - TRAP InvalidWidgetSizeException AS x DO - print("Invalid size \(x.info)") - END TRY - -``WHILE`` ---------- - -The ``WHILE`` statement begins a loop with a top-tested condition. -The condition is tested before every loop iteration, including the first one. - -Example:: - - VAR x: Number := 0 - - WHILE x < 10 DO - print("x is \(x)") - INC x - END WHILE - -The above loop will print the whole numbers 0 through 9. diff --git a/docs/reference/types.rst b/docs/reference/types.rst deleted file mode 100644 index e76c485511..0000000000 --- a/docs/reference/types.rst +++ /dev/null @@ -1,203 +0,0 @@ -Types -===== - -Neon is statically and strongly typed. -Every value has a definite type, and there are no automatic conversions of values between types. - -There is a dynamic ``Object`` type which can hold values of any of the concrete types. - -Boolean -------- - -Boolean values can take on two values, ``FALSE`` or ``TRUE``. - -Example:: - - LET b: Boolean := TRUE - -Number ------- - -Number values are 128-bit decimal floating point (specifically, `decimal128 `_). -The valid magnitude range of numbers are (in addition to zero): - -* Minimum: 1.000000000000000000000000000000000e-6143 -* Maximum: 9.999999999999999999999999999999999e6144 - -Example:: - - LET n: Number := 2.997924580e+8 - -String ------- - -String values are sequences of Unicode code points. - -Bytes ------ - -Bytes values are sequences of 8-bit bytes. -Values of this type are used for buffers when doing file and network I/O, for example. - -Enumeration ------------ - -Enumeration values are one of a set of valid values defined in the ``ENUM`` definition. - -Example:: - - TYPE Colour IS ENUM - red - green - blue - END ENUM - - LET e: Colour := Colour.green - -Record ------- - -Records are aggregate types that contain named elements with independent types. - -Example:: - - TYPE Item IS RECORD - name: String - size: Number - END RECORD - - VAR r: Item := Item() - - r.name := "Widget" - r.size := 5 - -Records may have associated functions called methods, which can be called using a typical method call syntax. - -Example:: - - TYPE Cart IS RECORD - apples: Number - oranges: Number - END RECORD - - FUNCTION Cart.totalFruit(self: Cart): Number - RETURN self.apples + self.oranges - END FUNCTION - - VAR c: Cart := Cart() - c.apples := 5 - c.oranges := 6 - print(str(c.totalFruit())) - -Record fields may be marked ``PRIVATE``, which means that only code within associated methods may access that field. - -Example:: - - TYPE Cart IS RECORD - apples: Number - oranges: Number - PRIVATE nuts: Number - END RECORD - -Class ------ - -Classes are aggregate types similar to records, but have different semantics and are always allocated dynamically. - -Example:: - - TYPE Item IS CLASS - name: String - size: Number - END CLASS - - LET p: POINTER TO Item := NEW Item() - - p->name := "Widget" - p->size := 5 - -Classes may also have methods:: - - TYPE Cart IS CLASS - apples: Number - oranges: Number - END CLASS - - FUNCTION Cart.totalFruit(self: VALID POINTER TO Cart): Number - RETURN self->apples + self->oranges - END FUNCTION - - LET c: POINTER TO Cart := NEW Cart() - c->apples := 5 - c->oranges := 6 - print(str(c->totalFruit())) - -Array ------ - -Arrays are variable size sequences of values indexed by nonnegative integers. -Arrays are dynamically sized as needed. - -Example:: - - VAR a: Array := [] - - a[0] := "Hello" - a[1] := "World" - -Dictionary ----------- - -Dictionaries are an associative map which pairs a unique ``String`` with a value of some type. - -Example:: - - VAR d: Dictionary := {} - - d["gold"] := 1 - d["silver"] := 2 - d["bronze"] := 3 - -Pointers --------- - -Pointers are addresses of dynamically allocated class objects. -The ``NEW`` keyword allocates a new object of a given type and returns a pointer to it. -Pointers may have the value ``NIL`` that does not point to any object. -To use (dereference) a pointer, it must first be checked for validity (not ``NIL``) using the ``IF VALID`` construct. - -Example:: - - TYPE Item IS CLASS - name: String - size: Number - END CLASS - - VAR item: POINTER TO Item - - item := NEW Item - IF VALID item AS p THEN - p->name := "Widget" - p->size := 5 - END IF - -Object ------- - -The ``Object`` type can hold values of any of the concrete types. -When used, ``Object`` values are converted back to the required concrete type when used. -If the value is of the wrong type (eg. a ``Number`` where a ``String`` is required), then a ``DynamicConversionException`` is raised. - -Example:: - - VAR x: Object - - x := "hello" - print(x) - - x := 5 - TRY - print(x) - TRAP DynamicConversionException DO - print("Exception raised") - END TRY diff --git a/docs/samples.rst b/docs/samples.rst deleted file mode 100644 index 07ad0fbf9b..0000000000 --- a/docs/samples.rst +++ /dev/null @@ -1,4 +0,0 @@ -Samples -======= - -See `Samples <../samples/>`_. diff --git a/docs/tutorial.rst b/docs/tutorial.rst deleted file mode 100644 index c5bc0ff5fc..0000000000 --- a/docs/tutorial.rst +++ /dev/null @@ -1,6 +0,0 @@ -Tutorial -======== - -.. admonition:: TODO - - Tutorial goes here diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000000..734b7dd833 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4637 @@ +{ + "name": "neon-lang", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "dependencies": { + "@antora/lunr-extension": "^1.0.0-alpha.8" + }, + "devDependencies": { + "@antora/cli": "3.1.4", + "@antora/site-generator": "3.1.4" + } + }, + "node_modules/@antora/asciidoc-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/asciidoc-loader/-/asciidoc-loader-3.1.4.tgz", + "integrity": "sha512-ttsPR1J6gt7gGiCPrtfKX6tSbCHztzpRP0t+/6m+o3JCwXnjoD+dCi73hp8UCkyS+EU+GTo/FeXclYjZnUMXhQ==", + "dev": true, + "dependencies": { + "@antora/logger": "3.1.4", + "@antora/user-require-helper": "~2.0", + "@asciidoctor/core": "~2.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/cli": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/cli/-/cli-3.1.4.tgz", + "integrity": "sha512-bLDt10VSOcqsHOM5kubjvx9HfdqzLESWEM4Hv0zOPsG3drXKZM/PkStDj6wVt2J6B4OtruusLH2CETKkd9vfGQ==", + "dev": true, + "dependencies": { + "@antora/logger": "3.1.4", + "@antora/playbook-builder": "3.1.4", + "@antora/user-require-helper": "~2.0", + "commander": "~10.0" + }, + "bin": { + "antora": "bin/antora" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/content-aggregator": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/content-aggregator/-/content-aggregator-3.1.4.tgz", + "integrity": "sha512-qurPCaV8w6S1u9aN53NWVyznVxo/Tnhiy2gFqQQPPZZkecGiEqiXm2bd6DF5WPDnb1GMWn87qX7b7uwxuJXB3Q==", + "dev": true, + "dependencies": { + "@antora/expand-path-helper": "~2.0", + "@antora/logger": "3.1.4", + "@antora/user-require-helper": "~2.0", + "braces": "~3.0", + "cache-directory": "~2.0", + "glob-stream": "~7.0", + "hpagent": "~1.2", + "isomorphic-git": "~1.21", + "js-yaml": "~4.1", + "multi-progress": "~4.0", + "picomatch": "~2.3", + "progress": "~2.0", + "should-proxy": "~1.0", + "simple-get": "~4.0", + "vinyl": "~2.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/content-classifier": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/content-classifier/-/content-classifier-3.1.4.tgz", + "integrity": "sha512-23/C9uXPCGc7eCyCbr/BnppUzrXuY0uJJsemuVM0CF0woRJ+/Gat0wXwvTvZF4C7Lt1WBKlf2yT0Uk7hDOvg8A==", + "dev": true, + "dependencies": { + "@antora/asciidoc-loader": "3.1.4", + "@antora/logger": "3.1.4", + "mime-types": "~2.1", + "vinyl": "~2.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/document-converter": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/document-converter/-/document-converter-3.1.4.tgz", + "integrity": "sha512-zKpT/I025yHfI0RMnNHDhH24Uj4XVLwIPOjzCWLiogIKXxUkFGltQ55V2Ph7LMysYF7/3RVwpQx3cYhJv5QXBQ==", + "dev": true, + "dependencies": { + "@antora/asciidoc-loader": "3.1.4" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/expand-path-helper": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@antora/expand-path-helper/-/expand-path-helper-2.0.0.tgz", + "integrity": "sha512-CSMBGC+tI21VS2kGW3PV7T2kQTM5eT3f2GTPVLttwaNYbNxDve08en/huzszHJfxo11CcEs26Ostr0F2c1QqeA==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/@antora/file-publisher": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/file-publisher/-/file-publisher-3.1.4.tgz", + "integrity": "sha512-pHCy+wOkzjVPRF16fY4AzFcMt2B2c0r+CE5Er1quOhl19jL7wwaw3OmCuzgJ/BmZynDFyerlfLu2MPlWJVL1+Q==", + "dev": true, + "dependencies": { + "@antora/expand-path-helper": "~2.0", + "@antora/user-require-helper": "~2.0", + "gulp-vinyl-zip": "~2.5", + "vinyl": "~2.2", + "vinyl-fs": "~3.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/logger": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/logger/-/logger-3.1.4.tgz", + "integrity": "sha512-E5B9NnZoe4wHOv1MWWYqaGDSOlADHGZd5mZJFvuA0guJCbO3amAhi3ZZ12tOOF3nvpZ3UABFMf9aIzojlERQJw==", + "dev": true, + "dependencies": { + "@antora/expand-path-helper": "~2.0", + "pino": "~8.14", + "pino-pretty": "~10.0", + "sonic-boom": "~3.3" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/lunr-extension": { + "version": "1.0.0-alpha.8", + "resolved": "https://registry.npmjs.org/@antora/lunr-extension/-/lunr-extension-1.0.0-alpha.8.tgz", + "integrity": "sha512-vdBgW3rsvbnmA236kT2Dckh9n0Db5za2/WxiLnFLgZ05ZO1KJQa9+R2WHaIFuGE7bKKbY+lqfM/i3KiezbL9YQ==", + "dependencies": { + "cheerio": "1.0.0-rc.10", + "html-entities": "~2.3", + "lunr": "~2.3", + "lunr-languages": "~1.9" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/navigation-builder": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/navigation-builder/-/navigation-builder-3.1.4.tgz", + "integrity": "sha512-HfH77gDKiL4ZYUWtWtuJnJunWdALDyql198SNcLlD/Vs2ZatO3qucP6YZXSX6k8aqj9XU4L8xkhltr24iDWlkg==", + "dev": true, + "dependencies": { + "@antora/asciidoc-loader": "3.1.4" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/page-composer": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/page-composer/-/page-composer-3.1.4.tgz", + "integrity": "sha512-9eZEqjhC7jgOpJLRIN5kQ3cmy2NiajAq9n4bmZdVsOYUdkyleiOdUSLuxwQOSY0PkKxEQTqBKzAFG9WL1pTODQ==", + "dev": true, + "dependencies": { + "@antora/logger": "3.1.4", + "handlebars": "~4.7", + "require-from-string": "~2.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/playbook-builder": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/playbook-builder/-/playbook-builder-3.1.4.tgz", + "integrity": "sha512-Vf3bx6Wqz4ATrKsYoOqu1UctNu8/H/WSVvrAHgsweoD5vPHElISQ2XH6cyOvRNf93Qn1ckQSgOLjpd9N2KE0aA==", + "dev": true, + "dependencies": { + "@iarna/toml": "~2.2", + "convict": "~6.2", + "js-yaml": "~4.1", + "json5": "~2.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/redirect-producer": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/redirect-producer/-/redirect-producer-3.1.4.tgz", + "integrity": "sha512-1AdPwmCo1VCHpzL9AOgmte6zmzeNffdUXGl3oDE91wsNCNK/deZw4TgImVjou5NY5m34UTprIZSTZ5IsLt5ccQ==", + "dev": true, + "dependencies": { + "vinyl": "~2.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/site-generator": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/site-generator/-/site-generator-3.1.4.tgz", + "integrity": "sha512-RG2w0U+8tljULY7iQqLW2FECaQJguSBd2HhR0exEiw/eHv66q6ANzsYI3AGTmLUqU/F2n30+gSZCeepVyO1gWA==", + "dev": true, + "dependencies": { + "@antora/asciidoc-loader": "3.1.4", + "@antora/content-aggregator": "3.1.4", + "@antora/content-classifier": "3.1.4", + "@antora/document-converter": "3.1.4", + "@antora/file-publisher": "3.1.4", + "@antora/logger": "3.1.4", + "@antora/navigation-builder": "3.1.4", + "@antora/page-composer": "3.1.4", + "@antora/playbook-builder": "3.1.4", + "@antora/redirect-producer": "3.1.4", + "@antora/site-mapper": "3.1.4", + "@antora/site-publisher": "3.1.4", + "@antora/ui-loader": "3.1.4", + "@antora/user-require-helper": "~2.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/site-mapper": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/site-mapper/-/site-mapper-3.1.4.tgz", + "integrity": "sha512-HWtOnxv467sdafG39AxPtEFKrZxkWpBaxmRGzgPELFUdnZxaI4fzeIyVj7CE8AJunVq5KMIqZpca2redLC5CJA==", + "dev": true, + "dependencies": { + "@antora/content-classifier": "3.1.4", + "vinyl": "~2.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/site-publisher": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/site-publisher/-/site-publisher-3.1.4.tgz", + "integrity": "sha512-mBw9eDgtblL54S2NSJ5tbHReA+0tSURFYu7wUTiZ7knnM8c0nyJmcwrOyv5lImaFlPHC3qt1oXuewyhAeqSYDA==", + "dev": true, + "dependencies": { + "@antora/file-publisher": "3.1.4" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/ui-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/ui-loader/-/ui-loader-3.1.4.tgz", + "integrity": "sha512-J1eGOr4bdou6Kb7RfhSNMLwNHPywZ42OB3wUsBFgWtRNDah+iMN1A1OzmtAixcc9FlmKm6oKjyw3TpD9D65hrA==", + "dev": true, + "dependencies": { + "@antora/expand-path-helper": "~2.0", + "braces": "~3.0", + "cache-directory": "~2.0", + "glob-stream": "~7.0", + "gulp-vinyl-zip": "~2.5", + "hpagent": "~1.2", + "js-yaml": "~4.1", + "picomatch": "~2.3", + "should-proxy": "~1.0", + "simple-get": "~4.0", + "vinyl": "~2.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/user-require-helper": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@antora/user-require-helper/-/user-require-helper-2.0.0.tgz", + "integrity": "sha512-5fMfBZfw4zLoFdDAPMQX6Frik90uvfD8rXOA4UpXPOUikkX4uT1Rk6m0/4oi8oS3fcjiIl0k/7Nc+eTxW5TcQQ==", + "dev": true, + "dependencies": { + "@antora/expand-path-helper": "~2.0" + }, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/@asciidoctor/core": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@asciidoctor/core/-/core-2.2.6.tgz", + "integrity": "sha512-TmB2K5UfpDpSbCNBBntXzKHcAk2EA3/P68jmWvmJvglVUdkO9V6kTAuXVe12+h6C4GK0ndwuCrHHtEVcL5t6pQ==", + "dev": true, + "dependencies": { + "asciidoctor-opal-runtime": "0.3.3", + "unxhr": "1.0.1" + }, + "engines": { + "node": ">=8.11", + "npm": ">=5.0.0", + "yarn": ">=1.1.0" + } + }, + "node_modules/@iarna/toml": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", + "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", + "dev": true + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==", + "dev": true, + "dependencies": { + "buffer-equal": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/asciidoctor-opal-runtime": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/asciidoctor-opal-runtime/-/asciidoctor-opal-runtime-0.3.3.tgz", + "integrity": "sha512-/CEVNiOia8E5BMO9FLooo+Kv18K4+4JBFRJp8vUy/N5dMRAg+fRNV4HA+o6aoSC79jVU/aT5XvUpxSxSsTS8FQ==", + "dev": true, + "dependencies": { + "glob": "7.1.3", + "unxhr": "1.0.1" + }, + "engines": { + "node": ">=8.11" + } + }, + "node_modules/async-lock": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.4.0.tgz", + "integrity": "sha512-coglx5yIWuetakm3/1dsX9hxCNox22h7+V80RQOu2XUUMidtArxKoZoOtHUPuR84SycKTXzgGzAUR5hJxujyJQ==", + "dev": true + }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", + "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", + "dev": true, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/cache-directory": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cache-directory/-/cache-directory-2.0.0.tgz", + "integrity": "sha512-7YKEapH+2Uikde8hySyfobXBqPKULDyHNl/lhKm7cKf/GJFdG/tU/WpLrOg2y9aUrQrWUilYqawFIiGJPS6gDA==", + "dev": true, + "dependencies": { + "xdg-basedir": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", + "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", + "dependencies": { + "cheerio-select": "^1.5.0", + "dom-serializer": "^1.3.2", + "domhandler": "^4.2.0", + "htmlparser2": "^6.1.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.6.0.tgz", + "integrity": "sha512-eq0GdBvxVFbqWgmCm7M3XGs1I8oLy/nExUnh6oLqmBditPO9AqQJrkslDpMun/hZ0yyTs8L0m85OHp4ho6Qm9g==", + "dependencies": { + "css-select": "^4.3.0", + "css-what": "^6.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.3.1", + "domutils": "^2.8.0" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/clean-git-ref": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/clean-git-ref/-/clean-git-ref-2.0.1.tgz", + "integrity": "sha512-bLSptAy2P0s6hU4PzuIMKmMJJSE6gLXGH1cntDu7bWJUksvuM+7ReOK61mozULErYvP6a15rnYl0zFDef+pyPw==", + "dev": true + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", + "dev": true + }, + "node_modules/cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, + "node_modules/cloneable-readable/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/cloneable-readable/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/cloneable-readable/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/convict": { + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/convict/-/convict-6.2.4.tgz", + "integrity": "sha512-qN60BAwdMVdofckX7AlohVJ2x9UvjTNoKVXCL2LxFk1l7757EJqf1nySdMkPQer0bt8kQ5lQiyZ9/2NvrFBuwQ==", + "dev": true, + "dependencies": { + "lodash.clonedeep": "^4.5.0", + "yargs-parser": "^20.2.7" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "dev": true, + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/diff3": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/diff3/-/diff3-0.0.3.tgz", + "integrity": "sha512-iSq8ngPOt0K53A6eVr4d5Kn6GNrM2nQZtC740pzIriHtn4pOQ2lyzEXQMBeVcWERN0ye7fhBsk9PbLLQOnUx/g==", + "dev": true + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/duplexify": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", + "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/fast-copy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.1.tgz", + "integrity": "sha512-Knr7NOtK3HWRYGtHoJrjkaWepqT8thIVGAwt0p0aUs1zqkAzXZV4vo9fFNwyb5fcqK1GKYFYxldQdIDVKhUAfA==", + "dev": true + }, + "node_modules/fast-redact": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.3.0.tgz", + "integrity": "sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "node_modules/flush-write-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/flush-write-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/flush-write-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/fs-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-7.0.0.tgz", + "integrity": "sha512-evR4kvr6s0Yo5t4CD4H171n4T8XcnPFznvsbeN8K9FPzc0Q0wYqcOWyGtck2qcvJSLXKnU6DnDyfmbDDabYvRQ==", + "dev": true, + "dependencies": { + "extend": "^3.0.2", + "glob": "^7.2.0", + "glob-parent": "^6.0.2", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.1", + "pumpify": "^2.0.1", + "readable-stream": "^3.6.0", + "remove-trailing-separator": "^1.1.0", + "to-absolute-glob": "^2.0.2", + "unique-stream": "^2.3.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-stream/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/gulp-vinyl-zip": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/gulp-vinyl-zip/-/gulp-vinyl-zip-2.5.0.tgz", + "integrity": "sha512-KPi5/2SUmkXXDvKU4L2U1dkPOP03SbhONTOgNZlL23l9Yopt+euJ1bBXwWrSMbsyh3JLW/TYuC8CI4c4Kq4qrw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "dependencies": { + "queue": "^4.2.1", + "through": "^2.3.8", + "through2": "^2.0.3", + "vinyl": "^2.0.2", + "vinyl-fs": "^3.0.3", + "yauzl": "^2.2.1", + "yazl": "^2.2.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/help-me": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/help-me/-/help-me-4.2.0.tgz", + "integrity": "sha512-TAOnTB8Tz5Dw8penUuzHVrKNKlCIbwwbHnXraNJxPwf8LRtE2HlM84RYuezMFcwOJmoYOCWVDyJ8TQGxn9PgxA==", + "dev": true, + "dependencies": { + "glob": "^8.0.0", + "readable-stream": "^3.6.0" + } + }, + "node_modules/help-me/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/help-me/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/help-me/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hpagent": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-1.2.0.tgz", + "integrity": "sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/html-entities": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.6.tgz", + "integrity": "sha512-9o0+dcpIw2/HxkNuYKxSJUF/MMRZQECK4GnF+oQOmJ83yCVHTWgCH5aOXxK5bozNRmM8wtgryjHD3uloPBDEGw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "dependencies": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "dependencies": { + "is-unc-path": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "dependencies": { + "unc-path-regex": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "dev": true + }, + "node_modules/is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isomorphic-git": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/isomorphic-git/-/isomorphic-git-1.21.0.tgz", + "integrity": "sha512-ZqCAUM63CYepA3fB8H7NVyPSiOkgzIbQ7T+QPrm9xtYgQypN9JUJ5uLMjB5iTfomdJf3mdm6aSxjZwnT6ubvEA==", + "dev": true, + "dependencies": { + "async-lock": "^1.1.0", + "clean-git-ref": "^2.0.1", + "crc-32": "^1.2.0", + "diff3": "0.0.3", + "ignore": "^5.1.4", + "minimisted": "^2.0.0", + "pako": "^1.0.10", + "pify": "^4.0.1", + "readable-stream": "^3.4.0", + "sha.js": "^2.4.9", + "simple-get": "^4.0.1" + }, + "bin": { + "isogit": "cli.cjs" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==", + "dev": true, + "dependencies": { + "flush-write-stream": "^1.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "dev": true + }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==" + }, + "node_modules/lunr-languages": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/lunr-languages/-/lunr-languages-1.9.0.tgz", + "integrity": "sha512-Be5vFuc8NAheOIjviCRms3ZqFFBlzns3u9DXpPSZvALetgnydAN0poV71pVLFn0keYy/s4VblMMkqewTLe+KPg==" + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minimisted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minimisted/-/minimisted-2.0.1.tgz", + "integrity": "sha512-1oPjfuLQa2caorJUM8HV8lGgWCc0qqAO1MNv/k05G4qslmsndV/5WdNZrqCiyqiz3wohia2Ij2B7w2Dr7/IyrA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + } + }, + "node_modules/multi-progress": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/multi-progress/-/multi-progress-4.0.0.tgz", + "integrity": "sha512-9zcjyOou3FFCKPXsmkbC3ethv51SFPoA4dJD6TscIp2pUmy26kBDZW6h9XofPELrzseSkuD7r0V+emGEeo39Pg==", + "dev": true, + "peerDependencies": { + "progress": "^2.0.0" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/now-and-later": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "dev": true, + "dependencies": { + "once": "^1.3.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.1" + } + }, + "node_modules/ordered-read-streams/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/ordered-read-streams/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/ordered-read-streams/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "dev": true + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pino": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/pino/-/pino-8.14.2.tgz", + "integrity": "sha512-zKu9aWeSWTy1JgvxIpZveJKKsAr4+6uNMZ0Vf0KRwzl/UNZA3XjHiIl/0WwqLMkDwuHuDkT5xAgPA2jpKq4whA==", + "dev": true, + "dependencies": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.1.1", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "v1.0.0", + "pino-std-serializers": "^6.0.0", + "process-warning": "^2.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^3.1.0", + "thread-stream": "^2.0.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.0.0.tgz", + "integrity": "sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==", + "dev": true, + "dependencies": { + "readable-stream": "^4.0.0", + "split2": "^4.0.0" + } + }, + "node_modules/pino-abstract-transport/node_modules/readable-stream": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", + "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", + "dev": true, + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/pino-pretty": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-10.0.1.tgz", + "integrity": "sha512-yrn00+jNpkvZX/NrPVCPIVHAfTDy3ahF0PND9tKqZk4j9s+loK8dpzrJj4dGb7i+WLuR50ussuTAiWoMWU+qeA==", + "dev": true, + "dependencies": { + "colorette": "^2.0.7", + "dateformat": "^4.6.3", + "fast-copy": "^3.0.0", + "fast-safe-stringify": "^2.1.1", + "help-me": "^4.0.1", + "joycon": "^3.1.1", + "minimist": "^1.2.6", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^1.0.0", + "pump": "^3.0.0", + "readable-stream": "^4.0.0", + "secure-json-parse": "^2.4.0", + "sonic-boom": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "bin": { + "pino-pretty": "bin.js" + } + }, + "node_modules/pino-pretty/node_modules/readable-stream": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", + "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", + "dev": true, + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/pino-std-serializers": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", + "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==", + "dev": true + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/process-warning": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.3.0.tgz", + "integrity": "sha512-N6mp1+2jpQr3oCFMz6SeHRGbv6Slb20bRhj4v3xR99HqNToAcOe1MFOp4tytyzOfJn+QtN8Rf7U/h2KAn4kC6g==", + "dev": true + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", + "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", + "dev": true, + "dependencies": { + "duplexify": "^4.1.1", + "inherits": "^2.0.3", + "pump": "^3.0.0" + } + }, + "node_modules/queue": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/queue/-/queue-4.5.1.tgz", + "integrity": "sha512-AMD7w5hRXcFSb8s9u38acBZ+309u6GsiibP4/0YacJeaurRshogB7v/ZcVPxP5gD5+zIw6ixRHdutiYUJfwKHw==", + "dev": true, + "dependencies": { + "inherits": "~2.0.0" + } + }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "dev": true + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==", + "dev": true, + "dependencies": { + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true + }, + "node_modules/replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==", + "dev": true, + "dependencies": { + "value-or-function": "^3.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/secure-json-parse": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", + "dev": true + }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/should-proxy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/should-proxy/-/should-proxy-1.0.4.tgz", + "integrity": "sha512-RPQhIndEIVUCjkfkQ6rs6sOR6pkxJWCNdxtfG5pP0RVgUYbK5911kLTF0TNcCC0G3YCGd492rMollFT2aTd9iQ==", + "dev": true + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/sonic-boom": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.3.0.tgz", + "integrity": "sha512-LYxp34KlZ1a2Jb8ZQgFCK3niIHzibdwtwNUWKg0qQRzsDoJ3Gfgkf8KdBTFU3SkejDEIlWwnSnpVdOZIhFMl/g==", + "dev": true, + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true, + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/thread-stream": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.4.1.tgz", + "integrity": "sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg==", + "dev": true, + "dependencies": { + "real-require": "^0.2.0" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "dev": true, + "dependencies": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/through2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==", + "dev": true, + "dependencies": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/to-through": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==", + "dev": true, + "dependencies": { + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unique-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", + "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", + "dev": true, + "dependencies": { + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "^3.0.0" + } + }, + "node_modules/unxhr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unxhr/-/unxhr-1.0.1.tgz", + "integrity": "sha512-MAhukhVHyaLGDjyDYhy8gVjWJyhTECCdNsLwlMoGFoNJ3o79fpQhtQuzmAE4IxCMDwraF4cW8ZjpAV0m9CRQbg==", + "dev": true, + "engines": { + "node": ">=8.11" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "dev": true, + "dependencies": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", + "dev": true, + "dependencies": { + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-fs/node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/vinyl-fs/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/vinyl-fs/node_modules/glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", + "dev": true, + "dependencies": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-fs/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-fs/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/vinyl-fs/node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/vinyl-fs/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/vinyl-fs/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/vinyl-fs/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==", + "dev": true, + "dependencies": { + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3" + } + } + }, + "dependencies": { + "@antora/asciidoc-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/asciidoc-loader/-/asciidoc-loader-3.1.4.tgz", + "integrity": "sha512-ttsPR1J6gt7gGiCPrtfKX6tSbCHztzpRP0t+/6m+o3JCwXnjoD+dCi73hp8UCkyS+EU+GTo/FeXclYjZnUMXhQ==", + "dev": true, + "requires": { + "@antora/logger": "3.1.4", + "@antora/user-require-helper": "~2.0", + "@asciidoctor/core": "~2.2" + } + }, + "@antora/cli": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/cli/-/cli-3.1.4.tgz", + "integrity": "sha512-bLDt10VSOcqsHOM5kubjvx9HfdqzLESWEM4Hv0zOPsG3drXKZM/PkStDj6wVt2J6B4OtruusLH2CETKkd9vfGQ==", + "dev": true, + "requires": { + "@antora/logger": "3.1.4", + "@antora/playbook-builder": "3.1.4", + "@antora/user-require-helper": "~2.0", + "commander": "~10.0" + } + }, + "@antora/content-aggregator": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/content-aggregator/-/content-aggregator-3.1.4.tgz", + "integrity": "sha512-qurPCaV8w6S1u9aN53NWVyznVxo/Tnhiy2gFqQQPPZZkecGiEqiXm2bd6DF5WPDnb1GMWn87qX7b7uwxuJXB3Q==", + "dev": true, + "requires": { + "@antora/expand-path-helper": "~2.0", + "@antora/logger": "3.1.4", + "@antora/user-require-helper": "~2.0", + "braces": "~3.0", + "cache-directory": "~2.0", + "glob-stream": "~7.0", + "hpagent": "~1.2", + "isomorphic-git": "~1.21", + "js-yaml": "~4.1", + "multi-progress": "~4.0", + "picomatch": "~2.3", + "progress": "~2.0", + "should-proxy": "~1.0", + "simple-get": "~4.0", + "vinyl": "~2.2" + } + }, + "@antora/content-classifier": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/content-classifier/-/content-classifier-3.1.4.tgz", + "integrity": "sha512-23/C9uXPCGc7eCyCbr/BnppUzrXuY0uJJsemuVM0CF0woRJ+/Gat0wXwvTvZF4C7Lt1WBKlf2yT0Uk7hDOvg8A==", + "dev": true, + "requires": { + "@antora/asciidoc-loader": "3.1.4", + "@antora/logger": "3.1.4", + "mime-types": "~2.1", + "vinyl": "~2.2" + } + }, + "@antora/document-converter": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/document-converter/-/document-converter-3.1.4.tgz", + "integrity": "sha512-zKpT/I025yHfI0RMnNHDhH24Uj4XVLwIPOjzCWLiogIKXxUkFGltQ55V2Ph7LMysYF7/3RVwpQx3cYhJv5QXBQ==", + "dev": true, + "requires": { + "@antora/asciidoc-loader": "3.1.4" + } + }, + "@antora/expand-path-helper": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@antora/expand-path-helper/-/expand-path-helper-2.0.0.tgz", + "integrity": "sha512-CSMBGC+tI21VS2kGW3PV7T2kQTM5eT3f2GTPVLttwaNYbNxDve08en/huzszHJfxo11CcEs26Ostr0F2c1QqeA==", + "dev": true + }, + "@antora/file-publisher": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/file-publisher/-/file-publisher-3.1.4.tgz", + "integrity": "sha512-pHCy+wOkzjVPRF16fY4AzFcMt2B2c0r+CE5Er1quOhl19jL7wwaw3OmCuzgJ/BmZynDFyerlfLu2MPlWJVL1+Q==", + "dev": true, + "requires": { + "@antora/expand-path-helper": "~2.0", + "@antora/user-require-helper": "~2.0", + "gulp-vinyl-zip": "~2.5", + "vinyl": "~2.2", + "vinyl-fs": "~3.0" + } + }, + "@antora/logger": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/logger/-/logger-3.1.4.tgz", + "integrity": "sha512-E5B9NnZoe4wHOv1MWWYqaGDSOlADHGZd5mZJFvuA0guJCbO3amAhi3ZZ12tOOF3nvpZ3UABFMf9aIzojlERQJw==", + "dev": true, + "requires": { + "@antora/expand-path-helper": "~2.0", + "pino": "~8.14", + "pino-pretty": "~10.0", + "sonic-boom": "~3.3" + } + }, + "@antora/lunr-extension": { + "version": "1.0.0-alpha.8", + "resolved": "https://registry.npmjs.org/@antora/lunr-extension/-/lunr-extension-1.0.0-alpha.8.tgz", + "integrity": "sha512-vdBgW3rsvbnmA236kT2Dckh9n0Db5za2/WxiLnFLgZ05ZO1KJQa9+R2WHaIFuGE7bKKbY+lqfM/i3KiezbL9YQ==", + "requires": { + "cheerio": "1.0.0-rc.10", + "html-entities": "~2.3", + "lunr": "~2.3", + "lunr-languages": "~1.9" + } + }, + "@antora/navigation-builder": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/navigation-builder/-/navigation-builder-3.1.4.tgz", + "integrity": "sha512-HfH77gDKiL4ZYUWtWtuJnJunWdALDyql198SNcLlD/Vs2ZatO3qucP6YZXSX6k8aqj9XU4L8xkhltr24iDWlkg==", + "dev": true, + "requires": { + "@antora/asciidoc-loader": "3.1.4" + } + }, + "@antora/page-composer": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/page-composer/-/page-composer-3.1.4.tgz", + "integrity": "sha512-9eZEqjhC7jgOpJLRIN5kQ3cmy2NiajAq9n4bmZdVsOYUdkyleiOdUSLuxwQOSY0PkKxEQTqBKzAFG9WL1pTODQ==", + "dev": true, + "requires": { + "@antora/logger": "3.1.4", + "handlebars": "~4.7", + "require-from-string": "~2.0" + } + }, + "@antora/playbook-builder": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/playbook-builder/-/playbook-builder-3.1.4.tgz", + "integrity": "sha512-Vf3bx6Wqz4ATrKsYoOqu1UctNu8/H/WSVvrAHgsweoD5vPHElISQ2XH6cyOvRNf93Qn1ckQSgOLjpd9N2KE0aA==", + "dev": true, + "requires": { + "@iarna/toml": "~2.2", + "convict": "~6.2", + "js-yaml": "~4.1", + "json5": "~2.2" + } + }, + "@antora/redirect-producer": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/redirect-producer/-/redirect-producer-3.1.4.tgz", + "integrity": "sha512-1AdPwmCo1VCHpzL9AOgmte6zmzeNffdUXGl3oDE91wsNCNK/deZw4TgImVjou5NY5m34UTprIZSTZ5IsLt5ccQ==", + "dev": true, + "requires": { + "vinyl": "~2.2" + } + }, + "@antora/site-generator": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/site-generator/-/site-generator-3.1.4.tgz", + "integrity": "sha512-RG2w0U+8tljULY7iQqLW2FECaQJguSBd2HhR0exEiw/eHv66q6ANzsYI3AGTmLUqU/F2n30+gSZCeepVyO1gWA==", + "dev": true, + "requires": { + "@antora/asciidoc-loader": "3.1.4", + "@antora/content-aggregator": "3.1.4", + "@antora/content-classifier": "3.1.4", + "@antora/document-converter": "3.1.4", + "@antora/file-publisher": "3.1.4", + "@antora/logger": "3.1.4", + "@antora/navigation-builder": "3.1.4", + "@antora/page-composer": "3.1.4", + "@antora/playbook-builder": "3.1.4", + "@antora/redirect-producer": "3.1.4", + "@antora/site-mapper": "3.1.4", + "@antora/site-publisher": "3.1.4", + "@antora/ui-loader": "3.1.4", + "@antora/user-require-helper": "~2.0" + } + }, + "@antora/site-mapper": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/site-mapper/-/site-mapper-3.1.4.tgz", + "integrity": "sha512-HWtOnxv467sdafG39AxPtEFKrZxkWpBaxmRGzgPELFUdnZxaI4fzeIyVj7CE8AJunVq5KMIqZpca2redLC5CJA==", + "dev": true, + "requires": { + "@antora/content-classifier": "3.1.4", + "vinyl": "~2.2" + } + }, + "@antora/site-publisher": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/site-publisher/-/site-publisher-3.1.4.tgz", + "integrity": "sha512-mBw9eDgtblL54S2NSJ5tbHReA+0tSURFYu7wUTiZ7knnM8c0nyJmcwrOyv5lImaFlPHC3qt1oXuewyhAeqSYDA==", + "dev": true, + "requires": { + "@antora/file-publisher": "3.1.4" + } + }, + "@antora/ui-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/ui-loader/-/ui-loader-3.1.4.tgz", + "integrity": "sha512-J1eGOr4bdou6Kb7RfhSNMLwNHPywZ42OB3wUsBFgWtRNDah+iMN1A1OzmtAixcc9FlmKm6oKjyw3TpD9D65hrA==", + "dev": true, + "requires": { + "@antora/expand-path-helper": "~2.0", + "braces": "~3.0", + "cache-directory": "~2.0", + "glob-stream": "~7.0", + "gulp-vinyl-zip": "~2.5", + "hpagent": "~1.2", + "js-yaml": "~4.1", + "picomatch": "~2.3", + "should-proxy": "~1.0", + "simple-get": "~4.0", + "vinyl": "~2.2" + } + }, + "@antora/user-require-helper": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@antora/user-require-helper/-/user-require-helper-2.0.0.tgz", + "integrity": "sha512-5fMfBZfw4zLoFdDAPMQX6Frik90uvfD8rXOA4UpXPOUikkX4uT1Rk6m0/4oi8oS3fcjiIl0k/7Nc+eTxW5TcQQ==", + "dev": true, + "requires": { + "@antora/expand-path-helper": "~2.0" + } + }, + "@asciidoctor/core": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@asciidoctor/core/-/core-2.2.6.tgz", + "integrity": "sha512-TmB2K5UfpDpSbCNBBntXzKHcAk2EA3/P68jmWvmJvglVUdkO9V6kTAuXVe12+h6C4GK0ndwuCrHHtEVcL5t6pQ==", + "dev": true, + "requires": { + "asciidoctor-opal-runtime": "0.3.3", + "unxhr": "1.0.1" + } + }, + "@iarna/toml": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", + "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", + "dev": true + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==", + "dev": true, + "requires": { + "buffer-equal": "^1.0.0" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "asciidoctor-opal-runtime": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/asciidoctor-opal-runtime/-/asciidoctor-opal-runtime-0.3.3.tgz", + "integrity": "sha512-/CEVNiOia8E5BMO9FLooo+Kv18K4+4JBFRJp8vUy/N5dMRAg+fRNV4HA+o6aoSC79jVU/aT5XvUpxSxSsTS8FQ==", + "dev": true, + "requires": { + "glob": "7.1.3", + "unxhr": "1.0.1" + } + }, + "async-lock": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.4.0.tgz", + "integrity": "sha512-coglx5yIWuetakm3/1dsX9hxCNox22h7+V80RQOu2XUUMidtArxKoZoOtHUPuR84SycKTXzgGzAUR5hJxujyJQ==", + "dev": true + }, + "atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true + }, + "buffer-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", + "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", + "dev": true + }, + "cache-directory": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cache-directory/-/cache-directory-2.0.0.tgz", + "integrity": "sha512-7YKEapH+2Uikde8hySyfobXBqPKULDyHNl/lhKm7cKf/GJFdG/tU/WpLrOg2y9aUrQrWUilYqawFIiGJPS6gDA==", + "dev": true, + "requires": { + "xdg-basedir": "^3.0.0" + } + }, + "call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dev": true, + "requires": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + } + }, + "cheerio": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", + "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", + "requires": { + "cheerio-select": "^1.5.0", + "dom-serializer": "^1.3.2", + "domhandler": "^4.2.0", + "htmlparser2": "^6.1.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "tslib": "^2.2.0" + } + }, + "cheerio-select": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.6.0.tgz", + "integrity": "sha512-eq0GdBvxVFbqWgmCm7M3XGs1I8oLy/nExUnh6oLqmBditPO9AqQJrkslDpMun/hZ0yyTs8L0m85OHp4ho6Qm9g==", + "requires": { + "css-select": "^4.3.0", + "css-what": "^6.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.3.1", + "domutils": "^2.8.0" + } + }, + "clean-git-ref": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/clean-git-ref/-/clean-git-ref-2.0.1.tgz", + "integrity": "sha512-bLSptAy2P0s6hU4PzuIMKmMJJSE6gLXGH1cntDu7bWJUksvuM+7ReOK61mozULErYvP6a15rnYl0zFDef+pyPw==", + "dev": true + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true + }, + "clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", + "dev": true + }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", + "dev": true + }, + "cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "convict": { + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/convict/-/convict-6.2.4.tgz", + "integrity": "sha512-qN60BAwdMVdofckX7AlohVJ2x9UvjTNoKVXCL2LxFk1l7757EJqf1nySdMkPQer0bt8kQ5lQiyZ9/2NvrFBuwQ==", + "dev": true, + "requires": { + "lodash.clonedeep": "^4.5.0", + "yargs-parser": "^20.2.7" + } + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "dev": true + }, + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" + }, + "dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", + "dev": true + }, + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "requires": { + "mimic-response": "^3.1.0" + } + }, + "define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, + "define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "requires": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "diff3": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/diff3/-/diff3-0.0.3.tgz", + "integrity": "sha512-iSq8ngPOt0K53A6eVr4d5Kn6GNrM2nQZtC740pzIriHtn4pOQ2lyzEXQMBeVcWERN0ye7fhBsk9PbLLQOnUx/g==", + "dev": true + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "duplexify": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", + "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", + "dev": true, + "requires": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "fast-copy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.1.tgz", + "integrity": "sha512-Knr7NOtK3HWRYGtHoJrjkaWepqT8thIVGAwt0p0aUs1zqkAzXZV4vo9fFNwyb5fcqK1GKYFYxldQdIDVKhUAfA==", + "dev": true + }, + "fast-redact": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.3.0.tgz", + "integrity": "sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==", + "dev": true + }, + "fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "fs-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true + }, + "get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dev": true, + "requires": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "glob-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-7.0.0.tgz", + "integrity": "sha512-evR4kvr6s0Yo5t4CD4H171n4T8XcnPFznvsbeN8K9FPzc0Q0wYqcOWyGtck2qcvJSLXKnU6DnDyfmbDDabYvRQ==", + "dev": true, + "requires": { + "extend": "^3.0.2", + "glob": "^7.2.0", + "glob-parent": "^6.0.2", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.1", + "pumpify": "^2.0.1", + "readable-stream": "^3.6.0", + "remove-trailing-separator": "^1.1.0", + "to-absolute-glob": "^2.0.2", + "unique-stream": "^2.3.1" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "gulp-vinyl-zip": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/gulp-vinyl-zip/-/gulp-vinyl-zip-2.5.0.tgz", + "integrity": "sha512-KPi5/2SUmkXXDvKU4L2U1dkPOP03SbhONTOgNZlL23l9Yopt+euJ1bBXwWrSMbsyh3JLW/TYuC8CI4c4Kq4qrw==", + "dev": true, + "requires": { + "queue": "^4.2.1", + "through": "^2.3.8", + "through2": "^2.0.3", + "vinyl": "^2.0.2", + "vinyl-fs": "^3.0.3", + "yauzl": "^2.2.1", + "yazl": "^2.2.1" + } + }, + "handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.2" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, + "help-me": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/help-me/-/help-me-4.2.0.tgz", + "integrity": "sha512-TAOnTB8Tz5Dw8penUuzHVrKNKlCIbwwbHnXraNJxPwf8LRtE2HlM84RYuezMFcwOJmoYOCWVDyJ8TQGxn9PgxA==", + "dev": true, + "requires": { + "glob": "^8.0.0", + "readable-stream": "^3.6.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "hpagent": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-1.2.0.tgz", + "integrity": "sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==", + "dev": true + }, + "html-entities": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.6.tgz", + "integrity": "sha512-9o0+dcpIw2/HxkNuYKxSJUF/MMRZQECK4GnF+oQOmJ83yCVHTWgCH5aOXxK5bozNRmM8wtgryjHD3uloPBDEGw==" + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "requires": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "requires": { + "is-unc-path": "^1.0.0" + } + }, + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "requires": { + "unc-path-regex": "^0.1.2" + } + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "dev": true + }, + "is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "isomorphic-git": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/isomorphic-git/-/isomorphic-git-1.21.0.tgz", + "integrity": "sha512-ZqCAUM63CYepA3fB8H7NVyPSiOkgzIbQ7T+QPrm9xtYgQypN9JUJ5uLMjB5iTfomdJf3mdm6aSxjZwnT6ubvEA==", + "dev": true, + "requires": { + "async-lock": "^1.1.0", + "clean-git-ref": "^2.0.1", + "crc-32": "^1.2.0", + "diff3": "0.0.3", + "ignore": "^5.1.4", + "minimisted": "^2.0.0", + "pako": "^1.0.10", + "pify": "^4.0.1", + "readable-stream": "^3.4.0", + "sha.js": "^2.4.9", + "simple-get": "^4.0.1" + } + }, + "joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dev": true, + "requires": { + "readable-stream": "^2.0.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==", + "dev": true, + "requires": { + "flush-write-stream": "^1.0.2" + } + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "dev": true + }, + "lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==" + }, + "lunr-languages": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/lunr-languages/-/lunr-languages-1.9.0.tgz", + "integrity": "sha512-Be5vFuc8NAheOIjviCRms3ZqFFBlzns3u9DXpPSZvALetgnydAN0poV71pVLFn0keYy/s4VblMMkqewTLe+KPg==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true + }, + "minimisted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minimisted/-/minimisted-2.0.1.tgz", + "integrity": "sha512-1oPjfuLQa2caorJUM8HV8lGgWCc0qqAO1MNv/k05G4qslmsndV/5WdNZrqCiyqiz3wohia2Ij2B7w2Dr7/IyrA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "multi-progress": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/multi-progress/-/multi-progress-4.0.0.tgz", + "integrity": "sha512-9zcjyOou3FFCKPXsmkbC3ethv51SFPoA4dJD6TscIp2pUmy26kBDZW6h9XofPELrzseSkuD7r0V+emGEeo39Pg==", + "dev": true, + "requires": {} + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "now-and-later": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "dev": true, + "requires": { + "once": "^1.3.2" + } + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "requires": { + "boolbase": "^1.0.0" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "requires": { + "parse5": "^6.0.1" + } + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pino": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/pino/-/pino-8.14.2.tgz", + "integrity": "sha512-zKu9aWeSWTy1JgvxIpZveJKKsAr4+6uNMZ0Vf0KRwzl/UNZA3XjHiIl/0WwqLMkDwuHuDkT5xAgPA2jpKq4whA==", + "dev": true, + "requires": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.1.1", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "v1.0.0", + "pino-std-serializers": "^6.0.0", + "process-warning": "^2.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^3.1.0", + "thread-stream": "^2.0.0" + } + }, + "pino-abstract-transport": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.0.0.tgz", + "integrity": "sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==", + "dev": true, + "requires": { + "readable-stream": "^4.0.0", + "split2": "^4.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", + "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", + "dev": true, + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + } + } + }, + "pino-pretty": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-10.0.1.tgz", + "integrity": "sha512-yrn00+jNpkvZX/NrPVCPIVHAfTDy3ahF0PND9tKqZk4j9s+loK8dpzrJj4dGb7i+WLuR50ussuTAiWoMWU+qeA==", + "dev": true, + "requires": { + "colorette": "^2.0.7", + "dateformat": "^4.6.3", + "fast-copy": "^3.0.0", + "fast-safe-stringify": "^2.1.1", + "help-me": "^4.0.1", + "joycon": "^3.1.1", + "minimist": "^1.2.6", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^1.0.0", + "pump": "^3.0.0", + "readable-stream": "^4.0.0", + "secure-json-parse": "^2.4.0", + "sonic-boom": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", + "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", + "dev": true, + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + } + } + }, + "pino-std-serializers": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", + "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "process-warning": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.3.0.tgz", + "integrity": "sha512-N6mp1+2jpQr3oCFMz6SeHRGbv6Slb20bRhj4v3xR99HqNToAcOe1MFOp4tytyzOfJn+QtN8Rf7U/h2KAn4kC6g==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", + "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", + "dev": true, + "requires": { + "duplexify": "^4.1.1", + "inherits": "^2.0.3", + "pump": "^3.0.0" + } + }, + "queue": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/queue/-/queue-4.5.1.tgz", + "integrity": "sha512-AMD7w5hRXcFSb8s9u38acBZ+309u6GsiibP4/0YacJeaurRshogB7v/ZcVPxP5gD5+zIw6ixRHdutiYUJfwKHw==", + "dev": true, + "requires": { + "inherits": "~2.0.0" + } + }, + "quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "dev": true + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "dev": true + }, + "remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" + } + }, + "remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==", + "dev": true, + "requires": { + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true + }, + "replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==", + "dev": true, + "requires": { + "value-or-function": "^3.0.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "dev": true + }, + "secure-json-parse": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", + "dev": true + }, + "set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dev": true, + "requires": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "should-proxy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/should-proxy/-/should-proxy-1.0.4.tgz", + "integrity": "sha512-RPQhIndEIVUCjkfkQ6rs6sOR6pkxJWCNdxtfG5pP0RVgUYbK5911kLTF0TNcCC0G3YCGd492rMollFT2aTd9iQ==", + "dev": true + }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true + }, + "simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "dev": true, + "requires": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "sonic-boom": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.3.0.tgz", + "integrity": "sha512-LYxp34KlZ1a2Jb8ZQgFCK3niIHzibdwtwNUWKg0qQRzsDoJ3Gfgkf8KdBTFU3SkejDEIlWwnSnpVdOZIhFMl/g==", + "dev": true, + "requires": { + "atomic-sleep": "^1.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "thread-stream": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.4.1.tgz", + "integrity": "sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg==", + "dev": true, + "requires": { + "real-require": "^0.2.0" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "through2-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "dev": true, + "requires": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, + "to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==", + "dev": true, + "requires": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "to-through": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==", + "dev": true, + "requires": { + "through2": "^2.0.3" + } + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "optional": true + }, + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", + "dev": true + }, + "unique-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", + "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", + "dev": true, + "requires": { + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "^3.0.0" + } + }, + "unxhr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unxhr/-/unxhr-1.0.1.tgz", + "integrity": "sha512-MAhukhVHyaLGDjyDYhy8gVjWJyhTECCdNsLwlMoGFoNJ3o79fpQhtQuzmAE4IxCMDwraF4cW8ZjpAV0m9CRQbg==", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==", + "dev": true + }, + "vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "dev": true, + "requires": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + } + }, + "vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", + "dev": true, + "requires": { + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" + }, + "dependencies": { + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", + "dev": true, + "requires": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + } + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==", + "dev": true, + "requires": { + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ==", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000000..693b2d1e24 --- /dev/null +++ b/package.json @@ -0,0 +1,9 @@ +{ + "devDependencies": { + "@antora/cli": "3.1.4", + "@antora/site-generator": "3.1.4" + }, + "dependencies": { + "@antora/lunr-extension": "^1.0.0-alpha.8" + } +} diff --git a/scripts/update_docs b/scripts/update_docs index 70a704037d..bbd958b43a 100755 --- a/scripts/update_docs +++ b/scripts/update_docs @@ -6,7 +6,7 @@ rev=$(git describe --always) # Build documentation make docs docs_samples (cd gh-pages && jekyll build) -(cd docs && make html) +env CI=true npx antora --stacktrace antora-playbook.yml # Remove temporary gh-pages branch location rm -rf tmp-gh-pages @@ -20,7 +20,7 @@ rm -rf tmp-gh-pages/* $(ls -d tmp-gh-pages/.* | grep -v -E '/\.(\.|git)?$') # Copy generated documentation to temporary dir cp -r gh-pages/_site/. tmp-gh-pages/ # web site main pages -cp -r docs/_build/html/. tmp-gh-pages/docs/ # sphinx language documentation +cp -r build/site/. tmp-gh-pages/docs/ # sphinx language documentation cp -r gh-pages/html tmp-gh-pages/ # naturaldocs library cp -r gh-pages/samples tmp-gh-pages/ # naturaldocs samples diff --git a/supplemental-ui/partials/header-content.hbs b/supplemental-ui/partials/header-content.hbs new file mode 100644 index 0000000000..a5d383026b --- /dev/null +++ b/supplemental-ui/partials/header-content.hbs @@ -0,0 +1,38 @@ +
+ +