From a67c96b2ab4b4c5653ba9ea4ec8a02e3a98beba7 Mon Sep 17 00:00:00 2001 From: Gabryel Reyes Date: Wed, 9 Oct 2024 10:27:40 +0200 Subject: [PATCH 01/14] Set width to 100% --- doc/_static/css/width.css | 3 +++ doc/conf.py | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 doc/_static/css/width.css diff --git a/doc/_static/css/width.css b/doc/_static/css/width.css new file mode 100644 index 0000000..8cb4a30 --- /dev/null +++ b/doc/_static/css/width.css @@ -0,0 +1,3 @@ +.wy-nav-content { + max-width: none; +} \ No newline at end of file diff --git a/doc/conf.py b/doc/conf.py index 4dcab88..9d33810 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -43,7 +43,8 @@ html_static_path = ["_static"] html_css_files = [ - "css/svg.css" + "css/svg.css", + "css/width.css" ] # HTML dark theme options From f86daffbedc69f00677c3e2e5b9ad38a6c068585 Mon Sep 17 00:00:00 2001 From: Gabryel Reyes Date: Wed, 9 Oct 2024 10:28:23 +0200 Subject: [PATCH 02/14] Fixed lock json --- package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index ffa7d9a..7aac6cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "branchdoc_io_test", + "name": "gitWorkInstructions", "lockfileVersion": 3, "requires": true, "packages": { From 38fb19fb5eb32cb7e7f226489fbbcb7463dbb7f7 Mon Sep 17 00:00:00 2001 From: Gabryel Reyes Date: Wed, 9 Oct 2024 10:31:25 +0200 Subject: [PATCH 03/14] Bump version to 1.0.1 --- doc/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/conf.py b/doc/conf.py index 9d33810..14bb0cb 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -13,7 +13,7 @@ project = "gitWorkInstructions" copyright = "2024 - present, NewTec GmbH" author = "NewTec GmbH" -release = "1.0.0" +release = "1.0.1" conf_py_path = "/doc/" # with leading and trailing slashes # -- General configuration --------------------------------------------------- From 661b3f77d739db7fdc129b2888c969cbda6d757f Mon Sep 17 00:00:00 2001 From: Norbert Schulz Date: Wed, 9 Oct 2024 14:02:57 +0200 Subject: [PATCH 04/14] Added submodule versioning article. --- doc/index.rst | 6 + doc/versioning/images/Components.png | Bin 0 -> 32155 bytes .../images/gitmodule_banch_versions.png | Bin 0 -> 11765 bytes doc/versioning/images/gitmodule_entry.png | Bin 0 -> 15278 bytes doc/versioning/images/gitmodules_diffs.png | Bin 0 -> 14389 bytes .../images/submodule_versioning.png | Bin 0 -> 39365 bytes doc/versioning/submod_versioning.md | 999 ++++++++++++++++++ 7 files changed, 1005 insertions(+) create mode 100644 doc/versioning/images/Components.png create mode 100644 doc/versioning/images/gitmodule_banch_versions.png create mode 100644 doc/versioning/images/gitmodule_entry.png create mode 100644 doc/versioning/images/gitmodules_diffs.png create mode 100644 doc/versioning/images/submodule_versioning.png create mode 100644 doc/versioning/submod_versioning.md diff --git a/doc/index.rst b/doc/index.rst index aeee080..30edc45 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -69,3 +69,9 @@ This documentation is intended to introduce the overall branching strategy to be merge bugfix/Button checkout main merge release/v3.0.x tag: "v3.0.0" + +.. toctree:: + :caption: Submodule Based Configuration Managment: + :maxdepth: 2 + + versioning/submod_versioning.md diff --git a/doc/versioning/images/Components.png b/doc/versioning/images/Components.png new file mode 100644 index 0000000000000000000000000000000000000000..cedbb7227d5416af400493c84fb7393fc37723fe GIT binary patch literal 32155 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 literal 0 HcmV?d00001 diff --git a/doc/versioning/images/gitmodule_banch_versions.png b/doc/versioning/images/gitmodule_banch_versions.png new file mode 100644 index 0000000000000000000000000000000000000000..9a10aa5d04f0b47ebc388c394f56e5635728936c GIT binary patch literal 11765 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 aC$z66I8g2#cLg6`c`SI$#3^8Fvy9%;k? literal 0 HcmV?d00001 diff --git a/doc/versioning/images/gitmodule_entry.png b/doc/versioning/images/gitmodule_entry.png new file mode 100644 index 0000000000000000000000000000000000000000..078b7a478314613040f9658c23dfaf806fa6a385 GIT binary patch literal 15278 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 literal 0 HcmV?d00001 diff --git a/doc/versioning/images/submodule_versioning.png b/doc/versioning/images/submodule_versioning.png new file mode 100644 index 0000000000000000000000000000000000000000..e8926537239472f3608f8400a9db790471c6a01a GIT binary patch literal 39365 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 literal 0 HcmV?d00001 diff --git a/doc/versioning/submod_versioning.md b/doc/versioning/submod_versioning.md new file mode 100644 index 0000000..d6aabce --- /dev/null +++ b/doc/versioning/submod_versioning.md @@ -0,0 +1,999 @@ +# Software Configuration Management with GIT Submodules + +- [Abstract](#abstract) +- [Used Terminology](#used-terminology) +- [Git Submodules](#git-submodules) +- [Versioning of Submodules via Branches](#versioning-of-submodules-via-branches) +- [Git Commands for Different Use Case](#git-commands-for-different-use-cases) + +## Abstract + +The goal of configuration management is to manage and maintain all +components used for the creation of a software system, so that all +users of this software work with defined versions. +This article describes a method using the GIT version control system and +submodules to implement detailed versioning of asofware based system. +The basic idea of this method is to divide a software system into +components that are individually versioned. It is suitable for projects +with high functional safety requirements. The administrative overhead +for all project participants should be kept as low as possible. The +configuration should remain simple to change and document. + +## Used Terminology + +### Repository + +A repository in this method is a "standard" Git repository. +All items stored inside such a repository share the version history and +are versioned together "as a whole". This means that each component with +individual versioning needs its own GIT repository. + +### Reference + +A reference is a GIT submodule definition to a commit +inside another GIT repository. These are managed with GIT commands or +manual editing of the .gitmodules file. The anatomy of such a reference +in .gitmodules looks like this: + +![image](./images/gitmodule_entry.png) + +Each used submodule is defined by such a section within the +.gitmodules file. +The "submodule" line holds the name of the submodule. By default it is +the same as the path entry, but can be customized (--name option for +submodule add). The entries for "path" and "url" are always present, +branch is optional. + +- The Path field determines the file path where the submodule will apear + within the working copy of the referencing repository. +- The url field is the access path to the submodule repository. It is + the same URL that is used for a "git clone" of the submodule + repository.. +- The "branch" field is optional. It only exists if you want the base + repository to follow a branch of the submodule. It will be used + consistently later when applying this method. + +### Components + +A component is defined as a part of a system that can be versioned +individually. A complete system is created by assembling all components +with specific versions. The division of a system into individual +components is defined at project level. The method only defines an +abstract component model with three hierarchical levels: + +![image](./images/Components.png) + +#### Base Component + +A "Base" component represents the complete system as a top-level +element.  It defines the complete system as a composition based on +references to other components. Creating a working copy of the system +always starts with this component. Most project use exactly one base +component. Multiple base components can be useful, if a project contains +independent sub-projects. A base component consists of + +- The basic system content of the project, for example the directory + tree, project level documentation and scripts for project management + (tools, build scripts ....) + +- References to other versioned components. + +#### Subsystem Component + +A "subsystem" is a composition of components similar to a base +component.  It supports the creation of versioned subsystems, which in +turn consist of components. An example of such a subsystem component is +a communication stack that is composed of services, protocols and device +drivers. The use of subsystems must be decided at the project level. +They allow for a finer structuring of the system, but also increase the +effort required for its configuration. For each subsystem, the +references to its components must be maintained in addition to those of +the base component. The content of a subsystem component is analogous to +the base component, but limited to the scope of the subsystem. + +#### Component + +A "component" forms the lowest level in the hierarchy. It represents a +partial aspect of the complete system that is no longer subdivided. It +contains only one a file tree with no further references to other +components. + +## Git Submodules + +### Introduction + +This configuration method is based on the GIT Submodule functionality +for the recursive composition of GIT repositories. This functionality is +applied 1:1 to the composition of components via references. There is no +separate tooling required. Any GIT tutorial can be used to get a basic +understanding of the GIT submodules (Example: +[https://git-scm.com/book/en/v2/Git-Tools-Submodules](https://git-scm.com/book/en/v2/Git-Tools-Submodules)). +A disadvantage of GIT submodules is the need to deal with additional GIT +commands or options for standard operations such as "clone" and +"checkout" of branches (e.g. "git checkout development +**--recurse-submodules** "). But this is defined by GIT and not caused +by this methodology. + +### Complexity of Submodule Versioning + +GIT manages submodules in two distinct places within a repository: + +- Via the .gitmodules file in the root directory of a repository +- Within the repository index under .git/modules and in .git/config. + +The settings in the .gitmodules file are under version control and +visible to a user in the working copy. But sadly this file is primarily +used to register submodules (URL + checkout path). The effectively used +version is a reference to a commit id of the submodule, which is stored +in the index and not in the .gitmodules file. This leads to the +following problems: + +- The contents of the .gitmodules file does not contain all the + information about a submodule configuration. +- It is not possible to specify the commit id via a tag within the + .gitmodules file. +- The GIT submodule commands only show commit hashes. Used labels and + branches must be determined via additional detours. + +This complicates both the configuration and the documentation of the +used versions for a complete system. Ideally this should be visible +from a central location, e.g.  within the .gitmodules files. +Unfortunately tags are not supported there to request defined +versions of submodules. An alternative to the missing tags support is +possible via branches by using the optional "branch" entry. This avoids +the problems above without having to invent additional scripting/tooling +for the versioning. It can then be managed completely via .gitmodules +based on branches. + +## Versioning of Submodules via Branches + +The central idea of the method is a consequent use of branches for +submodules for both, development and configuration management. The +versions of the components are controlled **only** using "branch" +entries in .gitmodules. This restriction has the following benefits: + +- The configuration of the complete system is entirely defined by the + .gitmodules files in the base component and any subsystem component. +- The component configuration is documented and easily readable by + everyone when checking out a configuration. +- The configuration documentation is ensured to be correct as it is also + read and used by the GIT operations. +- The workflows for creating development and release versions are the + same. + +Example: + +![image](./images/gitmodule_banch_versions.png) + +In this example, the system uses two submodules named "subm/a" and +"subm/b". Each one is pointing to a branch within its subsystem +repository. + +### Tagging and Branching of Submodule Versions + +The used version of a component is typically marked by a tag. A tag is +hardwired to a commit, which then reliably represents the desired +state of this version. GIT unfortunately only supports branches and no +tags within the .gitmodules file. This method therefore uses branches as +an alternative to the tag in versioning. GIT then follows ("tracks") +this branch, which means that the submodule commit of the branch HEAD +will get used. This leads to an obvious problem compared to tags usage. +Pushes to a branch change its HEAD and as such leave the originally +versioned commit. This problem can be mitigated as follows. + +- GIT repository hosting environments like Github or BitBucket support + rights management for branches. It is possible to prohibit the + modification of certain branches or restrict them to privileged users. + A branch behaves then logically in the same way as a tag. It always + represents the same commit. +- The ability to change a release branch may even be desirable if bug + fixes are to be performed during release phases. However, further + changes after the release phase need to be avoided. +- An additional release **Tag** gets created that is pointing to the + same commit as the branch HEAD. The "git submodule status" command + then shows, if the branch has moved away from this label by further + commits. This allows an unintentional change to be detected, for + example by a script inside an CI system. + +### Creating a Component Version + +When a component is ready for versioning, the following steps are +performed: + +1. A release tag is created on the targeted commit: "git tag -m + "Release X.Y.Z" VX.Y.Z \" +2. A release branch is created from the above release tag: "git branch + release/VX.Y.Z VX.Y.Z" +3. The tags and the branch are "pushed". + +A successful creation of a component version will then looks like this: + +![image](./images/submodule_versioning.png) + +There is a label and a release branch for each release. The release +branches are pushed. + +### Live Example + +A demo repository for demonstrating the submodule versioning with +branches is available in BitBucket. The clone URL is +https://bitbucket.org/nhjschulz/base.git. + +#### Create a local clone of the repo example including the submodules: + +```bash +$ git clone https://bitbucket.org/nhjschulz/base.git --recurse-submodules +Cloning into 'base'... +<..> +Submodule path 'subm/a': checked out 'c776b6f3ae2e58de0b1dd05302b48004b23492c5' +Submodule path 'subm/b': checked out 'ee28a60fabf10470991d83615021650987885c71' +$ cd base$ git branch -a +* main +remotes/origin/HEAD -> origin/main +remotes/origin/development +remotes/origin/main +remotes/origin/release/V0.0.1 +remotes/origin/release/V0.1.0 +``` + +Important is the use of the "--recurse-submodules" option for the clone command. +The submodules will not be loaded in the context of cloning without this +option. But they can still be loaded later on using additional GIT +commands. +In addition to the "main" branch, the repository also contains release +branches and a "development" branch. + +#### Checkout Release V0.0.1 + +```bash +$ git checkout release/V0.0.1 --recurse-submodules +branch 'release/V0.0.1' set up to track 'origin/release/V0.0.1'. +Switched to a new branch 'release/V0.0.1' +$ git submodule status + 1cc129c0c4bba38384149e53a1143b8b4a370a30 subm/a (V0.0.1) + ee28a60fabf10470991d83615021650987885c71 subm/b (V0.0.1) +``` + +The repository working copy is now represents the release V0.0.1 state. +The submodule repositories are also using "initial" version number. +Note that each submodule uses its own "release/V0.0.1" branch here. + +#### Checkout Release V0.1.0 + +```bash +$ git checkout release/V0.1.0 --recurse-submodules +branch 'release/V0.1.0' set up to track 'origin/release/V0.1.0'. +Switched to a new branch 'release/V0.1.0' +$ git submodule status + c776b6f3ae2e58de0b1dd05302b48004b23492c5 subm/a (V0.1.0) + ee28a60fabf10470991d83615021650987885c71 subm/b (V0.0.1) + ``` +The switch to release V0.1.0 also changed the version of submodule +"subm/a". It also advanced to V0.1.0. The second submodule "subm/b" +didn't switch in this version and is still using the V0.0.1. + +#### Checkout a Development Branch + +```bash +$ git checkout development --recurse-submodules +branch 'development' set up to track 'origin/development'. +Switched to a new branch 'development' +$ git submodule status + 382a28f0d54609483a6843c5f13d879868b7b809 subm/a (V0.1.0-2-g382a28f) + ef9039e996aba89c30c75fecd8fb0a82e32bc1bf subm/b (V0.0.1-4-gef9039e) + ``` + +The switch to branch development has affected both submodules. The +cryptic output **V0.1.0-2-g382a28f** in this case means that we are two +commits behind the label V0.1.0 on commit "382a28f...". It shows +that we no longer have tagged versiones of the submodules in our working +copy. But since we're on a "development" branch, that's probably what we +expect. We likely got the latest state of these components now. + +#### Versioning via .gitmodules + +The versioning of complete demo system got defined exclusively by the +base component (there had been no additional subsystem components). +Release branches of the base component refer to well defined versions of +the submodule inside the .gitmodules file. Here is an overview of the +various .gitmodules contents of the branches in the base component. They +differ only in the value of the branch field. This is exactly the +desired effect of this method. The .gitmodules file together with the +base component version define and documents the versioning of the entire +system. +![image](./images/gitmodules_diffs.png) + +## Git Commands for Different Use Cases + +This section shows GIT command examples for various versioning use +cases. In many cases, there are alternative commands that lead to same +results. The commands shown here are considered examples to get started +using submodule versioning. Advanced users may follow other routes or +add scripts for automation. Commands using **bold font** in the left +column are to be executed inside the folder of the submodule component. +Otherwise the base component folder will be used. + +### Creating a Repository with Submodules + + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CommandsDescriptionExample
mkdir <name>Creation of an empty folder for the base component named "name" + + $ mkdir basis +
cd <name>Switching into the base component repository. + + $ cd basis
git initCreation of a new Git Repository +

+ + $ git init + Initialized empty Git repository in + /home/norbert/basis/.git/ +

git submodule add <repo> <path>Adding submodules. This command is repeated for each submodule. + + $ git submodule add https://bitbucket.org/nhjschulz/subm_a.git submod/a + Cloning into '/home/norbert/basis/submod/a'... + remote: Enumerating objects: 36, done. + remote: Counting objects: 100% (36/36), done. + remote: Compressing objects: 100% (26/26), done. + remote: Total 36 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0) + Receiving objects: 100% (36/36), done. +
git statusCheck the current status. Adding submodules resulted in changes that +need to be checked in.
A directory got created for each submodule and +the .gitmodules file was created or extended.
+ + $ git status + On branch master + + No commits yet + + Changes to be committed: +   (use "git rm --cached ..." to unstage) +         new file:   .gitmodules +         new file:   submod/a +
git commit -a -m "<msg>"Check-in and commit of the modified submodule definitions. + + $ git commit -a -m "Added Submodule  https://bitbucket.org/nhjschulz/subm_a.git" + [master (root-commit) 1054429] Added Submodule  https://bitbucket.org/nhjschulz/subm_a.git +  2 files changed, 4 insertions(+) +  create mode 100644 .gitmodules +  create mode 160000 submod/a +
+ +### Cloning a Repo with Submodules + + +++++ + + + + + + + + + + + + + + +
CommandsDescriptionExample
git clone <url>--recurse-submodules

Initial cloning of a repository including all submodules. This is +achieved by using the "--recurse-submodules" option.

+ +

Use the following commands if "--recurse-submodules" has been +forgotten during clone. This option is primarily a convenience to do +this automatically:

+

$ git submodule init
+Submodule 'subm/a' ((https://bitbucket.org/nhjschulz/subm_a.git) registered for path +'subm/a'
+Submodule 'subm/b' (https://bitbucket.org/nhjschulz/subm_b.git) registered for path +'subm/b

+

'$ git submodule update

+

Cloning into '/home/norbert/submod_cfgmgmt/base/subm/a'...
+Cloning into '/home/norbert/submod_cfgmgmt/base/subm/b'...
+Submodule path 'subm/a': checked out +'c776b6f3ae2e58de0b1dd05302b48004b23492c5'
+Submodule path 'subm/b':checked out 'ee28a60fabf10470991d83615021650987885c71'

+
+ + $ git clone https://bitbucket.org/nhjschulz/base.git --recurse-submodules + Cloning into 'base'... + remote: Enumerating objects: 34, done. + remote: Counting objects: 100% (34/34), done. + remote: Compressing objects: 100% (31/31), done. + remote: Total 34 (delta 9), reused 0 (delta 0), pack-reused 0 (from 0) + Receiving objects: 100% (34/34), done. + Resolving deltas: 100% (9/9), done. + Submodule 'subm/a' (https://bitbucket.org/nhjschulz/subm_a.git) registered for path 'subm/a' + Submodule 'subm/b' (https://bitbucket.org/nhjschulz/subm_b.git) registered for path 'subm/b' + Cloning into '/home/norbert/submod_cfgmgmt/base/subm/a'... + remote: Enumerating objects: 36, done. + remote: Counting objects: 100% (36/36), done. + remote: Compressing objects: 100% (26/26), done. + remote: Total 36 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0) + Receiving objects: 100% (36/36), done. + Cloning into '/home/norbert/submod_cfgmgmt/base/subm/b'... + remote: Enumerating objects: 29, done. + remote: Counting objects: 100% (29/29), done. + remote: Compressing objects: 100% (21/21), done. + remote: Total 29 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0) + Receiving objects: 100% (29/29), done. + Resolving deltas: 100% (1/1), done. + Submodule path 'subm/a': checked out 'c776b6f3ae2e58de0b1dd05302b48004b23492c5' + Submodule path 'subm/b': checked out 'ee28a60fabf10470991d83615021650987885c71' ' +
+ +#### Updating the Repository + + +++++ + + + + + + + + + + + + + + + + + + + +
CommandsDescriptionExample
git pullThe base repository is updated by a pull. It updates the base +component  working copy, but does not touch the submodules yet. + + $ git pull + remote: Enumerating objects: 1, done. + remote: Counting objects: 100% (1/1), done. + remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0) + Unpacking objects: 100% (1/1), 149 bytes | 149.00 KiB/s, done.
git submodule update --init --recursive --remoteThe submodules are updated to the commits of the branch HEADs as +defined by the .gitmodules file. + + $ git submodule update --init --recursive --remote + Submodule path 'subm/a': checked out'382a28f0d54609483a6843c5f13d879868b7b809' +
+ +```{note} +Git pull also offers a "--recurse-submodules" option, which automatically adjusts the submodules as well. However, this only works with already known submodules. If new entries appear in .gitmodules with the pull, they will not be processed and a "submodule update" will still be necessary. It is currently more safe to go with the sequence of pull and "submodule update". | +``` +(changing-a-submodule-branch)= +#### Changing a Submodule Branch + +This scenario describes the change of a submodule to another existing +branch. + +- Integrators use it to update submodules to point to new versions. In + this case, the base component should be on an integration branch. +- Developers use this to set submodules to a development branch for + further development. In this case, the base component should be also + on a development branch (e.g. feature/x or development). + + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CommandsDescriptionExample
git checkout <branch>Set the base component to the target branch (integration or +development branch). + + $ git checkout development + Switched to branch 'development' + Your branch is up to date with 'origin/development'. +
git submodule set-branch --branch <branch> <module>Create a branch entry for a submodule in .gitmodules. This command +is repeated for all submodules whose branch is to be switched. + + $ git submodule set-branch --branch development  subm/a +
git diff

With git diff you can see that the branch of the +submodule has been changed inside .gitmodules.

+ +```{note} +Only the entry in the .gitmodules file has been adjusted. The +submodule versions in the working copy have not (yet) changed. +``` +
+ + $ git diff + diff --git a/.gitmodules b/.gitmodules + index 7cb7f77..01af15d 100644 + --- a/.gitmodules + +++ b/.gitmodules + @@ -1,7 +1,7 @@ +   [submodule "subm/a"] + path = subm/a + url = https://bitbucket.org/nhjschulz/subm_a.git + -   branch = release/V0.1.0
+ +   branch = development
+ [submodule "subm/b"]
+ path = subm/b
+ url = https://bitbucket.org/nhjschulz/subm_b.git +
git submodule update --recursive --remoteApply the changes in .gitmodules to the submodules. This sets the +commit reference in the index to the HEAD of the branch and checks it +out. The "--remote" causes changes from the upstream submodule repository +to be fetched  first, and then switch to the HEAD of the branches. + + $ git submodule update --recursive --remote + Submodule path 'subm/a': checked out '382a28f0d54609483a6843c5f13d879868b7b809' +
git statusA status check shows that we need to check in the changes to +.gitmodules and the and the module's directory. At least .gitmodules and +all changed submodule folders must be checked in. + + $ git status + On branch main + Your branch is up to date with 'origin/main'. + + Changes not staged for commit: + (use "git add ..." to update what will be committed) + (use "git restore ..." to discard changes in working directory) + modified:   .gitmodules + modified:   subm/a (new commits) +
git commit -a -m "<msg>"Check in of the submodule branch changes. + + $ git commit -a -m "Changed Submodule A to development branch" + [main d695de1] Changed Submodule A to development branch + 2 files changed, 2 insertions(+), 2 deletions(-) +
+ +### Working on a Submodule Patch + +A GIT submodule is a normal GIT repository. It is only located within a +base repository, which monitors it for modifications. If you switch into +a submodule directory, all GIT commands for managing the submodule +repository are available. A special situation arises here, as submodules +are set to a specific commit during update/checkout from the base +repository. GIT calls this “detached HEAD” as there is no branch +context. To work in a submodule, it needs first to be switched back to a +branch. Unfortunately, the "branch" specification of the .gitmodules +file does not also cause this branch to be set.  Only the HEAD commit of +the branch got checked out. You are on the same commit as the branch +HEAD, but still "detached" from branches. + +The following scenario assumes strict version control at the component +level.  This means that all components are set to released versions and +you have a defined configuration at the beginning. A component +(submodule) is now to be extended from this state. + + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CommandsDescriptionExample
git checkout <version>Check out the desired version in the base component. + + $ git checkout release/V0.1.0 + Switched to branch 'release/V0.1.0' + Your branch is up to date with 'origin/release/V0.1.0'. +
cd <submodule>Switch into the component you want to edit + + $ cd subm/a +

git status

+

git log <ID> -n 1

Check the status of the component. As expected, we are on a +commit with no branch context.

+

The log command shows that this commit belongs to the V0.1.0 tag  .  +Since we want to add a feature to this version, we create a new branch +for it in the next step. +

+ + $ git status + HEAD detached at c776b6f + nothing to commit, working tree clean + + $ git log c776b6f -n 1 + commit c776b6f3ae2e58de0b1dd05302b48004b23492c5 (HEAD, tag: V0.1.0,origin/release/V0.1.0, release/V0.1.0) + Author: Norbert Schulz <github@schulznorbert.de + Date:   Mon Sep 30 16:23:33 2024 +0200 + +     Update 8 on dev branch +
git checkout -b <name> <tag>Create a new branch to edit/update the component. Committing and +pulling of changes is possible after this step. + + $ git checkout -b feature/new V0.1.0 + Switched to a new branch 'feature/new' + + $ git status + On branch feature/new + nothing to commit, working tree clean +
<edit>"Featue New" gets implemented here. + + $ echo "Feature/new is here" > README.md (http://README.md) +
git commit -a -m "<msg>"Check-in of the changes. + + $ git commit -a -m "Added Feature New" + [feature/new 4cb7e76] Added Feature New + 1 file changed, 1 insertion(+), 1 deletion(-) +
+ +The changes inside the submodule have impact on the base repository as well. +A "git status" in the base repository returns the following: + +```bash +$ git status +On branch release/V0.1.0 +Your branch is up to date with 'origin/release/V0.1.0'. + +Changes not staged for commit: +  (use "git add \..." to update what will be committed) +  (use "git restore \..." to discard changes in working +directory) +        modified:   subm/a (new commits) + +no changes added to commit (use "git add" and/or "git commit -a") +``` + +The base repository has detected that we are now on a different commit +in the modified submodule. If you want to share the new variant, **you +should not check in and push the changed folder** **now**. This will +create a contradiction between .gitmodules and the index commit link. +The previous version branch is still listed in .gitmodules, but the +commit hash in the submodule is the HEAD of the new branch. Possible +options to handle this situation are: + +- Create a development branch in the base module and update the feature + branch of the submodule inside .gitmodules and push. This creates a + "tracking development branch" that can be shared with other + developers. +- Create a new version of the submodule for integration and discard the + local changes with "git submodule update --init --remote --recursive". + A integrator then later generates an update of the base repository + that targets the new version of the submodule. + +#### Creating a Submodule Version + + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CommandsDescriptionExample
cd <submod-dir>Switch to the submodule to be versioned, + + $ cd subm/a +

git fetch

+

git log

Determine the commit hash to be versioned. This step is optional if +the hash is already known. The "git fetch" ensures that all existing +hashes are also known in the local repository. + + $ git fetch + $ git log + commit 382a28f0d54609483a6843c5f13d879868b7b809 (HEAD, origin/development) + Author: Norbert Schulz + Date: Mon Sep 30 16:23:33 2024 +0200 + + Update 10 on dev branch + + commit 7f80e15fb9fdddbce08a4107082ecd6c49061bb1 + Author: Norbert Schulz + Date: Mon Sep 30 16:23:33 2024 +0200 + + Update 9 on dev branch + ... +
git tag  -m "version <version>" +<version_tag_name> <hash>Assign a version tag for the desired commit. In the example it is +V2.0.0. + + $ git tag -m "Release V2.0.0" V2.0.0 382a28f0d54609483a6843c5f13d879868b7b809 +
git branch release/<version> +<version_tag_name>Create a version branch for the tag you just created. + + $ git branch release/V2.0.0 V2.0.0 +
git push  --set-upstream origin +<local_branch_name>:<remote_branch_name>Make the new branch known in the "upstream" repository "origin". The +last parameter contains the branch name twice, separated by a colon. The +name on the left is the banch name in the local repository. The right +name will be the new branch in the "upstream" repository. + + $ git push --set-upstream origin release/V2.0.0:release/V2.0.0 + To https://bitbucket.org/nhjschulz/subm_a.git + (https://bitbucket.org/nhjschulz/subm_a.git) +  * [new branch]      release/V2.0.0 -> release/V2.0.0 + branch 'release/V2.0.0' set up to track 'origin/release/V2.0.0'. +
git push origin tag <version_tag_name>Make the release tag known to the "upstream" origin repository. A +"normal" push does not transfer tags. + + $ git push origin tag V2.0.0 + Enumerating objects: 1, done.Counting objects: 100% (1/1), done. + Writing objects: 100% (1/1), 169 bytes | 169.00 KiB/s, done. + Total 1 (delta 0), reused 0 (delta 0), pack-reused0 + To https://bitbucket.org/nhjschulz/subm_a.git +  * [new tag]         V2.0.0 +
+ +To use the new version in the base repository, use the commands +from [Changing a Submodule Branch](#changing-a-submodule-branch) and use +the new branch name there. + +#### Creating a New System Version + +Creating a complete system version starts by creating a new version for +the base component. In this new version, the .gitmodules file will be +edited to update the references to new versions  (=branches) of the +submodule components. The new versions for the submodules must already +be available before the update of the base component. + + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CommandsDescriptionExample
git checkout <Integrations Branch>In the base repository, the integration branch is checked out. + + $ git checkout integration + Switched to branch 'integration' +
<update der Submodule Versionen>On the Integrations branch, the .gitmodules file is edited. The +"branch" entries for components with new versions are adjusted. In the +example, the version of the subm/a component has been increased + + $ vi .gitmodules$ git diff + diff --git a/.gitmodules b/.gitmodules + index 7cb7f77..62afcf6 100644 + --- a/.gitmodules + +++ b/.gitmodules + @@ -1,7 +1,7 @@ + [submodule "subm/a"] + path = subm/a + url = https://bitbucket.org/nhjschulz/subm_a.git + -   branch = release/V0.1.0 + + branch = release/V2.0.0 + [submodule "subm/b"] + path = subm/b + url = https://bitbucket.org/nhjschulz/subm_b.git +
$ git submodule update --init --remote --recursive

The working copy of the integration branch is updated to the new +component version. The "git status" shows the changes in the submodules +(only subm/a" has changed here).

+

A integrator may now perform smoke tests on this configuration and +check it in if successful.

+ + $ git submodule update --init --remote --recursive + Submodule path 'subm/a': checked out '382a28f0d54609483a6843c5f13d879868b7b809' + + $ git status + On branch integration + Changes not staged for commit: +   (use "git add ..." to update what will be committed) + (use "git restore ..." to discard changes in working directory) +         modified:   .gitmodules +         modified:   subm/a (new commits) + no changes added to commit (use "git add" and/or "git commit -a") +

git commit -a -m "<msg>"

+

git push

The changes of the integration branch are checked into git and +pushed.
+Further tests can now be run on the integration branch, or a new version +can be created right away for testers to work with.
+ + $ git commit -a -m "Preparing Release v2.0.0" + [integration 3b811e2] Preparing Release v2.0.0 + 2 files changed, 2 insertions(+), 2 deletions(-) + + $ git push + Enumerating objects: 7, done. + Counting objects: 100% (7/7), done. + Delta compression using up to 22 threads + Compressing objects: 100% (4/4), done. + Writing objects: 100% (4/4), 391 bytes | 391.00 KiB/s, done. + Total 4 (delta 2), reused 0 (delta 0), pack-reused 0 +

git tag -m "Created version <version>" +<tag_version>

+

git push origin tag <tag_version>

A new base component version is created by setting a tag. Unlike +submodules, no branch necessarily has to be created here. The base +component is not included in .submodules. + + $ git tag -m "Created version V2.0.0" V2.0.0 + + $ git push origin tag V2.0.0 +  * [new tag]         V2.0.0 -> V2.0.0 +

git branch release/<version> <tag_version>

+

git push  --set-upstream origin +<local_branch_name>:<remote_branch_name>

Optional: Create a release branch for the new version: + + $ git branch release/V2.0.0 V2.0.0 + + $ git push --set-upstream origin release/V2.0.0:release/V2.0.0 + * [new branch]      release/V2.0.0 ->; release/V2.0.0 + branch 'release/V2.0.0' set up to track 'origin/release/V2.0.0'. +
From 85743d82bec46af0ae861806da39e96e223777b8 Mon Sep 17 00:00:00 2001 From: Norbert Schulz Date: Wed, 9 Oct 2024 15:09:43 +0200 Subject: [PATCH 05/14] Mermaid update to 11.2.1 Updating mermaid due to runner errors in github actions. --- package-lock.json | 2122 +++++++++++++++++++++++++-------------------- package.json | 2 +- 2 files changed, 1196 insertions(+), 928 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7aac6cd..b47057f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,15 +5,39 @@ "packages": { "": { "dependencies": { - "@mermaid-js/mermaid-cli": "^10.9.1" + "@mermaid-js/mermaid-cli": "^11.2.1" + } + }, + "node_modules/@antfu/install-pkg": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-0.4.1.tgz", + "integrity": "sha512-T7yB5QNG29afhWVkVq7XeIMBa5U/vs9mX69YqayXypPRmYzUmzwnYltplHmPtZ4HPCn+sQKeXW8I47wCbuBOjw==", + "license": "MIT", + "dependencies": { + "package-manager-detector": "^0.2.0", + "tinyexec": "^0.3.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@antfu/utils": { + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.10.tgz", + "integrity": "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" } }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz", + "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==", + "license": "MIT", + "peer": true, "dependencies": { - "@babel/highlight": "^7.24.7", + "@babel/highlight": "^7.25.7", "picocolors": "^1.0.0" }, "engines": { @@ -21,19 +45,23 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz", + "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==", + "license": "MIT", + "peer": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz", + "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==", + "license": "MIT", + "peer": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", + "@babel/helper-validator-identifier": "^7.25.7", "chalk": "^2.4.2", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" @@ -46,6 +74,8 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "peer": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -57,6 +87,8 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", + "peer": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -70,6 +102,8 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "peer": true, "dependencies": { "color-name": "1.1.3" } @@ -77,152 +111,188 @@ "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT", + "peer": true }, "node_modules/@braintree/sanitize-url": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.4.tgz", - "integrity": "sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==" + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.1.0.tgz", + "integrity": "sha512-o+UlMLt49RvtCASlOMW0AkHnabN9wR9rwCCherxO0yG4Npy34GkvrAqdXQvrhNs+jh+gkK8gB8Lf05qL/O7KWg==", + "license": "MIT" + }, + "node_modules/@chevrotain/cst-dts-gen": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@chevrotain/cst-dts-gen/-/cst-dts-gen-11.0.3.tgz", + "integrity": "sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==", + "license": "Apache-2.0", + "dependencies": { + "@chevrotain/gast": "11.0.3", + "@chevrotain/types": "11.0.3", + "lodash-es": "4.17.21" + } + }, + "node_modules/@chevrotain/gast": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@chevrotain/gast/-/gast-11.0.3.tgz", + "integrity": "sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q==", + "license": "Apache-2.0", + "dependencies": { + "@chevrotain/types": "11.0.3", + "lodash-es": "4.17.21" + } + }, + "node_modules/@chevrotain/regexp-to-ast": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@chevrotain/regexp-to-ast/-/regexp-to-ast-11.0.3.tgz", + "integrity": "sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA==", + "license": "Apache-2.0" + }, + "node_modules/@chevrotain/types": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-11.0.3.tgz", + "integrity": "sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ==", + "license": "Apache-2.0" + }, + "node_modules/@chevrotain/utils": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@chevrotain/utils/-/utils-11.0.3.tgz", + "integrity": "sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==", + "license": "Apache-2.0" + }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", + "license": "MIT" + }, + "node_modules/@iconify/utils": { + "version": "2.1.33", + "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-2.1.33.tgz", + "integrity": "sha512-jP9h6v/g0BIZx0p7XGJJVtkVnydtbgTgt9mVNcGDYwaa7UhdHdI9dvoq+gKj9sijMSJKxUPEG2JyjsgXjxL7Kw==", + "license": "MIT", + "dependencies": { + "@antfu/install-pkg": "^0.4.0", + "@antfu/utils": "^0.7.10", + "@iconify/types": "^2.0.0", + "debug": "^4.3.6", + "kolorist": "^1.8.0", + "local-pkg": "^0.5.0", + "mlly": "^1.7.1" + } }, "node_modules/@mermaid-js/mermaid-cli": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/@mermaid-js/mermaid-cli/-/mermaid-cli-10.9.1.tgz", - "integrity": "sha512-ajpGUKmB5YbRRzrFR+0dbykF9mTvce4FpHWGYPYTry8ZsOgP6h7SUnojyCJDGgbReCnArODCM8L212qIcxshIw==", + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@mermaid-js/mermaid-cli/-/mermaid-cli-11.2.1.tgz", + "integrity": "sha512-jzjTxQ9CVeFfH5uHNTGxn4ToRdXcw9TIdOHBTinGh8fEJ8flaxgeLRXoaAyyyDYA+WZLwhOfXCZhQIcIqFyMdA==", + "license": "MIT", "dependencies": { "chalk": "^5.0.1", - "commander": "^10.0.0", - "mermaid": "^10.8.0", - "puppeteer": "^19.0.0" + "commander": "^12.1.0", + "mermaid": "^11.0.2" }, "bin": { "mmdc": "src/cli.js" }, "engines": { - "node": "^14.13 || >=16.0" + "node": "^18.19 || >=20.0" + }, + "peerDependencies": { + "puppeteer": "^23" + } + }, + "node_modules/@mermaid-js/parser": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-0.3.0.tgz", + "integrity": "sha512-HsvL6zgE5sUPGgkIDlmAWR1HTNHz2Iy11BAWPTa4Jjabkpguy4Ze2gzfLrg6pdRuBvFwgUYyxiaNqZwrEEXepA==", + "license": "MIT", + "dependencies": { + "langium": "3.0.0" } }, "node_modules/@puppeteer/browsers": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.5.0.tgz", - "integrity": "sha512-Uw6oB7VvmPRLE4iKsjuOh8zgDabhNX67dzo8U/BB0f9527qx+4eeUs+korU98OhG5C4ubg7ufBgVi63XYwS6TQ==", - "dependencies": { - "debug": "4.3.4", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "yargs": "17.7.1" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.4.0.tgz", + "integrity": "sha512-x8J1csfIygOwf6D6qUAZ0ASk3z63zPb7wkNeHRerCMh82qWKUrOgkuP005AJC8lDL6/evtXETGEJVcwykKT4/g==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "debug": "^4.3.6", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.4.0", + "semver": "^7.6.3", + "tar-fs": "^3.0.6", + "unbzip2-stream": "^1.4.3", + "yargs": "^17.7.2" }, "bin": { "browsers": "lib/cjs/main-cli.js" }, "engines": { - "node": ">=14.1.0" - }, - "peerDependencies": { - "typescript": ">= 4.7.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@puppeteer/browsers/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@types/d3-scale": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz", - "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==", - "dependencies": { - "@types/d3-time": "*" - } - }, - "node_modules/@types/d3-scale-chromatic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.3.tgz", - "integrity": "sha512-laXM4+1o5ImZv3RpFAsTRn3TEkzqkytiOY0Dz0sq5cnd1dtNlk6sHLon4OvqaiJb28T0S/TdsBI3Sjsy+keJrw==" - }, - "node_modules/@types/d3-time": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz", - "integrity": "sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==" - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" + "node": ">=18" } }, - "node_modules/@types/ms": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "license": "MIT", + "peer": true }, "node_modules/@types/node": { - "version": "20.14.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz", - "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==", + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "license": "MIT", "optional": true, + "peer": true, "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.19.2" } }, - "node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, "node_modules/@types/yauzl": { "version": "2.10.3", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "license": "MIT", "optional": true, + "peer": true, "dependencies": { "@types/node": "*" } }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "license": "MIT", + "peer": true, "dependencies": { - "debug": "4" + "debug": "^4.3.4" }, "engines": { - "node": ">= 6.0.0" + "node": ">= 14" } }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -231,6 +301,8 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -244,7 +316,81 @@ "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==" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0", + "peer": true + }, + "node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "license": "MIT", + "peer": true, + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/b4a": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", + "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", + "license": "Apache-2.0", + "peer": true + }, + "node_modules/bare-events": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz", + "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==", + "license": "Apache-2.0", + "optional": true, + "peer": true + }, + "node_modules/bare-fs": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.5.tgz", + "integrity": "sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "bare-events": "^2.0.0", + "bare-path": "^2.0.0", + "bare-stream": "^2.0.0" + } + }, + "node_modules/bare-os": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.4.tgz", + "integrity": "sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==", + "license": "Apache-2.0", + "optional": true, + "peer": true + }, + "node_modules/bare-path": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz", + "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "bare-os": "^2.1.0" + } + }, + "node_modules/bare-stream": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.3.0.tgz", + "integrity": "sha512-pVRWciewGUeCyKEuRxwv06M079r+fRjAQjBEK2P6OYGrO43O+Z0LrPZZEjlc4mB6C2RpZ9AxJ1s7NLEtOHO6eA==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "b4a": "^1.6.6", + "streamx": "^2.20.0" + } }, "node_modules/base64-js": { "version": "1.5.1", @@ -263,16 +409,18 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT", + "peer": true }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "node_modules/basic-ftp": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", + "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.0.0" } }, "node_modules/buffer": { @@ -293,6 +441,8 @@ "url": "https://feross.org/support" } ], + "license": "MIT", + "peer": true, "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -302,6 +452,8 @@ "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", + "peer": true, "engines": { "node": "*" } @@ -310,6 +462,8 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "peer": true, "engines": { "node": ">=6" } @@ -318,6 +472,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -325,26 +480,42 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/chevrotain": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-11.0.3.tgz", + "integrity": "sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==", + "license": "Apache-2.0", + "dependencies": { + "@chevrotain/cst-dts-gen": "11.0.3", + "@chevrotain/gast": "11.0.3", + "@chevrotain/regexp-to-ast": "11.0.3", + "@chevrotain/types": "11.0.3", + "@chevrotain/utils": "11.0.3", + "lodash-es": "4.17.21" } }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "node_modules/chevrotain-allstar": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/chevrotain-allstar/-/chevrotain-allstar-0.3.1.tgz", + "integrity": "sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==", + "license": "MIT", + "dependencies": { + "lodash-es": "^4.17.21" + }, + "peerDependencies": { + "chevrotain": "^11.0.0" + } }, "node_modules/chromium-bidi": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.7.tgz", - "integrity": "sha512-6+mJuFXwTMU6I3vYLs6IL8A1DyQTPjCfIL971X0aMPVGRbGnNfl6i6Cl0NMbxi2bRYLGESt9T2ZIMRM5PAEcIQ==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.8.0.tgz", + "integrity": "sha512-uJydbGdTw0DEUjhoogGveneJVWX/9YuqkWePzMmkBYwtdAqo5d3J/ovNKFr+/2hWXYmYCr6it8mSSTIj6SS6Ug==", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "mitt": "3.0.0" + "mitt": "3.0.1", + "urlpattern-polyfill": "10.0.0", + "zod": "3.23.8" }, "peerDependencies": { "devtools-protocol": "*" @@ -354,6 +525,8 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "peer": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -367,6 +540,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "peer": true, "dependencies": { "color-name": "~1.1.4" }, @@ -377,53 +552,66 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT", + "peer": true }, "node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "license": "MIT", "engines": { - "node": ">=14" + "node": ">=18" } }, + "node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "license": "MIT" + }, "node_modules/cose-base": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", + "license": "MIT", "dependencies": { "layout-base": "^1.0.0" } }, "node_modules/cosmiconfig": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", - "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", - "dependencies": { - "import-fresh": "^3.2.1", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "license": "MIT", + "peer": true, + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" + "parse-json": "^5.2.0" }, "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/d-fischer" - } - }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dependencies": { - "node-fetch": "2.6.7" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/cytoscape": { - "version": "3.30.0", - "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.30.0.tgz", - "integrity": "sha512-l590mjTHT6/Cbxp13dGPC2Y7VXdgc+rUeF8AnF/JPzhjNevbDJfObnJgaSjlldOgBQZbue+X6IUZ7r5GAgvauQ==", + "version": "3.30.2", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.30.2.tgz", + "integrity": "sha512-oICxQsjW8uSaRmn4UK/jkczKOqTrVqt5/1WL0POiJUT2EKNc9STM4hYFHv917yu55aTBMFNRzymlJhVAiWPCxw==", + "license": "MIT", "engines": { "node": ">=0.10" } @@ -432,6 +620,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", + "license": "MIT", "dependencies": { "cose-base": "^1.0.0" }, @@ -439,10 +628,38 @@ "cytoscape": "^3.2.0" } }, + "node_modules/cytoscape-fcose": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", + "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", + "license": "MIT", + "dependencies": { + "cose-base": "^2.2.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/cose-base": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", + "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", + "license": "MIT", + "dependencies": { + "layout-base": "^2.0.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/layout-base": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", + "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==", + "license": "MIT" + }, "node_modules/d3": { "version": "7.9.0", "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz", "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==", + "license": "ISC", "dependencies": { "d3-array": "3", "d3-axis": "3", @@ -483,6 +700,7 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", "dependencies": { "internmap": "1 - 2" }, @@ -494,6 +712,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "license": "ISC", "engines": { "node": ">=12" } @@ -502,6 +721,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", @@ -517,6 +737,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "license": "ISC", "dependencies": { "d3-path": "1 - 3" }, @@ -528,6 +749,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", "engines": { "node": ">=12" } @@ -536,6 +758,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "license": "ISC", "dependencies": { "d3-array": "^3.2.0" }, @@ -547,6 +770,7 @@ "version": "6.0.4", "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "license": "ISC", "dependencies": { "delaunator": "5" }, @@ -558,6 +782,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "license": "ISC", "engines": { "node": ">=12" } @@ -566,6 +791,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", "d3-selection": "3" @@ -578,6 +804,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "license": "ISC", "dependencies": { "commander": "7", "iconv-lite": "0.6", @@ -602,6 +829,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", "engines": { "node": ">= 10" } @@ -610,6 +838,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", "engines": { "node": ">=12" } @@ -618,6 +847,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "license": "ISC", "dependencies": { "d3-dsv": "1 - 3" }, @@ -629,6 +859,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", "d3-quadtree": "1 - 3", @@ -642,6 +873,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "license": "ISC", "engines": { "node": ">=12" } @@ -650,6 +882,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", + "license": "ISC", "dependencies": { "d3-array": "2.5.0 - 3" }, @@ -661,6 +894,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "license": "ISC", "engines": { "node": ">=12" } @@ -669,6 +903,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", "dependencies": { "d3-color": "1 - 3" }, @@ -680,6 +915,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", "engines": { "node": ">=12" } @@ -688,6 +924,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "license": "ISC", "engines": { "node": ">=12" } @@ -696,6 +933,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "license": "ISC", "engines": { "node": ">=12" } @@ -704,6 +942,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "license": "ISC", "engines": { "node": ">=12" } @@ -712,6 +951,7 @@ "version": "0.12.3", "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", + "license": "BSD-3-Clause", "dependencies": { "d3-array": "1 - 2", "d3-shape": "^1.2.0" @@ -721,6 +961,7 @@ "version": "2.12.1", "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "license": "BSD-3-Clause", "dependencies": { "internmap": "^1.0.0" } @@ -728,12 +969,14 @@ "node_modules/d3-sankey/node_modules/d3-path": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", - "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", + "license": "BSD-3-Clause" }, "node_modules/d3-sankey/node_modules/d3-shape": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "license": "BSD-3-Clause", "dependencies": { "d3-path": "1" } @@ -741,12 +984,14 @@ "node_modules/d3-sankey/node_modules/internmap": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", - "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==", + "license": "ISC" }, "node_modules/d3-scale": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", "dependencies": { "d3-array": "2.10.0 - 3", "d3-format": "1 - 3", @@ -762,6 +1007,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", + "license": "ISC", "dependencies": { "d3-color": "1 - 3", "d3-interpolate": "1 - 3" @@ -774,6 +1020,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "license": "ISC", "engines": { "node": ">=12" } @@ -782,6 +1029,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", "dependencies": { "d3-path": "^3.1.0" }, @@ -793,6 +1041,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", "dependencies": { "d3-array": "2 - 3" }, @@ -804,6 +1053,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", "dependencies": { "d3-time": "1 - 3" }, @@ -815,6 +1065,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", "engines": { "node": ">=12" } @@ -823,6 +1074,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "license": "ISC", "dependencies": { "d3-color": "1 - 3", "d3-dispatch": "1 - 3", @@ -841,6 +1093,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", @@ -856,22 +1109,35 @@ "version": "7.0.10", "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.10.tgz", "integrity": "sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==", + "license": "MIT", "dependencies": { "d3": "^7.8.2", "lodash-es": "^4.17.21" } }, + "node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 14" + } + }, "node_modules/dayjs": { - "version": "1.11.11", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz", - "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==" + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "license": "MIT" }, "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -882,82 +1148,86 @@ } } }, - "node_modules/decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "node_modules/degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "license": "MIT", + "peer": true, "dependencies": { - "character-entities": "^2.0.0" + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": ">= 14" } }, "node_modules/delaunator": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", + "license": "ISC", "dependencies": { "robust-predicates": "^3.0.2" } }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "engines": { - "node": ">=6" - } - }, "node_modules/devtools-protocol": { - "version": "0.0.1107588", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", - "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==" - }, - "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", - "engines": { - "node": ">=0.3.1" - } + "version": "0.0.1342118", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1342118.tgz", + "integrity": "sha512-75fMas7PkYNDTmDyb6PRJCH7ILmHLp+BhrZGeMsa4bCh40DTxgCz2NRy5UDzII4C5KuD0oBMZ9vXKhEl6UD/3w==", + "license": "BSD-3-Clause", + "peer": true }, "node_modules/dompurify": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.6.tgz", - "integrity": "sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==" - }, - "node_modules/elkjs": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.9.3.tgz", - "integrity": "sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ==" + "integrity": "sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==", + "license": "(MPL-2.0 OR Apache-2.0)" }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT", + "peer": true }, "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==", + "license": "MIT", + "peer": true, "dependencies": { "once": "^1.4.0" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "license": "MIT", + "peer": true, "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "peer": true, "engines": { "node": ">=6" } @@ -966,14 +1236,74 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "peer": true, "engines": { "node": ">=0.8.0" } }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "peer": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "license": "BSD-2-Clause", + "peer": true, "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -989,23 +1319,44 @@ "@types/yauzl": "^2.9.1" } }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "license": "MIT", + "peer": 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==", + "license": "MIT", + "peer": true, "dependencies": { "pend": "~1.2.0" } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "peer": true, "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -1014,6 +1365,8 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "license": "MIT", + "peer": true, "dependencies": { "pump": "^3.0.0" }, @@ -1024,30 +1377,78 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-uri": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", + "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==", + "license": "MIT", + "peer": true, + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4", + "fs-extra": "^11.2.0" + }, + "engines": { + "node": ">= 14" + } + }, + "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==", + "license": "ISC", + "peer": true + }, + "node_modules/hachure-fill": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/hachure-fill/-/hachure-fill-0.5.2.tgz", + "integrity": "sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==", + "license": "MIT" + }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", + "peer": true, "engines": { "node": ">=4" } }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "license": "MIT", + "peer": true, + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "license": "MIT", + "peer": true, "dependencies": { - "agent-base": "6", + "agent-base": "^7.0.2", "debug": "4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -1072,12 +1473,16 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause", + "peer": true }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "license": "MIT", + "peer": true, "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -1089,28 +1494,42 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, "node_modules/internmap": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", "engines": { "node": ">=12" } }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "license": "MIT", + "peer": true, + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT", + "peer": true }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -1118,12 +1537,16 @@ "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT", + "peer": true }, "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==", + "license": "MIT", + "peer": true, "dependencies": { "argparse": "^2.0.1" }, @@ -1131,10 +1554,32 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "license": "MIT", + "peer": true + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT", + "peer": true + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } }, "node_modules/katex": { "version": "0.16.11", @@ -1144,6 +1589,7 @@ "https://opencollective.com/katex", "https://github.com/sponsors/katex" ], + "license": "MIT", "dependencies": { "commander": "^8.3.0" }, @@ -1155,6 +1601,7 @@ "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "license": "MIT", "engines": { "node": ">= 12" } @@ -1164,571 +1611,203 @@ "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.1.0.tgz", "integrity": "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==" }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "license": "MIT" + }, + "node_modules/langium": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/langium/-/langium-3.0.0.tgz", + "integrity": "sha512-+Ez9EoiByeoTu/2BXmEaZ06iPNXM6thWJp02KfBO/raSMyCJ4jw7AkWWa+zBCTm0+Tw1Fj9FOxdqSskyN5nAwg==", + "license": "MIT", + "dependencies": { + "chevrotain": "~11.0.3", + "chevrotain-allstar": "~0.3.0", + "vscode-languageserver": "~9.0.1", + "vscode-languageserver-textdocument": "~1.0.11", + "vscode-uri": "~3.0.8" + }, "engines": { - "node": ">=6" + "node": ">=16.0.0" } }, "node_modules/layout-base": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", - "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==" + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==", + "license": "MIT" }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT", + "peer": true + }, + "node_modules/local-pkg": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", + "license": "MIT", + "dependencies": { + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } }, "node_modules/lodash-es": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" - }, - "node_modules/mdast-util-from-markdown": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", - "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "license": "ISC", + "peer": true, + "engines": { + "node": ">=12" } }, - "node_modules/mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", - "dependencies": { - "@types/mdast": "^3.0.0" + "node_modules/marked": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/marked/-/marked-13.0.3.tgz", + "integrity": "sha512-rqRix3/TWzE9rIoFGIn8JmsVfhiuC8VIQ8IdX5TfzmeBucdY05/0UlzKaw0eVtpcN/OdVFpBk7CjKGo9iHJ/zA==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">= 18" } }, "node_modules/mermaid": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.9.1.tgz", - "integrity": "sha512-Mx45Obds5W1UkW1nv/7dHRsbfMM1aOKA2+Pxs/IGHNonygDHwmng8xTHyS9z4KWVi0rbko8gjiBmuwwXQ7tiNA==", - "dependencies": { - "@braintree/sanitize-url": "^6.0.1", - "@types/d3-scale": "^4.0.3", - "@types/d3-scale-chromatic": "^3.0.0", - "cytoscape": "^3.28.1", + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.3.0.tgz", + "integrity": "sha512-fFmf2gRXLtlGzug4wpIGN+rQdZ30M8IZEB1D3eZkXNqC7puhqeURBcD/9tbwXsqBO+A6Nzzo3MSSepmnw5xSeg==", + "license": "MIT", + "dependencies": { + "@braintree/sanitize-url": "^7.0.1", + "@iconify/utils": "^2.1.32", + "@mermaid-js/parser": "^0.3.0", + "cytoscape": "^3.29.2", "cytoscape-cose-bilkent": "^4.1.0", - "d3": "^7.4.0", + "cytoscape-fcose": "^2.2.0", + "d3": "^7.9.0", "d3-sankey": "^0.12.3", "dagre-d3-es": "7.0.10", - "dayjs": "^1.11.7", - "dompurify": "^3.0.5", - "elkjs": "^0.9.0", + "dayjs": "^1.11.10", + "dompurify": "^3.0.11 <3.1.7", "katex": "^0.16.9", - "khroma": "^2.0.0", + "khroma": "^2.1.0", "lodash-es": "^4.17.21", - "mdast-util-from-markdown": "^1.3.0", - "non-layered-tidy-tree-layout": "^2.0.2", - "stylis": "^4.1.3", + "marked": "^13.0.2", + "roughjs": "^4.6.6", + "stylis": "^4.3.1", "ts-dedent": "^2.2.0", - "uuid": "^9.0.0", - "web-worker": "^1.2.0" + "uuid": "^9.0.1" } }, - "node_modules/micromark": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", - "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", - "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-factory-destination": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", - "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT", + "peer": true + }, + "node_modules/mlly": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.2.tgz", + "integrity": "sha512-tN3dvVHYVz4DhSXinXIk7u9syPYaJvio118uomkovAtWBT+RdbP6Lfh/5Lvo519YMmwBafwlh20IPTXIStscpA==", + "license": "MIT", "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "acorn": "^8.12.1", + "pathe": "^1.1.2", + "pkg-types": "^1.2.0", + "ufo": "^1.5.4" } }, - "node_modules/micromark-factory-label": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", - "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-factory-space": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", - "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-factory-title": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", - "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-factory-whitespace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", - "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-character": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", - "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-chunked": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", - "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-classify-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", - "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-combine-extensions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", - "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", - "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-decode-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", - "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", - "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-html-tag-name": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", - "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", - "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, - "node_modules/micromark-util-resolve-all": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", - "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-types": "^1.0.0" + "node_modules/netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4.0" } }, - "node_modules/micromark-util-sanitize-uri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", - "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "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==", + "license": "ISC", + "peer": true, "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "wrappy": "1" } }, - "node_modules/micromark-util-subtokenize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", - "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/pac-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz", + "integrity": "sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==", + "license": "MIT", + "peer": true, "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", - "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/mitt": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", - "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==" - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.5", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.4" + }, "engines": { - "node": ">=4" + "node": ">= 14" } }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "node_modules/pac-resolver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "license": "MIT", + "peer": true, "dependencies": { - "whatwg-url": "^5.0.0" + "degenerator": "^5.0.0", + "netmask": "^2.0.2" }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "node": ">= 14" } }, - "node_modules/non-layered-tidy-tree-layout": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", - "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" - }, - "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==", - "dependencies": { - "wrappy": "1" - } + "node_modules/package-manager-detector": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.1.tgz", + "integrity": "sha512-/hVW2fZvAdEas+wyKh0SnlZ2mx0NIa1+j11YaQkogEJkcMErbwchHCuo8z7lEtajZJQZ6rgZNVTWMVVd71Bjng==", + "license": "MIT" }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", + "peer": true, "dependencies": { "callsites": "^3.0.0" }, @@ -1740,6 +1819,8 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -1753,123 +1834,160 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } + "node_modules/path-data-parser": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/path-data-parser/-/path-data-parser-0.1.0.tgz", + "integrity": "sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==", + "license": "MIT" + }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "license": "MIT" }, "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==" + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "license": "MIT", + "peer": true }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "license": "ISC", + "peer": true + }, + "node_modules/pkg-types": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.1.tgz", + "integrity": "sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==", + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.2", + "pathe": "^1.1.2" + } + }, + "node_modules/points-on-curve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/points-on-curve/-/points-on-curve-0.2.0.tgz", + "integrity": "sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==", + "license": "MIT" + }, + "node_modules/points-on-path": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/points-on-path/-/points-on-path-0.2.1.tgz", + "integrity": "sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==", + "license": "MIT", + "dependencies": { + "path-data-parser": "0.1.0", + "points-on-curve": "0.2.0" + } }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "license": "MIT", + "peer": true, "engines": { "node": ">=0.4.0" } }, + "node_modules/proxy-agent": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", + "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.3", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.0.1", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.2" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT", + "peer": true }, "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==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "license": "MIT", + "peer": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "node_modules/puppeteer": { - "version": "19.11.1", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.11.1.tgz", - "integrity": "sha512-39olGaX2djYUdhaQQHDZ0T0GwEp+5f9UB9HmEP0qHfdQHIq0xGQZuAZ5TLnJIc/88SrPLpEflPC+xUqOTv3c5g==", - "deprecated": "< 22.6.4 is no longer supported", + "version": "23.5.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-23.5.1.tgz", + "integrity": "sha512-9WUnrCx7nB/GEMbJdKiSSU6G4t6Nzn39BBochWYyhK2wWxKwibZDwEF71AUP9D17Byn6OoPifsXhyvnqN/D4mQ==", "hasInstallScript": true, + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@puppeteer/browsers": "0.5.0", - "cosmiconfig": "8.1.3", - "https-proxy-agent": "5.0.1", - "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "puppeteer-core": "19.11.1" - } - }, - "node_modules/puppeteer-core": { - "version": "19.11.1", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.11.1.tgz", - "integrity": "sha512-qcuC2Uf0Fwdj9wNtaTZ2OvYRraXpAK+puwwVW8ofOhOgLPZyz1c68tsorfIZyCUOpyBisjr+xByu7BMbEYMepA==", - "dependencies": { - "@puppeteer/browsers": "0.5.0", - "chromium-bidi": "0.4.7", - "cross-fetch": "3.1.5", - "debug": "4.3.4", - "devtools-protocol": "0.0.1107588", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "proxy-from-env": "1.1.0", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "ws": "8.13.0" - }, - "engines": { - "node": ">=14.14.0" - }, - "peerDependencies": { - "typescript": ">= 4.7.4" + "@puppeteer/browsers": "2.4.0", + "chromium-bidi": "0.8.0", + "cosmiconfig": "^9.0.0", + "devtools-protocol": "0.0.1342118", + "puppeteer-core": "23.5.1", + "typed-query-selector": "^2.12.0" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/puppeteer-core/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" + "bin": { + "puppeteer": "lib/cjs/puppeteer/node/cli.js" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=18" } }, - "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==", + "node_modules/puppeteer-core": { + "version": "23.5.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.5.1.tgz", + "integrity": "sha512-We6xKCSZaZ23+GAYckeNfeDeJIVuhxOBsh/gZkbULu/XLFJ3umSiiQ8Ey927h3g/XrCCr8CnSZ5fvP5v2vB5Yw==", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "@puppeteer/browsers": "2.4.0", + "chromium-bidi": "0.8.0", + "debug": "^4.3.7", + "devtools-protocol": "0.0.1342118", + "typed-query-selector": "^2.12.0", + "ws": "^8.18.0" }, "engines": { - "node": ">= 6" + "node": ">=18" } }, + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "license": "MIT", + "peer": true + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -1878,6 +1996,8 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", + "peer": true, "engines": { "node": ">=4" } @@ -1885,60 +2005,126 @@ "node_modules/robust-predicates": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", - "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", + "license": "Unlicense" + }, + "node_modules/roughjs": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/roughjs/-/roughjs-4.6.6.tgz", + "integrity": "sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==", + "license": "MIT", + "dependencies": { + "hachure-fill": "^0.5.2", + "path-data-parser": "^0.1.0", + "points-on-curve": "^0.2.0", + "points-on-path": "^0.2.1" + } }, "node_modules/rw": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "license": "BSD-3-Clause" }, - "node_modules/sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dependencies": { - "mri": "^1.1.0" + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=6" + "node": ">=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==", - "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/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "license": "MIT", + "peer": true, + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } }, - "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==", + "node_modules/socks-proxy-agent": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", + "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", + "license": "MIT", + "peer": true, "dependencies": { - "safe-buffer": "~5.2.0" + "agent-base": "^7.1.1", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "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==", + "license": "BSD-3-Clause", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/streamx": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.20.1.tgz", + "integrity": "sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==", + "license": "MIT", + "peer": true, + "dependencies": { + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" } }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "peer": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -1952,6 +2138,8 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "peer": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -1960,14 +2148,17 @@ } }, "node_modules/stylis": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz", - "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==" + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.4.tgz", + "integrity": "sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==", + "license": "MIT" }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "peer": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -1976,80 +2167,119 @@ } }, "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz", + "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==", + "license": "MIT", + "peer": true, "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", - "tar-stream": "^2.1.4" + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^2.1.1", + "bare-path": "^2.1.0" } }, "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "license": "MIT", + "peer": true, "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/text-decoder": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.0.tgz", + "integrity": "sha512-n1yg1mOj9DNpk3NeZOx7T6jchTbyJS3i3cucbNN6FcdPriMZx7NsgrGpWWdWZZGxD7ES1XB+3uoqHMgOKaN+fg==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "b4a": "^1.6.4" } }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "license": "MIT", + "peer": true }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "node_modules/tinyexec": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.0.tgz", + "integrity": "sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==", + "license": "MIT" }, "node_modules/ts-dedent": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "license": "MIT", "engines": { "node": ">=6.10" } }, + "node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD", + "peer": true + }, + "node_modules/typed-query-selector": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz", + "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==", + "license": "MIT", + "peer": true + }, + "node_modules/ufo": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", + "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", + "license": "MIT" + }, "node_modules/unbzip2-stream": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "license": "MIT", + "peer": true, "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" } }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "optional": true + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "license": "MIT", + "optional": true, + "peer": true }, - "node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 10.0.0" } }, - "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==" + "node_modules/urlpattern-polyfill": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", + "license": "MIT", + "peer": true }, "node_modules/uuid": { "version": "9.0.1", @@ -2059,50 +2289,66 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, - "node_modules/uvu": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", - "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", + "node_modules/vscode-jsonrpc": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", + "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/vscode-languageserver": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", + "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", + "license": "MIT", "dependencies": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3" + "vscode-languageserver-protocol": "3.17.5" }, "bin": { - "uvu": "bin.js" - }, - "engines": { - "node": ">=8" + "installServerIntoExtension": "bin/installServerIntoExtension" } }, - "node_modules/web-worker": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.3.0.tgz", - "integrity": "sha512-BSR9wyRsy/KOValMgd5kMyr3JzpdeoR9KVId8u5GVlTTAtNChlsE4yTxeY7zMdNSyOmoKBv8NH2qeRY9Tg+IaA==" - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "node_modules/vscode-languageserver-protocol": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", + "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", + "license": "MIT", "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "vscode-jsonrpc": "8.2.0", + "vscode-languageserver-types": "3.17.5" } }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", + "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", + "license": "MIT" + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", + "license": "MIT" + }, + "node_modules/vscode-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", + "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", + "license": "MIT" + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "peer": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -2118,12 +2364,16 @@ "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==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC", + "peer": true }, "node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "license": "MIT", + "peer": true, "engines": { "node": ">=10.0.0" }, @@ -2144,14 +2394,18 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "peer": true, "engines": { "node": ">=10" } }, "node_modules/yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "peer": true, "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -2169,6 +2423,8 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "peer": true, "engines": { "node": ">=12" } @@ -2177,10 +2433,22 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "license": "MIT", + "peer": true, "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } + }, + "node_modules/zod": { + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } } } diff --git a/package.json b/package.json index 1390db3..ab9a735 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { "dependencies": { - "@mermaid-js/mermaid-cli": "^10.9.1" + "@mermaid-js/mermaid-cli": "^11.2.1" } } From 7a465d877bd1b32eb9ed47d45f078a7804b6d9c0 Mon Sep 17 00:00:00 2001 From: Norbert Schulz Date: Wed, 9 Oct 2024 15:30:07 +0200 Subject: [PATCH 06/14] Downgrade to Ubuntu 22.04 runner. try to work around this runner error: Failed to launch the browser process!\n[1009/131039.210022:FATAL:zygote_host_impl_linux.cc(128)] No usable sandbox! --- .github/workflows/documentation.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index 08b683f..3b7ee46 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -18,7 +18,7 @@ jobs: # The introduction just shows some useful informations. intro: # The type of runner that the job will run on. - runs-on: ubuntu-latest + runs-on: ubuntu-22.04.5 # Steps represent a sequence of tasks that will be executed as part of the job. steps: - run: echo "The job was automatically triggered by a ${{ github.event_name }} event." @@ -28,7 +28,7 @@ jobs: # The build job will build the documentation. build: # The type of runner that the job will run on. - runs-on: ubuntu-latest + runs-on: ubuntu-22.04.5 needs: intro permissions: contents: write From 55630e6c4763e984688ddf400f58279ff682df54 Mon Sep 17 00:00:00 2001 From: Norbert Schulz Date: Wed, 9 Oct 2024 15:30:07 +0200 Subject: [PATCH 07/14] Downgrade to Ubuntu 22.04 runner. try to work around this runner error: Failed to launch the browser process!\n[1009/131039.210022:FATAL:zygote_host_impl_linux.cc(128)] No usable sandbox! --- .github/workflows/documentation.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index 3b7ee46..9e8a94f 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -18,7 +18,7 @@ jobs: # The introduction just shows some useful informations. intro: # The type of runner that the job will run on. - runs-on: ubuntu-22.04.5 + runs-on: ubuntu-22.04 # Steps represent a sequence of tasks that will be executed as part of the job. steps: - run: echo "The job was automatically triggered by a ${{ github.event_name }} event." @@ -28,7 +28,7 @@ jobs: # The build job will build the documentation. build: # The type of runner that the job will run on. - runs-on: ubuntu-22.04.5 + runs-on: ubuntu-22.04 needs: intro permissions: contents: write From 8fdb9caa1d8d93dc9cacf9b944c1e659b1e1e0dd Mon Sep 17 00:00:00 2001 From: Norbert Schulz Date: Wed, 9 Oct 2024 15:45:00 +0200 Subject: [PATCH 08/14] Github runner: Increase node.js version Go from 16 to 19 to satisfy dependencies. --- .github/workflows/documentation.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index 9e8a94f..1144374 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -47,7 +47,7 @@ jobs: - name: Setup Node uses: actions/setup-node@v4 with: - node-version: '16' + node-version: '19' cache: npm - name: Install dependencies From d19523436bf5b00cdf378cb4ce0cbe65a4dd0420 Mon Sep 17 00:00:00 2001 From: Norbert Schulz Date: Wed, 9 Oct 2024 15:47:15 +0200 Subject: [PATCH 09/14] Github runner: Increase node.js version Go from 19 to 20 to satisfy dependencies. --- .github/workflows/documentation.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index 1144374..b2823e7 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -47,7 +47,7 @@ jobs: - name: Setup Node uses: actions/setup-node@v4 with: - node-version: '19' + node-version: '20' cache: npm - name: Install dependencies From 395ef18c896e65fa818acce01a94f4a0d90e068f Mon Sep 17 00:00:00 2001 From: Norbert Schulz Date: Wed, 9 Oct 2024 16:46:21 +0200 Subject: [PATCH 10/14] Added table borders to HTML tables --- doc/versioning/submod_versioning.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/doc/versioning/submod_versioning.md b/doc/versioning/submod_versioning.md index d6aabce..bcfe04b 100644 --- a/doc/versioning/submod_versioning.md +++ b/doc/versioning/submod_versioning.md @@ -1,3 +1,10 @@ + + # Software Configuration Management with GIT Submodules - [Abstract](#abstract) @@ -301,6 +308,7 @@ differ only in the value of the branch field. This is exactly the desired effect of this method. The .gitmodules file together with the base component version define and documents the versioning of the entire system. + ![image](./images/gitmodules_diffs.png) ## Git Commands for Different Use Cases @@ -425,7 +433,7 @@ achieved by using the "--recurse-submodules" option.

forgotten during clone. This option is primarily a convenience to do this automatically:

$ git submodule init
-Submodule 'subm/a' ((https://bitbucket.org/nhjschulz/subm_a.git) registered for path +Submodule 'subm/a' (https://bitbucket.org/nhjschulz/subm_a.git) registered for path 'subm/a'
Submodule 'subm/b' (https://bitbucket.org/nhjschulz/subm_b.git) registered for path 'subm/b

@@ -555,7 +563,7 @@ development branch). is repeated for all submodules whose branch is to be switched. - $ git submodule set-branch --branch development  subm/a + $ git submodule set-branch --branch development subm/a git diff @@ -566,6 +574,7 @@ submodule has been changed inside .gitmodules.

Only the entry in the .gitmodules file has been adjusted. The submodule versions in the working copy have not (yet) changed. ``` + From 0f6e4809a8169c54a918d194e3409d04457e66ec Mon Sep 17 00:00:00 2001 From: nhjschulz Date: Thu, 10 Oct 2024 10:44:57 +0200 Subject: [PATCH 11/14] Enable plantuml support in Sphinx and use it for UML --- doc/conf.py | 11 ++++++----- doc/index.rst | 2 +- doc/versioning/images/Components.png | Bin 32155 -> 0 bytes doc/versioning/submod_versioning.md | 12 +++++++++++- requirements.txt | 3 ++- 5 files changed, 20 insertions(+), 8 deletions(-) delete mode 100644 doc/versioning/images/Components.png diff --git a/doc/conf.py b/doc/conf.py index 14bb0cb..f3abdf6 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -21,10 +21,11 @@ extensions = [ "sphinxcontrib.mermaid", # Mermaid diagrams - "myst_parser", # MyST markdown parser - "sphinx_rtd_dark_mode", # Dark mode - "sphinx_copybutton", # Copy button - "sphinx_togglebutton" # Toggle button + "sphinxcontrib.plantuml", # Plantuml diagrams + "myst_parser", # MyST markdown parser + "sphinx_rtd_dark_mode", # Dark mode + "sphinx_copybutton", # Copy button + "sphinx_togglebutton" # Toggle button ] templates_path = ["_templates"] @@ -59,7 +60,7 @@ mermaid_cmd_shell = "true" # MyST configuration -myst_enable_extensions = ["colon_fence"] +myst_enable_extensions = ["colon_fence", 'attrs_block'] myst_heading_anchors = 2 # Toggle button configuration diff --git a/doc/index.rst b/doc/index.rst index 30edc45..632dac0 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -71,7 +71,7 @@ This documentation is intended to introduce the overall branching strategy to be merge release/v3.0.x tag: "v3.0.0" .. toctree:: - :caption: Submodule Based Configuration Managment: + :caption: Submodule Config Management: :maxdepth: 2 versioning/submod_versioning.md diff --git a/doc/versioning/images/Components.png b/doc/versioning/images/Components.png deleted file mode 100644 index cedbb7227d5416af400493c84fb7393fc37723fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32155 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 diff --git a/doc/versioning/submod_versioning.md b/doc/versioning/submod_versioning.md index bcfe04b..b602197 100644 --- a/doc/versioning/submod_versioning.md +++ b/doc/versioning/submod_versioning.md @@ -68,7 +68,17 @@ with specific versions. The division of a system into individual components is defined at project level. The method only defines an abstract component model with three hierarchical levels: -![image](./images/Components.png) +```{plantuml} +skinparam linetype ortho + +[Base Component] <> #DarkGray +[SubSystem] <> #DarkSeaGreen +[Component] <> + +[Base Component] -d-> "0..* " [SubSystem] : <> +[Base Component] -d-> "0..* " [Component] : <> +[SubSystem] -d-> "1..* " [Component] : <> +``` #### Base Component diff --git a/requirements.txt b/requirements.txt index 304cd54..c7ff935 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,4 +4,5 @@ sphinx-rtd-dark-mode==1.3.0 sphinx-rtd-theme==2.0.0 sphinxcontrib-mermaid==0.9.2 sphinx-copybutton==0.5.2 -sphinx-togglebutton==0.3.2 \ No newline at end of file +sphinx-togglebutton==0.3.2 +sphinx-plantuml @ git+https://github.com/nhjschulz/sphinx-plantuml@main \ No newline at end of file From 52062ba19e71f2eb7eb61ba6459b4275c9754b99 Mon Sep 17 00:00:00 2001 From: nhjschulz Date: Thu, 10 Oct 2024 15:40:45 +0200 Subject: [PATCH 12/14] Install fork of sphinx-plantuml The original version on PyPI has incompatible dependency requirements. --- requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index c7ff935..2490d96 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,6 +3,6 @@ Sphinx==7.3.7 sphinx-rtd-dark-mode==1.3.0 sphinx-rtd-theme==2.0.0 sphinxcontrib-mermaid==0.9.2 -sphinx-copybutton==0.5.2 +sphinx-copybutton==0.5.2 sphinx-togglebutton==0.3.2 -sphinx-plantuml @ git+https://github.com/nhjschulz/sphinx-plantuml@main \ No newline at end of file +sphinx-plantuml @ https://github.com/nhjschulz/sphinx-plantuml/releases/download/V1.0.0patch/sphinx_plantuml-1.0.0-py3-none-any.whl \ No newline at end of file From 0696aeec45087050c6e778e960c160aa949bd100 Mon Sep 17 00:00:00 2001 From: Gabryel Reyes <66941456+gabryelreyes@users.noreply.github.com> Date: Thu, 17 Oct 2024 14:37:20 +0200 Subject: [PATCH 13/14] Bump to version 1.1.0 --- doc/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/conf.py b/doc/conf.py index f3abdf6..05b2eeb 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -13,7 +13,7 @@ project = "gitWorkInstructions" copyright = "2024 - present, NewTec GmbH" author = "NewTec GmbH" -release = "1.0.1" +release = "1.1.0" conf_py_path = "/doc/" # with leading and trailing slashes # -- General configuration --------------------------------------------------- From b1051edcd973079a0683e06260397fe94c4e4339 Mon Sep 17 00:00:00 2001 From: Gabryel Reyes Date: Wed, 23 Oct 2024 11:25:08 +0200 Subject: [PATCH 14/14] Fixed review findings --- doc/versioning/submod_versioning.md | 128 +++++++++++++++------------- 1 file changed, 67 insertions(+), 61 deletions(-) diff --git a/doc/versioning/submod_versioning.md b/doc/versioning/submod_versioning.md index b602197..ea2f27c 100644 --- a/doc/versioning/submod_versioning.md +++ b/doc/versioning/submod_versioning.md @@ -7,11 +7,12 @@ table, th, td { # Software Configuration Management with GIT Submodules -- [Abstract](#abstract) -- [Used Terminology](#used-terminology) -- [Git Submodules](#git-submodules) -- [Versioning of Submodules via Branches](#versioning-of-submodules-via-branches) -- [Git Commands for Different Use Case](#git-commands-for-different-use-cases) +* [Abstract](#abstract) +* [Used Terminology](#used-terminology) + +* [Git Submodules](#git-submodules) +* [Versioning of Submodules via Branches](#versioning-of-submodules-via-branches) +* [Git Commands for Different Use Case](#git-commands-for-different-use-cases) ## Abstract @@ -19,7 +20,7 @@ The goal of configuration management is to manage and maintain all components used for the creation of a software system, so that all users of this software work with defined versions. This article describes a method using the GIT version control system and -submodules to implement detailed versioning of asofware based system. +submodules to implement detailed versioning of software based system. The basic idea of this method is to divide a software system into components that are individually versioned. It is suitable for projects with high functional safety requirements. The administrative overhead @@ -51,12 +52,12 @@ the same as the path entry, but can be customized (--name option for submodule add). The entries for "path" and "url" are always present, branch is optional. -- The Path field determines the file path where the submodule will apear +* The path field determines the file path where the submodule will apear within the working copy of the referencing repository. -- The url field is the access path to the submodule repository. It is +* The url field is the access path to the submodule repository. It is the same URL that is used for a "git clone" of the submodule repository.. -- The "branch" field is optional. It only exists if you want the base +* The "branch" field is optional. It only exists if you want the base repository to follow a branch of the submodule. It will be used consistently later when applying this method. @@ -89,15 +90,15 @@ always starts with this component. Most project use exactly one base component. Multiple base components can be useful, if a project contains independent sub-projects. A base component consists of -- The basic system content of the project, for example the directory +* The basic system content of the project, for example the directory tree, project level documentation and scripts for project management (tools, build scripts ....) -- References to other versioned components. +* References to other versioned components. #### Subsystem Component -A "subsystem" is a composition of components similar to a base +A "subsystem" component is a composition of components similar to a base component.  It supports the creation of versioned subsystems, which in turn consist of components. An example of such a subsystem component is a communication stack that is composed of services, protocols and device @@ -135,8 +136,8 @@ by this methodology. GIT manages submodules in two distinct places within a repository: -- Via the .gitmodules file in the root directory of a repository -- Within the repository index under .git/modules and in .git/config. +* Via the .gitmodules file in the root directory of a repository +* Within the repository index under .git/modules and in .git/config. The settings in the .gitmodules file are under version control and visible to a user in the working copy. But sadly this file is primarily @@ -145,16 +146,16 @@ version is a reference to a commit id of the submodule, which is stored in the index and not in the .gitmodules file. This leads to the following problems: -- The contents of the .gitmodules file does not contain all the +* The contents of the .gitmodules file does not contain all the information about a submodule configuration. -- It is not possible to specify the commit id via a tag within the +* It is not possible to specify the commit id via a tag within the .gitmodules file. -- The GIT submodule commands only show commit hashes. Used labels and +* The GIT submodule commands only show commit hashes. Used labels and branches must be determined via additional detours. This complicates both the configuration and the documentation of the used versions for a complete system. Ideally this should be visible -from a central location, e.g.  within the .gitmodules files. +from a central location, e.g. within the .gitmodules files. Unfortunately tags are not supported there to request defined versions of submodules. An alternative to the missing tags support is possible via branches by using the optional "branch" entry. This avoids @@ -169,15 +170,17 @@ submodules for both, development and configuration management. The versions of the components are controlled **only** using "branch" entries in .gitmodules. This restriction has the following benefits: -- The configuration of the complete system is entirely defined by the +* The configuration of the complete system is entirely defined by the .gitmodules files in the base component and any subsystem component. -- The component configuration is documented and easily readable by +* The component configuration is documented and easily readable by everyone when checking out a configuration. -- The configuration documentation is ensured to be correct as it is also +* The configuration documentation is ensured to be correct as it is also read and used by the GIT operations. -- The workflows for creating development and release versions are the +* The workflows for creating development and release versions are the same. +These branches should be read-only once created, as they can be used as trackers for the submodule file. + Example: ![image](./images/gitmodule_banch_versions.png) @@ -198,15 +201,15 @@ will get used. This leads to an obvious problem compared to tags usage. Pushes to a branch change its HEAD and as such leave the originally versioned commit. This problem can be mitigated as follows. -- GIT repository hosting environments like Github or BitBucket support +* GIT repository hosting environments like Github or BitBucket support rights management for branches. It is possible to prohibit the modification of certain branches or restrict them to privileged users. A branch behaves then logically in the same way as a tag. It always represents the same commit. -- The ability to change a release branch may even be desirable if bug +* The ability to change a release branch may even be desirable if bug fixes are to be performed during release phases. However, further changes after the release phase need to be avoided. -- An additional release **Tag** gets created that is pointing to the +* An additional release **Tag** gets created that is pointing to the same commit as the branch HEAD. The "git submodule status" command then shows, if the branch has moved away from this label by further commits. This allows an unintentional change to be detected, for @@ -220,7 +223,7 @@ performed: 1. A release tag is created on the targeted commit: "git tag -m "Release X.Y.Z" VX.Y.Z \" 2. A release branch is created from the above release tag: "git branch - release/VX.Y.Z VX.Y.Z" + release/vX.Y.Z VX.Y.Z" 3. The tags and the branch are "pushed". A successful creation of a component version will then looks like this: @@ -234,9 +237,9 @@ branches are pushed. A demo repository for demonstrating the submodule versioning with branches is available in BitBucket. The clone URL is -https://bitbucket.org/nhjschulz/base.git. +. -#### Create a local clone of the repo example including the submodules: +#### Create a local clone of the repo example including the submodules ```bash $ git clone https://bitbucket.org/nhjschulz/base.git --recurse-submodules @@ -249,8 +252,8 @@ $ cd base$ git branch -a remotes/origin/HEAD -> origin/main remotes/origin/development remotes/origin/main -remotes/origin/release/V0.0.1 -remotes/origin/release/V0.1.0 +remotes/origin/release/v0.0.1 +remotes/origin/release/v0.1.0 ``` Important is the use of the "--recurse-submodules" option for the clone command. @@ -263,9 +266,9 @@ branches and a "development" branch. #### Checkout Release V0.0.1 ```bash -$ git checkout release/V0.0.1 --recurse-submodules -branch 'release/V0.0.1' set up to track 'origin/release/V0.0.1'. -Switched to a new branch 'release/V0.0.1' +$ git checkout release/v0.0.1 --recurse-submodules +branch 'release/v0.0.1' set up to track 'origin/release/v0.0.1'. +Switched to a new branch 'release/v0.0.1' $ git submodule status 1cc129c0c4bba38384149e53a1143b8b4a370a30 subm/a (V0.0.1) ee28a60fabf10470991d83615021650987885c71 subm/b (V0.0.1) @@ -273,18 +276,19 @@ $ git submodule status The repository working copy is now represents the release V0.0.1 state. The submodule repositories are also using "initial" version number. -Note that each submodule uses its own "release/V0.0.1" branch here. +Note that each submodule uses its own "release/v0.0.1" branch here. #### Checkout Release V0.1.0 ```bash -$ git checkout release/V0.1.0 --recurse-submodules -branch 'release/V0.1.0' set up to track 'origin/release/V0.1.0'. -Switched to a new branch 'release/V0.1.0' +$ git checkout release/v0.1.0 --recurse-submodules +branch 'release/v0.1.0' set up to track 'origin/release/v0.1.0'. +Switched to a new branch 'release/v0.1.0' $ git submodule status c776b6f3ae2e58de0b1dd05302b48004b23492c5 subm/a (V0.1.0) ee28a60fabf10470991d83615021650987885c71 subm/b (V0.0.1) ``` + The switch to release V0.1.0 also changed the version of submodule "subm/a". It also advanced to V0.1.0. The second submodule "subm/b" didn't switch in this version and is still using the V0.0.1. @@ -519,7 +523,7 @@ component  working copy, but does not touch the submodules yet. The submodules are updated to the commits of the branch HEADs as defined by the .gitmodules file. - + $ git submodule update --init --recursive --remote Submodule path 'subm/a': checked out'382a28f0d54609483a6843c5f13d879868b7b809' @@ -530,15 +534,17 @@ defined by the .gitmodules file. ```{note} Git pull also offers a "--recurse-submodules" option, which automatically adjusts the submodules as well. However, this only works with already known submodules. If new entries appear in .gitmodules with the pull, they will not be processed and a "submodule update" will still be necessary. It is currently more safe to go with the sequence of pull and "submodule update". | ``` + (changing-a-submodule-branch)= + #### Changing a Submodule Branch This scenario describes the change of a submodule to another existing branch. -- Integrators use it to update submodules to point to new versions. In +* Integrators use it to update submodules to point to new versions. In this case, the base component should be on an integration branch. -- Developers use this to set submodules to a development branch for +* Developers use this to set submodules to a development branch for further development. In this case, the base component should be also on a development branch (e.g. feature/x or development). @@ -597,7 +603,7 @@ submodule versions in the working copy have not (yet) changed.   [submodule "subm/a"] path = subm/a url = https://bitbucket.org/nhjschulz/subm_a.git - -   branch = release/V0.1.0
+ -   branch = release/v0.1.0
+   branch = development
[submodule "subm/b"]
path = subm/b
@@ -684,9 +690,9 @@ you have a defined configuration at the beginning. A component Check out the desired version in the base component. - $ git checkout release/V0.1.0 - Switched to branch 'release/V0.1.0' - Your branch is up to date with 'origin/release/V0.1.0'. + $ git checkout release/v0.1.0 + Switched to branch 'release/v0.1.0' + Your branch is up to date with 'origin/release/v0.1.0'. @@ -701,7 +707,7 @@ you have a defined configuration at the beginning. A component

git log <ID> -n 1

Check the status of the component. As expected, we are on a commit with no branch context.

-

The log command shows that this commit belongs to the V0.1.0 tag  .  +

The log command shows that this commit belongs to the V0.1.0 tag  . Since we want to add a feature to this version, we create a new branch for it in the next step. @@ -712,7 +718,7 @@ for it in the next step. nothing to commit, working tree clean $ git log c776b6f -n 1 - commit c776b6f3ae2e58de0b1dd05302b48004b23492c5 (HEAD, tag: V0.1.0,origin/release/V0.1.0, release/V0.1.0) + commit c776b6f3ae2e58de0b1dd05302b48004b23492c5 (HEAD, tag: V0.1.0,origin/release/v0.1.0, release/v0.1.0) Author: Norbert Schulz <github@schulznorbert.de Date:   Mon Sep 30 16:23:33 2024 +0200 @@ -758,8 +764,8 @@ A "git status" in the base repository returns the following: ```bash $ git status -On branch release/V0.1.0 -Your branch is up to date with 'origin/release/V0.1.0'. +On branch release/v0.1.0 +Your branch is up to date with 'origin/release/v0.1.0'. Changes not staged for commit:   (use "git add \..." to update what will be committed) @@ -778,11 +784,11 @@ The previous version branch is still listed in .gitmodules, but the commit hash in the submodule is the HEAD of the new branch. Possible options to handle this situation are: -- Create a development branch in the base module and update the feature +* Create a development branch in the base module and update the feature branch of the submodule inside .gitmodules and push. This creates a "tracking development branch" that can be shared with other developers. -- Create a new version of the submodule for integration and discard the +* Create a new version of the submodule for integration and discard the local changes with "git submodule update --init --remote --recursive". A integrator then later generates an update of the base repository that targets the new version of the submodule. @@ -848,8 +854,8 @@ V2.0.0. <version_tag_name> Create a version branch for the tag you just created. - - $ git branch release/V2.0.0 V2.0.0 + + git branch release/v2.0.0 V2.0.0 git push  --set-upstream origin @@ -860,11 +866,11 @@ name on the left is the banch name in the local repository. The right name will be the new branch in the "upstream" repository. - $ git push --set-upstream origin release/V2.0.0:release/V2.0.0 + $ git push --set-upstream origin release/v2.0.0:release/v2.0.0 To https://bitbucket.org/nhjschulz/subm_a.git (https://bitbucket.org/nhjschulz/subm_a.git) -  * [new branch]      release/V2.0.0 -> release/V2.0.0 - branch 'release/V2.0.0' set up to track 'origin/release/V2.0.0'. +  * [new branch]      release/v2.0.0 -> release/v2.0.0 + branch 'release/v2.0.0' set up to track 'origin/release/v2.0.0'. @@ -935,8 +941,8 @@ example, the version of the subm/a component has been increased [submodule "subm/a"] path = subm/a url = https://bitbucket.org/nhjschulz/subm_a.git - -   branch = release/V0.1.0 - + branch = release/V2.0.0 + -   branch = release/v0.1.0 + + branch = release/v2.0.0 [submodule "subm/b"] path = subm/b url = https://bitbucket.org/nhjschulz/subm_b.git @@ -1008,11 +1014,11 @@ component is not included in .submodules. Optional: Create a release branch for the new version: - $ git branch release/V2.0.0 V2.0.0 + $ git branch release/v2.0.0 V2.0.0 - $ git push --set-upstream origin release/V2.0.0:release/V2.0.0 - * [new branch]      release/V2.0.0 ->; release/V2.0.0 - branch 'release/V2.0.0' set up to track 'origin/release/V2.0.0'. + $ git push --set-upstream origin release/v2.0.0:release/v2.0.0 + * [new branch]      release/v2.0.0 ->; release/v2.0.0 + branch 'release/v2.0.0' set up to track 'origin/release/v2.0.0'.