From 8abedec1cef532f5167560d697cf3a46f0cd6b83 Mon Sep 17 00:00:00 2001 From: damithc Date: Tue, 12 Sep 2023 01:20:47 +0800 Subject: [PATCH 001/296] Migrate docs to MarkBind Let's migrate the docs site from Jekyll to MarkBind. Primary author: @tlylt in se-edu/addressbook-level3/pull/156 Further tweaks: @damithc in se-edu/addressbook-level3/pull/206 --- .github/workflows/docs.yml | 25 + .gitignore | 1 + docs/.gitignore | 23 + docs/AboutUs.md | 8 +- docs/Configuration.md | 6 +- docs/DevOps.md | 13 +- docs/DeveloperGuide.md | 116 +- docs/Documentation.md | 28 +- docs/Gemfile | 10 - docs/Logging.md | 6 +- docs/SettingUp.md | 27 +- docs/Testing.md | 19 +- docs/UserGuide.md | 52 +- docs/_config.yml | 15 - docs/_data/projects.yml | 23 - docs/_includes/custom-head.html | 6 - docs/_includes/head.html | 12 - docs/_includes/header.html | 36 - docs/_layouts/alt-page.html | 14 - docs/_layouts/default.html | 18 - docs/_layouts/page.html | 14 - docs/_markbind/layouts/default.md | 66 + docs/_markbind/variables.json | 3 + docs/_markbind/variables.md | 4 + docs/_sass/minima/_base.scss | 295 - docs/_sass/minima/_layout.scss | 263 - docs/_sass/minima/custom-mixins.scss | 21 - docs/_sass/minima/custom-styles.scss | 34 - docs/_sass/minima/custom-variables.scss | 76 - docs/_sass/minima/initialize.scss | 51 - docs/_sass/minima/skins/classic.scss | 84 - docs/_sass/minima/skins/solarized-dark.scss | 4 - docs/_sass/minima/skins/solarized.scss | 133 - docs/assets/css/style.scss | 12 - docs/images/ArchitectureDiagram.png | Bin 19887 -> 0 bytes docs/images/ArchitectureSequenceDiagram.png | Bin 15175 -> 0 bytes docs/images/BetterModelClassDiagram.png | Bin 14116 -> 0 bytes docs/images/CommitActivityDiagram.png | Bin 16227 -> 0 bytes docs/images/ComponentManagers.png | Bin 17411 -> 0 bytes docs/images/DeleteSequenceDiagram.png | Bin 28142 -> 0 bytes docs/images/LogicClassDiagram.png | Bin 36769 -> 0 bytes docs/images/LogicStorageDIP.png | Bin 5808 -> 0 bytes docs/images/ModelClassDiagram.png | Bin 27204 -> 0 bytes docs/images/ParserClasses.png | Bin 28856 -> 0 bytes docs/images/StorageClassDiagram.png | Bin 29426 -> 0 bytes docs/images/UiClassDiagram.png | Bin 48363 -> 0 bytes docs/images/UndoRedoState0.png | Bin 6619 -> 0 bytes docs/images/UndoRedoState1.png | Bin 7454 -> 0 bytes docs/images/UndoRedoState2.png | Bin 7855 -> 0 bytes docs/images/UndoRedoState3.png | Bin 7588 -> 0 bytes docs/images/UndoRedoState4.png | Bin 7605 -> 0 bytes docs/images/UndoRedoState5.png | Bin 9427 -> 0 bytes docs/index.md | 6 +- docs/package-lock.json | 8587 +++++++++++++++++++ docs/package.json | 14 + docs/site.json | 29 + docs/stylesheets/main.css | 144 + docs/team/johndoe.md | 4 +- 58 files changed, 9056 insertions(+), 1246 deletions(-) create mode 100644 .github/workflows/docs.yml create mode 100644 docs/.gitignore delete mode 100644 docs/Gemfile delete mode 100644 docs/_config.yml delete mode 100644 docs/_data/projects.yml delete mode 100644 docs/_includes/custom-head.html delete mode 100644 docs/_includes/head.html delete mode 100644 docs/_includes/header.html delete mode 100644 docs/_layouts/alt-page.html delete mode 100644 docs/_layouts/default.html delete mode 100644 docs/_layouts/page.html create mode 100644 docs/_markbind/layouts/default.md create mode 100644 docs/_markbind/variables.json create mode 100644 docs/_markbind/variables.md delete mode 100644 docs/_sass/minima/_base.scss delete mode 100644 docs/_sass/minima/_layout.scss delete mode 100644 docs/_sass/minima/custom-mixins.scss delete mode 100644 docs/_sass/minima/custom-styles.scss delete mode 100644 docs/_sass/minima/custom-variables.scss delete mode 100644 docs/_sass/minima/initialize.scss delete mode 100644 docs/_sass/minima/skins/classic.scss delete mode 100644 docs/_sass/minima/skins/solarized-dark.scss delete mode 100644 docs/_sass/minima/skins/solarized.scss delete mode 100644 docs/assets/css/style.scss delete mode 100644 docs/images/ArchitectureDiagram.png delete mode 100644 docs/images/ArchitectureSequenceDiagram.png delete mode 100644 docs/images/BetterModelClassDiagram.png delete mode 100644 docs/images/CommitActivityDiagram.png delete mode 100644 docs/images/ComponentManagers.png delete mode 100644 docs/images/DeleteSequenceDiagram.png delete mode 100644 docs/images/LogicClassDiagram.png delete mode 100644 docs/images/LogicStorageDIP.png delete mode 100644 docs/images/ModelClassDiagram.png delete mode 100644 docs/images/ParserClasses.png delete mode 100644 docs/images/StorageClassDiagram.png delete mode 100644 docs/images/UiClassDiagram.png delete mode 100644 docs/images/UndoRedoState0.png delete mode 100644 docs/images/UndoRedoState1.png delete mode 100644 docs/images/UndoRedoState2.png delete mode 100644 docs/images/UndoRedoState3.png delete mode 100644 docs/images/UndoRedoState4.png delete mode 100644 docs/images/UndoRedoState5.png create mode 100644 docs/package-lock.json create mode 100644 docs/package.json create mode 100644 docs/site.json create mode 100644 docs/stylesheets/main.css diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 00000000000..57737a615fc --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,25 @@ +name: MarkBind Action + +on: + push: + branches: + - master + +jobs: + build_and_deploy: + runs-on: ubuntu-latest + steps: + - name: Install Graphviz + run: sudo apt-get install graphviz + - name: Install Java + uses: actions/setup-java@v3 + with: + java-version: '11' + distribution: 'temurin' + - name: Build & Deploy MarkBind site + uses: MarkBind/markbind-action@v2 + with: + token: ${{ secrets.GITHUB_TOKEN }} + rootDirectory: './docs' + baseUrl: '/addressbook-level3' # replace with your repo name + version: '^5.1.0' diff --git a/.gitignore b/.gitignore index 284c4ca7cd9..eab4c7db6a5 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,4 @@ src/test/data/sandbox/ # MacOS custom attributes files created by Finder .DS_Store docs/_site/ +docs/_markbind/logs/ diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 00000000000..1748e487fbd --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,23 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +_markbind/logs/ + +# Dependency directories +node_modules/ + +# Production build files (change if you output the build to a different directory) +_site/ + +# Env +.env +.env.local + +# IDE configs +.vscode/ +.idea/* +*.iml diff --git a/docs/AboutUs.md b/docs/AboutUs.md index ff3f04abd02..8cf4ab68e9e 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -1,9 +1,11 @@ --- -layout: page -title: About Us + layout: default.md + title: "About Us" --- -We are a team based in the [School of Computing, National University of Singapore](https://www.comp.nus.edu.sg). +# About Us + +We are a team based in the [School of Computing, National University of Singapore](http://www.comp.nus.edu.sg). You can reach us at the email `seer[at]comp.nus.edu.sg` diff --git a/docs/Configuration.md b/docs/Configuration.md index 13cf0faea16..32f6255f3b9 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -1,6 +1,8 @@ --- -layout: page -title: Configuration guide + layout: default.md + title: "Configuration guide" --- +# Configuration guide + Certain properties of the application can be controlled (e.g user preferences file location, logging level) through the configuration file (default: `config.json`). diff --git a/docs/DevOps.md b/docs/DevOps.md index d2fd91a6001..8228c845e86 100644 --- a/docs/DevOps.md +++ b/docs/DevOps.md @@ -1,12 +1,15 @@ --- -layout: page -title: DevOps guide + layout: default.md + title: "DevOps guide" + pageNav: 3 --- -* Table of Contents -{:toc} +# DevOps guide --------------------------------------------------------------------------------------------------------------------- + + + + ## Build automation diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 743c65a49d2..9fe677d1e4c 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -1,15 +1,19 @@ --- -layout: page -title: Developer Guide + layout: default.md + title: "Developer Guide" + pageNav: 3 --- -* Table of Contents -{:toc} + +# AB-3 Developer Guide + + + -------------------------------------------------------------------------------------------------------------------- ## **Acknowledgements** -* {list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the original source as well} +_{ list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the original source as well }_ -------------------------------------------------------------------------------------------------------------------- @@ -21,14 +25,9 @@ Refer to the guide [_Setting up and getting started_](SettingUp.md). ## **Design** -
- -:bulb: **Tip:** The `.puml` files used to create diagrams in this document `docs/diagrams` folder. Refer to the [_PlantUML Tutorial_ at se-edu/guides](https://se-education.org/guides/tutorials/plantUml.html) to learn how to create and edit diagrams. -
- ### Architecture - + The ***Architecture Diagram*** given above explains the high-level design of the App. @@ -53,7 +52,7 @@ The bulk of the app's work is done by the following four components: The *Sequence Diagram* below shows how the components interact with each other for the scenario where the user issues the command `delete 1`. - + Each of the four main components (also shown in the diagram above), @@ -62,7 +61,7 @@ Each of the four main components (also shown in the diagram above), For example, the `Logic` component defines its API in the `Logic.java` interface and implements its functionality using the `LogicManager.java` class which follows the `Logic` interface. Other components interact with a given component through its interface rather than the concrete class (reason: to prevent outside component's being coupled to the implementation of a component), as illustrated in the (partial) class diagram below. - + The sections below give more details of each component. @@ -70,7 +69,7 @@ The sections below give more details of each component. The **API** of this component is specified in [`Ui.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/Ui.java) -![Structure of the UI Component](images/UiClassDiagram.png) + The UI consists of a `MainWindow` that is made up of parts e.g.`CommandBox`, `ResultDisplay`, `PersonListPanel`, `StatusBarFooter` etc. All these, including the `MainWindow`, inherit from the abstract `UiPart` class which captures the commonalities between classes that represent parts of the visible GUI. @@ -89,14 +88,16 @@ The `UI` component, Here's a (partial) class diagram of the `Logic` component: - + The sequence diagram below illustrates the interactions within the `Logic` component, taking `execute("delete 1")` API call as an example. -![Interactions Inside the Logic Component for the `delete 1` Command](images/DeleteSequenceDiagram.png) + + + -
:information_source: **Note:** The lifeline for `DeleteCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline continues till the end of diagram. -
+**Note:** The lifeline for `DeleteCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline continues till the end of diagram. +
How the `Logic` component works: @@ -108,7 +109,7 @@ How the `Logic` component works: Here are the other classes in `Logic` (omitted from the class diagram above) that are used for parsing a user command: - + How the parsing works: * When called upon to parse a user command, the `AddressBookParser` class creates an `XYZCommandParser` (`XYZ` is a placeholder for the specific command name e.g., `AddCommandParser`) which uses the other classes shown above to parse the user command and create a `XYZCommand` object (e.g., `AddCommand`) which the `AddressBookParser` returns back as a `Command` object. @@ -117,7 +118,7 @@ How the parsing works: ### Model component **API** : [`Model.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/model/Model.java) - + The `Model` component, @@ -127,18 +128,20 @@ The `Model` component, * stores a `UserPref` object that represents the user’s preferences. This is exposed to the outside as a `ReadOnlyUserPref` objects. * does not depend on any of the other three components (as the `Model` represents data entities of the domain, they should make sense on their own without depending on other components) -
:information_source: **Note:** An alternative (arguably, a more OOP) model is given below. It has a `Tag` list in the `AddressBook`, which `Person` references. This allows `AddressBook` to only require one `Tag` object per unique tag, instead of each `Person` needing their own `Tag` objects.
+ + +**Note:** An alternative (arguably, a more OOP) model is given below. It has a `Tag` list in the `AddressBook`, which `Person` references. This allows `AddressBook` to only require one `Tag` object per unique tag, instead of each `Person` needing their own `Tag` objects.
- + -
+ ### Storage component **API** : [`Storage.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/storage/Storage.java) - + The `Storage` component, * can save both address book data and user preference data in JSON format, and read them back into corresponding objects. @@ -171,58 +174,67 @@ Given below is an example usage scenario and how the undo/redo mechanism behaves Step 1. The user launches the application for the first time. The `VersionedAddressBook` will be initialized with the initial address book state, and the `currentStatePointer` pointing to that single address book state. -![UndoRedoState0](images/UndoRedoState0.png) + Step 2. The user executes `delete 5` command to delete the 5th person in the address book. The `delete` command calls `Model#commitAddressBook()`, causing the modified state of the address book after the `delete 5` command executes to be saved in the `addressBookStateList`, and the `currentStatePointer` is shifted to the newly inserted address book state. -![UndoRedoState1](images/UndoRedoState1.png) + Step 3. The user executes `add n/David …​` to add a new person. The `add` command also calls `Model#commitAddressBook()`, causing another modified address book state to be saved into the `addressBookStateList`. -![UndoRedoState2](images/UndoRedoState2.png) + -
:information_source: **Note:** If a command fails its execution, it will not call `Model#commitAddressBook()`, so the address book state will not be saved into the `addressBookStateList`. + -
+**Note:** If a command fails its execution, it will not call `Model#commitAddressBook()`, so the address book state will not be saved into the `addressBookStateList`. + + Step 4. The user now decides that adding the person was a mistake, and decides to undo that action by executing the `undo` command. The `undo` command will call `Model#undoAddressBook()`, which will shift the `currentStatePointer` once to the left, pointing it to the previous address book state, and restores the address book to that state. -![UndoRedoState3](images/UndoRedoState3.png) + + + + -
:information_source: **Note:** If the `currentStatePointer` is at index 0, pointing to the initial AddressBook state, then there are no previous AddressBook states to restore. The `undo` command uses `Model#canUndoAddressBook()` to check if this is the case. If so, it will return an error to the user rather +**Note:** If the `currentStatePointer` is at index 0, pointing to the initial AddressBook state, then there are no previous AddressBook states to restore. The `undo` command uses `Model#canUndoAddressBook()` to check if this is the case. If so, it will return an error to the user rather than attempting to perform the undo. -
+
The following sequence diagram shows how an undo operation goes through the `Logic` component: -![UndoSequenceDiagram](images/UndoSequenceDiagram-Logic.png) + -
:information_source: **Note:** The lifeline for `UndoCommand` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram. + -
+**Note:** The lifeline for `UndoCommand` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram. + + Similarly, how an undo operation goes through the `Model` component is shown below: -![UndoSequenceDiagram](images/UndoSequenceDiagram-Model.png) + The `redo` command does the opposite — it calls `Model#redoAddressBook()`, which shifts the `currentStatePointer` once to the right, pointing to the previously undone state, and restores the address book to that state. -
:information_source: **Note:** If the `currentStatePointer` is at index `addressBookStateList.size() - 1`, pointing to the latest address book state, then there are no undone AddressBook states to restore. The `redo` command uses `Model#canRedoAddressBook()` to check if this is the case. If so, it will return an error to the user rather than attempting to perform the redo. + + +**Note:** If the `currentStatePointer` is at index `addressBookStateList.size() - 1`, pointing to the latest address book state, then there are no undone AddressBook states to restore. The `redo` command uses `Model#canRedoAddressBook()` to check if this is the case. If so, it will return an error to the user rather than attempting to perform the redo. -
+ Step 5. The user then decides to execute the command `list`. Commands that do not modify the address book, such as `list`, will usually not call `Model#commitAddressBook()`, `Model#undoAddressBook()` or `Model#redoAddressBook()`. Thus, the `addressBookStateList` remains unchanged. -![UndoRedoState4](images/UndoRedoState4.png) + Step 6. The user executes `clear`, which calls `Model#commitAddressBook()`. Since the `currentStatePointer` is not pointing at the end of the `addressBookStateList`, all address book states after the `currentStatePointer` will be purged. Reason: It no longer makes sense to redo the `add n/David …​` command. This is the behavior that most modern desktop applications follow. -![UndoRedoState5](images/UndoRedoState5.png) + The following activity diagram summarizes what happens when a user executes a new command: - + #### Design considerations: @@ -275,14 +287,14 @@ _{Explain here how the data archiving feature will be implemented}_ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*` -| Priority | As a …​ | I want to …​ | So that I can…​ | -| -------- | ------------------------------------------ | ------------------------------ | ---------------------------------------------------------------------- | -| `* * *` | new user | see usage instructions | refer to instructions when I forget how to use the App | -| `* * *` | user | add a new person | | -| `* * *` | user | delete a person | remove entries that I no longer need | -| `* * *` | user | find a person by name | locate details of persons without having to go through the entire list | -| `* *` | user | hide private contact details | minimize chance of someone else seeing them by accident | -| `*` | user with many persons in the address book | sort persons by name | locate a person easily | +| Priority | As a …​ | I want to …​ | So that I can…​ | +|----------|--------------------------------------------|------------------------------|------------------------------------------------------------------------| +| `* * *` | new user | see usage instructions | refer to instructions when I forget how to use the App | +| `* * *` | user | add a new person | | +| `* * *` | user | delete a person | remove entries that I no longer need | +| `* * *` | user | find a person by name | locate details of persons without having to go through the entire list | +| `* *` | user | hide private contact details | minimize chance of someone else seeing them by accident | +| `*` | user with many persons in the address book | sort persons by name | locate a person easily | *{More to be added}* @@ -334,10 +346,12 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli Given below are instructions to test the app manually. -
:information_source: **Note:** These instructions only provide a starting point for testers to work on; + + +**Note:** These instructions only provide a starting point for testers to work on; testers are expected to do more *exploratory* testing. -
+ ### Launch and shutdown diff --git a/docs/Documentation.md b/docs/Documentation.md index 3e68ea364e7..082e652d947 100644 --- a/docs/Documentation.md +++ b/docs/Documentation.md @@ -1,29 +1,21 @@ --- -layout: page -title: Documentation guide + layout: default.md + title: "Documentation guide" + pageNav: 3 --- -**Setting up and maintaining the project website:** - -* We use [**Jekyll**](https://jekyllrb.com/) to manage documentation. -* The `docs/` folder is used for documentation. -* To learn how set it up and maintain the project website, follow the guide [_[se-edu/guides] **Using Jekyll for project documentation**_](https://se-education.org/guides/tutorials/jekyll.html). -* Note these points when adapting the documentation to a different project/product: - * The 'Site-wide settings' section of the page linked above has information on how to update site-wide elements such as the top navigation bar. - * :bulb: In addition to updating content files, you might have to update the config files `docs\_config.yml` and `docs\_sass\minima\_base.scss` (which contains a reference to `AB-3` that comes into play when converting documentation pages to PDF format). -* If you are using Intellij for editing documentation files, you can consider enabling 'soft wrapping' for `*.md` files, as explained in [_[se-edu/guides] **Intellij IDEA: Useful settings**_](https://se-education.org/guides/tutorials/intellijUsefulSettings.html#enabling-soft-wrapping) +# Documentation Guide +* We use [**MarkBind**](https://markbind.org/) to manage documentation. +* The `docs/` folder contains the source files for the documentation website. +* To learn how set it up and maintain the project website, follow the guide [[se-edu/guides] Working with Forked MarkBind sites](https://se-education.org/guides/tutorials/markbind-forked-sites.html) for project documentation. **Style guidance:** * Follow the [**_Google developer documentation style guide_**](https://developers.google.com/style). +* Also relevant is the [_se-edu/guides **Markdown coding standard**_](https://se-education.org/guides/conventions/markdown.html). -* Also relevant is the [_[se-edu/guides] **Markdown coding standard**_](https://se-education.org/guides/conventions/markdown.html) - -**Diagrams:** - -* See the [_[se-edu/guides] **Using PlantUML**_](https://se-education.org/guides/tutorials/plantUml.html) -**Converting a document to the PDF format:** +**Converting to PDF** -* See the guide [_[se-edu/guides] **Saving web documents as PDF files**_](https://se-education.org/guides/tutorials/savingPdf.html) +* See the guide [_se-edu/guides **Saving web documents as PDF files**_](https://se-education.org/guides/tutorials/savingPdf.html). diff --git a/docs/Gemfile b/docs/Gemfile deleted file mode 100644 index c8385d85874..00000000000 --- a/docs/Gemfile +++ /dev/null @@ -1,10 +0,0 @@ -# frozen_string_literal: true - -source "https://rubygems.org" - -git_source(:github) {|repo_name| "https://github.com/#{repo_name}" } - -gem 'jekyll' -gem 'github-pages', group: :jekyll_plugins -gem 'wdm', '~> 0.1.0' if Gem.win_platform? -gem 'webrick' diff --git a/docs/Logging.md b/docs/Logging.md index 5e4fb9bc217..589644ad5c6 100644 --- a/docs/Logging.md +++ b/docs/Logging.md @@ -1,8 +1,10 @@ --- -layout: page -title: Logging guide + layout: default.md + title: "Logging guide" --- +# Logging guide + * We are using `java.util.logging` package for logging. * The `LogsCenter` class is used to manage the logging levels and logging destinations. * The `Logger` for a class can be obtained using `LogsCenter.getLogger(Class)` which will log messages according to the specified logging level. diff --git a/docs/SettingUp.md b/docs/SettingUp.md index aef33ec72fd..5e8b9d11991 100644 --- a/docs/SettingUp.md +++ b/docs/SettingUp.md @@ -1,27 +1,33 @@ --- -layout: page -title: Setting up and getting started + layout: default.md + title: "Setting up and getting started" + pageNav: 3 --- -* Table of Contents -{:toc} +# Setting up and getting started + + -------------------------------------------------------------------------------------------------------------------- ## Setting up the project in your computer -
:exclamation: **Caution:** + +**Caution:** Follow the steps in the following guide precisely. Things will not work out if you deviate in some steps. -
+ First, **fork** this repo, and **clone** the fork into your computer. If you plan to use Intellij IDEA (highly recommended): + 1. **Configure the JDK**: Follow the guide [_[se-edu/guides] IDEA: Configuring the JDK_](https://se-education.org/guides/tutorials/intellijJdk.html) to ensure Intellij is configured to use **JDK 17**. -1. **Import the project as a Gradle project**: Follow the guide [_[se-edu/guides] IDEA: Importing a Gradle project_](https://se-education.org/guides/tutorials/intellijImportGradleProject.html) to import the project into IDEA.
- :exclamation: Note: Importing a Gradle project is slightly different from importing a normal Java project. +1. **Import the project as a Gradle project**: Follow the guide [_[se-edu/guides] IDEA: Importing a Gradle project_](https://se-education.org/guides/tutorials/intellijImportGradleProject.html) to import the project into IDEA. + + Note: Importing a Gradle project is slightly different from importing a normal Java project. + 1. **Verify the setup**: 1. Run the `seedu.address.Main` and try a few commands. 1. [Run the tests](Testing.md) to ensure they all pass. @@ -34,10 +40,11 @@ If you plan to use Intellij IDEA (highly recommended): If using IDEA, follow the guide [_[se-edu/guides] IDEA: Configuring the code style_](https://se-education.org/guides/tutorials/intellijCodeStyle.html) to set up IDEA's coding style to match ours. -
:bulb: **Tip:** + + **Tip:** Optionally, you can follow the guide [_[se-edu/guides] Using Checkstyle_](https://se-education.org/guides/tutorials/checkstyle.html) to find how to use the CheckStyle within IDEA e.g., to report problems _as_ you write code. -
+ 1. **Set up CI** diff --git a/docs/Testing.md b/docs/Testing.md index 8a99e82438a..78ddc57e670 100644 --- a/docs/Testing.md +++ b/docs/Testing.md @@ -1,12 +1,15 @@ --- -layout: page -title: Testing guide + layout: default.md + title: "Testing guide" + pageNav: 3 --- -* Table of Contents -{:toc} +# Testing guide --------------------------------------------------------------------------------------------------------------------- + + + + ## Running tests @@ -19,8 +22,10 @@ There are two ways to run tests. * **Method 2: Using Gradle** * Open a console and run the command `gradlew clean test` (Mac/Linux: `./gradlew clean test`) -
:link: **Link**: Read [this Gradle Tutorial from the se-edu/guides](https://se-education.org/guides/tutorials/gradle.html) to learn more about using Gradle. -
+ + +**Link**: Read [this Gradle Tutorial from the se-edu/guides](https://se-education.org/guides/tutorials/gradle.html) to learn more about using Gradle. + -------------------------------------------------------------------------------------------------------------------- diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 27c2d1cf16c..aab9894c52b 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -1,12 +1,15 @@ --- -layout: page -title: User Guide + layout: default.md + title: "User Guide" + pageNav: 3 --- -AddressBook Level 3 (AB3) is a **desktop app for managing contacts, optimized for use via a Command Line Interface** (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, AB3 can get your contact management tasks done faster than traditional GUI apps. +# AB-3 User Guide -* Table of Contents -{:toc} +AddressBook Level 3 (AB3) is a **desktop app for managing contacts, optimized for use via a Line Interface** (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, AB3 can get your contact management tasks done faster than traditional GUI apps. + + + -------------------------------------------------------------------------------------------------------------------- @@ -42,9 +45,9 @@ AddressBook Level 3 (AB3) is a **desktop app for managing contacts, optimized fo ## Features -
+ -**:information_source: Notes about the command format:**
+**Notes about the command format:**
* Words in `UPPER_CASE` are the parameters to be supplied by the user.
e.g. in `add n/NAME`, `NAME` is a parameter which can be used as `add n/John Doe`. @@ -62,7 +65,7 @@ AddressBook Level 3 (AB3) is a **desktop app for managing contacts, optimized fo e.g. if the command specifies `help 123`, it will be interpreted as `help`. * If you are using a PDF version of this document, be careful when copying and pasting commands that span multiple lines as space characters surrounding line-breaks may be omitted when copied over to the application. -
+ ### Viewing help : `help` @@ -79,9 +82,10 @@ Adds a person to the address book. Format: `add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]…​` -
:bulb: **Tip:** -A person can have any number of tags (including 0) -
+ + +**Tip:** A person can have any number of tags (including 0) + Examples: * `add n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01` @@ -162,10 +166,12 @@ AddressBook data are saved in the hard disk automatically after any command that AddressBook data are saved automatically as a JSON file `[JAR file location]/data/addressbook.json`. Advanced users are welcome to update data directly by editing that data file. -
:exclamation: **Caution:** -If your changes to the data file makes its format invalid, AddressBook will discard all data and start with an empty data file at the next run. Hence, it is recommended to take a backup of the file before editing it.
-Furthermore, certain edits can cause the AddressBook to behave in unexpected ways (e.g., if a value entered is outside of the acceptable range). Therefore, edit the data file only if you are confident that you can update it correctly. -
+ + +**Caution:** +If your changes to the data file makes its format invalid, AddressBook will discard all data and start with an empty data file at the next run. Hence, it is recommended to take a backup of the file before editing it.
+Furthermore, certain edits can cause the AddressBook to behave in unexpected ways (e.g., if a value entered is outside the acceptable range). Therefore, edit the data file only if you are confident that you can update it correctly. +
### Archiving data files `[coming in v2.0]` @@ -189,12 +195,12 @@ _Details coming soon ..._ ## Command summary -Action | Format, Examples ---------|------------------ -**Add** | `add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]…​`
e.g., `add n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 t/friend t/colleague` -**Clear** | `clear` +Action | Format, Examples +-----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------- +**Add** | `add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]…​`
e.g., `add n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 t/friend t/colleague` +**Clear** | `clear` **Delete** | `delete INDEX`
e.g., `delete 3` -**Edit** | `edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [t/TAG]…​`
e.g.,`edit 2 n/James Lee e/jameslee@example.com` -**Find** | `find KEYWORD [MORE_KEYWORDS]`
e.g., `find James Jake` -**List** | `list` -**Help** | `help` +**Edit** | `edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [t/TAG]…​`
e.g.,`edit 2 n/James Lee e/jameslee@example.com` +**Find** | `find KEYWORD [MORE_KEYWORDS]`
e.g., `find James Jake` +**List** | `list` +**Help** | `help` diff --git a/docs/_config.yml b/docs/_config.yml deleted file mode 100644 index 6bd245d8f4e..00000000000 --- a/docs/_config.yml +++ /dev/null @@ -1,15 +0,0 @@ -title: "AB-3" -theme: minima - -header_pages: - - UserGuide.md - - DeveloperGuide.md - - AboutUs.md - -markdown: kramdown - -repository: "se-edu/addressbook-level3" -github_icon: "images/github-icon.png" - -plugins: - - jemoji diff --git a/docs/_data/projects.yml b/docs/_data/projects.yml deleted file mode 100644 index 8f3e50cb601..00000000000 --- a/docs/_data/projects.yml +++ /dev/null @@ -1,23 +0,0 @@ -- name: "AB-1" - url: https://se-edu.github.io/addressbook-level1 - -- name: "AB-2" - url: https://se-edu.github.io/addressbook-level2 - -- name: "AB-3" - url: https://se-edu.github.io/addressbook-level3 - -- name: "AB-4" - url: https://se-edu.github.io/addressbook-level4 - -- name: "Duke" - url: https://se-edu.github.io/duke - -- name: "Collate" - url: https://se-edu.github.io/collate - -- name: "Book" - url: https://se-edu.github.io/se-book - -- name: "Resources" - url: https://se-edu.github.io/resources diff --git a/docs/_includes/custom-head.html b/docs/_includes/custom-head.html deleted file mode 100644 index 8559a67ffad..00000000000 --- a/docs/_includes/custom-head.html +++ /dev/null @@ -1,6 +0,0 @@ -{% comment %} - Placeholder to allow defining custom head, in principle, you can add anything here, e.g. favicons: - - 1. Head over to https://realfavicongenerator.net/ to add your own favicons. - 2. Customize default _includes/custom-head.html in your source directory and insert the given code snippet. -{% endcomment %} diff --git a/docs/_includes/head.html b/docs/_includes/head.html deleted file mode 100644 index 83ac5326933..00000000000 --- a/docs/_includes/head.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - {%- include custom-head.html -%} - - {{page.title}} - - diff --git a/docs/_includes/header.html b/docs/_includes/header.html deleted file mode 100644 index 33badcd4f99..00000000000 --- a/docs/_includes/header.html +++ /dev/null @@ -1,36 +0,0 @@ - diff --git a/docs/_layouts/alt-page.html b/docs/_layouts/alt-page.html deleted file mode 100644 index 5dbc6ef245f..00000000000 --- a/docs/_layouts/alt-page.html +++ /dev/null @@ -1,14 +0,0 @@ ---- -layout: default ---- -
- -
-

{{ page.alt_title | escape }}

-
- -
- {{ content }} -
- -
diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html deleted file mode 100644 index e092cd572e0..00000000000 --- a/docs/_layouts/default.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - {%- include head.html -%} - - - - {%- include header.html -%} - -
-
- {{ content }} -
-
- - - - diff --git a/docs/_layouts/page.html b/docs/_layouts/page.html deleted file mode 100644 index 01e4b2a93b8..00000000000 --- a/docs/_layouts/page.html +++ /dev/null @@ -1,14 +0,0 @@ ---- -layout: default ---- -
- -
-

{{ page.title | escape }}

-
- -
- {{ content }} -
- -
diff --git a/docs/_markbind/layouts/default.md b/docs/_markbind/layouts/default.md new file mode 100644 index 00000000000..7348aace92c --- /dev/null +++ b/docs/_markbind/layouts/default.md @@ -0,0 +1,66 @@ + + + + +
+ + AB-3 +
  • User Guide
  • +
  • Developer Guide
  • +
  • About Us
  • +
  • :fab-github: +
  • +
  • + +
  • +
    +
    + +
    + +
    + {{ content }} +
    + + +
    + +
    + +
    + [**Powered by** {{MarkBind}}, generated on {{timestamp}}] +
    +
    diff --git a/docs/_markbind/variables.json b/docs/_markbind/variables.json new file mode 100644 index 00000000000..9d89eb0358b --- /dev/null +++ b/docs/_markbind/variables.json @@ -0,0 +1,3 @@ +{ + "jsonVariableExample": "Your variables can be defined here as well" +} diff --git a/docs/_markbind/variables.md b/docs/_markbind/variables.md new file mode 100644 index 00000000000..89ae5318fa4 --- /dev/null +++ b/docs/_markbind/variables.md @@ -0,0 +1,4 @@ + +To inject this HTML segment in your markbind files, use {{ example }} where you want to place it. +More generally, surround the segment's id with double curly braces. + diff --git a/docs/_sass/minima/_base.scss b/docs/_sass/minima/_base.scss deleted file mode 100644 index 0d3f6e80ced..00000000000 --- a/docs/_sass/minima/_base.scss +++ /dev/null @@ -1,295 +0,0 @@ -html { - font-size: $base-font-size; -} - -/** - * Reset some basic elements - */ -body, h1, h2, h3, h4, h5, h6, -p, blockquote, pre, hr, -dl, dd, ol, ul, figure { - margin: 0; - padding: 0; - -} - - - -/** - * Basic styling - */ -body { - font: $base-font-weight #{$base-font-size}/#{$base-line-height} $base-font-family; - color: $text-color; - background-color: $background-color; - -webkit-text-size-adjust: 100%; - -webkit-font-feature-settings: "kern" 1; - -moz-font-feature-settings: "kern" 1; - -o-font-feature-settings: "kern" 1; - font-feature-settings: "kern" 1; - font-kerning: normal; - display: flex; - min-height: 100vh; - flex-direction: column; - overflow-wrap: break-word; -} - - - -/** - * Set `margin-bottom` to maintain vertical rhythm - */ -h1, h2, h3, h4, h5, h6, -p, blockquote, pre, -ul, ol, dl, figure, -%vertical-rhythm { - margin-bottom: $spacing-unit / 2; -} - -hr { - margin-top: $spacing-unit; - margin-bottom: $spacing-unit; -} - -/** - * `main` element - */ -main { - display: block; /* Default value of `display` of `main` element is 'inline' in IE 11. */ -} - - - -/** - * Images - */ -img { - max-width: 100%; - vertical-align: middle; -} - - - -/** - * Figures - */ -figure > img { - display: block; -} - -figcaption { - font-size: $small-font-size; -} - - - -/** - * Lists - */ -ul, ol { - margin-left: $spacing-unit; -} - -li { - > ul, - > ol { - margin-bottom: 0; - } -} - - - -/** - * Headings - */ -h1, h2, h3, h4, h5, h6 { - font-weight: $base-font-weight; -} - - - -/** - * Links - */ -a { - color: $link-base-color; - text-decoration: none; - - &:visited { - color: $link-visited-color; - } - - &:hover { - color: $text-color; - text-decoration: underline; - } - - .social-media-list &:hover { - text-decoration: none; - - .username { - text-decoration: underline; - } - } -} - - -/** - * Blockquotes - */ -blockquote { - color: $brand-color; - border-left: 4px solid $brand-color-light; - padding-left: $spacing-unit / 2; - @include relative-font-size(1.125); - font-style: italic; - - > :last-child { - margin-bottom: 0; - } - - i, em { - font-style: normal; - } -} - - - -/** - * Code formatting - */ -pre, -code { - font-family: $code-font-family; - font-size: 0.9375em; - border: 1px solid $brand-color-light; - border-radius: 3px; - background-color: $code-background-color; -} - -code { - padding: 1px 5px; -} - -pre { - padding: 8px 12px; - overflow-x: auto; - - > code { - border: 0; - padding-right: 0; - padding-left: 0; - } -} - -.highlight { - border-radius: 3px; - background: $code-background-color; - @extend %vertical-rhythm; - - .highlighter-rouge & { - background: $code-background-color; - } -} - - - -/** - * Wrapper - */ -.wrapper { - max-width: calc(#{$content-width} - (#{$spacing-unit})); - margin-right: auto; - margin-left: auto; - padding-right: $spacing-unit / 2; - padding-left: $spacing-unit / 2; - @extend %clearfix; - - @media screen and (min-width: $on-large) { - max-width: calc(#{$content-width} - (#{$spacing-unit} * 2)); - padding-right: $spacing-unit; - padding-left: $spacing-unit; - } -} - - - -/** - * Clearfix - */ -%clearfix:after { - content: ""; - display: table; - clear: both; -} - - - -/** - * Icons - */ - -.orange { - color: #f66a0a; -} - -.grey { - color: #828282; -} - -/** - * Tables - */ -table { - margin-bottom: $spacing-unit; - width: 100%; - text-align: $table-text-align; - color: $table-text-color; - border-collapse: collapse; - border: 1px solid $table-border-color; - tr { - &:nth-child(even) { - background-color: $table-zebra-color; - } - } - th, td { - padding: ($spacing-unit / 3) ($spacing-unit / 2); - } - th { - background-color: $table-header-bg-color; - border: 1px solid $table-header-border; - } - td { - border: 1px solid $table-border-color; - } - - @include media-query($on-laptop) { - display: block; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; - } -} - -@media print { - /** - * Prevents page break from cutting through content when printing - */ - body { - display: block; - } - /** - * Replaces the top navigation menu with the project name when printing - */ - .site-header .wrapper { - display: none; - } - .site-header { - text-align: center; - } - .site-header:before { - content: "AB-3"; - font-size: 32px; - } -} - diff --git a/docs/_sass/minima/_layout.scss b/docs/_sass/minima/_layout.scss deleted file mode 100644 index ca99f981701..00000000000 --- a/docs/_sass/minima/_layout.scss +++ /dev/null @@ -1,263 +0,0 @@ -/** - * Site header - */ -.site-header { - border-top: 5px solid $brand-color-dark; - border-bottom: 1px solid $brand-color-light; - min-height: $spacing-unit * 1.865; - line-height: $base-line-height * $base-font-size * 2.25; - - // Positioning context for the mobile navigation icon - position: relative; -} - -.site-title { - @include relative-font-size(1.625); - font-weight: 300; - letter-spacing: -1px; - margin-bottom: 0; - float: left; - - @include media-query($on-palm) { - padding-right: 45px; - } - - &, - &:visited { - color: $brand-color-dark; - } -} - -.site-nav { - position: absolute; - top: 9px; - right: $spacing-unit / 2; - background-color: $background-color; - border: 1px solid $brand-color-light; - border-radius: 5px; - text-align: right; - - .nav-trigger { - display: none; - } - - .menu-icon { - float: right; - width: 36px; - height: 26px; - line-height: 0; - padding-top: 10px; - text-align: center; - - > svg path { - fill: $brand-color-dark; - } - } - - label[for="nav-trigger"] { - display: block; - float: right; - width: 36px; - height: 36px; - z-index: 2; - cursor: pointer; - } - - input ~ .trigger { - clear: both; - display: none; - } - - input:checked ~ .trigger { - display: block; - padding-bottom: 5px; - } - - .page-link { - color: $text-color; - line-height: $base-line-height; - display: block; - padding: 5px 10px; - - // Gaps between nav items, but not on the last one - &:not(:last-child) { - margin-right: 0; - } - margin-left: 20px; - } - - @media screen and (min-width: $on-medium) { - position: static; - float: right; - border: none; - background-color: inherit; - - label[for="nav-trigger"] { - display: none; - } - - .menu-icon { - display: none; - } - - input ~ .trigger { - display: block; - } - - .page-link { - display: inline; - padding: 0; - - &:not(:last-child) { - margin-right: 20px; - } - margin-left: auto; - } - } -} - - - -/** - * Page content - */ -.page-content { - padding: $spacing-unit 0; - flex: 1 0 auto; -} - -.page-heading { - @include relative-font-size(2); -} - -.post-list-heading { - @include relative-font-size(1.75); -} - -.post-list { - margin-left: 0; - list-style: none; - - > li { - margin-bottom: $spacing-unit; - } -} - -.post-meta { - font-size: $small-font-size; - color: $brand-color; -} - -.post-link { - display: block; - @include relative-font-size(1.5); -} - - - -/** - * Posts - */ -.post-header { - margin-bottom: $spacing-unit; -} - -.post-title, -.post-content h1 { - @include relative-font-size(2.625); - letter-spacing: -1px; - line-height: 1.15; - - @media screen and (min-width: $on-large) { - @include relative-font-size(2.625); - } -} - -.post-content { - margin-bottom: $spacing-unit; - - h1, h2, h3 { margin-top: $spacing-unit * 2 } - h4, h5, h6 { margin-top: $spacing-unit } - - h2 { - @include relative-font-size(1.75); - - @media screen and (min-width: $on-large) { - @include relative-font-size(2); - } - } - - h3 { - @include relative-font-size(1.375); - - @media screen and (min-width: $on-large) { - @include relative-font-size(1.625); - } - } - - h4 { - @include relative-font-size(1.25); - } - - h5 { - @include relative-font-size(1.125); - } - h6 { - @include relative-font-size(1.0625); - } -} - - -.social-media-list { - display: table; - margin: 0 auto; - li { - float: left; - margin: 5px 10px 5px 0; - &:last-of-type { margin-right: 0 } - a { - display: block; - padding: $spacing-unit / 4; - border: 1px solid $brand-color-light; - &:hover { border-color: darken($brand-color-light, 10%) } - } - } -} - - - -/** - * Pagination navbar - */ -.pagination { - margin-bottom: $spacing-unit; - @extend .social-media-list; - li { - a, div { - min-width: 41px; - text-align: center; - box-sizing: border-box; - } - div { - display: block; - padding: $spacing-unit / 4; - border: 1px solid transparent; - - &.pager-edge { - color: darken($brand-color-light, 5%); - border: 1px dashed; - } - } - } -} - - - -/** - * Grid helpers - */ -@media screen and (min-width: $on-large) { - .one-half { - width: calc(50% - (#{$spacing-unit} / 2)); - } -} diff --git a/docs/_sass/minima/custom-mixins.scss b/docs/_sass/minima/custom-mixins.scss deleted file mode 100644 index 9d4bedc1c67..00000000000 --- a/docs/_sass/minima/custom-mixins.scss +++ /dev/null @@ -1,21 +0,0 @@ -@mixin alert-variant($background, $border, $color) { - color: $color; - @include gradient-bg($background); - border-color: $border; - - .alert-link { - color: darken($color, 10%); - } -} - -@mixin gradient-bg($color, $foreground: null) { - @if $enable-gradients { - @if $foreground { - background-image: $foreground, linear-gradient(180deg, mix($body-bg, $color, 15%), $color); - } @else { - background-image: linear-gradient(180deg, mix($body-bg, $color, 15%), $color); - } - } @else { - background-color: $color; - } -} diff --git a/docs/_sass/minima/custom-styles.scss b/docs/_sass/minima/custom-styles.scss deleted file mode 100644 index 56b5d56b430..00000000000 --- a/docs/_sass/minima/custom-styles.scss +++ /dev/null @@ -1,34 +0,0 @@ -// Placeholder to allow defining custom styles that override everything else. -// (Use `_sass/minima/custom-variables.scss` to override variable defaults) -h2, h3, h4, h5, h6 { - color: #e46c0a; -} - -// Bootstrap style alerts -.alert { - position: relative; - padding: $alert-padding-y $alert-padding-x; - margin-bottom: $alert-margin-bottom; - border: $alert-border-width solid transparent; - border-radius : $alert-border-radius; -} - -// Headings for larger alerts -.alert-heading { - // Specified to prevent conflicts of changing $headings-color - color: inherit; -} - -// Provide class for links that match alerts -.alert-link { - font-weight: $alert-link-font-weight; -} - -// Generate contextual modifier classes for colorizing the alert. - -@each $color, $value in $theme-colors { - .alert-#{$color} { - @include alert-variant(color-level($value, $alert-bg-level), color-level($value, $alert-border-level), color-level($value, $alert-color-level)); - } -} - diff --git a/docs/_sass/minima/custom-variables.scss b/docs/_sass/minima/custom-variables.scss deleted file mode 100644 index a128970cbe7..00000000000 --- a/docs/_sass/minima/custom-variables.scss +++ /dev/null @@ -1,76 +0,0 @@ -// Placeholder to allow overriding predefined variables smoothly. - -//Bootstrap's default -$white: #fff !default; -$gray-100: #f8f9fa !default; -$gray-200: #e9ecef !default; -$gray-300: #dee2e6 !default; -$gray-400: #ced4da !default; -$gray-500: #adb5bd !default; -$gray-600: #6c757d !default; -$gray-700: #495057 !default; -$gray-800: #343a40 !default; -$gray-900: #212529 !default; -$black: #000 !default; -$blue: #0d6efd !default; -$indigo: #6610f2 !default; -$purple: #6f42c1 !default; -$pink: #d63384 !default; -$red: #dc3545 !default; -$orange: #fd7e14 !default; -$yellow: #ffc107 !default; -$green: #28a745 !default; -$teal: #20c997 !default; -$cyan: #17a2b8 !default; - -$primary: $blue !default; -$secondary: $gray-600 !default; -$success: $green !default; -$info: $cyan !default; -$warning: $yellow !default; -$danger: $red !default; -$light: $gray-100 !default; -$dark: $gray-800 !default; - -$theme-colors: ( - "primary": $primary, - "secondary": $secondary, - "success": $success, - "info": $info, - "warning": $warning, - "danger": $danger, - "light": $light, - "dark": $dark -) !default; - -$theme-color-interval: 8% !default; - -$body-bg: $white !default; -$body-color: $gray-900 !default; -$body-text-align: null !default; - -$enable-gradients: true; - -// Define alert colors, border radius, and padding. -$border-radius: .25rem !default; -$border-width: 1px !default; -$font-weight-bold: 700 !default; - -$alert-padding-y: .75rem !default; -$alert-padding-x: 1.25rem !default; -$alert-margin-bottom: 1rem !default; -$alert-border-radius: $border-radius !default; -$alert-link-font-weight: $font-weight-bold !default; -$alert-border-width: $border-width !default; - -$alert-bg-level: -10 !default; -$alert-border-level: -9 !default; -$alert-color-level: 6 !default; - -// Request a color level -// scss-docs-start color-level -@function color-level($color: $primary, $level: 0) { - $color-base: if($level > 0, $black, $white); - $level: abs($level); - @return mix($color-base, $color, $level * $theme-color-interval); -} diff --git a/docs/_sass/minima/initialize.scss b/docs/_sass/minima/initialize.scss deleted file mode 100644 index 30288811151..00000000000 --- a/docs/_sass/minima/initialize.scss +++ /dev/null @@ -1,51 +0,0 @@ -@charset "utf-8"; - -// Define defaults for each variable. - -$base-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Segoe UI Symbol", "Segoe UI Emoji", "Apple Color Emoji", Roboto, Helvetica, Arial, sans-serif !default; -$code-font-family: "Menlo", "Inconsolata", "Consolas", "Roboto Mono", "Ubuntu Mono", "Liberation Mono", "Courier New", monospace; -$base-font-size: 16px !default; -$base-font-weight: 400 !default; -$small-font-size: $base-font-size * 0.875 !default; -$base-line-height: 1.5 !default; - -$spacing-unit: 30px !default; - -$table-text-align: left !default; - -// Width of the content area -$content-width: 800px !default; - -$on-palm: 600px !default; -$on-laptop: 800px !default; - -$on-medium: $on-palm !default; -$on-large: $on-laptop !default; - -// Use media queries like this: -// @include media-query($on-palm) { -// .wrapper { -// padding-right: $spacing-unit / 2; -// padding-left: $spacing-unit / 2; -// } -// } -// Notice the following mixin uses max-width, in a deprecated, desktop-first -// approach, whereas media queries used elsewhere now use min-width. -@mixin media-query($device) { - @media screen and (max-width: $device) { - @content; - } -} - -@mixin relative-font-size($ratio) { - font-size: #{$ratio}rem; -} - -// Import pre-styling-overrides hook and style-partials. -@import - "minima/custom-variables", // Hook to override predefined variables. - "minima/custom-mixins", // Hook to add custom mixins. - "minima/base", // Defines element resets. - "minima/layout", // Defines structure and style based on CSS selectors. - "minima/custom-styles" // Hook to override existing styles. -; diff --git a/docs/_sass/minima/skins/classic.scss b/docs/_sass/minima/skins/classic.scss deleted file mode 100644 index 37ea9c5244c..00000000000 --- a/docs/_sass/minima/skins/classic.scss +++ /dev/null @@ -1,84 +0,0 @@ -@charset "utf-8"; - -$brand-color: #828282 !default; -$brand-color-light: lighten($brand-color, 40%) !default; -$brand-color-dark: darken($brand-color, 25%) !default; - -$text-color: #111 !default; -$background-color: #fdfdfd !default; -$code-background-color: #eef !default; - -$link-base-color: #2a7ae2 !default; -$link-visited-color: darken($link-base-color, 15%) !default; - -$table-text-color: lighten($text-color, 18%) !default; -$table-zebra-color: lighten($brand-color, 46%) !default; -$table-header-bg-color: lighten($brand-color, 43%) !default; -$table-header-border: lighten($brand-color, 36%) !default; -$table-border-color: $brand-color-light !default; - - -// Syntax highlighting styles should be adjusted appropriately for every "skin" -// ---------------------------------------------------------------------------- - -.highlight { - .c { color: #998; font-style: italic } // Comment - .err { color: #a61717; background-color: #e3d2d2 } // Error - .k { font-weight: bold } // Keyword - .o { font-weight: bold } // Operator - .cm { color: #998; font-style: italic } // Comment.Multiline - .cp { color: #999; font-weight: bold } // Comment.Preproc - .c1 { color: #998; font-style: italic } // Comment.Single - .cs { color: #999; font-weight: bold; font-style: italic } // Comment.Special - .gd { color: #000; background-color: #fdd } // Generic.Deleted - .gd .x { color: #000; background-color: #faa } // Generic.Deleted.Specific - .ge { font-style: italic } // Generic.Emph - .gr { color: #a00 } // Generic.Error - .gh { color: #999 } // Generic.Heading - .gi { color: #000; background-color: #dfd } // Generic.Inserted - .gi .x { color: #000; background-color: #afa } // Generic.Inserted.Specific - .go { color: #888 } // Generic.Output - .gp { color: #555 } // Generic.Prompt - .gs { font-weight: bold } // Generic.Strong - .gu { color: #aaa } // Generic.Subheading - .gt { color: #a00 } // Generic.Traceback - .kc { font-weight: bold } // Keyword.Constant - .kd { font-weight: bold } // Keyword.Declaration - .kp { font-weight: bold } // Keyword.Pseudo - .kr { font-weight: bold } // Keyword.Reserved - .kt { color: #458; font-weight: bold } // Keyword.Type - .m { color: #099 } // Literal.Number - .s { color: #d14 } // Literal.String - .na { color: #008080 } // Name.Attribute - .nb { color: #0086B3 } // Name.Builtin - .nc { color: #458; font-weight: bold } // Name.Class - .no { color: #008080 } // Name.Constant - .ni { color: #800080 } // Name.Entity - .ne { color: #900; font-weight: bold } // Name.Exception - .nf { color: #900; font-weight: bold } // Name.Function - .nn { color: #555 } // Name.Namespace - .nt { color: #000080 } // Name.Tag - .nv { color: #008080 } // Name.Variable - .ow { font-weight: bold } // Operator.Word - .w { color: #bbb } // Text.Whitespace - .mf { color: #099 } // Literal.Number.Float - .mh { color: #099 } // Literal.Number.Hex - .mi { color: #099 } // Literal.Number.Integer - .mo { color: #099 } // Literal.Number.Oct - .sb { color: #d14 } // Literal.String.Backtick - .sc { color: #d14 } // Literal.String.Char - .sd { color: #d14 } // Literal.String.Doc - .s2 { color: #d14 } // Literal.String.Double - .se { color: #d14 } // Literal.String.Escape - .sh { color: #d14 } // Literal.String.Heredoc - .si { color: #d14 } // Literal.String.Interpol - .sx { color: #d14 } // Literal.String.Other - .sr { color: #009926 } // Literal.String.Regex - .s1 { color: #d14 } // Literal.String.Single - .ss { color: #990073 } // Literal.String.Symbol - .bp { color: #999 } // Name.Builtin.Pseudo - .vc { color: #008080 } // Name.Variable.Class - .vg { color: #008080 } // Name.Variable.Global - .vi { color: #008080 } // Name.Variable.Instance - .il { color: #099 } // Literal.Number.Integer.Long -} diff --git a/docs/_sass/minima/skins/solarized-dark.scss b/docs/_sass/minima/skins/solarized-dark.scss deleted file mode 100644 index f3b1f387de0..00000000000 --- a/docs/_sass/minima/skins/solarized-dark.scss +++ /dev/null @@ -1,4 +0,0 @@ -@charset "utf-8"; - -$sol-is-dark: true; -@import "minima/skins/solarized"; diff --git a/docs/_sass/minima/skins/solarized.scss b/docs/_sass/minima/skins/solarized.scss deleted file mode 100644 index 982bd7f2990..00000000000 --- a/docs/_sass/minima/skins/solarized.scss +++ /dev/null @@ -1,133 +0,0 @@ -@charset "utf-8"; - -// Solarized skin -// ============== -// Created by Sander Voerman using the Solarized -// color scheme by Ethan Schoonover . - -// This style sheet implements two options for the minima.skin setting: -// "solarized" for light mode and "solarized-dark" for dark mode. -$sol-is-dark: false !default; - - -// Color scheme -// ------------ -// The inline comments show the canonical L*a*b values for each color. - -$sol-base03: #002b36; // 15 -12 -12 -$sol-base02: #073642; // 20 -12 -12 -$sol-base01: #586e75; // 45 -07 -07 -$sol-base00: #657b83; // 50 -07 -07 -$sol-base0: #839496; // 60 -06 -03 -$sol-base1: #93a1a1; // 65 -05 -02 -$sol-base2: #eee8d5; // 92 -00 10 -$sol-base3: #fdf6e3; // 97 00 10 -$sol-yellow: #b58900; // 60 10 65 -$sol-orange: #cb4b16; // 50 50 55 -$sol-red: #dc322f; // 50 65 45 -$sol-magenta: #d33682; // 50 65 -05 -$sol-violet: #6c71c4; // 50 15 -45 -$sol-blue: #268bd2; // 55 -10 -45 -$sol-cyan: #2aa198; // 60 -35 -05 -$sol-green: #859900; // 60 -20 65 - -$sol-mono3: $sol-base3; -$sol-mono2: $sol-base2; -$sol-mono1: $sol-base1; -$sol-mono00: $sol-base00; -$sol-mono01: $sol-base01; - -@if $sol-is-dark { - $sol-mono3: $sol-base03; - $sol-mono2: $sol-base02; - $sol-mono1: $sol-base01; - $sol-mono00: $sol-base0; - $sol-mono01: $sol-base1; -} - - -// Minima color variables -// ---------------------- - -$brand-color: $sol-mono1 !default; -$brand-color-light: mix($sol-mono1, $sol-mono3) !default; -$brand-color-dark: $sol-mono00 !default; - -$text-color: $sol-mono01 !default; -$background-color: $sol-mono3 !default; -$code-background-color: $sol-mono2 !default; - -$link-base-color: $sol-blue !default; -$link-visited-color: mix($sol-blue, $sol-mono00) !default; - -$table-text-color: $sol-mono00 !default; -$table-zebra-color: mix($sol-mono2, $sol-mono3) !default; -$table-header-bg-color: $sol-mono2 !default; -$table-header-border: $sol-mono1 !default; -$table-border-color: $sol-mono1 !default; - - -// Syntax highlighting styles -// -------------------------- - -.highlight { - .c { color: $sol-mono1; font-style: italic } // Comment - .err { color: $sol-red } // Error - .k { color: $sol-mono01; font-weight: bold } // Keyword - .o { color: $sol-mono01; font-weight: bold } // Operator - .cm { color: $sol-mono1; font-style: italic } // Comment.Multiline - .cp { color: $sol-mono1; font-weight: bold } // Comment.Preproc - .c1 { color: $sol-mono1; font-style: italic } // Comment.Single - .cs { color: $sol-mono1; font-weight: bold; font-style: italic } // Comment.Special - .gd { color: $sol-red } // Generic.Deleted - .gd .x { color: $sol-red } // Generic.Deleted.Specific - .ge { color: $sol-mono00; font-style: italic } // Generic.Emph - .gr { color: $sol-red } // Generic.Error - .gh { color: $sol-mono1 } // Generic.Heading - .gi { color: $sol-green } // Generic.Inserted - .gi .x { color: $sol-green } // Generic.Inserted.Specific - .go { color: $sol-mono00 } // Generic.Output - .gp { color: $sol-mono00 } // Generic.Prompt - .gs { color: $sol-mono01; font-weight: bold } // Generic.Strong - .gu { color: $sol-mono1 } // Generic.Subheading - .gt { color: $sol-red } // Generic.Traceback - .kc { color: $sol-mono01; font-weight: bold } // Keyword.Constant - .kd { color: $sol-mono01; font-weight: bold } // Keyword.Declaration - .kp { color: $sol-mono01; font-weight: bold } // Keyword.Pseudo - .kr { color: $sol-mono01; font-weight: bold } // Keyword.Reserved - .kt { color: $sol-violet; font-weight: bold } // Keyword.Type - .m { color: $sol-cyan } // Literal.Number - .s { color: $sol-magenta } // Literal.String - .na { color: $sol-cyan } // Name.Attribute - .nb { color: $sol-blue } // Name.Builtin - .nc { color: $sol-violet; font-weight: bold } // Name.Class - .no { color: $sol-cyan } // Name.Constant - .ni { color: $sol-violet } // Name.Entity - .ne { color: $sol-violet; font-weight: bold } // Name.Exception - .nf { color: $sol-blue; font-weight: bold } // Name.Function - .nn { color: $sol-mono00 } // Name.Namespace - .nt { color: $sol-blue } // Name.Tag - .nv { color: $sol-cyan } // Name.Variable - .ow { color: $sol-mono01; font-weight: bold } // Operator.Word - .w { color: $sol-mono1 } // Text.Whitespace - .mf { color: $sol-cyan } // Literal.Number.Float - .mh { color: $sol-cyan } // Literal.Number.Hex - .mi { color: $sol-cyan } // Literal.Number.Integer - .mo { color: $sol-cyan } // Literal.Number.Oct - .sb { color: $sol-magenta } // Literal.String.Backtick - .sc { color: $sol-magenta } // Literal.String.Char - .sd { color: $sol-magenta } // Literal.String.Doc - .s2 { color: $sol-magenta } // Literal.String.Double - .se { color: $sol-magenta } // Literal.String.Escape - .sh { color: $sol-magenta } // Literal.String.Heredoc - .si { color: $sol-magenta } // Literal.String.Interpol - .sx { color: $sol-magenta } // Literal.String.Other - .sr { color: $sol-green } // Literal.String.Regex - .s1 { color: $sol-magenta } // Literal.String.Single - .ss { color: $sol-magenta } // Literal.String.Symbol - .bp { color: $sol-mono1 } // Name.Builtin.Pseudo - .vc { color: $sol-cyan } // Name.Variable.Class - .vg { color: $sol-cyan } // Name.Variable.Global - .vi { color: $sol-cyan } // Name.Variable.Instance - .il { color: $sol-cyan } // Literal.Number.Integer.Long -} diff --git a/docs/assets/css/style.scss b/docs/assets/css/style.scss deleted file mode 100644 index b5ec6976efa..00000000000 --- a/docs/assets/css/style.scss +++ /dev/null @@ -1,12 +0,0 @@ ---- -# Only the main Sass file needs front matter (the dashes are enough) ---- - -@import - "minima/skins/{{ site.minima.skin | default: 'classic' }}", - "minima/initialize"; - -.icon { - height: 21px; - width: 21px -} diff --git a/docs/images/ArchitectureDiagram.png b/docs/images/ArchitectureDiagram.png deleted file mode 100644 index cd540665053ef53e3c0eb01ec3607b02f44a3ada..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19887 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 diff --git a/docs/images/ArchitectureSequenceDiagram.png b/docs/images/ArchitectureSequenceDiagram.png deleted file mode 100644 index 37ad06a2803cb13da66978062b40b9555ecbd55a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15175 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 diff --git a/docs/images/BetterModelClassDiagram.png b/docs/images/BetterModelClassDiagram.png deleted file mode 100644 index 02a42e35e76b2a1b61e7feade34a0271e0640aec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14116 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 diff --git a/docs/images/CommitActivityDiagram.png b/docs/images/CommitActivityDiagram.png deleted file mode 100644 index 5b464126b35fc8025f8b92e7261f5ed6287c5eae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16227 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 diff --git a/docs/images/ComponentManagers.png b/docs/images/ComponentManagers.png deleted file mode 100644 index ae52a35718a82846d19185f2e5bed573d67cfbcc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17411 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

    L`n{HvGzzHFon;CZ>OTfI1 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 diff --git a/docs/images/LogicStorageDIP.png b/docs/images/LogicStorageDIP.png deleted file mode 100644 index 871157f5a9c35321a8004b0017fe6a0533129e1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5808 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 TX#zhdLZYs$rBtk7`R2a>OJ+-` diff --git a/docs/images/ParserClasses.png b/docs/images/ParserClasses.png deleted file mode 100644 index 2caeeb1a067e5e2459376de1a91699a661b41855..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28856 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 diff --git a/docs/images/StorageClassDiagram.png b/docs/images/StorageClassDiagram.png deleted file mode 100644 index 18fa4d0d51f03505593ab4dbadd5821491548e4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29426 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�y3#e%kgElqe^sH=7 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 DN7m$8 diff --git a/docs/images/UiClassDiagram.png b/docs/images/UiClassDiagram.png deleted file mode 100644 index 11f06d686714cf02d88c4b32879bb71b11f56e13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48363 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 diff --git a/docs/images/UndoRedoState0.png b/docs/images/UndoRedoState0.png deleted file mode 100644 index c5f91b5853370c1d6a8b9f5f9a9724e4a4a2c429..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6619 zcmcJUcT`i`m&c>{6sa~qx`4=21b!+_A|TR41QZC6AOxfnIznh6hy@TSQkANpv;dJ3 zT7U>DEp$kLgx&>0l^Ozbeed_y%&ax@<~Os}{Bv{GS$my(_PP7J&;IO0JkZx>XW?T3 zfk5m!cQp(_pd+Ken8=Qm1JZ*T&&%m__(@A+qk>>cD4zFKu5!!jLn|>H4i!htmBtPGuAWUzjmsQZhHU6 zZyX=+{C7Ta-FcqSEo!Lg!V*?+!a@0>i9p~YPUPGs0l9^No_W7eVu*ru)uL_$Z!Ey=r3tkP7HjP-lJ49+NDrtH@*D%GmxkK{J7lw;NXYTiPp zaCz41FoueazS4_T9bJj)tV>nuP1o;i@ZK?W@%FR5Eh*(!@PPSNSh^UxJy&g*r}1&m zbErVwMl(2d+>xE*ka@Ydp+|m40z*XBcYZpRM}Xc;#dmsIM38>VG(hrdmOL#c;9o-o zUq|(GxDGXbF^{A`!qe|zCt~Gdqr3PhvFY!*U#IV9IF*raoF51^xu*hV6P59vxhmoP zPFglyu<<&~?7|z>Q;q6pti7w`T!|7=jhomyQNae7kLPMhD3mA8C@poAE0zVw*^CEvLAZK3uclXw!Yi`aaB>M>BWlAmO zV{Z=2p{m*8^fNh==^UAC-KuQ=d)XqxF`;>Q;p2FP-^UvznZ?3uJXbDojH-L7JQXE0 z`*t-a$MU=XxWw`fESWocxc|;ac8S?xPakGf6KnA(=E|uc zS?Si-k_}-e(v5WHZtJ2NHp59AIdCH*Mb(#T+*)U>0P z{?iKz2v%pv_S#5OORdfsfvwfJ&3r+F<%~Jl6(?xL5`Oz(#D}K^w_jF<-pRNWOPAnJ zruuB@oNaa?i;Q(Gd6EyXhn9ifUY#pTX}5nGGlAHqdRRdrm?+2Nps7C>Mu z5Tt?z`lp~A{aN)NptLp-pCzmf|2SVp^iJ?#UkBgZ?5r=1B6t0|SND50;h@#0WPA2= zt}kL#4|bx#%Z}tiX#6F;y`MkI5ChUQ4?Q(CH5e@AXY;pjY{Dx0eFmyUzDh5qO6y%8 zccjQ!)I2%K$!Vak-$^9WXYYqd3S`WDL0Wa;+#N>jm`-r?Q|gtm+TMg<#!^{a3}qr^ zv@VcJpILRzHByvDVEvpa2YUkqilm5$2(`kMzIF2H%bC@yC+e9J5zc8D8NtiL)t_{e z+Z07b8{w&PTO(XNGM2+-4l#tUv}rA~h2BDvApLNv^w|l{q!FJ*a$<6_`)Dn+DO)Sb zuq=f2r-Rh$$S;?9&Yf$iDlhLxwjr1Bk_rVk?Av4csW6U*rKP2}v7-aG0Jzp4AW(OBK<_=p#brlx&Rwl6B$Ekf^pFK1xb9-TtLqnKoHFrg zO<7nD>Jia6Ro=DGVln;^y+2A})RD%rD6}V^9|n@_ zTU%N_r?WeHaCCW%gFlP5BOej_U$XO4aEQ6hfG{@REIrzA^~P+fds04lxyojHdBl(a z>;)%;&&m?jfmC0Pj)-V&Z@(4rGY>MLKj987(knD8$uh5Wo0ym=g5lcQ+6;v)nU+2L zl9)in(*Ku`{ukmt+FLd`F)@ly?uw$~;2y#DD2Oj~U{Oz3mr6hrxEnirZXw8p5oaZm zl9CqAfwfZ~HIK>U{SEeKWpwUQ;)G{X;%Tro)m-jx6C z+c#r$dc`YaY0KK3ej@{)h5pN;qN38$Za?RHv}1&PmI{k^^F9V{FZaGnOG`^m&edPr zoy#0Uj-hB2Tzr{?xOhi~aw^*C1?G;jDRzm1JXdtmqoL)E*h~cAlahV=d7Z9TuUP1X z?&F=As&Gjd+6gXsZ{``NN~|43{NhDhK&#|ZdQf`w@MT=6kseCnPSt@1gg760O`KY&dwGDuT;+o4WSsD14JTG!Id&y zg1Rdj*0LNe2%b(KPc*fB;|WA}|I-k}Qr936za^-NI6C|g0>QbB)PPrN`}RE4Wu1C$ z7s*BBLhh=pj~_LbvBJSS6VubSzZB-RwAB6K8RX%aGiM6(gBg3RZuBi$u6}xr_1Bkx z#xdC-g`v!nWF!szihQi9u&T-|biIP=7N0vQRXO~atH>CljHXk^QWV?|^oA++G@H|> zPp{F6iNdL7MkhFhYJcRU8e4D&ZFDG*fGytAxY7RPE4xC=*%ik2m}#O>uD-u>Fd_?w z_>`MMBNwGE>1V1iV$l0jZ^X2h%3uzFYqs0%?`{-i4b`LQ*)b|9NlBMnBO)U9WV=`Y z-Qh>EiHYI{wU%`Ow9z_zZEbB{o+A)ThC2HC6?}!lGdhf=p|VnbE-rDrJAtwFf|Vx& zec&${Eh#C90vBa&wmQRu*1o66A#8{7NOwfX>Z-?(MTHAgQ}e~K^4D1Wa*ZUaRX>$0k<@QliM34<-#xl{#reI1>M@bLNm{JvLQlKm-jU71~-ok_nZ z&jRuO?uJ8BLP8$&i`?JdiT^?Z`McY-??F#3`tXF4)3e%9W==jWTibZgspZR(l6}Gf zpr>7Zr+Thd3kVD2okLQh(TipNYF9o6@o zMjv5eMGt)Vy1AFld0|!Vu54i4>0ufCX9%Q-lbyXs7zKKYRm-Z*fp?v*csaO0|8(Tk zsqon^qyNgN*j|>7kd(5x5xoD!z9U7}T}aNUcRXGKzD6sl*jzl+=Jsc7hM{u%XIHKs zEQ}4zmYif|)w%C-(?;v%eoqj1v2+(tNl^+xL~Zr@2B!~fZ?4E_r#;q`Y1?XKJ!H&h zBNG#gl+nQ?ESfP@UY;5hSSTenmE<{f+}?h468uRX?XYHgST9fCo0&lXwZo?$ePMd< zyzuT07V>CQ^D!CrkPxfKvYh-$rHFwbM9|J^z$)G>C(h z4V3-#?{Eg45;UOd`Pj+W`1!9z#z-zcpaDLGtlja3u_yt51hrz|MOc{cB3WKW#{7F* zTjDm7Mv<47Ul*Xccn~`y~Mkv3vb?>hNFDM zPhkqky3|j)9LNq7-FLLYwV18K#Xk#9=qyn2oJ6~h?%(y_h575=)zLBLnZimly{qvM znd|;=7(bGhc7j}tdO(>juy1eiTdvMDbB!a!HC~VH)Qk)s&2HYr4bV74_dTa${I^F? zBmx|Lu$y`7XE(EdvX7uQ2WLyZgf z87tm}YdrA6+D&paSy6H4-ZPgoZP6H=*SnJ$Ur49l*^Qq>Vxkyk= z%A;zO|lC0tRohn7u$*bhdK!;ynmf=&MH^($|TE zx7TNUtKZ?qE`!N9I}Ac)jhT}Z*R-zkQPiyXo*W%R9CuLVU!O_FOb7l}ooa$0%Yv%N zjxw%u1O6!ZA?ymynag`=kVsZkJ^U?jxORKAkGxaXl{DsO!;iT2SOc4t^_{#k-}4=i zA=NbAwK+OBE*=~75mOM{NU&E$i!3(ytL^Iu3!jmah!}igRPBAOq4S&g8q>O#W=QCNIe=t)CeC zvUfGdS@)nO_IKu=5Ck{6q}S9oOu*5z4Y!~WeYeAB6D?rr2B({0)qU_ zXah?xBqTo69kCJfskV=RwL1DFX$$f4^7D(Q);jEOWOk7)E8){rcUAcyKZ9SJ)e3Y1 z6FL{^dzEv{=Fi+V8NDE8W({vE_diGM{2g**9ocH9I=;x=|I5_0p@H0O{)eiM_6Q9A zIlA*q!`sX(Z%;wYg}oBElaj+==$}W9)gO@E2<5+ZTZ0yd?&iJ?$s?oTiK}|VuYp~io_h6ohIVj_0`0Q<2 z|Mh7AI~lVIgdPdd7axrcJ1#D+I3jBAr;d)!n-Udv(6VTXOez@Zb|-4$YZ%tNQa|%J z2zk0A8K`etU(E_1tcIz-Wb4U2^2I{KdlP}JyYwL~A>rbo>qyNeKs*(0BLxaaLL$Rw z7XZkFqZykPcwb0Q&`RC*f*xo*t4XK>sGyTHmIq6wfHKoIHa@;DN00yHJOGaiMWFE{ zz<`&RS7F%W*>ve^@st@tTqliMc}T(rf2uqhV$SCyi{2V?02al0Rqri2a=X{>+5?ni zx0PxF@_3jXJu9x8l=rB(LbEKkroF%d4gh_tP@qm~X}KHt{bq`hp`n+z_vRn-9wb3U539!KC%1>a zW9sGwI>5+fp!9P9F{Gzfw6dTwM?&yQ$mO*3bPE{FnbUgC(d}Xt;<(kN|0f9hyBg|$ z+s61GO19!VvMXZ*RVk^C#m#_X`3U>E>6(_77SE|B0LFiCo(<7zr#U7)ijIka1If1Z%$etv6}N0ja7^GGXo7)r!(8eiv4L8 zYID2@fM7TwxTmK_%DkezrDYIcoY9^y@@~U<$@N=vs)sk_JCeSYu1F$?xx>Zb4|tU#dC zkEe?skJY2Z#l`13(*x(yk#2RHWQ9?`uPK|z1PhCRg2mzE@85WUPnWY%K3l5;rjl2# zEPdCEo{W zfB-kQeLBU)26q`ag#>qOuX0cfODHjhD^ zTtVZ$qK>>5Cw54t@FB?*Sk~@WPSx@O8XjomB)+X^($v)S;>S?dH#Q)tC^<;~(g=Rr z0KL~YTM-@I9Sk9!ozp(fi*YnVAjd=%q?q)Lg6v)VF-zzaAgS zBa@+uJ^&E4GwtRLphs6;F54`RqXIgOQQ4aZm~acawp7;TyE3XQBZJM$%PTK84!ES3 zQf}376hRJ77`{F?J>4Q~y)s&N`SRsxNjkp3Ig^#Cy9GG*dfq2%lizs&*af;*(XU^- zP%DaTGxu(q`*gVCK6-n2cqB_($h(g|YIaPLbLh$tBVl-lZc*Q6O{>X`zJPA%KE_f`HOP6(JD_Md?+gN(sdP zp`$c`B(zXNo9lb?X4b5kHEZ6i`E&9|a&lJA%{kxQ-~PV6?<+%nEm|rzDi8=n`%qi` z2?#_s2aLa8z5u-UUSvi9AN+nAW`6dbUcv5;PJSRQM-N9IJ3mJU?q|W=5I;XJUpZl6 zFLyf+KYysZki91~V6cx11iJ9f#n{a6AM+qG;5tD$1YGYis}X9R`4ELe2BQR_{M-*t@cwE_h!SR zmyVZT244wE4YmBVAcllHi7?dM)6{{#zoyf1T%gb#DPGLFUe6<8Em-sU-B{II`6x1; z820BPne3yZy$-d!oXHdSzkRt}ax^`ko+Fw%FKK&Uui4hv%HmY+_KTs4}JB|F(yIz;F{c&Jy*WR_>cXzuk6yY#HaPAoqR zC+{V5o@(lBjRAq!u0B*(F%GgJ%>HEtHaVl*%7CS4JPy#XB4ZwvU=VyvGXO%a2uBD| zV-n5_QW}c}6&5q?B`oZ-sM!#F6-#|6Jy~L=-Zi1c)FPgw54{kN6zb1ZE$8!IyMD5p z3%HgxY{&L-@F2!_V>2&wzTdhnhuW2b7X;Go=4Jwceuk?_kb|@-M`%FY9O~krNWUv+ z5a@@>KRY?IV+;m|1P8OyP#Cc(5uET;-_}-GmR9@OE3>W&Up((BQn#4cQR3{IH#eq)ppf=WybI0Tcte7xW ziwR&6n6^+39gqDanv?d{!t=|i6m6cUeN039&UTd8z)UT7b+)wU6ZI!-dGdjS7)%Pu zSQM^sa)E7YyNAn7KuAdFc%NW@JUY%5apFzrd8>T7W-vuY%`D`wr+j`iq_3~vqJR43 zl;G)}=5!d*+1sC8;O)2bnf0q#3W-n;|x#-iUx8-7?Ck5BU0|mb)v@R)acU~Vg zFfc%#-dX9bBT8qCVXt zLQ6{6xDinCw{OEIX%7i=g%Eu#u zXy>)^`JiJc3^!h0TU#4O!|Q(Usq*kdl^wa>Q(8S`(&)IjxVXzXo|27^kIy|VAa;Lu zQX;*r>BWl+U{46-O84dXB!!*Jd*WhZ6*jGM;U__MMgHKr+HJf!tJCrF&xOUs)|Qsl z0Zbq|a2}S?eXu!id*kBk&wCY@SO>DiWAlbI;+eMlD#P~#N>A|4%Hr^gU^6q8vMR1; z9`kLvf<7fBCGNK@m)NPo&yVNb>fusQwzBH{WS_yo!S?)usxJnco9=I`TvjHlonMN! zF8~?eDgEnE8;5dtTb!&G8`$svw!E}-*?u*L`d`68&SavM#JSA4Zgg8tZVGbEY`P8_ z9~ZZ^yL&^*ouv$A-7IzIPWSArqKu4;fB=rPheHXuL-?horElH3B_iVWqv+w(mnGGd zHk;Ov5juN&d%@FSu~3qRhDK}X0YaEZR`v+UJL7zX;Ljr6es2@g>1x$t>2x!M7{Rk| z)1Xj=(DazeaM_0LZcUODKse6(J=di@=kC*hUe0z|Q-eUH2mdTN|1Y?GK+9K84}G}3 z*wNmu3Ict#yUEMjlfdeGa_G$yjn*RKD!(WN?<}payLw*&fo9|-=+Cw~=tKAMd_~nq zknqD_u?Bexd|)!rS28LpDlsv!8b;#CjjLB5+u92MZ5Fa|gO#RRbQS9!BU8ec(kO9IJ3H9n+tjH;^(_&u0Aie#4CZcCi!D#7H?8MS56cF&(bN40NHXT#VFf_FRUm0O;Edx67N z63an;F_4(__b8P6TuU%RE_ABKj*$r!_Q1nKNbpG_m#mL^vkpr)qT8aPqQcz-3MIHz zwn{mCztZ%pBri3!v;M*`Yawe96C+l2CDGl}qh&=_zzp0y!Mk^3m+xn! zrFDUU`uvIN*v|W4WA=zeO48|zEJF+wNOXGpCq_n-bl0z4tMMOz|5ExBO2~@t+Dx%7 zb6{X#6Fu@#))RB{UNCgJPVnZF>;_&CS`^_ndk9`_~4ob5LMMM|Qs;xCLX?#T7eL zRLF2xgNlkd2Z`{wl{m0Tt@lhr5kPFOoaaTo^!y=mwnoWWYK6g_ao=#`dQz>#;SH#O zAWWLSv^8j-gB)v|kN7QlDNFVid@YyRSAfF;b_zB%W!}ciQ&f~F=?%G2iTP?vu+var zLg~;~%h!x?WLV>R#5Aym2W}aFA&7QMj+L(k=&3lxt)$QTg(i6G`MWh)8zr+AHaber za@t!N&B8sf3=T06k4e4y9+rPBpB;kKNuWwy7cmC(`$VGa?9^Rx-_;{xnO;v-oj*>X zCWT%($EoSHv~K>hlJH8nN(UN!TkP}f?pn!iaaLkYvANt7qKWf9M`YvT)%cdNagW5; zRAS|B>=iCX9Gre)n#6^!q4Sg924GXqrf}G)aQOCOQIQS8-b_~y2Ek8!b8(^1s#rk( zK$?}#mmy{&^w5ZuyBUto$VWLcGk!&a=pQ5N`z)4nAm1KdCUZB)y`b%`TLR=}9g<@N z_=^FDgq76PhJ^)bv-90G#=$}TUE^%JWc@paG5~GY9BQgVsdCgdd}41ELRlwd}{HwC#P)=_U$KF?#IpwSxVWR z9ICGmM`Q@+f5%B+2m3-2@(2ao=PfPw+tP~V{K4h$rOnOU%!w$I6*RkAhpOrYry)+X z5`1bfSA2~lox%t<`ms$bNvO_78nz{56P9oD+&sT+av=A3ad>###%3dmGEg}H&w=wN z%!QxgoL3!Hjj&O<*i^P$-(S?C)}4~A*0GeioFg;!o};fBuk$%nT3hC)5G7_moG{_X z$~vUy@0V1}?VcTfx{RCQ~LSFao%Rvho6k%M!sm9#e|(y%T8 zb)g4kyKN7*uQD_D(sw_}m8&T&y!i#?&L_C?+hDS0&5=!0OA;2cZt1Dm6Ejk+V{qRe z;^46nuNYEOZ-dRdNb*_j4_hw@It$E=AZGtY=yPcFJ~3~6u5^>vK6y`Wep-IhVK67F z`v5g<@BUj78vYf{KNaH^(o9D$r&wq{y}Iq?$%P5ngP$)4Oe!@6;0>Zi6z|gq_6p8wYxOGwo{< zGQOPTOV0(tg`eclnVIL`nGH+V6COQTygyd*;S|fWs&^85cj)QXuAlwh{HceOAOfMJ zPUM4^Y;UKphnnYf&R)S+8Sl)+sSu(r-a7H)G$SKpuZvk0X;AsotwgOd=p=n_uXT?F zV;qNFOUrs^(JVbK7kFlH1M;VZW>^lp(-m$EZ5@ct-1QS~iY~V89GJ0V( z)%?}|cJ25C`dpcF;vs{G7 zGpsA@8K30HDi^K|lo$z6(Bb=(2cKBWSWMBk>R_sLGscH;{O3kvyOGN)ZQtj{0|_Bx zXmnSIb+ctiEt0;t0}&ViHm`Mkw{NP(AUci<^V}7|+Ffn5xzd|*Nos6SNHArXj1HMKr~6tR`7iv;2FWMtn{7Fk--=Llufy@ zKZ#&v1cT=Rc$!{G-B} znwX&BX|uI%7tc>AW_*Ei0we9-9)SGaE*as36H;Dk(@U8_sdfxe~bR> z`pug+=faPn-j^bGub>MMQ&Sdw%Vgvfon2jzZLMgzrPakhx}2RH@#twL-e`2}XY!Ve zocZ%ZA?v0pNchQiPb@9_oeGL%_Ci*MnqZ<+lZ(9ny81cLqUmXCAMRodx>P{dfadlE zAZoB}u;bNL2q$_-ftVn3`N6X|CqwkND9W`&!b~F(kkln9fak%)q)7%_=={t3UL*?m zC-~^-Xd;LF6Crlb`KHuC4mrO}z|oLlcmM`g_bvBleE9IeT!>w=e#0~3czR;O%;LDi z5cG-%uEJLaE?;PLcMr!s$sOO(00A9`3f~{Ks_|=_ar}Zd^#~1rM>(}1Lm{hij3u+h zz3jq9z?A^>_cO)^A#qNSSEZ$;g@uKGWJXSEs+26DKG~O*m33h*J{4CNpNRL7y>|}+xHXq~5v8TB zGY#I=&O=P5pb450nte9WXPr&{xX$&c@|qe6etsR)g}=@3?Cy4knH$>LZmzHMgUQ@u zAQYjjG!5|sUtP#Te{PV4@{9Nlqa`WT)z#VA?8lHO3ifUw8i@e{46Jr#*YD~VA(2L|&CSg{ot+F! zOz=ce3mJZ?cL!t}|GH5X6%}S-n^Ew^_MkTHT<^th6Jz7lw6rXtmEXTTr)o+N2t-p; z2x)iCvvrSY-t}TOd1MmfYOaTIB4PHFuuM-k-MC?>;Y&g$jzCr5Or|UOg zGYWVBU;y0FoSdBDVMB~)dZG>sg;%}TL1b$*O`#X6tPBIb2rfJ-t8Du*UK_u?z0H6@ z+1l9XW6YFLMMcr{n2k5gmtyI;&K9}OWg^Z_qN6XeNj?1<3HV`ECh2vBTmC*i&tL== zT`k9&76FjuAK?7Os$Shs{5|9*a6w=Mby_bI-36F-Q87s5T`t6FV_kq}3#5zLHcZri zef04M%}*M3Wkbs6VH-1ztgNiLa{gk?&bnH+X~-Ka8$!R@s8SRok=bXctdn2#5l=Y? zhk%O`HeE4yBUAx&--xINz=;#~r z0go&jy%#kd9B$#<>Z$1HltTCK<1pLVv(?2P#4MCRe?M}TlcA=jrjCw|x3?(z9$zDq zu+5{Z-S&fMG!(E&fLoQ?516nb?7@h50n>`G#W&LY0KTo8Qd3e=Qd1oQSZsHR#A6cR z0v&J26D&SMMhYh;CfeKEcXoCF*OM(JE2}Z=$fpk6%&3<|BofzjWx@`sv%jEba)8Cin(Dc-XtX*00m)dt02m%+KJY-c-D2k z4W<~fTOj=0CwQ^@jnjeq+Q)=DloVd3e-M?d;`FN~Qt_W1&dkj43kY-p{M6Q#ckads zI==*Pnt-4nVbVFD@hrE1(h5ir;H+ksssOhHZ(?F1={An4ux@56cvW5P3*6?{uU~hH kU;4v^|M`JS?m6ZAg7O+zy9p2Qpc3>@Ltni@_34X$0eZ`>hX4Qo diff --git a/docs/images/UndoRedoState2.png b/docs/images/UndoRedoState2.png deleted file mode 100644 index 20853694e0338a708b62ce3a20c72bff00c0b8e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7855 zcmcJUcTkhvx9@}HMWww+Q)wznZ%XgddyyK7^d2A}p@pV`(mRMGARrJx0-^VaNbe=| zD!n%$^l~44e`n6zJ7@0ioI7*>2??{G^{lXKyDX2y`vMK^F}BkN<-R06X5PTe|9+w9o#=o*Ag&i0H1>(aPlLQIcQF zl*tYsqa@WM>xIXI_a=-nLN~Ooe77#_Kiccw*ON=y@5|US z++@h<{a9G7mXEqke6y!CF5WgTcyM=sqnG=qiNl9e|65T8M1`+A*vHyGH@^A1DeA?& zZW6~(y?CvT4Eg)lef*?HQ!8#MJ9EBzDEHw(cg8609xXe~wKIQjW^>I=$3zgL{a=Nq zGr4>`biAkmfjoWeLjCN-O+w@1D@9j3BGSV~soVMMRSjGsR;&$>Z(xLH1H1g!a7>+8 zaAFQ~xM~%#0pt@TYA`WWzovX3H1+|m7w3F_UqzvP9BR8!W@D+%RXR0ZkT|ya9%Bxx zUEEWdU~A+-Yuq9al-bpst`?&-aG-T`crx|DbCzvaMk#8woiw6T9Chq@$irVEI+z-s zj3u$O8t6Ma;m8y{`?iFQB)@Eb*@|aqs|>6ge*2T?_A^n-ua?M*d?AVgXKtFG0?z`4 z2Ac17TYc6ph!pZPWzL7(oat35*C&&QZuc~)-5%MEuHihcU+Lz|+`yXF^lk}V48%Xj z|Lk^Wf9~YX?W*B!fvSGi^5rhehNGdeE`G49(q+RyBh;VwmU~XOnscY>yAEOxeN)RK ztG8DTg@MPDh+75um<3v}v3^bbPsW?3{UX1xLB7_mX+*o%Z;4tQJvoq+h6&tUk$OUC zkU-n6TeRhCEzXDNdu>HQ7Z0gLxgu4YD2N-UNl^>3q1+HAlTLxrulJVvV} zvg^Fj)SOtEB7HY;c+<;Ddu{APYv-C&u*Evz^qVQLt-Gq%E!K{H_SV(5{zK&e0;_F{ z#f*@)QV@tXQ&~=0*V}Y!`nI=*!6o6YP@MW>qDNxnH^QE>l4J(w)%T~dIy&}pXhyT|-)ejSnnvb8%TtQz8YxMf>OnUoZ z+!xM#dKW~Fym}>$>W}Joc4p4Pi@^k-7tg3gfUQ7AtIY>`^Ewtm07?uRA_is9W!r*4 zOAiIEgIEdk?}J{5DD{9qozjkffwV~fZ$k|q$;-ZTqAS*;mBqUjM-$86NJumFC-?i{hGbHOkRTcb)!#N-nQXI$1Ln<#MC|g zb{h$;+M+A&f0Lq`A4-X{tJ|ZTwA2N(wnSc@(V>%D7?FEHG{RApdeH*-RhX7ssRs$FIvD z#Zd0_XEqhRs%!QyD=R|^K{aAXU)91+mXS~}MGBvthSvKU_m$Gm^P-*Xv6dJcEMLiJk+#G9crCiXI zz$bbO|4ME+m*3>IY9*$=+AzCP>6;eUzz1ILr=yiuFQrOKO6u)QOiYH)V4GtvH)Rbd zk!SI}X<}u}@W|Lnr=?B?2{>$hNEr>rliAs+iK#!X3E`b1qT$vOq@;=4sesN(PFT-+ zfIU!(VjqHotLy60C44^$_N9u*dUO^~5NxRpFOP$CiuYWCLgx4Tq;fTfaGFxiSogqk z=SjhlCjn#SNEk!`2^lTI23&~N4X;mDVaE283`}caYw?GBDK2|?9{BZP*u#iewy`&B zYilcg>5TmLe-HZ}ZgwEX-jvz(_4f4G;E!f}W43?g$sBF!?KCAOC+|$xCC|g8?;hne zy{h+i8~7q`Nnt~++5)M0z0}#CDQnnQXQlV{(ABfG9QVZ14M~Bb5Oe+cqJ(y~pu9X$ zaE&2F5nYKAa+{Y^ZAr;KMH`moNd}yIk31m-x8%R8F~6<%%%PhTU`xyx^wGR#_2$oV*cgD(QJgep2hxuy34?8 z{v9CzX?F4B`G{yCO6pmoqNLQq>J{kg=1QHsMJExW=XD!Rii1_EJvQ{cy@k)T+<;7` zta6kb8$_k2&rbWZSJ%{pNmO(sTjZZiR6w++Mn^|qvk2&LXTYaxJq#&mcP}@9{MTg^ za+$ikIIHj<lyE0^xebvt({36YagT7@f)Kw3qaucCC_A-L_|^q!miI~rcJL76m<3W+PcA0 zlTVe9n&NvmhR=?60@ns}8iNQ`CAM(?@+@0;_PkB%^3mlRrWjns;ql%A8yj2s$pi#b zq7Qh7MsrSB)4V*CdrD$o`0Jk)`^4{X*FV*^H?@Na+HfH#KjXKrUa-8+NKM`PcvEbN zgjTRvJzDYv%`&+trgC|ZD;4G&#UO!b8K)UZEhs2BprAZ5gN~r@Pd?c!x?1c=&}MYl zFYA+BsB^8)^@oR)@uAX~<0w~qTu?3v*CYiwp@- zbai!AQ26VL_-ZjXks(J`M&{b}>mekx%$H0wwS>^&uT&)WXlV;B9O}<7E6dB3F4G88 z8H_3RaC2OCkDN(C$-f-QZ;WsZ`io?_JB3MLJl9LOU>b<9n|3NxK~XWnY_CjM_Nd*# z!C_uXq=Zl6*LnfQh@HXGyZNh#iyrFE^1G)u{!K~wA5@=zGjuZl=#lZA|l`f zm>U)uxjBlN&6Ewve&Qr1(6HYt#-tF*%ElH)3j+OY%sl(4DS46&lrU}2$}|LH;Q1bt zVs!gU5Xkl2=H@1lgA;+DtdYe=ZSJ!A(vv*)?^h6Gqe7-i!4P}^^y=cFVk-T72>dD|YGc!{`n+2TMI5@1K)RB1_Ui~9tx0AEl|EV%d zD=P+NwmqcuqMH*HUA97{j>BJpVQ_Ena;Ndu7sg)lE}VlRB=}V`C&raJ1-^@5L#e%eYbt3!VLj z4%<$4Nbp=qBVeG;w$++g!{xR`(T)~d$bPiwpoP{qBC=CeS1-M~KRtsra0)6<1IcL^ zya0uI-p@E&ZDS1dn<#fMC^DJzCAdeNf4@63Bg4Eiku6blV<^ArF=xpyQb3Q&m3{oK zE-x$-hN7k)L`+RhfpvgYGlpV^b5v>IO*-OiY+*Y$&3OR_jC6GqbLP(oJCT!>&RL>M z`Xh_;^D;=g-qafJy~oaf-MG=e49E~rw+(x_cz8xVf%i~27a3PY|3w+C)6sBs0bO5M zSYQ$Y-TMNWxN=kn( zR6{<5+ybJm;Povr4ax5?KQ|}6(*#76nu@9f1<0DBoSe6hkH^kTnxMP8yK$9^IuZ-V zPn6k_EsX$s(Y`J&M>V;%xw-#MV`F3D>WNq9`}gk?zpZUg&dy2+2;iH;C^$*Y#s42q zcK>E?{hwBQReA_X{Sp#~TDrP)&I5Vp2!0(FiI{)qQBhG@)Y;(&>)16R^rc8K`8wKs zgM{rR`cm}ZcvQp(v+yd(~-5DuAr6L@m%pad>dHd9hcx0&foj_qg%Uc0?M?o() z^A7qT0Ri-%$IaE_5IwKxz^~iP)k!$OxOD?MuuitEI}PE-sb~Lb>c9eJi*;#fDfk@t ztt{QFXQIM?5LcHbi3LxFBzbJiWJpV%SeI9Z(O|PyTNrgqZcR-?_v3;_!u!^C=QC=kALyMy)*JiSrMk($s6*}K= zBvE^8b9^l^E?+JE@;vXQf4M)n5g}TPVn;16E>^#)o3X)LwJq1x*7oNbO>RxqJbnB2 z8x0S4R)pYi1wD8`EZp>5nriD<>b$tUtxf0m+r$um3%#4U;nbr@TKe3+pJH=cd9s;k zEp+{>%*M-xlf5m3JbTaS`af)v$Raw`*TeVnyL^+2Gh2tCN5@X zaTdF4>D#}Sm=Ho_WVd$j3m132C+Y&%O9$2Z-Nw8!R-Sg5G4Wklnx^;Mo_Z8S$fEuJ zGF1r58iT_MN|+9uJ!EYU9QZ=~E!i}cors2X|L90V&8hLR4(cGw<D%iVf=y==3sA_8`}*>+Ifybdc#5kIjza49mxWx21|5|Ul^2AI%oRW;Bn zkx|G@-8!m4>8_@#^2pVN31BINeq3PKcn(Agb#g!QUe&3CabkPER&tImlY)+y=b7c+ z$vl`0LdF1(9G5~Pf#b_FGF26QpbA|LsM@$ep?yHzNM9{2^%&Y3;iC2G+1ncs^Hj^} zJlukMY~JfxfO%Egba}%CGpmeDOrE4i0+Sk&8@+n>PNX~~N#HepeKeo8C!Aq?Ch$sr zBx)o{Kbd`qk8gj8nrnSBCW7UyDJiyl<#WW!758BfnQ1oR3pmYS(?j|%fma%b3x4IZ z7u^0+)w+_U*HyPaotfY|DT*k`{|OtJqk6s{ewe@0YoeM80v8H^Mk@7KX6mfX&;Q6h zJ8IChz^f*Itb)#d8h-T(>Xjj*JicsSF0PLJ@T+HaRjblmcQxF=sP@Bfl{2#2YcxV< zX%Z^+Q+7ZsObSIs&7CnxsGqyB-U`^{V zT+dGF+FS&q29E~Sp3v=noylpvQgD6!l;L?yV5$<5jV)%NBDrY2zQHs#M)UpWN{zJB z&}}(OD<*I=4wp7_QJ*BZ)#gzCRMpgZ@JaCJ_~T+u?sWf^zs*QFj>=I5Op+EK;W}Ja<`bBBV`=QR3X`7wMLAj-;fAxp*sleZAp)*BJJ! z3LS8H9&g+81B}&7uRI9;vCg8wnZZKt#?LP1^$l0Lw1o-x&Qy$?np)GnO?)5`Af9lv z7=nvXEpx`99_^qE4!4l`uU@hhZN1_2aq{o1qpL}9A!a=|JT&+m$c<;?WccTM*^iv}o844Xz8|^@&<6vP~e2@Jx zvlS3x3F&?TA3!p)6s3CR83TkrF%XXRscPrwqPYjX z8IrJrp`o@_`i}XNlZL=w9U})1t@4izWH+I{Tg_b8!f~k%w@=&|>21!B%in+)*$+(5 zM;mM>Vj>dG&-Xj9zE$M&3bDO|*djKbL18Bfh-0gObALvWw@mY;K6=d`lTV(1zs2X@ z7vVG{g6k(gDNl`6Gt;{SpfWRtj1JWR&yN2$o{dLLPfs8B`I1c5JQ&KLjud@r~b$Y+}f(W zFw1oUlcw{PDDKp_Vk8+k(U)^C~_8oM4a>O}F|Ba;6K&HNvp zdH~ZcAy~;>LEIU<73*71zp5}olIkS> z{>NIU^u{PACMJf5i;F4f*zgq7T$}e@DlL-vGYHpU>VorH(qXIxHfDHi4?Y+OO{%sVX zREGPmSgdh&$c@Q)!yC?s1c`8d8irhJvU6H^JH(j)D_UrC-aznmh^|) z+vior%%HPfdTswiI-5?eV-Fy9mU5OX0)b~+RhA}Gkufp3{5|VH&k3XLs#{uG+H;w= z7iS#@PId48H;5-sjaRqt{qc^>g!)*rZ!eH5xg-}5((Yr z)=Zb=Qh4I2U3Oe2oZa*04JhJ!S674=MZ+ky;)1l;x69LwmstwT_LEuHw)F7b zN;G$&P^do5(dqF*4A6I%+7CQdnFTVkOr&%MjXrw*_RQ{IlP-5#XblbyE-iij>{D{G z5NuUTpXO|3Wo1&$XQD^Yd4f(Vz$B6v?z?8w8XFr6fTr*`fKM?2}Msr8Ui?%J&EZs7WaQ^i8Or>3qBI#Ip`aF@hn0AD-s zEjb9$aDsQY>vl|m9GR+d$K`5js;HEXM?p_dPW+Fiy`;`}gT_<<6nUSP7MYNs0|tXl zOw@qp6SvZXY%^-Xu6`8Z;D|8&@y-8iet!PXVink0YS{dlV7W+Mef@b8nUvFXZADd; z7l476BrlJgM#3i@J9~?Yiqw&U)1@}5R62Z7A`XMu-@ku1s&LFfp+1XxblM7i69H}w z*4F?4Qu$mpnL8>b<_M3+9~@*Wa~qZh3x)aqW=Zl9)CYH2c`!y5oy+a;vQkIpW!-<2 zpquoXk2c~pZvI&5~SArUkc9l_BL?$^!i{x zUthm95E(-7yV!h0AWnY}@hCO0tdb|ErP0&SuqdYe(ZH6L77Avy(CFyO7dH(IMuF%p mE-!c5bvpc)mtZSb1h2aDp`17TR)Om>kg~jnT#=0VyZ;3=n{31Y diff --git a/docs/images/UndoRedoState3.png b/docs/images/UndoRedoState3.png deleted file mode 100644 index 1a9551b31bea8ffedd9db1094f06ef6b74431fe8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7588 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 E2LvS7wEzGB diff --git a/docs/images/UndoRedoState4.png b/docs/images/UndoRedoState4.png deleted file mode 100644 index 46dfae78c94886758c6d6c3c525db41b361d14e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7605 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 diff --git a/docs/images/UndoRedoState5.png b/docs/images/UndoRedoState5.png deleted file mode 100644 index f45889b5fdff0652cf017fd906297d229e49c8fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9427 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 diff --git a/docs/index.md b/docs/index.md index 7601dbaad0d..8acbdd73507 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,8 +1,10 @@ --- -layout: page -title: AddressBook Level-3 + layout: default.md + title: "" --- +# AddressBook Level-3 + [![CI Status](https://github.com/se-edu/addressbook-level3/workflows/Java%20CI/badge.svg)](https://github.com/se-edu/addressbook-level3/actions) [![codecov](https://codecov.io/gh/se-edu/addressbook-level3/branch/master/graph/badge.svg)](https://codecov.io/gh/se-edu/addressbook-level3) diff --git a/docs/package-lock.json b/docs/package-lock.json new file mode 100644 index 00000000000..63a232e05dc --- /dev/null +++ b/docs/package-lock.json @@ -0,0 +1,8587 @@ +{ + "name": "docs", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "docs", + "version": "1.0.0", + "devDependencies": { + "markbind-cli": "^5.1.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@fortawesome/fontawesome-free": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.4.2.tgz", + "integrity": "sha512-m5cPn3e2+FDCOgi1mz0RexTUvvQibBebOUlUlW0+YrMjDTPkiJ6VTKukA1GRsvRw+12KyJndNjj0O4AgTxm2Pg==", + "dev": true, + "hasInstallScript": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@kwsites/file-exists": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", + "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1" + } + }, + "node_modules/@kwsites/file-exists/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@kwsites/file-exists/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==", + "dev": true + }, + "node_modules/@kwsites/promise-deferred": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", + "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", + "dev": true + }, + "node_modules/@markbind/core": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@markbind/core/-/core-5.1.0.tgz", + "integrity": "sha512-YAXjH+qCXnrBzpKIAJkayVLmyIUaG/8Dms3Gpd2VIufeZyW8w0diXdgKSsymjzodTMgghZMdxG3Qpng833ARPg==", + "dev": true, + "dependencies": { + "@fortawesome/fontawesome-free": "^6.4.0", + "@markbind/core-web": "5.1.0", + "@primer/octicons": "^15.0.1", + "@sindresorhus/slugify": "^0.9.1", + "@tlylt/markdown-it-imsize": "^3.0.0", + "bluebird": "^3.7.2", + "bootswatch": "5.1.3", + "cheerio": "^0.22.0", + "crypto-js": "^4.0.0", + "csv-parse": "^4.14.2", + "ensure-posix-path": "^1.1.1", + "fastmatter": "^2.1.1", + "fs-extra": "^9.0.1", + "gh-pages": "^2.1.1", + "highlight.js": "^10.4.1", + "htmlparser2": "^3.10.1", + "ignore": "^5.1.4", + "js-beautify": "1.14.3", + "katex": "^0.15.6", + "lodash": "^4.17.15", + "markdown-it": "^12.3.2", + "markdown-it-attrs": "^4.1.3", + "markdown-it-emoji": "^1.4.0", + "markdown-it-linkify-images": "^3.0.0", + "markdown-it-mark": "^3.0.0", + "markdown-it-regexp": "^0.4.0", + "markdown-it-sub": "^1.0.0", + "markdown-it-sup": "^1.0.0", + "markdown-it-table-of-contents": "^0.4.4", + "markdown-it-task-lists": "^2.1.1", + "markdown-it-texmath": "^1.0.0", + "markdown-it-video": "^0.6.3", + "material-icons": "^1.9.1", + "moment": "^2.29.4", + "nunjucks": "3.2.2", + "path-is-inside": "^1.0.2", + "simple-git": "^2.17.0", + "url-parse": "^1.5.10", + "uuid": "^8.3.1", + "vue": "2.6.14", + "vue-server-renderer": "2.6.14", + "vue-template-compiler": "2.6.14", + "walk-sync": "^2.0.2", + "winston": "^2.4.4" + } + }, + "node_modules/@markbind/core-web": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@markbind/core-web/-/core-web-5.1.0.tgz", + "integrity": "sha512-TRzz8ZCr25pylKvFxF/WwXDi4Gbtsb2OLXV61WyTFqVy03tFoEJ2mqncpbliI9DrfDdKWcm1YZPgDCedVkYjKA==", + "dev": true + }, + "node_modules/@primer/octicons": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/@primer/octicons/-/octicons-15.2.0.tgz", + "integrity": "sha512-4cHZzcZ3F/HQNL4EKSaFyVsW7XtITiJkTeB1JDDmRuP/XobyWyF9gWxuV9c+byUa8dOB5KNQn37iRvNrIehPUQ==", + "dev": true, + "dependencies": { + "object-assign": "^4.1.1" + } + }, + "node_modules/@sindresorhus/slugify": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-0.9.1.tgz", + "integrity": "sha512-b6heYM9dzZD13t2GOiEQTDE0qX+I1GyOotMwKh9VQqzuNiVdPVT8dM43fe9HNb/3ul+Qwd5oKSEDrDIfhq3bnQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5", + "lodash.deburr": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@tlylt/markdown-it-imsize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@tlylt/markdown-it-imsize/-/markdown-it-imsize-3.0.0.tgz", + "integrity": "sha512-6kTM+vRJTuN2UxNPyJ8yC+NHrzS+MxVHV+z+bDxSr/Fd7eTah2+otLKC2B17YI/1lQnSumA2qokPGuzsA98c6g==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "node_modules/a-sync-waterfall": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", + "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/apache-crypt": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.5.tgz", + "integrity": "sha512-ICnYQH+DFVmw+S4Q0QY2XRXD8Ne8ewh8HgbuFH4K7022zCxgHM0Hz1xkRnUlEfAXNbwp1Cnhbedu60USIfDxvg==", + "dev": true, + "dependencies": { + "unix-crypt-td-js": "^1.1.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/apache-md5": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.7.tgz", + "integrity": "sha512-JtHjzZmJxtzfTSjsCyHgPR155HBe5WGyUyHTaEkfy46qhwCFKx1Epm6nAxgUG3WfUZP1dWhGqj9Z2NOBeZ+uBw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dev": true, + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dev": true, + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/bootswatch": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/bootswatch/-/bootswatch-5.1.3.tgz", + "integrity": "sha512-NmZFN6rOCoXWQ/PkzmD8FFWDe24kocX9OXWHNVaLxVVnpqpAzEbMFsf8bAfKwVtpNXibasZCzv09B5fLieAh2g==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cheerio": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", + "integrity": "sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA==", + "dev": true, + "dependencies": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash.assignin": "^4.0.9", + "lodash.bind": "^4.1.4", + "lodash.defaults": "^4.0.1", + "lodash.filter": "^4.4.0", + "lodash.flatten": "^4.2.0", + "lodash.foreach": "^4.3.0", + "lodash.map": "^4.4.0", + "lodash.merge": "^4.4.0", + "lodash.pick": "^4.2.1", + "lodash.reduce": "^4.4.0", + "lodash.reject": "^4.4.0", + "lodash.some": "^4.4.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "dev": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "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==", + "dev": true + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==", + "dev": true + }, + "node_modules/css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==", + "dev": true, + "dependencies": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "node_modules/css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/csv-parse": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.16.3.tgz", + "integrity": "sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==", + "dev": true + }, + "node_modules/cycle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", + "integrity": "sha512-TVF6svNzeQCOpjCqsy0/CSy8VgObG3wXusJ73xW2GbG5rGx7lC8zxDSURicsXI2UsGdi2L0QNRCi745/wUDvsA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "dev": true, + "dependencies": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "node_modules/domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", + "dev": true, + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "node_modules/editorconfig": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", + "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", + "dev": true, + "dependencies": { + "commander": "^2.19.0", + "lru-cache": "^4.1.5", + "semver": "^5.6.0", + "sigmund": "^1.0.1" + }, + "bin": { + "editorconfig": "bin/editorconfig" + } + }, + "node_modules/editorconfig/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/email-addresses": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.1.0.tgz", + "integrity": "sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ensure-posix-path": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ensure-posix-path/-/ensure-posix-path-1.1.1.tgz", + "integrity": "sha512-VWU0/zXzVbeJNXvME/5EmLuEj2TauvoaTz6aFYK1Z92JCBlDlZ3Gu0tuGR42kpW1754ywTs+QB0g5TP0oj9Zaw==", + "dev": true + }, + "node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "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==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", + "dev": true, + "dependencies": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + } + }, + "node_modules/event-stream/node_modules/split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", + "dev": true, + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/event-stream/node_modules/stream-combiner": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", + "dev": true, + "dependencies": { + "duplexer": "~0.1.1" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "dev": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==", + "dev": true, + "engines": { + "node": "> 0.1.90" + } + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true + }, + "node_modules/fastmatter": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fastmatter/-/fastmatter-2.1.1.tgz", + "integrity": "sha512-NFrjZEPJZTexoJEuyM5J7n4uFaLf0dOI7Ok4b2IZXOYBqCp1Bh5RskANmQ2TuDsz3M35B1yL2AP/Rn+kp85KeA==", + "dev": true, + "dependencies": { + "js-yaml": "^3.13.0", + "split": "^1.0.1", + "stream-combiner": "^0.2.2", + "through2": "^3.0.1" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fecha": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", + "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==", + "dev": true + }, + "node_modules/figlet": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.5.2.tgz", + "integrity": "sha512-WOn21V8AhyE1QqVfPIVxe3tupJacq1xGkPTB4iagT6o+P2cAgEOOwIxMftr4+ZCTI6d551ij9j61DFr0nsP2uQ==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/file-stream-rotator": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/file-stream-rotator/-/file-stream-rotator-0.4.1.tgz", + "integrity": "sha512-W3aa3QJEc8BS2MmdVpQiYLKHj3ijpto1gMDlsgCRSKfIUe6MwkcpODGPQ3vZfb0XvCeCqlu9CBQTN7oQri2TZQ==", + "dev": true, + "dependencies": { + "moment": "^2.11.2" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "node_modules/filename-reserved-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz", + "integrity": "sha512-UZArj7+U+2reBBVCvVmRlyq9D7EYQdUtuNN+1iz7pF1jGcJ2L0TjiRCxsTZfj2xFbM4c25uGCUDpKTHA7L2TKg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/filenamify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-1.2.1.tgz", + "integrity": "sha512-DKVP0WQcB7WaIMSwDETqImRej2fepPqvXQjaVib7LRZn9Rxn5UbvK2tYTqGf1A1DkIprQQkG4XSQXSOZp7Q3GQ==", + "dev": true, + "dependencies": { + "filename-reserved-regex": "^1.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/filenamify-url": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/filenamify-url/-/filenamify-url-1.0.0.tgz", + "integrity": "sha512-O9K9JcZeF5VdZWM1qR92NSv1WY2EofwudQayPx5dbnnFl9k0IcZha4eV/FGkjnBK+1irOQInij0yiooCHu/0Fg==", + "dev": true, + "dependencies": { + "filenamify": "^1.0.0", + "humanize-url": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "dev": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", + "dev": true + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gh-pages": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-2.2.0.tgz", + "integrity": "sha512-c+yPkNOPMFGNisYg9r4qvsMIjVYikJv7ImFOhPIVPt0+AcRUamZ7zkGRLHz7FKB0xrlZ+ddSOJsZv9XAFVXLmA==", + "dev": true, + "dependencies": { + "async": "^2.6.1", + "commander": "^2.18.0", + "email-addresses": "^3.0.1", + "filenamify-url": "^1.0.0", + "fs-extra": "^8.1.0", + "globby": "^6.1.0" + }, + "bin": { + "gh-pages": "bin/gh-pages.js", + "gh-pages-clean": "bin/gh-pages-clean.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/gh-pages/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/gh-pages/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/gh-pages/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/gh-pages/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", + "dev": true, + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "dev": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "dependencies": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "node_modules/http-auth": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-3.1.3.tgz", + "integrity": "sha512-Jbx0+ejo2IOx+cRUYAGS1z6RGc6JfYUNkysZM4u4Sfk1uLlGv814F7/PIjQQAuThLdAWxb74JMGd5J8zex1VQg==", + "dev": true, + "dependencies": { + "apache-crypt": "^1.1.2", + "apache-md5": "^1.0.6", + "bcryptjs": "^2.3.0", + "uuid": "^3.0.0" + }, + "engines": { + "node": ">=4.6.1" + } + }, + "node_modules/http-auth/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "node_modules/humanize-url": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/humanize-url/-/humanize-url-1.0.1.tgz", + "integrity": "sha512-RtgTzXCPVb/te+e82NDhAc5paj+DuKSratIGAr+v+HZK24eAQ8LMoBGYoL7N/O+9iEc33AKHg45dOMKw3DNldQ==", + "dev": true, + "dependencies": { + "normalize-url": "^1.0.0", + "strip-url-auth": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "node_modules/js-beautify": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.3.tgz", + "integrity": "sha512-f1ra8PHtOEu/70EBnmiUlV8nJePS58y9qKjl4JHfYWlFH6bo7ogZBz//FAZp7jDuXtYnGYKymZPlrg2I/9Zo4g==", + "dev": true, + "dependencies": { + "config-chain": "^1.1.13", + "editorconfig": "^0.15.3", + "glob": "^7.1.3", + "nopt": "^5.0.0" + }, + "bin": { + "css-beautify": "js/bin/css-beautify.js", + "html-beautify": "js/bin/html-beautify.js", + "js-beautify": "js/bin/js-beautify.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/katex": { + "version": "0.15.6", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.15.6.tgz", + "integrity": "sha512-UpzJy4yrnqnhXvRPhjEuLA4lcPn6eRngixW7Q3TJErjg3Aw2PuLFBzTkdUb89UtumxjhHTqL3a5GDGETMSwgJA==", + "dev": true, + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "dependencies": { + "commander": "^8.0.0" + }, + "bin": { + "katex": "cli.js" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "dev": true, + "dependencies": { + "uc.micro": "^1.0.1" + } + }, + "node_modules/live-server": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/live-server/-/live-server-1.2.1.tgz", + "integrity": "sha512-Yn2XCVjErTkqnM3FfTmM7/kWy3zP7+cEtC7x6u+wUzlQ+1UW3zEYbbyJrc0jNDwiMDZI0m4a0i3dxlGHVyXczw==", + "dev": true, + "dependencies": { + "chokidar": "^2.0.4", + "colors": "latest", + "connect": "^3.6.6", + "cors": "latest", + "event-stream": "3.3.4", + "faye-websocket": "0.11.x", + "http-auth": "3.1.x", + "morgan": "^1.9.1", + "object-assign": "latest", + "opn": "latest", + "proxy-middleware": "latest", + "send": "latest", + "serve-index": "^1.9.1" + }, + "bin": { + "live-server": "live-server.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/live-server/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/live-server/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/live-server/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/live-server/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/live-server/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", + "dev": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/live-server/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/live-server/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/live-server/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/live-server/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/live-server/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/live-server/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", + "dev": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/live-server/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/live-server/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/live-server/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/live-server/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/live-server/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/live-server/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/live-server/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==", + "dev": true + }, + "node_modules/lodash.assignin": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", + "integrity": "sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg==", + "dev": true + }, + "node_modules/lodash.bind": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", + "integrity": "sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA==", + "dev": true + }, + "node_modules/lodash.deburr": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-4.1.0.tgz", + "integrity": "sha512-m/M1U1f3ddMCs6Hq2tAsYThTBDaAKFDX3dwDo97GEYzamXi9SqUpjWi/Rrj/gf3X2n8ktwgZrlP1z6E3v/IExQ==", + "dev": true + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "dev": true + }, + "node_modules/lodash.filter": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", + "integrity": "sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==", + "dev": true + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "dev": true + }, + "node_modules/lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==", + "dev": true + }, + "node_modules/lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==", + "dev": true + }, + "node_modules/lodash.reduce": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", + "integrity": "sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==", + "dev": true + }, + "node_modules/lodash.reject": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", + "integrity": "sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ==", + "dev": true + }, + "node_modules/lodash.some": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", + "integrity": "sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ==", + "dev": true + }, + "node_modules/lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "dev": true, + "dependencies": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "node_modules/lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "dev": true, + "dependencies": { + "lodash._reinterpolate": "^3.0.0" + } + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, + "node_modules/logform": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-1.10.0.tgz", + "integrity": "sha512-em5ojIhU18fIMOw/333mD+ZLE2fis0EzXl1ZwHx4iQzmpQi6odNiY/t+ITNr33JZhT9/KEaH+UPIipr6a9EjWg==", + "dev": true, + "dependencies": { + "colors": "^1.2.1", + "fast-safe-stringify": "^2.0.4", + "fecha": "^2.3.3", + "ms": "^2.1.1", + "triple-beam": "^1.2.0" + } + }, + "node_modules/logform/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==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", + "dev": true + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "dev": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/markbind-cli": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/markbind-cli/-/markbind-cli-5.1.0.tgz", + "integrity": "sha512-6POI1Q++2aZa+Udk/oQ6LX1oNPbKUBDY0mN3Up7VOFeK+XYW51faxuCk2Q91JTBxYRKLNtshxf0y12kB4Cj9Qw==", + "dev": true, + "dependencies": { + "@markbind/core": "5.1.0", + "@markbind/core-web": "5.1.0", + "bluebird": "^3.7.2", + "chalk": "^3.0.0", + "cheerio": "^0.22.0", + "chokidar": "^3.3.0", + "colors": "1.4.0", + "commander": "^8.1.0", + "figlet": "^1.2.4", + "find-up": "^4.1.0", + "fs-extra": "^9.0.1", + "live-server": "1.2.1", + "lodash": "^4.17.15", + "url-parse": "^1.5.10", + "winston": "^2.4.4", + "winston-daily-rotate-file": "^3.10.0" + }, + "bin": { + "markbind": "index.js" + } + }, + "node_modules/markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/markdown-it-attrs": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/markdown-it-attrs/-/markdown-it-attrs-4.1.6.tgz", + "integrity": "sha512-O7PDKZlN8RFMyDX13JnctQompwrrILuz2y43pW2GagcwpIIElkAdfeek+erHfxUOlXWPsjFeWmZ8ch1xtRLWpA==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "markdown-it": ">= 9.0.0" + } + }, + "node_modules/markdown-it-emoji": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/markdown-it-emoji/-/markdown-it-emoji-1.4.0.tgz", + "integrity": "sha512-QCz3Hkd+r5gDYtS2xsFXmBYrgw6KuWcJZLCEkdfAuwzZbShCmCfta+hwAMq4NX/4xPzkSHduMKgMkkPUJxSXNg==", + "dev": true + }, + "node_modules/markdown-it-linkify-images": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/markdown-it-linkify-images/-/markdown-it-linkify-images-3.0.0.tgz", + "integrity": "sha512-Vs5yGJa5MWjFgytzgtn8c1U6RcStj3FZKhhx459U8dYbEE5FTWZ6mMRkYMiDlkFO0j4VCsQT1LT557bY0ETgtg==", + "dev": true, + "dependencies": { + "markdown-it": "^13.0.1" + } + }, + "node_modules/markdown-it-linkify-images/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/markdown-it-linkify-images/node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/markdown-it-linkify-images/node_modules/linkify-it": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", + "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", + "dev": true, + "dependencies": { + "uc.micro": "^1.0.1" + } + }, + "node_modules/markdown-it-linkify-images/node_modules/markdown-it": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz", + "integrity": "sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1", + "entities": "~3.0.1", + "linkify-it": "^4.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/markdown-it-mark": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/markdown-it-mark/-/markdown-it-mark-3.0.1.tgz", + "integrity": "sha512-HyxjAu6BRsdt6Xcv6TKVQnkz/E70TdGXEFHRYBGLncRE9lBFwDNLVtFojKxjJWgJ+5XxUwLaHXy+2sGBbDn+4A==", + "dev": true + }, + "node_modules/markdown-it-regexp": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/markdown-it-regexp/-/markdown-it-regexp-0.4.0.tgz", + "integrity": "sha512-0XQmr46K/rMKnI93Y3CLXsHj4jIioRETTAiVnJnjrZCEkGaDOmUxTbZj/aZ17G5NlRcVpWBYjqpwSlQ9lj+Kxw==", + "dev": true + }, + "node_modules/markdown-it-sub": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/markdown-it-sub/-/markdown-it-sub-1.0.0.tgz", + "integrity": "sha512-z2Rm/LzEE1wzwTSDrI+FlPEveAAbgdAdPhdWarq/ZGJrGW/uCQbKAnhoCsE4hAbc3SEym26+W2z/VQB0cQiA9Q==", + "dev": true + }, + "node_modules/markdown-it-sup": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/markdown-it-sup/-/markdown-it-sup-1.0.0.tgz", + "integrity": "sha512-E32m0nV9iyhRR7CrhnzL5msqic7rL1juWre6TQNxsnApg7Uf+F97JOKxUijg5YwXz86lZ0mqfOnutoryyNdntQ==", + "dev": true + }, + "node_modules/markdown-it-table-of-contents": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/markdown-it-table-of-contents/-/markdown-it-table-of-contents-0.4.4.tgz", + "integrity": "sha512-TAIHTHPwa9+ltKvKPWulm/beozQU41Ab+FIefRaQV1NRnpzwcV9QOe6wXQS5WLivm5Q/nlo0rl6laGkMDZE7Gw==", + "dev": true, + "engines": { + "node": ">6.4.0" + } + }, + "node_modules/markdown-it-task-lists": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/markdown-it-task-lists/-/markdown-it-task-lists-2.1.1.tgz", + "integrity": "sha512-TxFAc76Jnhb2OUu+n3yz9RMu4CwGfaT788br6HhEDlvWfdeJcLUsxk1Hgw2yJio0OXsxv7pyIPmvECY7bMbluA==", + "dev": true + }, + "node_modules/markdown-it-texmath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/markdown-it-texmath/-/markdown-it-texmath-1.0.0.tgz", + "integrity": "sha512-4hhkiX8/gus+6e53PLCUmUrsa6ZWGgJW2XCW6O0ASvZUiezIK900ZicinTDtG3kAO2kon7oUA/ReWmpW2FByxg==", + "dev": true + }, + "node_modules/markdown-it-video": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/markdown-it-video/-/markdown-it-video-0.6.3.tgz", + "integrity": "sha512-T4th1kwy0OcvyWSN4u3rqPGxvbDclpucnVSSaH3ZacbGsAts964dxokx9s/I3GYsrDCJs4ogtEeEeVP18DQj0Q==", + "dev": true + }, + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/markdown-it/node_modules/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/matcher-collection": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/matcher-collection/-/matcher-collection-2.0.1.tgz", + "integrity": "sha512-daE62nS2ZQsDg9raM0IlZzLmI2u+7ZapXBwdoeBUKAYERPDDIc0qNqA8E0Rp2D+gspKR7BgIFP52GeujaGXWeQ==", + "dev": true, + "dependencies": { + "@types/minimatch": "^3.0.3", + "minimatch": "^3.0.2" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/material-icons": { + "version": "1.13.11", + "resolved": "https://registry.npmjs.org/material-icons/-/material-icons-1.13.11.tgz", + "integrity": "sha512-kp2oAdaqo/Zp6hpTZW01rOgDPWmxBUszSdDzkRm1idCjjNvdUMnqu8qu58cll6CObo+o0cydOiPLdoSugLm+mQ==", + "dev": true + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "dev": true + }, + "node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "dev": true, + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/nan": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", + "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==", + "dev": true, + "optional": true + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha512-A48My/mtCklowHBlI8Fq2jFWK4tX4lJ5E6ytFsSOq1fzpvT0SQSgKhSg7lN5c2uYFOrUAOQp6zhhJnpp1eMloQ==", + "dev": true, + "dependencies": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/nunjucks": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.2.tgz", + "integrity": "sha512-KUi85OoF2NMygwODAy28Lh9qHmq5hO3rBlbkYoC8v377h4l8Pt5qFjILl0LWpMbOrZ18CzfVVUvIHUIrtED3sA==", + "dev": true, + "dependencies": { + "a-sync-waterfall": "^1.0.0", + "asap": "^2.0.3", + "commander": "^5.1.0" + }, + "bin": { + "nunjucks-precompile": "bin/precompile" + }, + "engines": { + "node": ">= 6.9.0" + }, + "optionalDependencies": { + "chokidar": "^3.3.0" + } + }, + "node_modules/nunjucks/node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", + "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "dev": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/opn": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-6.0.0.tgz", + "integrity": "sha512-I9PKfIZC+e4RXZ/qr1RhgyCnGgYX0UEIlXgWnCOVACIvFgaC9rz6Won7xbdhoHrd8IIhV7YEpHjreNUNkqCGkQ==", + "deprecated": "The package has been renamed to `open`", + "dev": true, + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "dev": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", + "dev": true + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", + "dev": true, + "dependencies": { + "through": "~2.3" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true + }, + "node_modules/proxy-middleware": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz", + "integrity": "sha512-EGCG8SeoIRVMhsqHQUdDigB2i7qU7fCsWASwn54+nPutYO8n4q6EiwMzyfWlC+dzRFExP+kvcnDFdBDHoZBU7Q==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "dev": true + }, + "node_modules/query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==", + "dev": true, + "dependencies": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safe-stable-stringify": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz", + "integrity": "sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/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==", + "dev": true + }, + "node_modules/send/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-javascript": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz", + "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==", + "dev": true + }, + "node_modules/simple-git": { + "version": "2.48.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.48.0.tgz", + "integrity": "sha512-z4qtrRuaAFJS4PUd0g+xy7aN4y+RvEt/QTJpR184lhJguBA1S/LsVlvE/CM95RsYMOFJG3NGGDjqFCzKU19S/A==", + "dev": true, + "dependencies": { + "@kwsites/file-exists": "^1.1.1", + "@kwsites/promise-deferred": "^1.1.1", + "debug": "^4.3.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/steveukx/" + } + }, + "node_modules/simple-git/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/simple-git/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==", + "dev": true + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", + "dev": true, + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", + "dev": true + }, + "node_modules/split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "dev": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stream-combiner": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", + "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", + "dev": true, + "dependencies": { + "duplexer": "~0.1.1", + "through": "~2.3.4" + } + }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "dev": true, + "engines": { + "node": ">=0.10.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==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-url-auth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-url-auth/-/strip-url-auth-1.0.1.tgz", + "integrity": "sha512-++41PnXftlL3pvI6lpvhSEO+89g1kIJC4MYB5E6yH+WHa5InIqz51yGd1YOGd7VNSNdoEOfzTMqbAM/2PbgaHQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/triple-beam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==", + "dev": true + }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unix-crypt-td-js": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz", + "integrity": "sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw==", + "dev": true + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "dev": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "dev": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "engines": { + "node": ">=0.10.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==", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vue": { + "version": "2.6.14", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.14.tgz", + "integrity": "sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ==", + "dev": true + }, + "node_modules/vue-server-renderer": { + "version": "2.6.14", + "resolved": "https://registry.npmjs.org/vue-server-renderer/-/vue-server-renderer-2.6.14.tgz", + "integrity": "sha512-HifYRa/LW7cKywg9gd4ZtvtRuBlstQBao5ZCWlg40fyB4OPoGfEXAzxb0emSLv4pBDOHYx0UjpqvxpiQFEuoLA==", + "dev": true, + "dependencies": { + "chalk": "^1.1.3", + "hash-sum": "^1.0.2", + "he": "^1.1.0", + "lodash.template": "^4.5.0", + "lodash.uniq": "^4.5.0", + "resolve": "^1.2.0", + "serialize-javascript": "^3.1.0", + "source-map": "0.5.6" + } + }, + "node_modules/vue-server-renderer/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vue-server-renderer/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vue-server-renderer/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/vue-template-compiler": { + "version": "2.6.14", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.14.tgz", + "integrity": "sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g==", + "dev": true, + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.1.0" + } + }, + "node_modules/walk-sync": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-2.2.0.tgz", + "integrity": "sha512-IC8sL7aB4/ZgFcGI2T1LczZeFWZ06b3zoHH7jBPyHxOtIIz1jppWHjjEXkOFvFojBVAK9pV7g47xOZ4LW3QLfg==", + "dev": true, + "dependencies": { + "@types/minimatch": "^3.0.3", + "ensure-posix-path": "^1.1.0", + "matcher-collection": "^2.0.0", + "minimatch": "^3.0.4" + }, + "engines": { + "node": "8.* || >= 10.*" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/winston": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.6.tgz", + "integrity": "sha512-J5Zu4p0tojLde8mIOyDSsmLmcP8I3Z6wtwpTDHx1+hGcdhxcJaAmG4CFtagkb+NiN1M9Ek4b42pzMWqfc9jm8w==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "colors": "1.0.x", + "cycle": "1.0.x", + "eyes": "0.1.x", + "isstream": "0.1.x", + "stack-trace": "0.0.x" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/winston-compat": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/winston-compat/-/winston-compat-0.1.5.tgz", + "integrity": "sha512-EPvPcHT604AV3Ji6d3+vX8ENKIml9VSxMRnPQ+cuK/FX6f3hvPP2hxyoeeCOCFvDrJEujalfcKWlWPvAnFyS9g==", + "dev": true, + "dependencies": { + "cycle": "~1.0.3", + "logform": "^1.6.0", + "triple-beam": "^1.2.0" + }, + "engines": { + "node": ">= 6.4.0" + } + }, + "node_modules/winston-daily-rotate-file": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/winston-daily-rotate-file/-/winston-daily-rotate-file-3.10.0.tgz", + "integrity": "sha512-KO8CfbI2CvdR3PaFApEH02GPXiwJ+vbkF1mCkTlvRIoXFI8EFlf1ACcuaahXTEiDEKCii6cNe95gsL4ZkbnphA==", + "dev": true, + "dependencies": { + "file-stream-rotator": "^0.4.1", + "object-hash": "^1.3.0", + "semver": "^6.2.0", + "triple-beam": "^1.3.0", + "winston-compat": "^0.1.4", + "winston-transport": "^4.2.0" + }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "winston": "^2 || ^3" + } + }, + "node_modules/winston-daily-rotate-file/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/winston-transport": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", + "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", + "dev": true, + "dependencies": { + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 6.4.0" + } + }, + "node_modules/winston-transport/node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", + "dev": true + }, + "node_modules/winston-transport/node_modules/logform": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.4.2.tgz", + "integrity": "sha512-W4c9himeAwXEdZ05dQNerhFz2XG80P9Oj0loPUMV23VC2it0orMHQhJm4hdnnor3rd1HsGf6a2lPwBM1zeXHGw==", + "dev": true, + "dependencies": { + "@colors/colors": "1.5.0", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + } + }, + "node_modules/winston-transport/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==", + "dev": true + }, + "node_modules/winston/node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "node_modules/winston/node_modules/colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true + } + }, + "dependencies": { + "@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true + }, + "@fortawesome/fontawesome-free": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.4.2.tgz", + "integrity": "sha512-m5cPn3e2+FDCOgi1mz0RexTUvvQibBebOUlUlW0+YrMjDTPkiJ6VTKukA1GRsvRw+12KyJndNjj0O4AgTxm2Pg==", + "dev": true + }, + "@kwsites/file-exists": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", + "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", + "dev": true, + "requires": { + "debug": "^4.1.1" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@kwsites/promise-deferred": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", + "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", + "dev": true + }, + "@markbind/core": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@markbind/core/-/core-5.1.0.tgz", + "integrity": "sha512-YAXjH+qCXnrBzpKIAJkayVLmyIUaG/8Dms3Gpd2VIufeZyW8w0diXdgKSsymjzodTMgghZMdxG3Qpng833ARPg==", + "dev": true, + "requires": { + "@fortawesome/fontawesome-free": "^6.4.0", + "@markbind/core-web": "5.1.0", + "@primer/octicons": "^15.0.1", + "@sindresorhus/slugify": "^0.9.1", + "@tlylt/markdown-it-imsize": "^3.0.0", + "bluebird": "^3.7.2", + "bootswatch": "5.1.3", + "cheerio": "^0.22.0", + "crypto-js": "^4.0.0", + "csv-parse": "^4.14.2", + "ensure-posix-path": "^1.1.1", + "fastmatter": "^2.1.1", + "fs-extra": "^9.0.1", + "gh-pages": "^2.1.1", + "highlight.js": "^10.4.1", + "htmlparser2": "^3.10.1", + "ignore": "^5.1.4", + "js-beautify": "1.14.3", + "katex": "^0.15.6", + "lodash": "^4.17.15", + "markdown-it": "^12.3.2", + "markdown-it-attrs": "^4.1.3", + "markdown-it-emoji": "^1.4.0", + "markdown-it-linkify-images": "^3.0.0", + "markdown-it-mark": "^3.0.0", + "markdown-it-regexp": "^0.4.0", + "markdown-it-sub": "^1.0.0", + "markdown-it-sup": "^1.0.0", + "markdown-it-table-of-contents": "^0.4.4", + "markdown-it-task-lists": "^2.1.1", + "markdown-it-texmath": "^1.0.0", + "markdown-it-video": "^0.6.3", + "material-icons": "^1.9.1", + "moment": "^2.29.4", + "nunjucks": "3.2.2", + "path-is-inside": "^1.0.2", + "simple-git": "^2.17.0", + "url-parse": "^1.5.10", + "uuid": "^8.3.1", + "vue": "2.6.14", + "vue-server-renderer": "2.6.14", + "vue-template-compiler": "2.6.14", + "walk-sync": "^2.0.2", + "winston": "^2.4.4" + } + }, + "@markbind/core-web": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@markbind/core-web/-/core-web-5.1.0.tgz", + "integrity": "sha512-TRzz8ZCr25pylKvFxF/WwXDi4Gbtsb2OLXV61WyTFqVy03tFoEJ2mqncpbliI9DrfDdKWcm1YZPgDCedVkYjKA==", + "dev": true + }, + "@primer/octicons": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/@primer/octicons/-/octicons-15.2.0.tgz", + "integrity": "sha512-4cHZzcZ3F/HQNL4EKSaFyVsW7XtITiJkTeB1JDDmRuP/XobyWyF9gWxuV9c+byUa8dOB5KNQn37iRvNrIehPUQ==", + "dev": true, + "requires": { + "object-assign": "^4.1.1" + } + }, + "@sindresorhus/slugify": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-0.9.1.tgz", + "integrity": "sha512-b6heYM9dzZD13t2GOiEQTDE0qX+I1GyOotMwKh9VQqzuNiVdPVT8dM43fe9HNb/3ul+Qwd5oKSEDrDIfhq3bnQ==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "lodash.deburr": "^4.1.0" + } + }, + "@tlylt/markdown-it-imsize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@tlylt/markdown-it-imsize/-/markdown-it-imsize-3.0.0.tgz", + "integrity": "sha512-6kTM+vRJTuN2UxNPyJ8yC+NHrzS+MxVHV+z+bDxSr/Fd7eTah2+otLKC2B17YI/1lQnSumA2qokPGuzsA98c6g==", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "a-sync-waterfall": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", + "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "apache-crypt": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.5.tgz", + "integrity": "sha512-ICnYQH+DFVmw+S4Q0QY2XRXD8Ne8ewh8HgbuFH4K7022zCxgHM0Hz1xkRnUlEfAXNbwp1Cnhbedu60USIfDxvg==", + "dev": true, + "requires": { + "unix-crypt-td-js": "^1.1.4" + } + }, + "apache-md5": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.7.tgz", + "integrity": "sha512-JtHjzZmJxtzfTSjsCyHgPR155HBe5WGyUyHTaEkfy46qhwCFKx1Epm6nAxgUG3WfUZP1dWhGqj9Z2NOBeZ+uBw==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "dev": true + }, + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "bootswatch": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/bootswatch/-/bootswatch-5.1.3.tgz", + "integrity": "sha512-NmZFN6rOCoXWQ/PkzmD8FFWDe24kocX9OXWHNVaLxVVnpqpAzEbMFsf8bAfKwVtpNXibasZCzv09B5fLieAh2g==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cheerio": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", + "integrity": "sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA==", + "dev": true, + "requires": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash.assignin": "^4.0.9", + "lodash.bind": "^4.1.4", + "lodash.defaults": "^4.0.1", + "lodash.filter": "^4.4.0", + "lodash.flatten": "^4.2.0", + "lodash.foreach": "^4.3.0", + "lodash.map": "^4.4.0", + "lodash.merge": "^4.4.0", + "lodash.pick": "^4.2.1", + "lodash.reduce": "^4.4.0", + "lodash.reject": "^4.4.0", + "lodash.some": "^4.4.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "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==", + "dev": true + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true + }, + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "dev": true + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==", + "dev": true + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==", + "dev": true, + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "dev": true + }, + "csv-parse": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.16.3.tgz", + "integrity": "sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==", + "dev": true + }, + "cycle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", + "integrity": "sha512-TVF6svNzeQCOpjCqsy0/CSy8VgObG3wXusJ73xW2GbG5rGx7lC8zxDSURicsXI2UsGdi2L0QNRCi745/wUDvsA==", + "dev": true + }, + "de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", + "dev": true + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, + "dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "dev": true, + "requires": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "editorconfig": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", + "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", + "dev": true, + "requires": { + "commander": "^2.19.0", + "lru-cache": "^4.1.5", + "semver": "^5.6.0", + "sigmund": "^1.0.1" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "email-addresses": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.1.0.tgz", + "integrity": "sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true + }, + "ensure-posix-path": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ensure-posix-path/-/ensure-posix-path-1.1.1.tgz", + "integrity": "sha512-VWU0/zXzVbeJNXvME/5EmLuEj2TauvoaTz6aFYK1Z92JCBlDlZ3Gu0tuGR42kpW1754ywTs+QB0g5TP0oj9Zaw==", + "dev": true + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true + }, + "event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", + "dev": true, + "requires": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + }, + "dependencies": { + "split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", + "dev": true, + "requires": { + "through": "2" + } + }, + "stream-combiner": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", + "dev": true, + "requires": { + "duplexer": "~0.1.1" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true + } + } + }, + "eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==", + "dev": true + }, + "fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true + }, + "fastmatter": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fastmatter/-/fastmatter-2.1.1.tgz", + "integrity": "sha512-NFrjZEPJZTexoJEuyM5J7n4uFaLf0dOI7Ok4b2IZXOYBqCp1Bh5RskANmQ2TuDsz3M35B1yL2AP/Rn+kp85KeA==", + "dev": true, + "requires": { + "js-yaml": "^3.13.0", + "split": "^1.0.1", + "stream-combiner": "^0.2.2", + "through2": "^3.0.1" + } + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fecha": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", + "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==", + "dev": true + }, + "figlet": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.5.2.tgz", + "integrity": "sha512-WOn21V8AhyE1QqVfPIVxe3tupJacq1xGkPTB4iagT6o+P2cAgEOOwIxMftr4+ZCTI6d551ij9j61DFr0nsP2uQ==", + "dev": true + }, + "file-stream-rotator": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/file-stream-rotator/-/file-stream-rotator-0.4.1.tgz", + "integrity": "sha512-W3aa3QJEc8BS2MmdVpQiYLKHj3ijpto1gMDlsgCRSKfIUe6MwkcpODGPQ3vZfb0XvCeCqlu9CBQTN7oQri2TZQ==", + "dev": true, + "requires": { + "moment": "^2.11.2" + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "filename-reserved-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz", + "integrity": "sha512-UZArj7+U+2reBBVCvVmRlyq9D7EYQdUtuNN+1iz7pF1jGcJ2L0TjiRCxsTZfj2xFbM4c25uGCUDpKTHA7L2TKg==", + "dev": true + }, + "filenamify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-1.2.1.tgz", + "integrity": "sha512-DKVP0WQcB7WaIMSwDETqImRej2fepPqvXQjaVib7LRZn9Rxn5UbvK2tYTqGf1A1DkIprQQkG4XSQXSOZp7Q3GQ==", + "dev": true, + "requires": { + "filename-reserved-regex": "^1.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" + } + }, + "filenamify-url": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/filenamify-url/-/filenamify-url-1.0.0.tgz", + "integrity": "sha512-O9K9JcZeF5VdZWM1qR92NSv1WY2EofwudQayPx5dbnnFl9k0IcZha4eV/FGkjnBK+1irOQInij0yiooCHu/0Fg==", + "dev": true, + "requires": { + "filenamify": "^1.0.0", + "humanize-url": "^1.0.0" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true + }, + "from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", + "dev": true + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "dev": true + }, + "gh-pages": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-2.2.0.tgz", + "integrity": "sha512-c+yPkNOPMFGNisYg9r4qvsMIjVYikJv7ImFOhPIVPt0+AcRUamZ7zkGRLHz7FKB0xrlZ+ddSOJsZv9XAFVXLmA==", + "dev": true, + "requires": { + "async": "^2.6.1", + "commander": "^2.18.0", + "email-addresses": "^3.0.1", + "filenamify-url": "^1.0.0", + "fs-extra": "^8.1.0", + "globby": "^6.1.0" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + } + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "http-auth": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-3.1.3.tgz", + "integrity": "sha512-Jbx0+ejo2IOx+cRUYAGS1z6RGc6JfYUNkysZM4u4Sfk1uLlGv814F7/PIjQQAuThLdAWxb74JMGd5J8zex1VQg==", + "dev": true, + "requires": { + "apache-crypt": "^1.1.2", + "apache-md5": "^1.0.6", + "bcryptjs": "^2.3.0", + "uuid": "^3.0.0" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } + } + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "dependencies": { + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "humanize-url": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/humanize-url/-/humanize-url-1.0.1.tgz", + "integrity": "sha512-RtgTzXCPVb/te+e82NDhAc5paj+DuKSratIGAr+v+HZK24eAQ8LMoBGYoL7N/O+9iEc33AKHg45dOMKw3DNldQ==", + "dev": true, + "requires": { + "normalize-url": "^1.0.0", + "strip-url-auth": "^1.0.0" + } + }, + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "js-beautify": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.3.tgz", + "integrity": "sha512-f1ra8PHtOEu/70EBnmiUlV8nJePS58y9qKjl4JHfYWlFH6bo7ogZBz//FAZp7jDuXtYnGYKymZPlrg2I/9Zo4g==", + "dev": true, + "requires": { + "config-chain": "^1.1.13", + "editorconfig": "^0.15.3", + "glob": "^7.1.3", + "nopt": "^5.0.0" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "katex": { + "version": "0.15.6", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.15.6.tgz", + "integrity": "sha512-UpzJy4yrnqnhXvRPhjEuLA4lcPn6eRngixW7Q3TJErjg3Aw2PuLFBzTkdUb89UtumxjhHTqL3a5GDGETMSwgJA==", + "dev": true, + "requires": { + "commander": "^8.0.0" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "dev": true, + "requires": { + "uc.micro": "^1.0.1" + } + }, + "live-server": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/live-server/-/live-server-1.2.1.tgz", + "integrity": "sha512-Yn2XCVjErTkqnM3FfTmM7/kWy3zP7+cEtC7x6u+wUzlQ+1UW3zEYbbyJrc0jNDwiMDZI0m4a0i3dxlGHVyXczw==", + "dev": true, + "requires": { + "chokidar": "^2.0.4", + "colors": "latest", + "connect": "^3.6.6", + "cors": "latest", + "event-stream": "3.3.4", + "faye-websocket": "0.11.x", + "http-auth": "3.1.x", + "morgan": "^1.9.1", + "object-assign": "latest", + "opn": "latest", + "proxy-middleware": "latest", + "send": "latest", + "serve-index": "^1.9.1" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==", + "dev": true + }, + "lodash.assignin": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", + "integrity": "sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg==", + "dev": true + }, + "lodash.bind": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", + "integrity": "sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA==", + "dev": true + }, + "lodash.deburr": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-4.1.0.tgz", + "integrity": "sha512-m/M1U1f3ddMCs6Hq2tAsYThTBDaAKFDX3dwDo97GEYzamXi9SqUpjWi/Rrj/gf3X2n8ktwgZrlP1z6E3v/IExQ==", + "dev": true + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "dev": true + }, + "lodash.filter": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", + "integrity": "sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==", + "dev": true + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "dev": true + }, + "lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==", + "dev": true + }, + "lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==", + "dev": true + }, + "lodash.reduce": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", + "integrity": "sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==", + "dev": true + }, + "lodash.reject": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", + "integrity": "sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ==", + "dev": true + }, + "lodash.some": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", + "integrity": "sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ==", + "dev": true + }, + "lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "dev": true, + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "dev": true, + "requires": { + "lodash._reinterpolate": "^3.0.0" + } + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, + "logform": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-1.10.0.tgz", + "integrity": "sha512-em5ojIhU18fIMOw/333mD+ZLE2fis0EzXl1ZwHx4iQzmpQi6odNiY/t+ITNr33JZhT9/KEaH+UPIipr6a9EjWg==", + "dev": true, + "requires": { + "colors": "^1.2.1", + "fast-safe-stringify": "^2.0.4", + "fecha": "^2.3.3", + "ms": "^2.1.1", + "triple-beam": "^1.2.0" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "dev": true + }, + "map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "markbind-cli": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/markbind-cli/-/markbind-cli-5.1.0.tgz", + "integrity": "sha512-6POI1Q++2aZa+Udk/oQ6LX1oNPbKUBDY0mN3Up7VOFeK+XYW51faxuCk2Q91JTBxYRKLNtshxf0y12kB4Cj9Qw==", + "dev": true, + "requires": { + "@markbind/core": "5.1.0", + "@markbind/core-web": "5.1.0", + "bluebird": "^3.7.2", + "chalk": "^3.0.0", + "cheerio": "^0.22.0", + "chokidar": "^3.3.0", + "colors": "1.4.0", + "commander": "^8.1.0", + "figlet": "^1.2.4", + "find-up": "^4.1.0", + "fs-extra": "^9.0.1", + "live-server": "1.2.1", + "lodash": "^4.17.15", + "url-parse": "^1.5.10", + "winston": "^2.4.4", + "winston-daily-rotate-file": "^3.10.0" + } + }, + "markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "dev": true, + "requires": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "dev": true + } + } + }, + "markdown-it-attrs": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/markdown-it-attrs/-/markdown-it-attrs-4.1.6.tgz", + "integrity": "sha512-O7PDKZlN8RFMyDX13JnctQompwrrILuz2y43pW2GagcwpIIElkAdfeek+erHfxUOlXWPsjFeWmZ8ch1xtRLWpA==", + "dev": true, + "requires": {} + }, + "markdown-it-emoji": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/markdown-it-emoji/-/markdown-it-emoji-1.4.0.tgz", + "integrity": "sha512-QCz3Hkd+r5gDYtS2xsFXmBYrgw6KuWcJZLCEkdfAuwzZbShCmCfta+hwAMq4NX/4xPzkSHduMKgMkkPUJxSXNg==", + "dev": true + }, + "markdown-it-linkify-images": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/markdown-it-linkify-images/-/markdown-it-linkify-images-3.0.0.tgz", + "integrity": "sha512-Vs5yGJa5MWjFgytzgtn8c1U6RcStj3FZKhhx459U8dYbEE5FTWZ6mMRkYMiDlkFO0j4VCsQT1LT557bY0ETgtg==", + "dev": true, + "requires": { + "markdown-it": "^13.0.1" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true + }, + "linkify-it": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", + "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", + "dev": true, + "requires": { + "uc.micro": "^1.0.1" + } + }, + "markdown-it": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz", + "integrity": "sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==", + "dev": true, + "requires": { + "argparse": "^2.0.1", + "entities": "~3.0.1", + "linkify-it": "^4.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + } + } + } + }, + "markdown-it-mark": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/markdown-it-mark/-/markdown-it-mark-3.0.1.tgz", + "integrity": "sha512-HyxjAu6BRsdt6Xcv6TKVQnkz/E70TdGXEFHRYBGLncRE9lBFwDNLVtFojKxjJWgJ+5XxUwLaHXy+2sGBbDn+4A==", + "dev": true + }, + "markdown-it-regexp": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/markdown-it-regexp/-/markdown-it-regexp-0.4.0.tgz", + "integrity": "sha512-0XQmr46K/rMKnI93Y3CLXsHj4jIioRETTAiVnJnjrZCEkGaDOmUxTbZj/aZ17G5NlRcVpWBYjqpwSlQ9lj+Kxw==", + "dev": true + }, + "markdown-it-sub": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/markdown-it-sub/-/markdown-it-sub-1.0.0.tgz", + "integrity": "sha512-z2Rm/LzEE1wzwTSDrI+FlPEveAAbgdAdPhdWarq/ZGJrGW/uCQbKAnhoCsE4hAbc3SEym26+W2z/VQB0cQiA9Q==", + "dev": true + }, + "markdown-it-sup": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/markdown-it-sup/-/markdown-it-sup-1.0.0.tgz", + "integrity": "sha512-E32m0nV9iyhRR7CrhnzL5msqic7rL1juWre6TQNxsnApg7Uf+F97JOKxUijg5YwXz86lZ0mqfOnutoryyNdntQ==", + "dev": true + }, + "markdown-it-table-of-contents": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/markdown-it-table-of-contents/-/markdown-it-table-of-contents-0.4.4.tgz", + "integrity": "sha512-TAIHTHPwa9+ltKvKPWulm/beozQU41Ab+FIefRaQV1NRnpzwcV9QOe6wXQS5WLivm5Q/nlo0rl6laGkMDZE7Gw==", + "dev": true + }, + "markdown-it-task-lists": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/markdown-it-task-lists/-/markdown-it-task-lists-2.1.1.tgz", + "integrity": "sha512-TxFAc76Jnhb2OUu+n3yz9RMu4CwGfaT788br6HhEDlvWfdeJcLUsxk1Hgw2yJio0OXsxv7pyIPmvECY7bMbluA==", + "dev": true + }, + "markdown-it-texmath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/markdown-it-texmath/-/markdown-it-texmath-1.0.0.tgz", + "integrity": "sha512-4hhkiX8/gus+6e53PLCUmUrsa6ZWGgJW2XCW6O0ASvZUiezIK900ZicinTDtG3kAO2kon7oUA/ReWmpW2FByxg==", + "dev": true + }, + "markdown-it-video": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/markdown-it-video/-/markdown-it-video-0.6.3.tgz", + "integrity": "sha512-T4th1kwy0OcvyWSN4u3rqPGxvbDclpucnVSSaH3ZacbGsAts964dxokx9s/I3GYsrDCJs4ogtEeEeVP18DQj0Q==", + "dev": true + }, + "matcher-collection": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/matcher-collection/-/matcher-collection-2.0.1.tgz", + "integrity": "sha512-daE62nS2ZQsDg9raM0IlZzLmI2u+7ZapXBwdoeBUKAYERPDDIc0qNqA8E0Rp2D+gspKR7BgIFP52GeujaGXWeQ==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "minimatch": "^3.0.2" + } + }, + "material-icons": { + "version": "1.13.11", + "resolved": "https://registry.npmjs.org/material-icons/-/material-icons-1.13.11.tgz", + "integrity": "sha512-kp2oAdaqo/Zp6hpTZW01rOgDPWmxBUszSdDzkRm1idCjjNvdUMnqu8qu58cll6CObo+o0cydOiPLdoSugLm+mQ==", + "dev": true + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + } + }, + "moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "dev": true + }, + "morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "dev": true, + "requires": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "nan": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", + "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha512-A48My/mtCklowHBlI8Fq2jFWK4tX4lJ5E6ytFsSOq1fzpvT0SQSgKhSg7lN5c2uYFOrUAOQp6zhhJnpp1eMloQ==", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, + "nunjucks": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.2.tgz", + "integrity": "sha512-KUi85OoF2NMygwODAy28Lh9qHmq5hO3rBlbkYoC8v377h4l8Pt5qFjILl0LWpMbOrZ18CzfVVUvIHUIrtED3sA==", + "dev": true, + "requires": { + "a-sync-waterfall": "^1.0.0", + "asap": "^2.0.3", + "chokidar": "^3.3.0", + "commander": "^5.1.0" + }, + "dependencies": { + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true + } + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-hash": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", + "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "opn": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-6.0.0.tgz", + "integrity": "sha512-I9PKfIZC+e4RXZ/qr1RhgyCnGgYX0UEIlXgWnCOVACIvFgaC9rz6Won7xbdhoHrd8IIhV7YEpHjreNUNkqCGkQ==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", + "dev": true, + "requires": { + "through": "~2.3" + } + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true + }, + "proxy-middleware": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz", + "integrity": "sha512-EGCG8SeoIRVMhsqHQUdDigB2i7qU7fCsWASwn54+nPutYO8n4q6EiwMzyfWlC+dzRFExP+kvcnDFdBDHoZBU7Q==", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "dev": true + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==", + "dev": true, + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true + }, + "repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "dev": true, + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "dev": true + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safe-stable-stringify": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz", + "integrity": "sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg==", + "dev": true + }, + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz", + "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true + } + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==", + "dev": true + }, + "simple-git": { + "version": "2.48.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.48.0.tgz", + "integrity": "sha512-z4qtrRuaAFJS4PUd0g+xy7aN4y+RvEt/QTJpR184lhJguBA1S/LsVlvE/CM95RsYMOFJG3NGGDjqFCzKU19S/A==", + "dev": true, + "requires": { + "@kwsites/file-exists": "^1.1.1", + "@kwsites/promise-deferred": "^1.1.1", + "debug": "^4.3.2" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true + }, + "split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "requires": { + "through": "2" + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true + }, + "stream-combiner": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", + "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", + "dev": true, + "requires": { + "duplexer": "~0.1.1", + "through": "~2.3.4" + } + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "dev": true + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, + "strip-url-auth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-url-auth/-/strip-url-auth-1.0.1.tgz", + "integrity": "sha512-++41PnXftlL3pvI6lpvhSEO+89g1kIJC4MYB5E6yH+WHa5InIqz51yGd1YOGd7VNSNdoEOfzTMqbAM/2PbgaHQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, + "triple-beam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==", + "dev": true + }, + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true + } + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "unix-crypt-td-js": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz", + "integrity": "sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "dev": true + }, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true + }, + "vue": { + "version": "2.6.14", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.14.tgz", + "integrity": "sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ==", + "dev": true + }, + "vue-server-renderer": { + "version": "2.6.14", + "resolved": "https://registry.npmjs.org/vue-server-renderer/-/vue-server-renderer-2.6.14.tgz", + "integrity": "sha512-HifYRa/LW7cKywg9gd4ZtvtRuBlstQBao5ZCWlg40fyB4OPoGfEXAzxb0emSLv4pBDOHYx0UjpqvxpiQFEuoLA==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "hash-sum": "^1.0.2", + "he": "^1.1.0", + "lodash.template": "^4.5.0", + "lodash.uniq": "^4.5.0", + "resolve": "^1.2.0", + "serialize-javascript": "^3.1.0", + "source-map": "0.5.6" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true + } + } + }, + "vue-template-compiler": { + "version": "2.6.14", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.14.tgz", + "integrity": "sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g==", + "dev": true, + "requires": { + "de-indent": "^1.0.2", + "he": "^1.1.0" + } + }, + "walk-sync": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-2.2.0.tgz", + "integrity": "sha512-IC8sL7aB4/ZgFcGI2T1LczZeFWZ06b3zoHH7jBPyHxOtIIz1jppWHjjEXkOFvFojBVAK9pV7g47xOZ4LW3QLfg==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "ensure-posix-path": "^1.1.0", + "matcher-collection": "^2.0.0", + "minimatch": "^3.0.4" + } + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "winston": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.6.tgz", + "integrity": "sha512-J5Zu4p0tojLde8mIOyDSsmLmcP8I3Z6wtwpTDHx1+hGcdhxcJaAmG4CFtagkb+NiN1M9Ek4b42pzMWqfc9jm8w==", + "dev": true, + "requires": { + "async": "^3.2.3", + "colors": "1.0.x", + "cycle": "1.0.x", + "eyes": "0.1.x", + "isstream": "0.1.x", + "stack-trace": "0.0.x" + }, + "dependencies": { + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", + "dev": true + } + } + }, + "winston-compat": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/winston-compat/-/winston-compat-0.1.5.tgz", + "integrity": "sha512-EPvPcHT604AV3Ji6d3+vX8ENKIml9VSxMRnPQ+cuK/FX6f3hvPP2hxyoeeCOCFvDrJEujalfcKWlWPvAnFyS9g==", + "dev": true, + "requires": { + "cycle": "~1.0.3", + "logform": "^1.6.0", + "triple-beam": "^1.2.0" + } + }, + "winston-daily-rotate-file": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/winston-daily-rotate-file/-/winston-daily-rotate-file-3.10.0.tgz", + "integrity": "sha512-KO8CfbI2CvdR3PaFApEH02GPXiwJ+vbkF1mCkTlvRIoXFI8EFlf1ACcuaahXTEiDEKCii6cNe95gsL4ZkbnphA==", + "dev": true, + "requires": { + "file-stream-rotator": "^0.4.1", + "object-hash": "^1.3.0", + "semver": "^6.2.0", + "triple-beam": "^1.3.0", + "winston-compat": "^0.1.4", + "winston-transport": "^4.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "winston-transport": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", + "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", + "dev": true, + "requires": { + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" + }, + "dependencies": { + "fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", + "dev": true + }, + "logform": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.4.2.tgz", + "integrity": "sha512-W4c9himeAwXEdZ05dQNerhFz2XG80P9Oj0loPUMV23VC2it0orMHQhJm4hdnnor3rd1HsGf6a2lPwBM1zeXHGw==", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true + } + } +} diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 00000000000..aa7083fd8a7 --- /dev/null +++ b/docs/package.json @@ -0,0 +1,14 @@ +{ + "name": "docs", + "version": "1.0.0", + "description": "AB-3 docs", + "scripts": { + "init": "markbind init", + "build": "markbind build", + "serve": "markbind serve", + "deploy": "markbind deploy" + }, + "devDependencies": { + "markbind-cli": "^5.1.0" + } +} diff --git a/docs/site.json b/docs/site.json new file mode 100644 index 00000000000..ffe411c3f82 --- /dev/null +++ b/docs/site.json @@ -0,0 +1,29 @@ +{ + "baseUrl": "", + "titlePrefix": "", + "titleSuffix": "AddressBook Level-3", + "faviconPath": "images/SeEduLogo.png", + "style": { + "codeTheme": "light" + }, + "ignore": [ + "_markbind/layouts/*", + "_markbind/logs/*", + "_site/*", + "site.json", + "*.md", + "*.njk", + ".git/*", + "node_modules/*" + ], + "pagesExclude": ["node_modules/*"], + "pages": [ + { + "glob": ["**/index.md", "**/*.md"] + } + ], + "deploy": { + "message": "Site Update." + }, + "timeZone": "Asia/Singapore" +} diff --git a/docs/stylesheets/main.css b/docs/stylesheets/main.css new file mode 100644 index 00000000000..1074ade42dd --- /dev/null +++ b/docs/stylesheets/main.css @@ -0,0 +1,144 @@ +mark { + background-color: #ff0; + border-radius: 5px; + padding-top: 0; + padding-bottom: 0; +} + +.indented { + padding-left: 20px; +} + +.theme-card img { + width: 100%; +} + +/* Scrollbar */ + +.slim-scroll::-webkit-scrollbar { + width: 5px; +} + +.slim-scroll::-webkit-scrollbar-thumb { + background: #808080; + border-radius: 20px; +} + +.slim-scroll::-webkit-scrollbar-track { + background: transparent; + border-radius: 20px; +} + +.slim-scroll-blue::-webkit-scrollbar { + width: 5px; +} + +.slim-scroll-blue::-webkit-scrollbar-thumb { + background: #00b0ef; + border-radius: 20px; +} + +.slim-scroll-blue::-webkit-scrollbar-track { + background: transparent; + border-radius: 20px; +} + +/* Layout containers */ + +#flex-body { + display: flex; + flex: 1; + align-items: start; +} + +#content-wrapper { + flex: 1; + margin: 0 auto; + min-width: 0; + max-width: 1000px; + overflow-x: auto; + padding: 0.8rem 20px 0 20px; + transition: 0.4s; + -webkit-transition: 0.4s; +} + +#site-nav, +#page-nav { + display: flex; + flex-direction: column; + position: sticky; + top: var(--sticky-header-height); + flex: 0 0 auto; + max-width: 300px; + max-height: calc(100vh - var(--sticky-header-height)); + width: 300px; +} + +#site-nav { + border-right: 1px solid lightgrey; + padding-bottom: 20px; + z-index: 999; +} + +.site-nav-top { + margin: 0.8rem 0; + padding: 0 12px 12px 12px; +} + +.nav-component { + overflow-y: auto; +} + +#page-nav { + border-left: 1px solid lightgrey; +} + +@media screen and (max-width: 1299.98px) { + #page-nav { + display: none; + } +} + +/* Bootstrap medium(md) responsive breakpoint */ +@media screen and (max-width: 991.98px) { + #site-nav { + display: none; + } +} + +/* Bootstrap small(sm) responsive breakpoint */ +@media (max-width: 767.98px) { + .indented { + padding-left: 10px; + } + + #content-wrapper { + padding: 0 10px; + } +} + +/* Bootstrap extra small(xs) responsive breakpoint */ +@media screen and (max-width: 575.98px) { + #site-nav { + display: none; + } +} + +/* Hide site navigation when printing */ +@media print { + #site-nav { + display: none; + } + + #page-nav { + display: none; + } +} + +h2, +h3, +h4, +h5, +h6 { + color: #e46c0a; +} diff --git a/docs/team/johndoe.md b/docs/team/johndoe.md index 773a07794e2..86aa7ebfc34 100644 --- a/docs/team/johndoe.md +++ b/docs/team/johndoe.md @@ -1,6 +1,6 @@ --- -layout: page -title: John Doe's Project Portfolio Page + layout: default.md + title: "John Doe's Project Portfolio Page" --- ### Project: AddressBook Level 3 From 2960c20f5144f0362b9f37fe3b1fac0471afa676 Mon Sep 17 00:00:00 2001 From: damithc Date: Fri, 9 Feb 2024 18:07:35 +0800 Subject: [PATCH 002/296] Bump MarkBind version --- .github/workflows/docs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 57737a615fc..0cd51c5fb97 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -21,5 +21,5 @@ jobs: with: token: ${{ secrets.GITHUB_TOKEN }} rootDirectory: './docs' - baseUrl: '/addressbook-level3' # replace with your repo name - version: '^5.1.0' + baseUrl: '/tp' # assuming your repo name is tp + version: '^5.2.0' From 339cd23c87a0fa8459545632ea42937103b87e22 Mon Sep 17 00:00:00 2001 From: damithc Date: Fri, 9 Feb 2024 18:08:02 +0800 Subject: [PATCH 003/296] Add a Home button in the top NavBar --- docs/_markbind/layouts/default.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/_markbind/layouts/default.md b/docs/_markbind/layouts/default.md index 7348aace92c..8576932d696 100644 --- a/docs/_markbind/layouts/default.md +++ b/docs/_markbind/layouts/default.md @@ -5,6 +5,7 @@

    AB-3 +
  • Home
  • User Guide
  • Developer Guide
  • About Us
  • From b7068b1103d74064ed74a77840df8246ae33e96e Mon Sep 17 00:00:00 2001 From: damithc Date: Fri, 9 Feb 2024 18:09:08 +0800 Subject: [PATCH 004/296] Reduce font size for printing --- docs/stylesheets/main.css | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/docs/stylesheets/main.css b/docs/stylesheets/main.css index 1074ade42dd..ba6f8385d2d 100644 --- a/docs/stylesheets/main.css +++ b/docs/stylesheets/main.css @@ -133,6 +133,32 @@ mark { #page-nav { display: none; } + + /* Reduce font size when printing */ + h1 { + font-size: 1.2rem !important; + } + h2 { + font-size: 1.0rem !important; + } + h3 { + font-size: 0.9rem !important; + } + h4 { + font-size: 0.8rem !important; + } + h5 { + font-size: 0.7rem !important; + } + body { + font-size: 0.65rem !important; + } + .btn { + font-size: 0.65rem !important; + } + img { + zoom: 0.8; /* might not work on some browsers */ + } } h2, From 7f920ec896d0d61a5bf17504daa3110125c035c9 Mon Sep 17 00:00:00 2001 From: damithc Date: Thu, 8 Aug 2024 19:48:55 +0800 Subject: [PATCH 005/296] docs.yml: Bump MarkBind and Java versions --- .github/workflows/docs.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 0cd51c5fb97..109efdf7bbb 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -14,12 +14,12 @@ jobs: - name: Install Java uses: actions/setup-java@v3 with: - java-version: '11' - distribution: 'temurin' + java-version: '17' + distribution: 'zulu' - name: Build & Deploy MarkBind site uses: MarkBind/markbind-action@v2 with: token: ${{ secrets.GITHUB_TOKEN }} rootDirectory: './docs' baseUrl: '/tp' # assuming your repo name is tp - version: '^5.2.0' + version: '^5.5.2' From d6e09a1a71c154edc0627bb05911f0f37080fd9c Mon Sep 17 00:00:00 2001 From: DESU CLUB Date: Sun, 23 Feb 2025 18:27:05 +0800 Subject: [PATCH 006/296] Add markbind support --- docs/_markbind/layouts/default.md | 2 +- docs/site.json | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/docs/_markbind/layouts/default.md b/docs/_markbind/layouts/default.md index 8576932d696..7bee8a05a5f 100644 --- a/docs/_markbind/layouts/default.md +++ b/docs/_markbind/layouts/default.md @@ -4,7 +4,7 @@
    - AB-3 + TalentMatch
  • Home
  • User Guide
  • Developer Guide
  • diff --git a/docs/site.json b/docs/site.json index ffe411c3f82..6da5bb69eff 100644 --- a/docs/site.json +++ b/docs/site.json @@ -1,6 +1,6 @@ { "baseUrl": "", - "titlePrefix": "", + "titlePrefix": "TalentMatch", "titleSuffix": "AddressBook Level-3", "faviconPath": "images/SeEduLogo.png", "style": { @@ -16,10 +16,15 @@ ".git/*", "node_modules/*" ], - "pagesExclude": ["node_modules/*"], + "pagesExclude": [ + "node_modules/*" + ], "pages": [ { - "glob": ["**/index.md", "**/*.md"] + "glob": [ + "**/index.md", + "**/*.md" + ] } ], "deploy": { From df0a320eceef519d65760e28bcc3b981c0bb3f45 Mon Sep 17 00:00:00 2001 From: Timothy-Ho0203 <156638648+Timothy-Ho0203@users.noreply.github.com> Date: Mon, 3 Mar 2025 16:39:00 +0800 Subject: [PATCH 007/296] Add Timothy's photo --- docs/images/timothy-ho0203.png | Bin 0 -> 16932 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/timothy-ho0203.png diff --git a/docs/images/timothy-ho0203.png b/docs/images/timothy-ho0203.png new file mode 100644 index 0000000000000000000000000000000000000000..7757946a24c379969b2d6bdeea1127489f353d07 GIT binary patch literal 16932 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 Q Date: Wed, 5 Mar 2025 18:58:21 +0800 Subject: [PATCH 008/296] Fix checkstyle warnings and critical LogsCenter bug --- .../java/seedu/address/AppParameters.java | 11 ++-- src/main/java/seedu/address/Main.java | 8 +-- src/main/java/seedu/address/MainApp.java | 56 ++++++++--------- .../seedu/address/commons/core/Config.java | 17 +++-- .../address/commons/core/GuiSettings.java | 33 +++++----- .../address/commons/core/LogsCenter.java | 41 ++++++------ .../seedu/address/commons/core/Version.java | 63 ++++++------------- .../address/commons/core/index/Index.java | 10 ++- .../exceptions/DataLoadingException.java | 1 - .../seedu/address/commons/util/AppUtil.java | 3 +- .../seedu/address/commons/util/FileUtil.java | 8 +-- .../seedu/address/commons/util/JsonUtil.java | 14 ++--- .../address/commons/util/StringUtil.java | 8 +-- .../address/commons/util/ToStringBuilder.java | 12 ++-- .../address/logic/commands/AddCommand.java | 17 +++-- .../address/logic/commands/ClearCommand.java | 2 +- .../address/logic/commands/CommandResult.java | 24 ++++--- .../address/logic/commands/HelpCommand.java | 6 +- .../address/logic/commands/ListCommand.java | 2 +- .../commands/exceptions/CommandException.java | 2 + .../logic/parser/AddCommandParser.java | 8 +-- .../logic/parser/AddressBookParser.java | 38 ++++------- .../logic/parser/ArgumentMultimap.java | 8 +-- .../logic/parser/ArgumentTokenizer.java | 40 ++++-------- .../logic/parser/EditCommandParser.java | 1 - .../logic/parser/FindCommandParser.java | 1 - .../seedu/address/logic/parser/Prefix.java | 23 ++----- .../java/seedu/address/model/AddressBook.java | 34 ++++------ src/main/java/seedu/address/model/Model.java | 8 +-- .../seedu/address/model/ModelManager.java | 42 +++++++------ .../address/model/ReadOnlyAddressBook.java | 1 - .../address/model/ReadOnlyUserPrefs.java | 1 - .../java/seedu/address/model/UserPrefs.java | 22 +++---- .../seedu/address/model/person/Address.java | 18 +++--- .../seedu/address/model/person/Email.java | 16 +++-- .../java/seedu/address/model/person/Name.java | 18 +++--- .../person/NameContainsKeywordsPredicate.java | 10 +-- .../seedu/address/model/person/Person.java | 38 ++++++----- .../seedu/address/model/person/Phone.java | 16 +++-- .../model/person/UniquePersonList.java | 38 ++++++----- .../java/seedu/address/model/tag/Tag.java | 24 +++---- .../address/model/util/SampleDataUtil.java | 7 +-- .../address/storage/JsonAdaptedPerson.java | 40 ++++++------ .../seedu/address/storage/JsonAdaptedTag.java | 9 ++- .../storage/JsonAddressBookStorage.java | 19 +++--- .../storage/JsonSerializableAddressBook.java | 8 +-- .../address/storage/JsonUserPrefsStorage.java | 9 ++- .../java/seedu/address/storage/Storage.java | 1 - .../seedu/address/storage/StorageManager.java | 25 ++++---- .../address/storage/UserPrefsStorage.java | 1 - .../java/seedu/address/ui/PersonCard.java | 4 +- .../address/commons/core/VersionTest.java | 6 +- .../seedu/address/testutil/PersonUtil.java | 4 +- 53 files changed, 374 insertions(+), 502 deletions(-) diff --git a/src/main/java/seedu/address/AppParameters.java b/src/main/java/seedu/address/AppParameters.java index 3d603622d4e..1be8f23595b 100644 --- a/src/main/java/seedu/address/AppParameters.java +++ b/src/main/java/seedu/address/AppParameters.java @@ -36,7 +36,7 @@ public static AppParameters parse(Application.Parameters parameters) { String configPathParameter = namedParameters.get("config"); if (configPathParameter != null && !FileUtil.isValidPath(configPathParameter)) { - logger.warning("Invalid config path " + configPathParameter + ". Using default config path."); + AppParameters.logger.warning("Invalid config path " + configPathParameter + ". Using default config path."); configPathParameter = null; } appParameters.setConfigPath(configPathParameter != null ? Paths.get(configPathParameter) : null); @@ -51,23 +51,22 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof AppParameters)) { + if (!(other instanceof AppParameters otherAppParameters)) { return false; } - AppParameters otherAppParameters = (AppParameters) other; - return Objects.equals(configPath, otherAppParameters.configPath); + return Objects.equals(this.configPath, otherAppParameters.configPath); } @Override public int hashCode() { - return configPath.hashCode(); + return this.configPath.hashCode(); } @Override public String toString() { return new ToStringBuilder(this) - .add("configPath", configPath) + .add("configPath", this.configPath) .toString(); } } diff --git a/src/main/java/seedu/address/Main.java b/src/main/java/seedu/address/Main.java index 9461d6da769..cff86449c63 100644 --- a/src/main/java/seedu/address/Main.java +++ b/src/main/java/seedu/address/Main.java @@ -7,22 +7,18 @@ /** * The main entry point to the application. - * * This is a workaround for the following error when MainApp is made the * entry point of the application: - * * Error: JavaFX runtime components are missing, and are required to run this application - * * The reason is that MainApp extends Application. In that case, the * LauncherHelper will check for the javafx.graphics module to be present * as a named module. We don't use JavaFX via the module system so it can't * find the javafx.graphics module, and so the launch is aborted. - * * By having a separate main class (Main) that doesn't extend Application * to be the entry point of the application, we avoid this issue. */ public class Main { - private static Logger logger = LogsCenter.getLogger(Main.class); + private static final Logger logger = LogsCenter.getLogger(Main.class); public static void main(String[] args) { @@ -35,7 +31,7 @@ public static void main(String[] args) { // the user (if looking at the log output) that the said warning appearing in the log // can be ignored. - logger.warning("The warning about Unsupported JavaFX configuration below (if any) can be ignored."); + Main.logger.warning("The warning about Unsupported JavaFX configuration below (if any) can be ignored."); Application.launch(MainApp.class, args); } } diff --git a/src/main/java/seedu/address/MainApp.java b/src/main/java/seedu/address/MainApp.java index 678ddc8c218..a118b73d396 100644 --- a/src/main/java/seedu/address/MainApp.java +++ b/src/main/java/seedu/address/MainApp.java @@ -48,23 +48,23 @@ public class MainApp extends Application { @Override public void init() throws Exception { - logger.info("=============================[ Initializing AddressBook ]==========================="); + MainApp.logger.info("=============================[ Initializing AddressBook ]==========================="); super.init(); AppParameters appParameters = AppParameters.parse(getParameters()); - config = initConfig(appParameters.getConfigPath()); - initLogging(config); + this.config = this.initConfig(appParameters.getConfigPath()); + this.initLogging(this.config); - UserPrefsStorage userPrefsStorage = new JsonUserPrefsStorage(config.getUserPrefsFilePath()); + UserPrefsStorage userPrefsStorage = new JsonUserPrefsStorage(this.config.getUserPrefsFilePath()); UserPrefs userPrefs = initPrefs(userPrefsStorage); AddressBookStorage addressBookStorage = new JsonAddressBookStorage(userPrefs.getAddressBookFilePath()); - storage = new StorageManager(addressBookStorage, userPrefsStorage); + this.storage = new StorageManager(addressBookStorage, userPrefsStorage); - model = initModelManager(storage, userPrefs); + this.model = initModelManager(this.storage, userPrefs); - logic = new LogicManager(model, storage); + this.logic = new LogicManager(this.model, this.storage); - ui = new UiManager(logic); + this.ui = new UiManager(this.logic); } /** @@ -73,19 +73,19 @@ public void init() throws Exception { * or an empty address book will be used instead if errors occur when reading {@code storage}'s address book. */ private Model initModelManager(Storage storage, ReadOnlyUserPrefs userPrefs) { - logger.info("Using data file : " + storage.getAddressBookFilePath()); + MainApp.logger.info("Using data file : " + storage.getAddressBookFilePath()); Optional addressBookOptional; ReadOnlyAddressBook initialData; try { addressBookOptional = storage.readAddressBook(); - if (!addressBookOptional.isPresent()) { - logger.info("Creating a new data file " + storage.getAddressBookFilePath() + if (addressBookOptional.isEmpty()) { + MainApp.logger.info("Creating a new data file " + storage.getAddressBookFilePath() + " populated with a sample AddressBook."); } initialData = addressBookOptional.orElseGet(SampleDataUtil::getSampleAddressBook); } catch (DataLoadingException e) { - logger.warning("Data file at " + storage.getAddressBookFilePath() + " could not be loaded." + MainApp.logger.warning("Data file at " + storage.getAddressBookFilePath() + " could not be loaded." + " Will be starting with an empty AddressBook."); initialData = new AddressBook(); } @@ -109,20 +109,20 @@ protected Config initConfig(Path configFilePath) { configFilePathUsed = Config.DEFAULT_CONFIG_FILE; if (configFilePath != null) { - logger.info("Custom Config file specified " + configFilePath); + MainApp.logger.info("Custom Config file specified " + configFilePath); configFilePathUsed = configFilePath; } - logger.info("Using config file : " + configFilePathUsed); + MainApp.logger.info("Using config file : " + configFilePathUsed); try { Optional configOptional = ConfigUtil.readConfig(configFilePathUsed); - if (!configOptional.isPresent()) { - logger.info("Creating new config file " + configFilePathUsed); + if (configOptional.isEmpty()) { + MainApp.logger.info("Creating new config file " + configFilePathUsed); } initializedConfig = configOptional.orElse(new Config()); } catch (DataLoadingException e) { - logger.warning("Config file at " + configFilePathUsed + " could not be loaded." + MainApp.logger.warning("Config file at " + configFilePathUsed + " could not be loaded." + " Using default config properties."); initializedConfig = new Config(); } @@ -131,7 +131,7 @@ protected Config initConfig(Path configFilePath) { try { ConfigUtil.saveConfig(initializedConfig, configFilePathUsed); } catch (IOException e) { - logger.warning("Failed to save config file : " + StringUtil.getDetails(e)); + MainApp.logger.warning("Failed to save config file : " + StringUtil.getDetails(e)); } return initializedConfig; } @@ -143,17 +143,17 @@ protected Config initConfig(Path configFilePath) { */ protected UserPrefs initPrefs(UserPrefsStorage storage) { Path prefsFilePath = storage.getUserPrefsFilePath(); - logger.info("Using preference file : " + prefsFilePath); + MainApp.logger.info("Using preference file : " + prefsFilePath); UserPrefs initializedPrefs; try { Optional prefsOptional = storage.readUserPrefs(); - if (!prefsOptional.isPresent()) { - logger.info("Creating new preference file " + prefsFilePath); + if (prefsOptional.isEmpty()) { + MainApp.logger.info("Creating new preference file " + prefsFilePath); } initializedPrefs = prefsOptional.orElse(new UserPrefs()); } catch (DataLoadingException e) { - logger.warning("Preference file at " + prefsFilePath + " could not be loaded." + MainApp.logger.warning("Preference file at " + prefsFilePath + " could not be loaded." + " Using default preferences."); initializedPrefs = new UserPrefs(); } @@ -162,7 +162,7 @@ protected UserPrefs initPrefs(UserPrefsStorage storage) { try { storage.saveUserPrefs(initializedPrefs); } catch (IOException e) { - logger.warning("Failed to save config file : " + StringUtil.getDetails(e)); + MainApp.logger.warning("Failed to save config file : " + StringUtil.getDetails(e)); } return initializedPrefs; @@ -170,17 +170,17 @@ protected UserPrefs initPrefs(UserPrefsStorage storage) { @Override public void start(Stage primaryStage) { - logger.info("Starting AddressBook " + MainApp.VERSION); - ui.start(primaryStage); + MainApp.logger.info("Starting AddressBook " + MainApp.VERSION); + this.ui.start(primaryStage); } @Override public void stop() { - logger.info("============================ [ Stopping AddressBook ] ============================="); + MainApp.logger.info("============================ [ Stopping AddressBook ] ============================="); try { - storage.saveUserPrefs(model.getUserPrefs()); + this.storage.saveUserPrefs(this.model.getUserPrefs()); } catch (IOException e) { - logger.severe("Failed to save preferences " + StringUtil.getDetails(e)); + MainApp.logger.severe("Failed to save preferences " + StringUtil.getDetails(e)); } } } diff --git a/src/main/java/seedu/address/commons/core/Config.java b/src/main/java/seedu/address/commons/core/Config.java index 485f85a5e05..6f949177723 100644 --- a/src/main/java/seedu/address/commons/core/Config.java +++ b/src/main/java/seedu/address/commons/core/Config.java @@ -19,7 +19,7 @@ public class Config { private Path userPrefsFilePath = Paths.get("preferences.json"); public Level getLogLevel() { - return logLevel; + return this.logLevel; } public void setLogLevel(Level logLevel) { @@ -27,7 +27,7 @@ public void setLogLevel(Level logLevel) { } public Path getUserPrefsFilePath() { - return userPrefsFilePath; + return this.userPrefsFilePath; } public void setUserPrefsFilePath(Path userPrefsFilePath) { @@ -41,25 +41,24 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof Config)) { + if (!(other instanceof Config otherConfig)) { return false; } - Config otherConfig = (Config) other; - return Objects.equals(logLevel, otherConfig.logLevel) - && Objects.equals(userPrefsFilePath, otherConfig.userPrefsFilePath); + return Objects.equals(this.logLevel, otherConfig.logLevel) + && Objects.equals(this.userPrefsFilePath, otherConfig.userPrefsFilePath); } @Override public int hashCode() { - return Objects.hash(logLevel, userPrefsFilePath); + return Objects.hash(this.logLevel, this.userPrefsFilePath); } @Override public String toString() { return new ToStringBuilder(this) - .add("logLevel", logLevel) - .add("userPrefsFilePath", userPrefsFilePath) + .add("logLevel", this.logLevel) + .add("userPrefsFilePath", this.userPrefsFilePath) .toString(); } diff --git a/src/main/java/seedu/address/commons/core/GuiSettings.java b/src/main/java/seedu/address/commons/core/GuiSettings.java index a97a86ee8d7..83d6016e85b 100644 --- a/src/main/java/seedu/address/commons/core/GuiSettings.java +++ b/src/main/java/seedu/address/commons/core/GuiSettings.java @@ -23,30 +23,30 @@ public class GuiSettings implements Serializable { * Constructs a {@code GuiSettings} with the default height, width and position. */ public GuiSettings() { - windowWidth = DEFAULT_WIDTH; - windowHeight = DEFAULT_HEIGHT; - windowCoordinates = null; // null represent no coordinates + this.windowWidth = DEFAULT_WIDTH; + this.windowHeight = DEFAULT_HEIGHT; + this.windowCoordinates = null; // null represent no coordinates } /** - * Constructs a {@code GuiSettings} with the specified height, width and position. + * Constructs a {@code GuiSettings} with the specified height, width and position (Constructor overloading). */ public GuiSettings(double windowWidth, double windowHeight, int xPosition, int yPosition) { this.windowWidth = windowWidth; this.windowHeight = windowHeight; - windowCoordinates = new Point(xPosition, yPosition); + this.windowCoordinates = new Point(xPosition, yPosition); } public double getWindowWidth() { - return windowWidth; + return this.windowWidth; } public double getWindowHeight() { - return windowHeight; + return this.windowHeight; } public Point getWindowCoordinates() { - return windowCoordinates != null ? new Point(windowCoordinates) : null; + return this.windowCoordinates != null ? new Point(windowCoordinates) : null; } @Override @@ -56,27 +56,26 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof GuiSettings)) { + if (!(other instanceof GuiSettings otherGuiSettings)) { return false; } - GuiSettings otherGuiSettings = (GuiSettings) other; - return windowWidth == otherGuiSettings.windowWidth - && windowHeight == otherGuiSettings.windowHeight - && Objects.equals(windowCoordinates, otherGuiSettings.windowCoordinates); + return this.windowWidth == otherGuiSettings.windowWidth + && this.windowHeight == otherGuiSettings.windowHeight + && Objects.equals(this.windowCoordinates, otherGuiSettings.windowCoordinates); } @Override public int hashCode() { - return Objects.hash(windowWidth, windowHeight, windowCoordinates); + return Objects.hash(this.windowWidth, this.windowHeight, this.windowCoordinates); } @Override public String toString() { return new ToStringBuilder(this) - .add("windowWidth", windowWidth) - .add("windowHeight", windowHeight) - .add("windowCoordinates", windowCoordinates) + .add("windowWidth", this.windowWidth) + .add("windowHeight", this.windowHeight) + .add("windowCoordinates", this.windowCoordinates) .toString(); } } diff --git a/src/main/java/seedu/address/commons/core/LogsCenter.java b/src/main/java/seedu/address/commons/core/LogsCenter.java index 8cf8e15a0f0..5a25b626ace 100644 --- a/src/main/java/seedu/address/commons/core/LogsCenter.java +++ b/src/main/java/seedu/address/commons/core/LogsCenter.java @@ -23,12 +23,11 @@ public class LogsCenter { private static final String LOG_FILE = "addressbook.log"; private static final Logger logger; // logger for this class private static Logger baseLogger; // to be used as the parent of all other loggers created by this class. - private static Level currentLogLevel = Level.INFO; // This static block ensures essential loggers are created early static { - setBaseLogger(); - logger = LogsCenter.getLogger(LogsCenter.class); + logger = Logger.getLogger(LogsCenter.class.getName()); // Must precede setBaseLogger to initialize logger first. + LogsCenter.setBaseLogger(); // If logger not initialized, NullPointerException causes both CLI and GUI to fail. } /** @@ -36,10 +35,10 @@ public class LogsCenter { * using {@link #getLogger(String)} and {@link #getLogger(Class)} methods except for those that are manually set. */ public static void init(Config config) { - currentLogLevel = config.getLogLevel(); - logger.info("Log level will be set as: " + currentLogLevel); + Level currentLogLevel = config.getLogLevel(); + LogsCenter.logger.info("Log level will be set as: " + currentLogLevel); // set the level of the baseLogger which will be inherited by other loggers - baseLogger.setLevel(currentLogLevel); + LogsCenter.baseLogger.setLevel(currentLogLevel); } /** @@ -53,25 +52,24 @@ public static Logger getLogger(String name) { // By prefixing names of all loggers with baseLogger's name + ".", we make the baseLogger the parent of all // loggers. This allows us to change the level of all loggers simply by changing the baseLogger level. Logger logger = Logger.getLogger(baseLogger.getName() + "." + name); - removeHandlers(logger); - logger.setUseParentHandlers(true); + LogsCenter.removeHandlers(logger); + LogsCenter.logger.setUseParentHandlers(true); return logger; } /** * Creates a Logger for the given class name. */ - public static Logger getLogger(Class clazz) { - requireNonNull(clazz); - return getLogger(clazz.getSimpleName()); + public static Logger getLogger(Class classToHaveLogger) { + requireNonNull(classToHaveLogger); + return LogsCenter.getLogger(classToHaveLogger.getSimpleName()); } /** * Removes all handlers from the {@code logger}. */ private static void removeHandlers(Logger logger) { - Arrays.stream(logger.getHandlers()) - .forEach(logger::removeHandler); + Arrays.stream(logger.getHandlers()).forEach(logger::removeHandler); } /** @@ -79,8 +77,8 @@ private static void removeHandlers(Logger logger) { * Sets it as the {@code baseLogger}, to be used as the parent logger of all other loggers. */ private static void setBaseLogger() { - baseLogger = Logger.getLogger("ab3"); - baseLogger.setUseParentHandlers(false); + LogsCenter.baseLogger = Logger.getLogger("ab3"); + LogsCenter.baseLogger.setUseParentHandlers(false); removeHandlers(baseLogger); // Level.ALL is used as the level for the handlers because the baseLogger filters the log messages by level @@ -89,18 +87,19 @@ private static void setBaseLogger() { // add a ConsoleHandler to log to the console ConsoleHandler consoleHandler = new ConsoleHandler(); consoleHandler.setLevel(Level.ALL); - baseLogger.addHandler(consoleHandler); + LogsCenter.baseLogger.addHandler(consoleHandler); // add a FileHandler to log to a file try { - FileHandler fileHandler = new FileHandler(LOG_FILE, MAX_FILE_SIZE_IN_BYTES, MAX_FILE_COUNT, true); + FileHandler fileHandler = new FileHandler(LogsCenter.LOG_FILE, + LogsCenter.MAX_FILE_SIZE_IN_BYTES, + LogsCenter.MAX_FILE_COUNT, + true); fileHandler.setFormatter(new SimpleFormatter()); fileHandler.setLevel(Level.ALL); - baseLogger.addHandler(fileHandler); + LogsCenter.baseLogger.addHandler(fileHandler); } catch (IOException e) { - logger.warning("Error adding file handler for logger."); + LogsCenter.logger.warning("Error adding file handler for logger."); } } - - } diff --git a/src/main/java/seedu/address/commons/core/Version.java b/src/main/java/seedu/address/commons/core/Version.java index 491d24559b4..ce106fbc38b 100644 --- a/src/main/java/seedu/address/commons/core/Version.java +++ b/src/main/java/seedu/address/commons/core/Version.java @@ -9,7 +9,7 @@ /** * Represents a version with major, minor and patch number */ -public class Version implements Comparable { +public record Version(int major, int minor, int patch, boolean isEarlyAccess) implements Comparable { public static final String VERSION_REGEX = "V(\\d+)\\.(\\d+)\\.(\\d+)(ea)?"; @@ -17,39 +17,15 @@ public class Version implements Comparable { private static final Pattern VERSION_PATTERN = Pattern.compile(VERSION_REGEX); - private final int major; - private final int minor; - private final int patch; - private final boolean isEarlyAccess; - /** * Constructs a {@code Version} with the given version details. */ - public Version(int major, int minor, int patch, boolean isEarlyAccess) { - this.major = major; - this.minor = minor; - this.patch = patch; - this.isEarlyAccess = isEarlyAccess; - } - - public int getMajor() { - return major; - } - - public int getMinor() { - return minor; - } - - public int getPatch() { - return patch; - } - - public boolean isEarlyAccess() { - return isEarlyAccess; + public Version { } /** * Parses a version number string in the format V1.2.3. + * * @param versionString version number string * @return a Version object */ @@ -64,7 +40,7 @@ public static Version fromString(String versionString) throws IllegalArgumentExc return new Version(Integer.parseInt(versionMatcher.group(1)), Integer.parseInt(versionMatcher.group(2)), Integer.parseInt(versionMatcher.group(3)), - versionMatcher.group(4) == null ? false : true); + versionMatcher.group(4) != null); } @JsonValue @@ -74,19 +50,19 @@ public String toString() { @Override public int compareTo(Version other) { - if (major != other.major) { - return major - other.major; + if (this.major != other.major) { + return this.major - other.major; } - if (minor != other.minor) { - return minor - other.minor; + if (this.minor != other.minor) { + return this.minor - other.minor; } - if (patch != other.patch) { - return patch - other.patch; + if (this.patch != other.patch) { + return this.patch - other.patch; } - if (isEarlyAccess == other.isEarlyAccess()) { + if (this.isEarlyAccess == other.isEarlyAccess()) { return 0; } - if (isEarlyAccess) { + if (this.isEarlyAccess) { return -1; } return 1; @@ -99,21 +75,20 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof Version)) { + if (!(other instanceof Version otherVersion)) { return false; } - Version otherVersion = (Version) other; - return major == otherVersion.major - && minor == otherVersion.minor - && patch == otherVersion.patch - && isEarlyAccess == otherVersion.isEarlyAccess; + return this.major == otherVersion.major + && this.minor == otherVersion.minor + && this.patch == otherVersion.patch + && this.isEarlyAccess == otherVersion.isEarlyAccess; } @Override public int hashCode() { - String hash = String.format("%03d%03d%03d", major, minor, patch); - if (!isEarlyAccess) { + String hash = String.format("%03d%03d%03d", this.major, this.minor, this.patch); + if (!this.isEarlyAccess) { hash = "1" + hash; } return Integer.parseInt(hash); diff --git a/src/main/java/seedu/address/commons/core/index/Index.java b/src/main/java/seedu/address/commons/core/index/Index.java index dd170d8b68d..1a0e514391a 100644 --- a/src/main/java/seedu/address/commons/core/index/Index.java +++ b/src/main/java/seedu/address/commons/core/index/Index.java @@ -4,14 +4,13 @@ /** * Represents a zero-based or one-based index. - * * {@code Index} should be used right from the start (when parsing in a new user input), so that if the current * component wants to communicate with another component, it can send an {@code Index} to avoid having to know what * base the other component is using for its index. However, after receiving the {@code Index}, that component can * convert it back to an int if the index will not be passed to a different component again. */ public class Index { - private int zeroBasedIndex; + private final int zeroBasedIndex; /** * Index can only be created by calling {@link Index#fromZeroBased(int)} or @@ -54,16 +53,15 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof Index)) { + if (!(other instanceof Index otherIndex)) { return false; } - Index otherIndex = (Index) other; - return zeroBasedIndex == otherIndex.zeroBasedIndex; + return this.zeroBasedIndex == otherIndex.zeroBasedIndex; } @Override public String toString() { - return new ToStringBuilder(this).add("zeroBasedIndex", zeroBasedIndex).toString(); + return new ToStringBuilder(this).add("zeroBasedIndex", this.zeroBasedIndex).toString(); } } diff --git a/src/main/java/seedu/address/commons/exceptions/DataLoadingException.java b/src/main/java/seedu/address/commons/exceptions/DataLoadingException.java index 9904ba47afe..5a3cf9a0537 100644 --- a/src/main/java/seedu/address/commons/exceptions/DataLoadingException.java +++ b/src/main/java/seedu/address/commons/exceptions/DataLoadingException.java @@ -7,5 +7,4 @@ public class DataLoadingException extends Exception { public DataLoadingException(Exception cause) { super(cause); } - } diff --git a/src/main/java/seedu/address/commons/util/AppUtil.java b/src/main/java/seedu/address/commons/util/AppUtil.java index 87aa89c0326..b2de8be9d64 100644 --- a/src/main/java/seedu/address/commons/util/AppUtil.java +++ b/src/main/java/seedu/address/commons/util/AppUtil.java @@ -14,8 +14,7 @@ public class AppUtil { * Gets an {@code Image} from the specified path. */ public static Image getImage(String imagePath) { - requireNonNull(imagePath); - return new Image(MainApp.class.getResourceAsStream(imagePath)); + return new Image(requireNonNull(MainApp.class.getResourceAsStream(imagePath))); } /** diff --git a/src/main/java/seedu/address/commons/util/FileUtil.java b/src/main/java/seedu/address/commons/util/FileUtil.java index b1e2767cdd9..9a35d06944a 100644 --- a/src/main/java/seedu/address/commons/util/FileUtil.java +++ b/src/main/java/seedu/address/commons/util/FileUtil.java @@ -18,7 +18,7 @@ public static boolean isFileExists(Path file) { } /** - * Returns true if {@code path} can be converted into a {@code Path} via {@link Paths#get(String)}, + * Returns true if {@code path} can be converted into a {@code Path} via {@link Paths#get(String, String...)}, * otherwise returns false. * @param path A string representing the file path. Cannot be null. */ @@ -36,8 +36,8 @@ public static boolean isValidPath(String path) { * @throws IOException if the file or directory cannot be created. */ public static void createIfMissing(Path file) throws IOException { - if (!isFileExists(file)) { - createFile(file); + if (!FileUtil.isFileExists(file)) { + FileUtil.createFile(file); } } @@ -49,7 +49,7 @@ public static void createFile(Path file) throws IOException { return; } - createParentDirsOfFile(file); + FileUtil.createParentDirsOfFile(file); Files.createFile(file); } diff --git a/src/main/java/seedu/address/commons/util/JsonUtil.java b/src/main/java/seedu/address/commons/util/JsonUtil.java index 100cb16c395..b00a1e47a6c 100644 --- a/src/main/java/seedu/address/commons/util/JsonUtil.java +++ b/src/main/java/seedu/address/commons/util/JsonUtil.java @@ -30,7 +30,7 @@ public class JsonUtil { private static final Logger logger = LogsCenter.getLogger(JsonUtil.class); - private static ObjectMapper objectMapper = new ObjectMapper().findAndRegisterModules() + private static final ObjectMapper objectMapper = new ObjectMapper().findAndRegisterModules() .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false) .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) .setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE) @@ -45,7 +45,7 @@ static void serializeObjectToJsonFile(Path jsonFile, T objectToSerialize) th static T deserializeObjectFromJsonFile(Path jsonFile, Class classOfObjectToDeserialize) throws IOException { - return fromJsonString(FileUtil.readFromFile(jsonFile), classOfObjectToDeserialize); + return JsonUtil.fromJsonString(FileUtil.readFromFile(jsonFile), classOfObjectToDeserialize); } /** @@ -63,14 +63,14 @@ public static Optional readJsonFile( if (!Files.exists(filePath)) { return Optional.empty(); } - logger.info("JSON file " + filePath + " found."); + JsonUtil.logger.info("JSON file " + filePath + " found."); T jsonFile; try { jsonFile = deserializeObjectFromJsonFile(filePath, classOfObjectToDeserialize); } catch (IOException e) { - logger.warning("Error reading from jsonFile file " + filePath + ": " + e); + JsonUtil.logger.warning("Error reading from jsonFile file " + filePath + ": " + e); throw new DataLoadingException(e); } @@ -88,7 +88,7 @@ public static void saveJsonFile(T jsonFile, Path filePath) throws IOExceptio requireNonNull(filePath); requireNonNull(jsonFile); - serializeObjectToJsonFile(filePath, jsonFile); + JsonUtil.serializeObjectToJsonFile(filePath, jsonFile); } @@ -98,7 +98,7 @@ public static void saveJsonFile(T jsonFile, Path filePath) throws IOExceptio * @return The instance of T with the specified values in the JSON string */ public static T fromJsonString(String json, Class instanceClass) throws IOException { - return objectMapper.readValue(json, instanceClass); + return JsonUtil.objectMapper.readValue(json, instanceClass); } /** @@ -108,7 +108,7 @@ public static T fromJsonString(String json, Class instanceClass) throws I * @return JSON data representation of the given class instance, in string */ public static String toJsonString(T instance) throws JsonProcessingException { - return objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(instance); + return JsonUtil.objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(instance); } /** diff --git a/src/main/java/seedu/address/commons/util/StringUtil.java b/src/main/java/seedu/address/commons/util/StringUtil.java index 61cc8c9a1cb..efa4fb59065 100644 --- a/src/main/java/seedu/address/commons/util/StringUtil.java +++ b/src/main/java/seedu/address/commons/util/StringUtil.java @@ -31,11 +31,9 @@ public static boolean containsWordIgnoreCase(String sentence, String word) { checkArgument(!preppedWord.isEmpty(), "Word parameter cannot be empty"); checkArgument(preppedWord.split("\\s+").length == 1, "Word parameter should be a single word"); - String preppedSentence = sentence; - String[] wordsInPreppedSentence = preppedSentence.split("\\s+"); + String[] wordsInPreppedSentence = sentence.split("\\s+"); - return Arrays.stream(wordsInPreppedSentence) - .anyMatch(preppedWord::equalsIgnoreCase); + return Arrays.stream(wordsInPreppedSentence).anyMatch(preppedWord::equalsIgnoreCase); } /** @@ -45,7 +43,7 @@ public static String getDetails(Throwable t) { requireNonNull(t); StringWriter sw = new StringWriter(); t.printStackTrace(new PrintWriter(sw)); - return t.getMessage() + "\n" + sw.toString(); + return t.getMessage() + "\n" + sw; } /** diff --git a/src/main/java/seedu/address/commons/util/ToStringBuilder.java b/src/main/java/seedu/address/commons/util/ToStringBuilder.java index d979b926734..78d86e4eb8b 100644 --- a/src/main/java/seedu/address/commons/util/ToStringBuilder.java +++ b/src/main/java/seedu/address/commons/util/ToStringBuilder.java @@ -16,7 +16,7 @@ public class ToStringBuilder { * Constructs a {@code ToStringBuilder} whose formatted output will be prefixed with {@code objectName}. */ public ToStringBuilder(String objectName) { - stringBuilder.append(objectName).append(OBJECT_PREFIX); + this.stringBuilder.append(objectName).append(ToStringBuilder.OBJECT_PREFIX); } /** @@ -35,11 +35,11 @@ public ToStringBuilder(Object object) { * @return A reference to this {@code ToStringBuilder} object, allowing method calls to be chained. */ public ToStringBuilder add(String fieldName, Object fieldValue) { - if (hasField) { - stringBuilder.append(FIELD_SEPARATOR); + if (this.hasField) { + this.stringBuilder.append(ToStringBuilder.FIELD_SEPARATOR); } - stringBuilder.append(fieldName).append(FIELD_NAME_VALUE_SEPARATOR).append(fieldValue); - hasField = true; + this.stringBuilder.append(fieldName).append(ToStringBuilder.FIELD_NAME_VALUE_SEPARATOR).append(fieldValue); + this.hasField = true; return this; } @@ -48,6 +48,6 @@ public ToStringBuilder add(String fieldName, Object fieldValue) { */ @Override public String toString() { - return stringBuilder.toString() + OBJECT_SUFFIX; + return this.stringBuilder + ToStringBuilder.OBJECT_SUFFIX; } } diff --git a/src/main/java/seedu/address/logic/commands/AddCommand.java b/src/main/java/seedu/address/logic/commands/AddCommand.java index 5d7185a9680..06f925dcbe7 100644 --- a/src/main/java/seedu/address/logic/commands/AddCommand.java +++ b/src/main/java/seedu/address/logic/commands/AddCommand.java @@ -45,19 +45,19 @@ public class AddCommand extends Command { */ public AddCommand(Person person) { requireNonNull(person); - toAdd = person; + this.toAdd = person; } @Override public CommandResult execute(Model model) throws CommandException { requireNonNull(model); - if (model.hasPerson(toAdd)) { - throw new CommandException(MESSAGE_DUPLICATE_PERSON); + if (model.hasPerson(this.toAdd)) { + throw new CommandException(AddCommand.MESSAGE_DUPLICATE_PERSON); } - model.addPerson(toAdd); - return new CommandResult(String.format(MESSAGE_SUCCESS, Messages.format(toAdd))); + model.addPerson(this.toAdd); + return new CommandResult(String.format(AddCommand.MESSAGE_SUCCESS, Messages.format(this.toAdd))); } @Override @@ -67,18 +67,17 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof AddCommand)) { + if (!(other instanceof AddCommand otherAddCommand)) { return false; } - AddCommand otherAddCommand = (AddCommand) other; - return toAdd.equals(otherAddCommand.toAdd); + return this.toAdd.equals(otherAddCommand.toAdd); } @Override public String toString() { return new ToStringBuilder(this) - .add("toAdd", toAdd) + .add("toAdd", this.toAdd) .toString(); } } diff --git a/src/main/java/seedu/address/logic/commands/ClearCommand.java b/src/main/java/seedu/address/logic/commands/ClearCommand.java index 9c86b1fa6e4..ec0719e929d 100644 --- a/src/main/java/seedu/address/logic/commands/ClearCommand.java +++ b/src/main/java/seedu/address/logic/commands/ClearCommand.java @@ -18,6 +18,6 @@ public class ClearCommand extends Command { public CommandResult execute(Model model) { requireNonNull(model); model.setAddressBook(new AddressBook()); - return new CommandResult(MESSAGE_SUCCESS); + return new CommandResult(ClearCommand.MESSAGE_SUCCESS); } } diff --git a/src/main/java/seedu/address/logic/commands/CommandResult.java b/src/main/java/seedu/address/logic/commands/CommandResult.java index 249b6072d0d..308b8690b9c 100644 --- a/src/main/java/seedu/address/logic/commands/CommandResult.java +++ b/src/main/java/seedu/address/logic/commands/CommandResult.java @@ -37,15 +37,15 @@ public CommandResult(String feedbackToUser) { } public String getFeedbackToUser() { - return feedbackToUser; + return this.feedbackToUser; } public boolean isShowHelp() { - return showHelp; + return this.showHelp; } public boolean isExit() { - return exit; + return this.exit; } @Override @@ -55,28 +55,26 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof CommandResult)) { + if (!(other instanceof CommandResult otherCommandResult)) { return false; } - CommandResult otherCommandResult = (CommandResult) other; - return feedbackToUser.equals(otherCommandResult.feedbackToUser) - && showHelp == otherCommandResult.showHelp - && exit == otherCommandResult.exit; + return this.feedbackToUser.equals(otherCommandResult.feedbackToUser) + && this.showHelp == otherCommandResult.showHelp + && this.exit == otherCommandResult.exit; } @Override public int hashCode() { - return Objects.hash(feedbackToUser, showHelp, exit); + return Objects.hash(this.feedbackToUser, this.showHelp, this.exit); } @Override public String toString() { return new ToStringBuilder(this) - .add("feedbackToUser", feedbackToUser) - .add("showHelp", showHelp) - .add("exit", exit) + .add("feedbackToUser", this.feedbackToUser) + .add("showHelp", this.showHelp) + .add("exit", this.exit) .toString(); } - } diff --git a/src/main/java/seedu/address/logic/commands/HelpCommand.java b/src/main/java/seedu/address/logic/commands/HelpCommand.java index bf824f91bd0..45fa3bd08aa 100644 --- a/src/main/java/seedu/address/logic/commands/HelpCommand.java +++ b/src/main/java/seedu/address/logic/commands/HelpCommand.java @@ -9,13 +9,13 @@ public class HelpCommand extends Command { public static final String COMMAND_WORD = "help"; - public static final String MESSAGE_USAGE = COMMAND_WORD + ": Shows program usage instructions.\n" - + "Example: " + COMMAND_WORD; + public static final String MESSAGE_USAGE = HelpCommand.COMMAND_WORD + ": Shows program usage instructions.\n" + + "Example: " + HelpCommand.COMMAND_WORD; public static final String SHOWING_HELP_MESSAGE = "Opened help window."; @Override public CommandResult execute(Model model) { - return new CommandResult(SHOWING_HELP_MESSAGE, true, false); + return new CommandResult(HelpCommand.SHOWING_HELP_MESSAGE, true, false); } } diff --git a/src/main/java/seedu/address/logic/commands/ListCommand.java b/src/main/java/seedu/address/logic/commands/ListCommand.java index 84be6ad2596..f681639d601 100644 --- a/src/main/java/seedu/address/logic/commands/ListCommand.java +++ b/src/main/java/seedu/address/logic/commands/ListCommand.java @@ -19,6 +19,6 @@ public class ListCommand extends Command { public CommandResult execute(Model model) { requireNonNull(model); model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS); - return new CommandResult(MESSAGE_SUCCESS); + return new CommandResult(ListCommand.MESSAGE_SUCCESS); } } diff --git a/src/main/java/seedu/address/logic/commands/exceptions/CommandException.java b/src/main/java/seedu/address/logic/commands/exceptions/CommandException.java index a16bd14f2cd..f44c0c19186 100644 --- a/src/main/java/seedu/address/logic/commands/exceptions/CommandException.java +++ b/src/main/java/seedu/address/logic/commands/exceptions/CommandException.java @@ -1,5 +1,7 @@ package seedu.address.logic.commands.exceptions; +import seedu.address.logic.commands.Command; + /** * Represents an error which occurs during execution of a {@link Command}. */ diff --git a/src/main/java/seedu/address/logic/parser/AddCommandParser.java b/src/main/java/seedu/address/logic/parser/AddCommandParser.java index 4ff1a97ed77..a9ee76f1bd1 100644 --- a/src/main/java/seedu/address/logic/parser/AddCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/AddCommandParser.java @@ -39,10 +39,10 @@ public AddCommand parse(String args) throws ParseException { } argMultimap.verifyNoDuplicatePrefixesFor(PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS); - Name name = ParserUtil.parseName(argMultimap.getValue(PREFIX_NAME).get()); - Phone phone = ParserUtil.parsePhone(argMultimap.getValue(PREFIX_PHONE).get()); - Email email = ParserUtil.parseEmail(argMultimap.getValue(PREFIX_EMAIL).get()); - Address address = ParserUtil.parseAddress(argMultimap.getValue(PREFIX_ADDRESS).get()); + Name name = ParserUtil.parseName(argMultimap.getValue(PREFIX_NAME).orElse(null)); + Phone phone = ParserUtil.parsePhone(argMultimap.getValue(PREFIX_PHONE).orElse(null)); + Email email = ParserUtil.parseEmail(argMultimap.getValue(PREFIX_EMAIL).orElse(null)); + Address address = ParserUtil.parseAddress(argMultimap.getValue(PREFIX_ADDRESS).orElse(null)); Set tagList = ParserUtil.parseTags(argMultimap.getAllValues(PREFIX_TAG)); Person person = new Person(name, phone, email, address, tagList); diff --git a/src/main/java/seedu/address/logic/parser/AddressBookParser.java b/src/main/java/seedu/address/logic/parser/AddressBookParser.java index 3149ee07e0b..9c4c4309603 100644 --- a/src/main/java/seedu/address/logic/parser/AddressBookParser.java +++ b/src/main/java/seedu/address/logic/parser/AddressBookParser.java @@ -51,36 +51,20 @@ public Command parseCommand(String userInput) throws ParseException { // Lower level log messages are used sparingly to minimize noise in the code. logger.fine("Command word: " + commandWord + "; Arguments: " + arguments); - switch (commandWord) { - - case AddCommand.COMMAND_WORD: - return new AddCommandParser().parse(arguments); - - case EditCommand.COMMAND_WORD: - return new EditCommandParser().parse(arguments); - - case DeleteCommand.COMMAND_WORD: - return new DeleteCommandParser().parse(arguments); - - case ClearCommand.COMMAND_WORD: - return new ClearCommand(); - - case FindCommand.COMMAND_WORD: - return new FindCommandParser().parse(arguments); - - case ListCommand.COMMAND_WORD: - return new ListCommand(); - - case ExitCommand.COMMAND_WORD: - return new ExitCommand(); - - case HelpCommand.COMMAND_WORD: - return new HelpCommand(); - - default: + return switch (commandWord) { + case AddCommand.COMMAND_WORD -> new AddCommandParser().parse(arguments); + case EditCommand.COMMAND_WORD -> new EditCommandParser().parse(arguments); + case DeleteCommand.COMMAND_WORD -> new DeleteCommandParser().parse(arguments); + case ClearCommand.COMMAND_WORD -> new ClearCommand(); + case FindCommand.COMMAND_WORD -> new FindCommandParser().parse(arguments); + case ListCommand.COMMAND_WORD -> new ListCommand(); + case ExitCommand.COMMAND_WORD -> new ExitCommand(); + case HelpCommand.COMMAND_WORD -> new HelpCommand(); + default -> { logger.finer("This user input caused a ParseException: " + userInput); throw new ParseException(MESSAGE_UNKNOWN_COMMAND); } + }; } } diff --git a/src/main/java/seedu/address/logic/parser/ArgumentMultimap.java b/src/main/java/seedu/address/logic/parser/ArgumentMultimap.java index 21e26887a83..e4dd985b4b4 100644 --- a/src/main/java/seedu/address/logic/parser/ArgumentMultimap.java +++ b/src/main/java/seedu/address/logic/parser/ArgumentMultimap.java @@ -32,7 +32,7 @@ public class ArgumentMultimap { public void put(Prefix prefix, String argValue) { List argValues = getAllValues(prefix); argValues.add(argValue); - argMultimap.put(prefix, argValues); + this.argMultimap.put(prefix, argValues); } /** @@ -49,10 +49,10 @@ public Optional getValue(Prefix prefix) { * Modifying the returned list will not affect the underlying data structure of the ArgumentMultimap. */ public List getAllValues(Prefix prefix) { - if (!argMultimap.containsKey(prefix)) { + if (!this.argMultimap.containsKey(prefix)) { return new ArrayList<>(); } - return new ArrayList<>(argMultimap.get(prefix)); + return new ArrayList<>(this.argMultimap.get(prefix)); } /** @@ -68,7 +68,7 @@ public String getPreamble() { */ public void verifyNoDuplicatePrefixesFor(Prefix... prefixes) throws ParseException { Prefix[] duplicatedPrefixes = Stream.of(prefixes).distinct() - .filter(prefix -> argMultimap.containsKey(prefix) && argMultimap.get(prefix).size() > 1) + .filter(prefix -> this.argMultimap.containsKey(prefix) && this.argMultimap.get(prefix).size() > 1) .toArray(Prefix[]::new); if (duplicatedPrefixes.length > 0) { diff --git a/src/main/java/seedu/address/logic/parser/ArgumentTokenizer.java b/src/main/java/seedu/address/logic/parser/ArgumentTokenizer.java index 5c9aebfa488..a8eccd754cf 100644 --- a/src/main/java/seedu/address/logic/parser/ArgumentTokenizer.java +++ b/src/main/java/seedu/address/logic/parser/ArgumentTokenizer.java @@ -2,6 +2,7 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; @@ -47,11 +48,11 @@ private static List findAllPrefixPositions(String argsString, Pr private static List findPrefixPositions(String argsString, Prefix prefix) { List positions = new ArrayList<>(); - int prefixPosition = findPrefixPosition(argsString, prefix.getPrefix(), 0); + int prefixPosition = findPrefixPosition(argsString, prefix.prefix(), 0); while (prefixPosition != -1) { PrefixPosition extendedPrefix = new PrefixPosition(prefix, prefixPosition); positions.add(extendedPrefix); - prefixPosition = findPrefixPosition(argsString, prefix.getPrefix(), prefixPosition); + prefixPosition = findPrefixPosition(argsString, prefix.prefix(), prefixPosition); } return positions; @@ -62,8 +63,7 @@ private static List findPrefixPositions(String argsString, Prefi * {@code argsString} starting from index {@code fromIndex}. An occurrence * is valid if there is a whitespace before {@code prefix}. Returns -1 if no * such occurrence can be found. - * - * E.g if {@code argsString} = "e/hip/900", {@code prefix} = "p/" and + * E.g. if {@code argsString} = "e/hip/900", {@code prefix} = "p/" and * {@code fromIndex} = 0, this method returns -1 as there are no valid * occurrences of "p/" with whitespace before it. However, if * {@code argsString} = "e/hi p/900", {@code prefix} = "p/" and @@ -87,7 +87,7 @@ private static int findPrefixPosition(String argsString, String prefix, int from private static ArgumentMultimap extractArguments(String argsString, List prefixPositions) { // Sort by start position - prefixPositions.sort((prefix1, prefix2) -> prefix1.getStartPosition() - prefix2.getStartPosition()); + prefixPositions.sort(Comparator.comparingInt(PrefixPosition::startPosition)); // Insert a PrefixPosition to represent the preamble PrefixPosition preambleMarker = new PrefixPosition(new Prefix(""), 0); @@ -101,11 +101,10 @@ private static ArgumentMultimap extractArguments(String argsString, List> parseTagsForEdit(Collection tags) throws Pars Collection tagSet = tags.size() == 1 && tags.contains("") ? Collections.emptySet() : tags; return Optional.of(ParserUtil.parseTags(tagSet)); } - } diff --git a/src/main/java/seedu/address/logic/parser/FindCommandParser.java b/src/main/java/seedu/address/logic/parser/FindCommandParser.java index 2867bde857b..cc2b3a893cc 100644 --- a/src/main/java/seedu/address/logic/parser/FindCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/FindCommandParser.java @@ -29,5 +29,4 @@ public FindCommand parse(String args) throws ParseException { return new FindCommand(new NameContainsKeywordsPredicate(Arrays.asList(nameKeywords))); } - } diff --git a/src/main/java/seedu/address/logic/parser/Prefix.java b/src/main/java/seedu/address/logic/parser/Prefix.java index 348b7686c8a..5770f634efc 100644 --- a/src/main/java/seedu/address/logic/parser/Prefix.java +++ b/src/main/java/seedu/address/logic/parser/Prefix.java @@ -4,25 +4,11 @@ * A prefix that marks the beginning of an argument in an arguments string. * E.g. 't/' in 'add James t/ friend'. */ -public class Prefix { - private final String prefix; - - public Prefix(String prefix) { - this.prefix = prefix; - } - - public String getPrefix() { - return prefix; - } +public record Prefix(String prefix) { @Override public String toString() { - return getPrefix(); - } - - @Override - public int hashCode() { - return prefix == null ? 0 : prefix.hashCode(); + return this.prefix(); } @Override @@ -32,11 +18,10 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof Prefix)) { + if (!(other instanceof Prefix otherPrefix)) { return false; } - Prefix otherPrefix = (Prefix) other; - return prefix.equals(otherPrefix.prefix); + return this.prefix.equals(otherPrefix.prefix); } } diff --git a/src/main/java/seedu/address/model/AddressBook.java b/src/main/java/seedu/address/model/AddressBook.java index 73397161e84..143330432a4 100644 --- a/src/main/java/seedu/address/model/AddressBook.java +++ b/src/main/java/seedu/address/model/AddressBook.java @@ -17,19 +17,10 @@ public class AddressBook implements ReadOnlyAddressBook { private final UniquePersonList persons; - /* - * The 'unusual' code block below is a non-static initialization block, sometimes used to avoid duplication - * between constructors. See https://docs.oracle.com/javase/tutorial/java/javaOO/initial.html - * - * Note that non-static init blocks are not recommended to use. There are other ways to avoid duplication - * among constructors. - */ - { - persons = new UniquePersonList(); + public AddressBook() { + this.persons = new UniquePersonList(); // Rid erstwhile-preexisting non-static initialization block code smell. } - public AddressBook() {} - /** * Creates an AddressBook using the Persons in the {@code toBeCopied} */ @@ -54,7 +45,7 @@ public void setPersons(List persons) { public void resetData(ReadOnlyAddressBook newData) { requireNonNull(newData); - setPersons(newData.getPersonList()); + this.setPersons(newData.getPersonList()); } //// person-level operations @@ -64,7 +55,7 @@ public void resetData(ReadOnlyAddressBook newData) { */ public boolean hasPerson(Person person) { requireNonNull(person); - return persons.contains(person); + return this.persons.contains(person); } /** @@ -72,7 +63,7 @@ public boolean hasPerson(Person person) { * The person must not already exist in the address book. */ public void addPerson(Person p) { - persons.add(p); + this.persons.add(p); } /** @@ -83,7 +74,7 @@ public void addPerson(Person p) { public void setPerson(Person target, Person editedPerson) { requireNonNull(editedPerson); - persons.setPerson(target, editedPerson); + this.persons.setPerson(target, editedPerson); } /** @@ -91,7 +82,7 @@ public void setPerson(Person target, Person editedPerson) { * {@code key} must exist in the address book. */ public void removePerson(Person key) { - persons.remove(key); + this.persons.remove(key); } //// util methods @@ -99,13 +90,13 @@ public void removePerson(Person key) { @Override public String toString() { return new ToStringBuilder(this) - .add("persons", persons) + .add("persons", this.persons) .toString(); } @Override public ObservableList getPersonList() { - return persons.asUnmodifiableObservableList(); + return this.persons.asUnmodifiableObservableList(); } @Override @@ -115,16 +106,15 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof AddressBook)) { + if (!(other instanceof AddressBook otherAddressBook)) { return false; } - AddressBook otherAddressBook = (AddressBook) other; - return persons.equals(otherAddressBook.persons); + return this.persons.equals(otherAddressBook.persons); } @Override public int hashCode() { - return persons.hashCode(); + return this.persons.hashCode(); } } diff --git a/src/main/java/seedu/address/model/Model.java b/src/main/java/seedu/address/model/Model.java index d54df471c1f..0307c1c4040 100644 --- a/src/main/java/seedu/address/model/Model.java +++ b/src/main/java/seedu/address/model/Model.java @@ -25,22 +25,22 @@ public interface Model { ReadOnlyUserPrefs getUserPrefs(); /** - * Returns the user prefs' GUI settings. + * Returns the GUI settings of user prefs. */ GuiSettings getGuiSettings(); /** - * Sets the user prefs' GUI settings. + * Sets the GUI settings of user prefs. */ void setGuiSettings(GuiSettings guiSettings); /** - * Returns the user prefs' address book file path. + * Returns the address book file path of user prefs. */ Path getAddressBookFilePath(); /** - * Sets the user prefs' address book file path. + * Sets the address book file path of user prefs. */ void setAddressBookFilePath(Path addressBookFilePath); diff --git a/src/main/java/seedu/address/model/ModelManager.java b/src/main/java/seedu/address/model/ModelManager.java index 57bc563fde6..4975619b651 100644 --- a/src/main/java/seedu/address/model/ModelManager.java +++ b/src/main/java/seedu/address/model/ModelManager.java @@ -29,13 +29,17 @@ public class ModelManager implements Model { public ModelManager(ReadOnlyAddressBook addressBook, ReadOnlyUserPrefs userPrefs) { requireAllNonNull(addressBook, userPrefs); - logger.fine("Initializing with address book: " + addressBook + " and user prefs " + userPrefs); + ModelManager.logger.fine( + "Initializing with address book: " + addressBook + " and user prefs " + userPrefs); this.addressBook = new AddressBook(addressBook); this.userPrefs = new UserPrefs(userPrefs); - filteredPersons = new FilteredList<>(this.addressBook.getPersonList()); + this.filteredPersons = new FilteredList<>(this.addressBook.getPersonList()); } + /** + * Initializes a ModelManager with default empty addressBook and userPrefs (Constructor Overloading). + */ public ModelManager() { this(new AddressBook(), new UserPrefs()); } @@ -50,29 +54,29 @@ public void setUserPrefs(ReadOnlyUserPrefs userPrefs) { @Override public ReadOnlyUserPrefs getUserPrefs() { - return userPrefs; + return this.userPrefs; } @Override public GuiSettings getGuiSettings() { - return userPrefs.getGuiSettings(); + return this.userPrefs.getGuiSettings(); } @Override public void setGuiSettings(GuiSettings guiSettings) { requireNonNull(guiSettings); - userPrefs.setGuiSettings(guiSettings); + this.userPrefs.setGuiSettings(guiSettings); } @Override public Path getAddressBookFilePath() { - return userPrefs.getAddressBookFilePath(); + return this.userPrefs.getAddressBookFilePath(); } @Override public void setAddressBookFilePath(Path addressBookFilePath) { requireNonNull(addressBookFilePath); - userPrefs.setAddressBookFilePath(addressBookFilePath); + this.userPrefs.setAddressBookFilePath(addressBookFilePath); } //=========== AddressBook ================================================================================ @@ -84,23 +88,23 @@ public void setAddressBook(ReadOnlyAddressBook addressBook) { @Override public ReadOnlyAddressBook getAddressBook() { - return addressBook; + return this.addressBook; } @Override public boolean hasPerson(Person person) { requireNonNull(person); - return addressBook.hasPerson(person); + return this.addressBook.hasPerson(person); } @Override public void deletePerson(Person target) { - addressBook.removePerson(target); + this.addressBook.removePerson(target); } @Override public void addPerson(Person person) { - addressBook.addPerson(person); + this.addressBook.addPerson(person); updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS); } @@ -108,7 +112,7 @@ public void addPerson(Person person) { public void setPerson(Person target, Person editedPerson) { requireAllNonNull(target, editedPerson); - addressBook.setPerson(target, editedPerson); + this.addressBook.setPerson(target, editedPerson); } //=========== Filtered Person List Accessors ============================================================= @@ -119,13 +123,13 @@ public void setPerson(Person target, Person editedPerson) { */ @Override public ObservableList getFilteredPersonList() { - return filteredPersons; + return this.filteredPersons; } @Override public void updateFilteredPersonList(Predicate predicate) { requireNonNull(predicate); - filteredPersons.setPredicate(predicate); + this.filteredPersons.setPredicate(predicate); } @Override @@ -135,14 +139,12 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof ModelManager)) { + if (!(other instanceof ModelManager otherModelManager)) { return false; } - ModelManager otherModelManager = (ModelManager) other; - return addressBook.equals(otherModelManager.addressBook) - && userPrefs.equals(otherModelManager.userPrefs) - && filteredPersons.equals(otherModelManager.filteredPersons); + return this.addressBook.equals(otherModelManager.addressBook) + && this.userPrefs.equals(otherModelManager.userPrefs) + && this.filteredPersons.equals(otherModelManager.filteredPersons); } - } diff --git a/src/main/java/seedu/address/model/ReadOnlyAddressBook.java b/src/main/java/seedu/address/model/ReadOnlyAddressBook.java index 6ddc2cd9a29..6f862be2eca 100644 --- a/src/main/java/seedu/address/model/ReadOnlyAddressBook.java +++ b/src/main/java/seedu/address/model/ReadOnlyAddressBook.java @@ -13,5 +13,4 @@ public interface ReadOnlyAddressBook { * This list will not contain any duplicate persons. */ ObservableList getPersonList(); - } diff --git a/src/main/java/seedu/address/model/ReadOnlyUserPrefs.java b/src/main/java/seedu/address/model/ReadOnlyUserPrefs.java index befd58a4c73..e6810b61b6b 100644 --- a/src/main/java/seedu/address/model/ReadOnlyUserPrefs.java +++ b/src/main/java/seedu/address/model/ReadOnlyUserPrefs.java @@ -12,5 +12,4 @@ public interface ReadOnlyUserPrefs { GuiSettings getGuiSettings(); Path getAddressBookFilePath(); - } diff --git a/src/main/java/seedu/address/model/UserPrefs.java b/src/main/java/seedu/address/model/UserPrefs.java index 6be655fb4c7..47babd5d8ec 100644 --- a/src/main/java/seedu/address/model/UserPrefs.java +++ b/src/main/java/seedu/address/model/UserPrefs.java @@ -34,12 +34,12 @@ public UserPrefs(ReadOnlyUserPrefs userPrefs) { */ public void resetData(ReadOnlyUserPrefs newUserPrefs) { requireNonNull(newUserPrefs); - setGuiSettings(newUserPrefs.getGuiSettings()); - setAddressBookFilePath(newUserPrefs.getAddressBookFilePath()); + this.setGuiSettings(newUserPrefs.getGuiSettings()); + this.setAddressBookFilePath(newUserPrefs.getAddressBookFilePath()); } public GuiSettings getGuiSettings() { - return guiSettings; + return this.guiSettings; } public void setGuiSettings(GuiSettings guiSettings) { @@ -63,26 +63,22 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof UserPrefs)) { + if (!(other instanceof UserPrefs otherUserPrefs)) { return false; } - UserPrefs otherUserPrefs = (UserPrefs) other; - return guiSettings.equals(otherUserPrefs.guiSettings) - && addressBookFilePath.equals(otherUserPrefs.addressBookFilePath); + return this.guiSettings.equals(otherUserPrefs.guiSettings) + && this.addressBookFilePath.equals(otherUserPrefs.addressBookFilePath); } @Override public int hashCode() { - return Objects.hash(guiSettings, addressBookFilePath); + return Objects.hash(this.guiSettings, this.addressBookFilePath); } @Override public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("Gui Settings : " + guiSettings); - sb.append("\nLocal data file location : " + addressBookFilePath); - return sb.toString(); + return "Gui Settings : " + this.guiSettings + + "\nLocal data file location : " + this.addressBookFilePath; } - } diff --git a/src/main/java/seedu/address/model/person/Address.java b/src/main/java/seedu/address/model/person/Address.java index 469a2cc9a1e..a0bb0954d72 100644 --- a/src/main/java/seedu/address/model/person/Address.java +++ b/src/main/java/seedu/address/model/person/Address.java @@ -15,7 +15,7 @@ public class Address { * The first character of the address must not be a whitespace, * otherwise " " (a blank string) becomes a valid input. */ - public static final String VALIDATION_REGEX = "[^\\s].*"; + public static final String VALIDATION_REGEX = "\\S.*"; public final String value; @@ -26,20 +26,20 @@ public class Address { */ public Address(String address) { requireNonNull(address); - checkArgument(isValidAddress(address), MESSAGE_CONSTRAINTS); - value = address; + checkArgument(isValidAddress(address), Address.MESSAGE_CONSTRAINTS); + this.value = address; } /** * Returns true if a given string is a valid email. */ public static boolean isValidAddress(String test) { - return test.matches(VALIDATION_REGEX); + return test.matches(Address.VALIDATION_REGEX); } @Override public String toString() { - return value; + return this.value; } @Override @@ -49,17 +49,15 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof Address)) { + if (!(other instanceof Address otherAddress)) { return false; } - Address otherAddress = (Address) other; - return value.equals(otherAddress.value); + return this.value.equals(otherAddress.value); } @Override public int hashCode() { - return value.hashCode(); + return this.value.hashCode(); } - } diff --git a/src/main/java/seedu/address/model/person/Email.java b/src/main/java/seedu/address/model/person/Email.java index c62e512bc29..cd88d13c460 100644 --- a/src/main/java/seedu/address/model/person/Email.java +++ b/src/main/java/seedu/address/model/person/Email.java @@ -40,20 +40,20 @@ public class Email { */ public Email(String email) { requireNonNull(email); - checkArgument(isValidEmail(email), MESSAGE_CONSTRAINTS); - value = email; + checkArgument(isValidEmail(email), Email.MESSAGE_CONSTRAINTS); + this.value = email; } /** * Returns if a given string is a valid email. */ public static boolean isValidEmail(String test) { - return test.matches(VALIDATION_REGEX); + return test.matches(Email.VALIDATION_REGEX); } @Override public String toString() { - return value; + return this.value; } @Override @@ -63,17 +63,15 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof Email)) { + if (!(other instanceof Email otherEmail)) { return false; } - Email otherEmail = (Email) other; - return value.equals(otherEmail.value); + return this.value.equals(otherEmail.value); } @Override public int hashCode() { - return value.hashCode(); + return this.value.hashCode(); } - } diff --git a/src/main/java/seedu/address/model/person/Name.java b/src/main/java/seedu/address/model/person/Name.java index 173f15b9b00..068666a36f1 100644 --- a/src/main/java/seedu/address/model/person/Name.java +++ b/src/main/java/seedu/address/model/person/Name.java @@ -16,7 +16,7 @@ public class Name { * The first character of the address must not be a whitespace, * otherwise " " (a blank string) becomes a valid input. */ - public static final String VALIDATION_REGEX = "[\\p{Alnum}][\\p{Alnum} ]*"; + public static final String VALIDATION_REGEX = "\\p{Alnum}[\\p{Alnum} ]*"; public final String fullName; @@ -27,21 +27,21 @@ public class Name { */ public Name(String name) { requireNonNull(name); - checkArgument(isValidName(name), MESSAGE_CONSTRAINTS); - fullName = name; + checkArgument(isValidName(name), Name.MESSAGE_CONSTRAINTS); + this.fullName = name; } /** * Returns true if a given string is a valid name. */ public static boolean isValidName(String test) { - return test.matches(VALIDATION_REGEX); + return test.matches(Name.VALIDATION_REGEX); } @Override public String toString() { - return fullName; + return this.fullName; } @Override @@ -51,17 +51,15 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof Name)) { + if (!(other instanceof Name otherName)) { return false; } - Name otherName = (Name) other; - return fullName.equals(otherName.fullName); + return this.fullName.equals(otherName.fullName); } @Override public int hashCode() { - return fullName.hashCode(); + return this.fullName.hashCode(); } - } diff --git a/src/main/java/seedu/address/model/person/NameContainsKeywordsPredicate.java b/src/main/java/seedu/address/model/person/NameContainsKeywordsPredicate.java index 62d19be2977..c89b2829131 100644 --- a/src/main/java/seedu/address/model/person/NameContainsKeywordsPredicate.java +++ b/src/main/java/seedu/address/model/person/NameContainsKeywordsPredicate.java @@ -8,6 +8,7 @@ /** * Tests that a {@code Person}'s {@code Name} matches any of the keywords given. + * This is different from Name class; it bundles boolean tests for keyword searches of names instead. */ public class NameContainsKeywordsPredicate implements Predicate { private final List keywords; @@ -18,7 +19,7 @@ public NameContainsKeywordsPredicate(List keywords) { @Override public boolean test(Person person) { - return keywords.stream() + return this.keywords.stream() .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(person.getName().fullName, keyword)); } @@ -29,16 +30,15 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof NameContainsKeywordsPredicate)) { + if (!(other instanceof NameContainsKeywordsPredicate otherNameContainsKeywordsPredicate)) { return false; } - NameContainsKeywordsPredicate otherNameContainsKeywordsPredicate = (NameContainsKeywordsPredicate) other; - return keywords.equals(otherNameContainsKeywordsPredicate.keywords); + return this.keywords.equals(otherNameContainsKeywordsPredicate.keywords); } @Override public String toString() { - return new ToStringBuilder(this).add("keywords", keywords).toString(); + return new ToStringBuilder(this).add("keywords", this.keywords).toString(); } } diff --git a/src/main/java/seedu/address/model/person/Person.java b/src/main/java/seedu/address/model/person/Person.java index abe8c46b535..ef8cef2a4bc 100644 --- a/src/main/java/seedu/address/model/person/Person.java +++ b/src/main/java/seedu/address/model/person/Person.java @@ -38,19 +38,19 @@ public Person(Name name, Phone phone, Email email, Address address, Set tag } public Name getName() { - return name; + return this.name; } public Phone getPhone() { - return phone; + return this.phone; } public Email getEmail() { - return email; + return this.email; } public Address getAddress() { - return address; + return this.address; } /** @@ -58,7 +58,7 @@ public Address getAddress() { * if modification is attempted. */ public Set getTags() { - return Collections.unmodifiableSet(tags); + return Collections.unmodifiableSet(this.tags); } /** @@ -71,7 +71,7 @@ public boolean isSamePerson(Person otherPerson) { } return otherPerson != null - && otherPerson.getName().equals(getName()); + && otherPerson.getName().equals(this.getName()); } /** @@ -85,33 +85,31 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof Person)) { + if (!(other instanceof Person otherPerson)) { return false; } - Person otherPerson = (Person) other; - return name.equals(otherPerson.name) - && phone.equals(otherPerson.phone) - && email.equals(otherPerson.email) - && address.equals(otherPerson.address) - && tags.equals(otherPerson.tags); + return this.name.equals(otherPerson.name) + && this.phone.equals(otherPerson.phone) + && this.email.equals(otherPerson.email) + && this.address.equals(otherPerson.address) + && this.tags.equals(otherPerson.tags); } @Override public int hashCode() { // use this method for custom fields hashing instead of implementing your own - return Objects.hash(name, phone, email, address, tags); + return Objects.hash(this.name, this.phone, this.email, this.address, this.tags); } @Override public String toString() { return new ToStringBuilder(this) - .add("name", name) - .add("phone", phone) - .add("email", email) - .add("address", address) - .add("tags", tags) + .add("name", this.name) + .add("phone", this.phone) + .add("email", this.email) + .add("address", this.address) + .add("tags", this.tags) .toString(); } - } diff --git a/src/main/java/seedu/address/model/person/Phone.java b/src/main/java/seedu/address/model/person/Phone.java index d733f63d739..1ebad4252d2 100644 --- a/src/main/java/seedu/address/model/person/Phone.java +++ b/src/main/java/seedu/address/model/person/Phone.java @@ -22,20 +22,20 @@ public class Phone { */ public Phone(String phone) { requireNonNull(phone); - checkArgument(isValidPhone(phone), MESSAGE_CONSTRAINTS); - value = phone; + checkArgument(isValidPhone(phone), Phone.MESSAGE_CONSTRAINTS); + this.value = phone; } /** * Returns true if a given string is a valid phone number. */ public static boolean isValidPhone(String test) { - return test.matches(VALIDATION_REGEX); + return test.matches(Phone.VALIDATION_REGEX); } @Override public String toString() { - return value; + return this.value; } @Override @@ -45,17 +45,15 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof Phone)) { + if (!(other instanceof Phone otherPhone)) { return false; } - Phone otherPhone = (Phone) other; - return value.equals(otherPhone.value); + return this.value.equals(otherPhone.value); } @Override public int hashCode() { - return value.hashCode(); + return this.value.hashCode(); } - } diff --git a/src/main/java/seedu/address/model/person/UniquePersonList.java b/src/main/java/seedu/address/model/person/UniquePersonList.java index cc0a68d79f9..9a5c0c2f37f 100644 --- a/src/main/java/seedu/address/model/person/UniquePersonList.java +++ b/src/main/java/seedu/address/model/person/UniquePersonList.java @@ -14,10 +14,9 @@ /** * A list of persons that enforces uniqueness between its elements and does not allow nulls. * A person is considered unique by comparing using {@code Person#isSamePerson(Person)}. As such, adding and updating of - * persons uses Person#isSamePerson(Person) for equality so as to ensure that the person being added or updated is - * unique in terms of identity in the UniquePersonList. However, the removal of a person uses Person#equals(Object) so - * as to ensure that the person with exactly the same fields will be removed. - * + * persons uses Person#isSamePerson(Person) for equality to ensure that the person being added or updated is + * unique in terms of identity in the UniquePersonList. However, the removal of a person uses Person#equals(Object) to + * ensure the person with exactly the same fields will be removed. * Supports a minimal set of list operations. * * @see Person#isSamePerson(Person) @@ -33,7 +32,7 @@ public class UniquePersonList implements Iterable { */ public boolean contains(Person toCheck) { requireNonNull(toCheck); - return internalList.stream().anyMatch(toCheck::isSamePerson); + return this.internalList.stream().anyMatch(toCheck::isSamePerson); } /** @@ -42,10 +41,10 @@ public boolean contains(Person toCheck) { */ public void add(Person toAdd) { requireNonNull(toAdd); - if (contains(toAdd)) { + if (this.contains(toAdd)) { throw new DuplicatePersonException(); } - internalList.add(toAdd); + this.internalList.add(toAdd); } /** @@ -56,7 +55,7 @@ public void add(Person toAdd) { public void setPerson(Person target, Person editedPerson) { requireAllNonNull(target, editedPerson); - int index = internalList.indexOf(target); + int index = this.internalList.indexOf(target); if (index == -1) { throw new PersonNotFoundException(); } @@ -65,7 +64,7 @@ public void setPerson(Person target, Person editedPerson) { throw new DuplicatePersonException(); } - internalList.set(index, editedPerson); + this.internalList.set(index, editedPerson); } /** @@ -74,14 +73,14 @@ public void setPerson(Person target, Person editedPerson) { */ public void remove(Person toRemove) { requireNonNull(toRemove); - if (!internalList.remove(toRemove)) { + if (!this.internalList.remove(toRemove)) { throw new PersonNotFoundException(); } } public void setPersons(UniquePersonList replacement) { requireNonNull(replacement); - internalList.setAll(replacement.internalList); + this.internalList.setAll(replacement.internalList); } /** @@ -94,19 +93,19 @@ public void setPersons(List persons) { throw new DuplicatePersonException(); } - internalList.setAll(persons); + this.internalList.setAll(persons); } /** * Returns the backing list as an unmodifiable {@code ObservableList}. */ public ObservableList asUnmodifiableObservableList() { - return internalUnmodifiableList; + return this.internalUnmodifiableList; } @Override public Iterator iterator() { - return internalList.iterator(); + return this.internalList.iterator(); } @Override @@ -116,22 +115,21 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof UniquePersonList)) { + if (!(other instanceof UniquePersonList otherUniquePersonList)) { return false; } - UniquePersonList otherUniquePersonList = (UniquePersonList) other; - return internalList.equals(otherUniquePersonList.internalList); + return this.internalList.equals(otherUniquePersonList.internalList); } @Override public int hashCode() { - return internalList.hashCode(); + return this.internalList.hashCode(); } @Override public String toString() { - return internalList.toString(); + return this.internalList.toString(); } /** @@ -141,7 +139,7 @@ private boolean personsAreUnique(List persons) { for (int i = 0; i < persons.size() - 1; i++) { for (int j = i + 1; j < persons.size(); j++) { if (persons.get(i).isSamePerson(persons.get(j))) { - return false; + return false; // Adaptive search. } } } diff --git a/src/main/java/seedu/address/model/tag/Tag.java b/src/main/java/seedu/address/model/tag/Tag.java index f1a0d4e233b..ee4bb6dea1f 100644 --- a/src/main/java/seedu/address/model/tag/Tag.java +++ b/src/main/java/seedu/address/model/tag/Tag.java @@ -7,29 +7,26 @@ * Represents a Tag in the address book. * Guarantees: immutable; name is valid as declared in {@link #isValidTagName(String)} */ -public class Tag { +public record Tag(String tagName) { public static final String MESSAGE_CONSTRAINTS = "Tags names should be alphanumeric"; public static final String VALIDATION_REGEX = "\\p{Alnum}+"; - public final String tagName; - /** * Constructs a {@code Tag}. * * @param tagName A valid tag name. */ - public Tag(String tagName) { + public Tag { requireNonNull(tagName); - checkArgument(isValidTagName(tagName), MESSAGE_CONSTRAINTS); - this.tagName = tagName; + checkArgument(isValidTagName(tagName), Tag.MESSAGE_CONSTRAINTS); } /** * Returns true if a given string is a valid tag name. */ public static boolean isValidTagName(String test) { - return test.matches(VALIDATION_REGEX); + return test.matches(Tag.VALIDATION_REGEX); } @Override @@ -39,24 +36,17 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof Tag)) { + if (!(other instanceof Tag otherTag)) { return false; } - Tag otherTag = (Tag) other; - return tagName.equals(otherTag.tagName); - } - - @Override - public int hashCode() { - return tagName.hashCode(); + return this.tagName.equals(otherTag.tagName); } /** * Format state as text for viewing. */ public String toString() { - return '[' + tagName + ']'; + return '[' + this.tagName + ']'; } - } diff --git a/src/main/java/seedu/address/model/util/SampleDataUtil.java b/src/main/java/seedu/address/model/util/SampleDataUtil.java index 1806da4facf..bab365f8586 100644 --- a/src/main/java/seedu/address/model/util/SampleDataUtil.java +++ b/src/main/java/seedu/address/model/util/SampleDataUtil.java @@ -42,7 +42,7 @@ public static Person[] getSamplePersons() { public static ReadOnlyAddressBook getSampleAddressBook() { AddressBook sampleAb = new AddressBook(); - for (Person samplePerson : getSamplePersons()) { + for (Person samplePerson : SampleDataUtil.getSamplePersons()) { sampleAb.addPerson(samplePerson); } return sampleAb; @@ -52,9 +52,6 @@ public static ReadOnlyAddressBook getSampleAddressBook() { * Returns a tag set containing the list of strings given. */ public static Set getTagSet(String... strings) { - return Arrays.stream(strings) - .map(Tag::new) - .collect(Collectors.toSet()); + return Arrays.stream(strings).map(Tag::new).collect(Collectors.toSet()); } - } diff --git a/src/main/java/seedu/address/storage/JsonAdaptedPerson.java b/src/main/java/seedu/address/storage/JsonAdaptedPerson.java index bd1ca0f56c8..ea7e2b7266a 100644 --- a/src/main/java/seedu/address/storage/JsonAdaptedPerson.java +++ b/src/main/java/seedu/address/storage/JsonAdaptedPerson.java @@ -4,7 +4,6 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import java.util.stream.Collectors; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; @@ -56,7 +55,7 @@ public JsonAdaptedPerson(Person source) { address = source.getAddress().value; tags.addAll(source.getTags().stream() .map(JsonAdaptedTag::new) - .collect(Collectors.toList())); + .toList()); } /** @@ -66,44 +65,47 @@ public JsonAdaptedPerson(Person source) { */ public Person toModelType() throws IllegalValueException { final List personTags = new ArrayList<>(); - for (JsonAdaptedTag tag : tags) { + for (JsonAdaptedTag tag : this.tags) { personTags.add(tag.toModelType()); } - if (name == null) { - throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Name.class.getSimpleName())); + if (this.name == null) { + throw new IllegalValueException(String.format( + JsonAdaptedPerson.MISSING_FIELD_MESSAGE_FORMAT, Name.class.getSimpleName())); } - if (!Name.isValidName(name)) { + if (!Name.isValidName(this.name)) { throw new IllegalValueException(Name.MESSAGE_CONSTRAINTS); } - final Name modelName = new Name(name); + final Name modelName = new Name(this.name); if (phone == null) { - throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Phone.class.getSimpleName())); + throw new IllegalValueException( + String.format(JsonAdaptedPerson.MISSING_FIELD_MESSAGE_FORMAT, Phone.class.getSimpleName())); } - if (!Phone.isValidPhone(phone)) { + if (!Phone.isValidPhone(this.phone)) { throw new IllegalValueException(Phone.MESSAGE_CONSTRAINTS); } - final Phone modelPhone = new Phone(phone); + final Phone modelPhone = new Phone(this.phone); - if (email == null) { - throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Email.class.getSimpleName())); + if (this.email == null) { + throw new IllegalValueException( + String.format(JsonAdaptedPerson.MISSING_FIELD_MESSAGE_FORMAT, Email.class.getSimpleName())); } - if (!Email.isValidEmail(email)) { + if (!Email.isValidEmail(this.email)) { throw new IllegalValueException(Email.MESSAGE_CONSTRAINTS); } - final Email modelEmail = new Email(email); + final Email modelEmail = new Email(this.email); - if (address == null) { - throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Address.class.getSimpleName())); + if (this.address == null) { + throw new IllegalValueException( + String.format(JsonAdaptedPerson.MISSING_FIELD_MESSAGE_FORMAT, Address.class.getSimpleName())); } - if (!Address.isValidAddress(address)) { + if (!Address.isValidAddress(this.address)) { throw new IllegalValueException(Address.MESSAGE_CONSTRAINTS); } - final Address modelAddress = new Address(address); + final Address modelAddress = new Address(this.address); final Set modelTags = new HashSet<>(personTags); return new Person(modelName, modelPhone, modelEmail, modelAddress, modelTags); } - } diff --git a/src/main/java/seedu/address/storage/JsonAdaptedTag.java b/src/main/java/seedu/address/storage/JsonAdaptedTag.java index 0df22bdb754..b66b06f5049 100644 --- a/src/main/java/seedu/address/storage/JsonAdaptedTag.java +++ b/src/main/java/seedu/address/storage/JsonAdaptedTag.java @@ -25,12 +25,12 @@ public JsonAdaptedTag(String tagName) { * Converts a given {@code Tag} into this class for Jackson use. */ public JsonAdaptedTag(Tag source) { - tagName = source.tagName; + this.tagName = source.tagName(); } @JsonValue public String getTagName() { - return tagName; + return this.tagName; } /** @@ -39,10 +39,9 @@ public String getTagName() { * @throws IllegalValueException if there were any data constraints violated in the adapted tag. */ public Tag toModelType() throws IllegalValueException { - if (!Tag.isValidTagName(tagName)) { + if (!Tag.isValidTagName(this.tagName)) { throw new IllegalValueException(Tag.MESSAGE_CONSTRAINTS); } - return new Tag(tagName); + return new Tag(this.tagName); } - } diff --git a/src/main/java/seedu/address/storage/JsonAddressBookStorage.java b/src/main/java/seedu/address/storage/JsonAddressBookStorage.java index 41e06f264e1..055c3936ec3 100644 --- a/src/main/java/seedu/address/storage/JsonAddressBookStorage.java +++ b/src/main/java/seedu/address/storage/JsonAddressBookStorage.java @@ -21,19 +21,19 @@ public class JsonAddressBookStorage implements AddressBookStorage { private static final Logger logger = LogsCenter.getLogger(JsonAddressBookStorage.class); - private Path filePath; + private final Path filePath; public JsonAddressBookStorage(Path filePath) { this.filePath = filePath; } public Path getAddressBookFilePath() { - return filePath; + return this.filePath; } @Override public Optional readAddressBook() throws DataLoadingException { - return readAddressBook(filePath); + return readAddressBook(this.filePath); } /** @@ -47,21 +47,27 @@ public Optional readAddressBook(Path filePath) throws DataL Optional jsonAddressBook = JsonUtil.readJsonFile( filePath, JsonSerializableAddressBook.class); - if (!jsonAddressBook.isPresent()) { + if (jsonAddressBook.isEmpty()) { return Optional.empty(); } try { return Optional.of(jsonAddressBook.get().toModelType()); } catch (IllegalValueException ive) { - logger.info("Illegal values found in " + filePath + ": " + ive.getMessage()); + JsonAddressBookStorage.logger.info("Illegal values found in " + filePath + ": " + ive.getMessage()); throw new DataLoadingException(ive); } } + /** + * Saves to {@link #filePath} instead of custom filepath in the other overloaded constructor below. + * + * @param addressBook cannot be null. + * @throws IOException exception if file alongside any missing parent directories cannot be created, or not savable. + */ @Override public void saveAddressBook(ReadOnlyAddressBook addressBook) throws IOException { - saveAddressBook(addressBook, filePath); + this.saveAddressBook(addressBook, this.filePath); } /** @@ -76,5 +82,4 @@ public void saveAddressBook(ReadOnlyAddressBook addressBook, Path filePath) thro FileUtil.createIfMissing(filePath); JsonUtil.saveJsonFile(new JsonSerializableAddressBook(addressBook), filePath); } - } diff --git a/src/main/java/seedu/address/storage/JsonSerializableAddressBook.java b/src/main/java/seedu/address/storage/JsonSerializableAddressBook.java index 5efd834091d..4d5ad354473 100644 --- a/src/main/java/seedu/address/storage/JsonSerializableAddressBook.java +++ b/src/main/java/seedu/address/storage/JsonSerializableAddressBook.java @@ -2,7 +2,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.stream.Collectors; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; @@ -37,7 +36,7 @@ public JsonSerializableAddressBook(@JsonProperty("persons") List readUserPrefs() throws DataLoadingException { - return readUserPrefs(filePath); + return readUserPrefs(this.filePath); } /** @@ -41,7 +41,6 @@ public Optional readUserPrefs(Path prefsFilePath) throws DataLoadingE @Override public void saveUserPrefs(ReadOnlyUserPrefs userPrefs) throws IOException { - JsonUtil.saveJsonFile(userPrefs, filePath); + JsonUtil.saveJsonFile(userPrefs, this.filePath); } - } diff --git a/src/main/java/seedu/address/storage/Storage.java b/src/main/java/seedu/address/storage/Storage.java index 9fba0c7a1d6..93968155b86 100644 --- a/src/main/java/seedu/address/storage/Storage.java +++ b/src/main/java/seedu/address/storage/Storage.java @@ -28,5 +28,4 @@ public interface Storage extends AddressBookStorage, UserPrefsStorage { @Override void saveAddressBook(ReadOnlyAddressBook addressBook) throws IOException; - } diff --git a/src/main/java/seedu/address/storage/StorageManager.java b/src/main/java/seedu/address/storage/StorageManager.java index 8b84a9024d5..fcf2484cdbc 100644 --- a/src/main/java/seedu/address/storage/StorageManager.java +++ b/src/main/java/seedu/address/storage/StorageManager.java @@ -17,8 +17,8 @@ public class StorageManager implements Storage { private static final Logger logger = LogsCenter.getLogger(StorageManager.class); - private AddressBookStorage addressBookStorage; - private UserPrefsStorage userPrefsStorage; + private final AddressBookStorage addressBookStorage; + private final UserPrefsStorage userPrefsStorage; /** * Creates a {@code StorageManager} with the given {@code AddressBookStorage} and {@code UserPrefStorage}. @@ -32,17 +32,17 @@ public StorageManager(AddressBookStorage addressBookStorage, UserPrefsStorage us @Override public Path getUserPrefsFilePath() { - return userPrefsStorage.getUserPrefsFilePath(); + return this.userPrefsStorage.getUserPrefsFilePath(); } @Override public Optional readUserPrefs() throws DataLoadingException { - return userPrefsStorage.readUserPrefs(); + return this.userPrefsStorage.readUserPrefs(); } @Override public void saveUserPrefs(ReadOnlyUserPrefs userPrefs) throws IOException { - userPrefsStorage.saveUserPrefs(userPrefs); + this.userPrefsStorage.saveUserPrefs(userPrefs); } @@ -50,29 +50,28 @@ public void saveUserPrefs(ReadOnlyUserPrefs userPrefs) throws IOException { @Override public Path getAddressBookFilePath() { - return addressBookStorage.getAddressBookFilePath(); + return this.addressBookStorage.getAddressBookFilePath(); } @Override public Optional readAddressBook() throws DataLoadingException { - return readAddressBook(addressBookStorage.getAddressBookFilePath()); + return this.readAddressBook(this.addressBookStorage.getAddressBookFilePath()); } @Override public Optional readAddressBook(Path filePath) throws DataLoadingException { - logger.fine("Attempting to read data from file: " + filePath); - return addressBookStorage.readAddressBook(filePath); + StorageManager.logger.fine("Attempting to read data from file: " + filePath); + return this.addressBookStorage.readAddressBook(filePath); } @Override public void saveAddressBook(ReadOnlyAddressBook addressBook) throws IOException { - saveAddressBook(addressBook, addressBookStorage.getAddressBookFilePath()); + this.saveAddressBook(addressBook, this.addressBookStorage.getAddressBookFilePath()); } @Override public void saveAddressBook(ReadOnlyAddressBook addressBook, Path filePath) throws IOException { - logger.fine("Attempting to write to data file: " + filePath); - addressBookStorage.saveAddressBook(addressBook, filePath); + StorageManager.logger.fine("Attempting to write to data file: " + filePath); + this.addressBookStorage.saveAddressBook(addressBook, filePath); } - } diff --git a/src/main/java/seedu/address/storage/UserPrefsStorage.java b/src/main/java/seedu/address/storage/UserPrefsStorage.java index e94ca422ea8..4451edd541a 100644 --- a/src/main/java/seedu/address/storage/UserPrefsStorage.java +++ b/src/main/java/seedu/address/storage/UserPrefsStorage.java @@ -32,5 +32,4 @@ public interface UserPrefsStorage { * @throws IOException if there was any problem writing to the file. */ void saveUserPrefs(ReadOnlyUserPrefs userPrefs) throws IOException; - } diff --git a/src/main/java/seedu/address/ui/PersonCard.java b/src/main/java/seedu/address/ui/PersonCard.java index 094c42cda82..49a6c208edd 100644 --- a/src/main/java/seedu/address/ui/PersonCard.java +++ b/src/main/java/seedu/address/ui/PersonCard.java @@ -53,7 +53,7 @@ public PersonCard(Person person, int displayedIndex) { address.setText(person.getAddress().value); email.setText(person.getEmail().value); person.getTags().stream() - .sorted(Comparator.comparing(tag -> tag.tagName)) - .forEach(tag -> tags.getChildren().add(new Label(tag.tagName))); + .sorted(Comparator.comparing(tag -> tag.tagName())) + .forEach(tag -> tags.getChildren().add(new Label(tag.tagName()))); } } diff --git a/src/test/java/seedu/address/commons/core/VersionTest.java b/src/test/java/seedu/address/commons/core/VersionTest.java index 495cd231554..76326a16994 100644 --- a/src/test/java/seedu/address/commons/core/VersionTest.java +++ b/src/test/java/seedu/address/commons/core/VersionTest.java @@ -24,9 +24,9 @@ public void versionParsing_wrongVersionString_throwIllegalArgumentException() { public void versionConstructor_correctParameter_valueAsExpected() { Version version = new Version(19, 10, 20, true); - assertEquals(19, version.getMajor()); - assertEquals(10, version.getMinor()); - assertEquals(20, version.getPatch()); + assertEquals(19, version.major()); + assertEquals(10, version.minor()); + assertEquals(20, version.patch()); assertEquals(true, version.isEarlyAccess()); } diff --git a/src/test/java/seedu/address/testutil/PersonUtil.java b/src/test/java/seedu/address/testutil/PersonUtil.java index 90849945183..8f7e8cf3514 100644 --- a/src/test/java/seedu/address/testutil/PersonUtil.java +++ b/src/test/java/seedu/address/testutil/PersonUtil.java @@ -35,7 +35,7 @@ public static String getPersonDetails(Person person) { sb.append(PREFIX_EMAIL + person.getEmail().value + " "); sb.append(PREFIX_ADDRESS + person.getAddress().value + " "); person.getTags().stream().forEach( - s -> sb.append(PREFIX_TAG + s.tagName + " ") + s -> sb.append(PREFIX_TAG + s.tagName() + " ") ); return sb.toString(); } @@ -54,7 +54,7 @@ public static String getEditPersonDescriptorDetails(EditPersonDescriptor descrip if (tags.isEmpty()) { sb.append(PREFIX_TAG); } else { - tags.forEach(s -> sb.append(PREFIX_TAG).append(s.tagName).append(" ")); + tags.forEach(s -> sb.append(PREFIX_TAG).append(s.tagName()).append(" ")); } } return sb.toString(); From e79608c16eb060d0a7c88ed3ea5b86ff4b0572f1 Mon Sep 17 00:00:00 2001 From: Mingyuan03 Date: Wed, 5 Mar 2025 20:40:36 +0800 Subject: [PATCH 009/296] Revert "Fix checkstyle warnings and critical LogsCenter bug" This reverts commit 204fb0b58e925ce0cf770892a252a75499e2e292. --- .../java/seedu/address/AppParameters.java | 11 ++-- src/main/java/seedu/address/Main.java | 8 ++- src/main/java/seedu/address/MainApp.java | 56 ++++++++--------- .../seedu/address/commons/core/Config.java | 17 ++--- .../address/commons/core/GuiSettings.java | 33 +++++----- .../address/commons/core/LogsCenter.java | 41 ++++++------ .../seedu/address/commons/core/Version.java | 63 +++++++++++++------ .../address/commons/core/index/Index.java | 10 +-- .../exceptions/DataLoadingException.java | 1 + .../seedu/address/commons/util/AppUtil.java | 3 +- .../seedu/address/commons/util/FileUtil.java | 8 +-- .../seedu/address/commons/util/JsonUtil.java | 14 ++--- .../address/commons/util/StringUtil.java | 8 ++- .../address/commons/util/ToStringBuilder.java | 12 ++-- .../address/logic/commands/AddCommand.java | 17 ++--- .../address/logic/commands/ClearCommand.java | 2 +- .../address/logic/commands/CommandResult.java | 24 +++---- .../address/logic/commands/HelpCommand.java | 6 +- .../address/logic/commands/ListCommand.java | 2 +- .../commands/exceptions/CommandException.java | 2 - .../logic/parser/AddCommandParser.java | 8 +-- .../logic/parser/AddressBookParser.java | 38 +++++++---- .../logic/parser/ArgumentMultimap.java | 8 +-- .../logic/parser/ArgumentTokenizer.java | 40 ++++++++---- .../logic/parser/EditCommandParser.java | 1 + .../logic/parser/FindCommandParser.java | 1 + .../seedu/address/logic/parser/Prefix.java | 23 +++++-- .../java/seedu/address/model/AddressBook.java | 34 ++++++---- src/main/java/seedu/address/model/Model.java | 8 +-- .../seedu/address/model/ModelManager.java | 42 ++++++------- .../address/model/ReadOnlyAddressBook.java | 1 + .../address/model/ReadOnlyUserPrefs.java | 1 + .../java/seedu/address/model/UserPrefs.java | 22 ++++--- .../seedu/address/model/person/Address.java | 18 +++--- .../seedu/address/model/person/Email.java | 16 ++--- .../java/seedu/address/model/person/Name.java | 18 +++--- .../person/NameContainsKeywordsPredicate.java | 10 +-- .../seedu/address/model/person/Person.java | 38 +++++------ .../seedu/address/model/person/Phone.java | 16 ++--- .../model/person/UniquePersonList.java | 38 +++++------ .../java/seedu/address/model/tag/Tag.java | 24 ++++--- .../address/model/util/SampleDataUtil.java | 7 ++- .../address/storage/JsonAdaptedPerson.java | 40 ++++++------ .../seedu/address/storage/JsonAdaptedTag.java | 9 +-- .../storage/JsonAddressBookStorage.java | 19 +++--- .../storage/JsonSerializableAddressBook.java | 8 ++- .../address/storage/JsonUserPrefsStorage.java | 9 +-- .../java/seedu/address/storage/Storage.java | 1 + .../seedu/address/storage/StorageManager.java | 25 ++++---- .../address/storage/UserPrefsStorage.java | 1 + .../java/seedu/address/ui/PersonCard.java | 4 +- .../address/commons/core/VersionTest.java | 6 +- .../seedu/address/testutil/PersonUtil.java | 4 +- 53 files changed, 502 insertions(+), 374 deletions(-) diff --git a/src/main/java/seedu/address/AppParameters.java b/src/main/java/seedu/address/AppParameters.java index 1be8f23595b..3d603622d4e 100644 --- a/src/main/java/seedu/address/AppParameters.java +++ b/src/main/java/seedu/address/AppParameters.java @@ -36,7 +36,7 @@ public static AppParameters parse(Application.Parameters parameters) { String configPathParameter = namedParameters.get("config"); if (configPathParameter != null && !FileUtil.isValidPath(configPathParameter)) { - AppParameters.logger.warning("Invalid config path " + configPathParameter + ". Using default config path."); + logger.warning("Invalid config path " + configPathParameter + ". Using default config path."); configPathParameter = null; } appParameters.setConfigPath(configPathParameter != null ? Paths.get(configPathParameter) : null); @@ -51,22 +51,23 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof AppParameters otherAppParameters)) { + if (!(other instanceof AppParameters)) { return false; } - return Objects.equals(this.configPath, otherAppParameters.configPath); + AppParameters otherAppParameters = (AppParameters) other; + return Objects.equals(configPath, otherAppParameters.configPath); } @Override public int hashCode() { - return this.configPath.hashCode(); + return configPath.hashCode(); } @Override public String toString() { return new ToStringBuilder(this) - .add("configPath", this.configPath) + .add("configPath", configPath) .toString(); } } diff --git a/src/main/java/seedu/address/Main.java b/src/main/java/seedu/address/Main.java index cff86449c63..9461d6da769 100644 --- a/src/main/java/seedu/address/Main.java +++ b/src/main/java/seedu/address/Main.java @@ -7,18 +7,22 @@ /** * The main entry point to the application. + * * This is a workaround for the following error when MainApp is made the * entry point of the application: + * * Error: JavaFX runtime components are missing, and are required to run this application + * * The reason is that MainApp extends Application. In that case, the * LauncherHelper will check for the javafx.graphics module to be present * as a named module. We don't use JavaFX via the module system so it can't * find the javafx.graphics module, and so the launch is aborted. + * * By having a separate main class (Main) that doesn't extend Application * to be the entry point of the application, we avoid this issue. */ public class Main { - private static final Logger logger = LogsCenter.getLogger(Main.class); + private static Logger logger = LogsCenter.getLogger(Main.class); public static void main(String[] args) { @@ -31,7 +35,7 @@ public static void main(String[] args) { // the user (if looking at the log output) that the said warning appearing in the log // can be ignored. - Main.logger.warning("The warning about Unsupported JavaFX configuration below (if any) can be ignored."); + logger.warning("The warning about Unsupported JavaFX configuration below (if any) can be ignored."); Application.launch(MainApp.class, args); } } diff --git a/src/main/java/seedu/address/MainApp.java b/src/main/java/seedu/address/MainApp.java index a118b73d396..678ddc8c218 100644 --- a/src/main/java/seedu/address/MainApp.java +++ b/src/main/java/seedu/address/MainApp.java @@ -48,23 +48,23 @@ public class MainApp extends Application { @Override public void init() throws Exception { - MainApp.logger.info("=============================[ Initializing AddressBook ]==========================="); + logger.info("=============================[ Initializing AddressBook ]==========================="); super.init(); AppParameters appParameters = AppParameters.parse(getParameters()); - this.config = this.initConfig(appParameters.getConfigPath()); - this.initLogging(this.config); + config = initConfig(appParameters.getConfigPath()); + initLogging(config); - UserPrefsStorage userPrefsStorage = new JsonUserPrefsStorage(this.config.getUserPrefsFilePath()); + UserPrefsStorage userPrefsStorage = new JsonUserPrefsStorage(config.getUserPrefsFilePath()); UserPrefs userPrefs = initPrefs(userPrefsStorage); AddressBookStorage addressBookStorage = new JsonAddressBookStorage(userPrefs.getAddressBookFilePath()); - this.storage = new StorageManager(addressBookStorage, userPrefsStorage); + storage = new StorageManager(addressBookStorage, userPrefsStorage); - this.model = initModelManager(this.storage, userPrefs); + model = initModelManager(storage, userPrefs); - this.logic = new LogicManager(this.model, this.storage); + logic = new LogicManager(model, storage); - this.ui = new UiManager(this.logic); + ui = new UiManager(logic); } /** @@ -73,19 +73,19 @@ public void init() throws Exception { * or an empty address book will be used instead if errors occur when reading {@code storage}'s address book. */ private Model initModelManager(Storage storage, ReadOnlyUserPrefs userPrefs) { - MainApp.logger.info("Using data file : " + storage.getAddressBookFilePath()); + logger.info("Using data file : " + storage.getAddressBookFilePath()); Optional addressBookOptional; ReadOnlyAddressBook initialData; try { addressBookOptional = storage.readAddressBook(); - if (addressBookOptional.isEmpty()) { - MainApp.logger.info("Creating a new data file " + storage.getAddressBookFilePath() + if (!addressBookOptional.isPresent()) { + logger.info("Creating a new data file " + storage.getAddressBookFilePath() + " populated with a sample AddressBook."); } initialData = addressBookOptional.orElseGet(SampleDataUtil::getSampleAddressBook); } catch (DataLoadingException e) { - MainApp.logger.warning("Data file at " + storage.getAddressBookFilePath() + " could not be loaded." + logger.warning("Data file at " + storage.getAddressBookFilePath() + " could not be loaded." + " Will be starting with an empty AddressBook."); initialData = new AddressBook(); } @@ -109,20 +109,20 @@ protected Config initConfig(Path configFilePath) { configFilePathUsed = Config.DEFAULT_CONFIG_FILE; if (configFilePath != null) { - MainApp.logger.info("Custom Config file specified " + configFilePath); + logger.info("Custom Config file specified " + configFilePath); configFilePathUsed = configFilePath; } - MainApp.logger.info("Using config file : " + configFilePathUsed); + logger.info("Using config file : " + configFilePathUsed); try { Optional configOptional = ConfigUtil.readConfig(configFilePathUsed); - if (configOptional.isEmpty()) { - MainApp.logger.info("Creating new config file " + configFilePathUsed); + if (!configOptional.isPresent()) { + logger.info("Creating new config file " + configFilePathUsed); } initializedConfig = configOptional.orElse(new Config()); } catch (DataLoadingException e) { - MainApp.logger.warning("Config file at " + configFilePathUsed + " could not be loaded." + logger.warning("Config file at " + configFilePathUsed + " could not be loaded." + " Using default config properties."); initializedConfig = new Config(); } @@ -131,7 +131,7 @@ protected Config initConfig(Path configFilePath) { try { ConfigUtil.saveConfig(initializedConfig, configFilePathUsed); } catch (IOException e) { - MainApp.logger.warning("Failed to save config file : " + StringUtil.getDetails(e)); + logger.warning("Failed to save config file : " + StringUtil.getDetails(e)); } return initializedConfig; } @@ -143,17 +143,17 @@ protected Config initConfig(Path configFilePath) { */ protected UserPrefs initPrefs(UserPrefsStorage storage) { Path prefsFilePath = storage.getUserPrefsFilePath(); - MainApp.logger.info("Using preference file : " + prefsFilePath); + logger.info("Using preference file : " + prefsFilePath); UserPrefs initializedPrefs; try { Optional prefsOptional = storage.readUserPrefs(); - if (prefsOptional.isEmpty()) { - MainApp.logger.info("Creating new preference file " + prefsFilePath); + if (!prefsOptional.isPresent()) { + logger.info("Creating new preference file " + prefsFilePath); } initializedPrefs = prefsOptional.orElse(new UserPrefs()); } catch (DataLoadingException e) { - MainApp.logger.warning("Preference file at " + prefsFilePath + " could not be loaded." + logger.warning("Preference file at " + prefsFilePath + " could not be loaded." + " Using default preferences."); initializedPrefs = new UserPrefs(); } @@ -162,7 +162,7 @@ protected UserPrefs initPrefs(UserPrefsStorage storage) { try { storage.saveUserPrefs(initializedPrefs); } catch (IOException e) { - MainApp.logger.warning("Failed to save config file : " + StringUtil.getDetails(e)); + logger.warning("Failed to save config file : " + StringUtil.getDetails(e)); } return initializedPrefs; @@ -170,17 +170,17 @@ protected UserPrefs initPrefs(UserPrefsStorage storage) { @Override public void start(Stage primaryStage) { - MainApp.logger.info("Starting AddressBook " + MainApp.VERSION); - this.ui.start(primaryStage); + logger.info("Starting AddressBook " + MainApp.VERSION); + ui.start(primaryStage); } @Override public void stop() { - MainApp.logger.info("============================ [ Stopping AddressBook ] ============================="); + logger.info("============================ [ Stopping AddressBook ] ============================="); try { - this.storage.saveUserPrefs(this.model.getUserPrefs()); + storage.saveUserPrefs(model.getUserPrefs()); } catch (IOException e) { - MainApp.logger.severe("Failed to save preferences " + StringUtil.getDetails(e)); + logger.severe("Failed to save preferences " + StringUtil.getDetails(e)); } } } diff --git a/src/main/java/seedu/address/commons/core/Config.java b/src/main/java/seedu/address/commons/core/Config.java index 6f949177723..485f85a5e05 100644 --- a/src/main/java/seedu/address/commons/core/Config.java +++ b/src/main/java/seedu/address/commons/core/Config.java @@ -19,7 +19,7 @@ public class Config { private Path userPrefsFilePath = Paths.get("preferences.json"); public Level getLogLevel() { - return this.logLevel; + return logLevel; } public void setLogLevel(Level logLevel) { @@ -27,7 +27,7 @@ public void setLogLevel(Level logLevel) { } public Path getUserPrefsFilePath() { - return this.userPrefsFilePath; + return userPrefsFilePath; } public void setUserPrefsFilePath(Path userPrefsFilePath) { @@ -41,24 +41,25 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof Config otherConfig)) { + if (!(other instanceof Config)) { return false; } - return Objects.equals(this.logLevel, otherConfig.logLevel) - && Objects.equals(this.userPrefsFilePath, otherConfig.userPrefsFilePath); + Config otherConfig = (Config) other; + return Objects.equals(logLevel, otherConfig.logLevel) + && Objects.equals(userPrefsFilePath, otherConfig.userPrefsFilePath); } @Override public int hashCode() { - return Objects.hash(this.logLevel, this.userPrefsFilePath); + return Objects.hash(logLevel, userPrefsFilePath); } @Override public String toString() { return new ToStringBuilder(this) - .add("logLevel", this.logLevel) - .add("userPrefsFilePath", this.userPrefsFilePath) + .add("logLevel", logLevel) + .add("userPrefsFilePath", userPrefsFilePath) .toString(); } diff --git a/src/main/java/seedu/address/commons/core/GuiSettings.java b/src/main/java/seedu/address/commons/core/GuiSettings.java index 83d6016e85b..a97a86ee8d7 100644 --- a/src/main/java/seedu/address/commons/core/GuiSettings.java +++ b/src/main/java/seedu/address/commons/core/GuiSettings.java @@ -23,30 +23,30 @@ public class GuiSettings implements Serializable { * Constructs a {@code GuiSettings} with the default height, width and position. */ public GuiSettings() { - this.windowWidth = DEFAULT_WIDTH; - this.windowHeight = DEFAULT_HEIGHT; - this.windowCoordinates = null; // null represent no coordinates + windowWidth = DEFAULT_WIDTH; + windowHeight = DEFAULT_HEIGHT; + windowCoordinates = null; // null represent no coordinates } /** - * Constructs a {@code GuiSettings} with the specified height, width and position (Constructor overloading). + * Constructs a {@code GuiSettings} with the specified height, width and position. */ public GuiSettings(double windowWidth, double windowHeight, int xPosition, int yPosition) { this.windowWidth = windowWidth; this.windowHeight = windowHeight; - this.windowCoordinates = new Point(xPosition, yPosition); + windowCoordinates = new Point(xPosition, yPosition); } public double getWindowWidth() { - return this.windowWidth; + return windowWidth; } public double getWindowHeight() { - return this.windowHeight; + return windowHeight; } public Point getWindowCoordinates() { - return this.windowCoordinates != null ? new Point(windowCoordinates) : null; + return windowCoordinates != null ? new Point(windowCoordinates) : null; } @Override @@ -56,26 +56,27 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof GuiSettings otherGuiSettings)) { + if (!(other instanceof GuiSettings)) { return false; } - return this.windowWidth == otherGuiSettings.windowWidth - && this.windowHeight == otherGuiSettings.windowHeight - && Objects.equals(this.windowCoordinates, otherGuiSettings.windowCoordinates); + GuiSettings otherGuiSettings = (GuiSettings) other; + return windowWidth == otherGuiSettings.windowWidth + && windowHeight == otherGuiSettings.windowHeight + && Objects.equals(windowCoordinates, otherGuiSettings.windowCoordinates); } @Override public int hashCode() { - return Objects.hash(this.windowWidth, this.windowHeight, this.windowCoordinates); + return Objects.hash(windowWidth, windowHeight, windowCoordinates); } @Override public String toString() { return new ToStringBuilder(this) - .add("windowWidth", this.windowWidth) - .add("windowHeight", this.windowHeight) - .add("windowCoordinates", this.windowCoordinates) + .add("windowWidth", windowWidth) + .add("windowHeight", windowHeight) + .add("windowCoordinates", windowCoordinates) .toString(); } } diff --git a/src/main/java/seedu/address/commons/core/LogsCenter.java b/src/main/java/seedu/address/commons/core/LogsCenter.java index 5a25b626ace..8cf8e15a0f0 100644 --- a/src/main/java/seedu/address/commons/core/LogsCenter.java +++ b/src/main/java/seedu/address/commons/core/LogsCenter.java @@ -23,11 +23,12 @@ public class LogsCenter { private static final String LOG_FILE = "addressbook.log"; private static final Logger logger; // logger for this class private static Logger baseLogger; // to be used as the parent of all other loggers created by this class. + private static Level currentLogLevel = Level.INFO; // This static block ensures essential loggers are created early static { - logger = Logger.getLogger(LogsCenter.class.getName()); // Must precede setBaseLogger to initialize logger first. - LogsCenter.setBaseLogger(); // If logger not initialized, NullPointerException causes both CLI and GUI to fail. + setBaseLogger(); + logger = LogsCenter.getLogger(LogsCenter.class); } /** @@ -35,10 +36,10 @@ public class LogsCenter { * using {@link #getLogger(String)} and {@link #getLogger(Class)} methods except for those that are manually set. */ public static void init(Config config) { - Level currentLogLevel = config.getLogLevel(); - LogsCenter.logger.info("Log level will be set as: " + currentLogLevel); + currentLogLevel = config.getLogLevel(); + logger.info("Log level will be set as: " + currentLogLevel); // set the level of the baseLogger which will be inherited by other loggers - LogsCenter.baseLogger.setLevel(currentLogLevel); + baseLogger.setLevel(currentLogLevel); } /** @@ -52,24 +53,25 @@ public static Logger getLogger(String name) { // By prefixing names of all loggers with baseLogger's name + ".", we make the baseLogger the parent of all // loggers. This allows us to change the level of all loggers simply by changing the baseLogger level. Logger logger = Logger.getLogger(baseLogger.getName() + "." + name); - LogsCenter.removeHandlers(logger); - LogsCenter.logger.setUseParentHandlers(true); + removeHandlers(logger); + logger.setUseParentHandlers(true); return logger; } /** * Creates a Logger for the given class name. */ - public static Logger getLogger(Class classToHaveLogger) { - requireNonNull(classToHaveLogger); - return LogsCenter.getLogger(classToHaveLogger.getSimpleName()); + public static Logger getLogger(Class clazz) { + requireNonNull(clazz); + return getLogger(clazz.getSimpleName()); } /** * Removes all handlers from the {@code logger}. */ private static void removeHandlers(Logger logger) { - Arrays.stream(logger.getHandlers()).forEach(logger::removeHandler); + Arrays.stream(logger.getHandlers()) + .forEach(logger::removeHandler); } /** @@ -77,8 +79,8 @@ private static void removeHandlers(Logger logger) { * Sets it as the {@code baseLogger}, to be used as the parent logger of all other loggers. */ private static void setBaseLogger() { - LogsCenter.baseLogger = Logger.getLogger("ab3"); - LogsCenter.baseLogger.setUseParentHandlers(false); + baseLogger = Logger.getLogger("ab3"); + baseLogger.setUseParentHandlers(false); removeHandlers(baseLogger); // Level.ALL is used as the level for the handlers because the baseLogger filters the log messages by level @@ -87,19 +89,18 @@ private static void setBaseLogger() { // add a ConsoleHandler to log to the console ConsoleHandler consoleHandler = new ConsoleHandler(); consoleHandler.setLevel(Level.ALL); - LogsCenter.baseLogger.addHandler(consoleHandler); + baseLogger.addHandler(consoleHandler); // add a FileHandler to log to a file try { - FileHandler fileHandler = new FileHandler(LogsCenter.LOG_FILE, - LogsCenter.MAX_FILE_SIZE_IN_BYTES, - LogsCenter.MAX_FILE_COUNT, - true); + FileHandler fileHandler = new FileHandler(LOG_FILE, MAX_FILE_SIZE_IN_BYTES, MAX_FILE_COUNT, true); fileHandler.setFormatter(new SimpleFormatter()); fileHandler.setLevel(Level.ALL); - LogsCenter.baseLogger.addHandler(fileHandler); + baseLogger.addHandler(fileHandler); } catch (IOException e) { - LogsCenter.logger.warning("Error adding file handler for logger."); + logger.warning("Error adding file handler for logger."); } } + + } diff --git a/src/main/java/seedu/address/commons/core/Version.java b/src/main/java/seedu/address/commons/core/Version.java index ce106fbc38b..491d24559b4 100644 --- a/src/main/java/seedu/address/commons/core/Version.java +++ b/src/main/java/seedu/address/commons/core/Version.java @@ -9,7 +9,7 @@ /** * Represents a version with major, minor and patch number */ -public record Version(int major, int minor, int patch, boolean isEarlyAccess) implements Comparable { +public class Version implements Comparable { public static final String VERSION_REGEX = "V(\\d+)\\.(\\d+)\\.(\\d+)(ea)?"; @@ -17,15 +17,39 @@ public record Version(int major, int minor, int patch, boolean isEarlyAccess) im private static final Pattern VERSION_PATTERN = Pattern.compile(VERSION_REGEX); + private final int major; + private final int minor; + private final int patch; + private final boolean isEarlyAccess; + /** * Constructs a {@code Version} with the given version details. */ - public Version { + public Version(int major, int minor, int patch, boolean isEarlyAccess) { + this.major = major; + this.minor = minor; + this.patch = patch; + this.isEarlyAccess = isEarlyAccess; + } + + public int getMajor() { + return major; + } + + public int getMinor() { + return minor; + } + + public int getPatch() { + return patch; + } + + public boolean isEarlyAccess() { + return isEarlyAccess; } /** * Parses a version number string in the format V1.2.3. - * * @param versionString version number string * @return a Version object */ @@ -40,7 +64,7 @@ public static Version fromString(String versionString) throws IllegalArgumentExc return new Version(Integer.parseInt(versionMatcher.group(1)), Integer.parseInt(versionMatcher.group(2)), Integer.parseInt(versionMatcher.group(3)), - versionMatcher.group(4) != null); + versionMatcher.group(4) == null ? false : true); } @JsonValue @@ -50,19 +74,19 @@ public String toString() { @Override public int compareTo(Version other) { - if (this.major != other.major) { - return this.major - other.major; + if (major != other.major) { + return major - other.major; } - if (this.minor != other.minor) { - return this.minor - other.minor; + if (minor != other.minor) { + return minor - other.minor; } - if (this.patch != other.patch) { - return this.patch - other.patch; + if (patch != other.patch) { + return patch - other.patch; } - if (this.isEarlyAccess == other.isEarlyAccess()) { + if (isEarlyAccess == other.isEarlyAccess()) { return 0; } - if (this.isEarlyAccess) { + if (isEarlyAccess) { return -1; } return 1; @@ -75,20 +99,21 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof Version otherVersion)) { + if (!(other instanceof Version)) { return false; } - return this.major == otherVersion.major - && this.minor == otherVersion.minor - && this.patch == otherVersion.patch - && this.isEarlyAccess == otherVersion.isEarlyAccess; + Version otherVersion = (Version) other; + return major == otherVersion.major + && minor == otherVersion.minor + && patch == otherVersion.patch + && isEarlyAccess == otherVersion.isEarlyAccess; } @Override public int hashCode() { - String hash = String.format("%03d%03d%03d", this.major, this.minor, this.patch); - if (!this.isEarlyAccess) { + String hash = String.format("%03d%03d%03d", major, minor, patch); + if (!isEarlyAccess) { hash = "1" + hash; } return Integer.parseInt(hash); diff --git a/src/main/java/seedu/address/commons/core/index/Index.java b/src/main/java/seedu/address/commons/core/index/Index.java index 1a0e514391a..dd170d8b68d 100644 --- a/src/main/java/seedu/address/commons/core/index/Index.java +++ b/src/main/java/seedu/address/commons/core/index/Index.java @@ -4,13 +4,14 @@ /** * Represents a zero-based or one-based index. + * * {@code Index} should be used right from the start (when parsing in a new user input), so that if the current * component wants to communicate with another component, it can send an {@code Index} to avoid having to know what * base the other component is using for its index. However, after receiving the {@code Index}, that component can * convert it back to an int if the index will not be passed to a different component again. */ public class Index { - private final int zeroBasedIndex; + private int zeroBasedIndex; /** * Index can only be created by calling {@link Index#fromZeroBased(int)} or @@ -53,15 +54,16 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof Index otherIndex)) { + if (!(other instanceof Index)) { return false; } - return this.zeroBasedIndex == otherIndex.zeroBasedIndex; + Index otherIndex = (Index) other; + return zeroBasedIndex == otherIndex.zeroBasedIndex; } @Override public String toString() { - return new ToStringBuilder(this).add("zeroBasedIndex", this.zeroBasedIndex).toString(); + return new ToStringBuilder(this).add("zeroBasedIndex", zeroBasedIndex).toString(); } } diff --git a/src/main/java/seedu/address/commons/exceptions/DataLoadingException.java b/src/main/java/seedu/address/commons/exceptions/DataLoadingException.java index 5a3cf9a0537..9904ba47afe 100644 --- a/src/main/java/seedu/address/commons/exceptions/DataLoadingException.java +++ b/src/main/java/seedu/address/commons/exceptions/DataLoadingException.java @@ -7,4 +7,5 @@ public class DataLoadingException extends Exception { public DataLoadingException(Exception cause) { super(cause); } + } diff --git a/src/main/java/seedu/address/commons/util/AppUtil.java b/src/main/java/seedu/address/commons/util/AppUtil.java index b2de8be9d64..87aa89c0326 100644 --- a/src/main/java/seedu/address/commons/util/AppUtil.java +++ b/src/main/java/seedu/address/commons/util/AppUtil.java @@ -14,7 +14,8 @@ public class AppUtil { * Gets an {@code Image} from the specified path. */ public static Image getImage(String imagePath) { - return new Image(requireNonNull(MainApp.class.getResourceAsStream(imagePath))); + requireNonNull(imagePath); + return new Image(MainApp.class.getResourceAsStream(imagePath)); } /** diff --git a/src/main/java/seedu/address/commons/util/FileUtil.java b/src/main/java/seedu/address/commons/util/FileUtil.java index 9a35d06944a..b1e2767cdd9 100644 --- a/src/main/java/seedu/address/commons/util/FileUtil.java +++ b/src/main/java/seedu/address/commons/util/FileUtil.java @@ -18,7 +18,7 @@ public static boolean isFileExists(Path file) { } /** - * Returns true if {@code path} can be converted into a {@code Path} via {@link Paths#get(String, String...)}, + * Returns true if {@code path} can be converted into a {@code Path} via {@link Paths#get(String)}, * otherwise returns false. * @param path A string representing the file path. Cannot be null. */ @@ -36,8 +36,8 @@ public static boolean isValidPath(String path) { * @throws IOException if the file or directory cannot be created. */ public static void createIfMissing(Path file) throws IOException { - if (!FileUtil.isFileExists(file)) { - FileUtil.createFile(file); + if (!isFileExists(file)) { + createFile(file); } } @@ -49,7 +49,7 @@ public static void createFile(Path file) throws IOException { return; } - FileUtil.createParentDirsOfFile(file); + createParentDirsOfFile(file); Files.createFile(file); } diff --git a/src/main/java/seedu/address/commons/util/JsonUtil.java b/src/main/java/seedu/address/commons/util/JsonUtil.java index b00a1e47a6c..100cb16c395 100644 --- a/src/main/java/seedu/address/commons/util/JsonUtil.java +++ b/src/main/java/seedu/address/commons/util/JsonUtil.java @@ -30,7 +30,7 @@ public class JsonUtil { private static final Logger logger = LogsCenter.getLogger(JsonUtil.class); - private static final ObjectMapper objectMapper = new ObjectMapper().findAndRegisterModules() + private static ObjectMapper objectMapper = new ObjectMapper().findAndRegisterModules() .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false) .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) .setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE) @@ -45,7 +45,7 @@ static void serializeObjectToJsonFile(Path jsonFile, T objectToSerialize) th static T deserializeObjectFromJsonFile(Path jsonFile, Class classOfObjectToDeserialize) throws IOException { - return JsonUtil.fromJsonString(FileUtil.readFromFile(jsonFile), classOfObjectToDeserialize); + return fromJsonString(FileUtil.readFromFile(jsonFile), classOfObjectToDeserialize); } /** @@ -63,14 +63,14 @@ public static Optional readJsonFile( if (!Files.exists(filePath)) { return Optional.empty(); } - JsonUtil.logger.info("JSON file " + filePath + " found."); + logger.info("JSON file " + filePath + " found."); T jsonFile; try { jsonFile = deserializeObjectFromJsonFile(filePath, classOfObjectToDeserialize); } catch (IOException e) { - JsonUtil.logger.warning("Error reading from jsonFile file " + filePath + ": " + e); + logger.warning("Error reading from jsonFile file " + filePath + ": " + e); throw new DataLoadingException(e); } @@ -88,7 +88,7 @@ public static void saveJsonFile(T jsonFile, Path filePath) throws IOExceptio requireNonNull(filePath); requireNonNull(jsonFile); - JsonUtil.serializeObjectToJsonFile(filePath, jsonFile); + serializeObjectToJsonFile(filePath, jsonFile); } @@ -98,7 +98,7 @@ public static void saveJsonFile(T jsonFile, Path filePath) throws IOExceptio * @return The instance of T with the specified values in the JSON string */ public static T fromJsonString(String json, Class instanceClass) throws IOException { - return JsonUtil.objectMapper.readValue(json, instanceClass); + return objectMapper.readValue(json, instanceClass); } /** @@ -108,7 +108,7 @@ public static T fromJsonString(String json, Class instanceClass) throws I * @return JSON data representation of the given class instance, in string */ public static String toJsonString(T instance) throws JsonProcessingException { - return JsonUtil.objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(instance); + return objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(instance); } /** diff --git a/src/main/java/seedu/address/commons/util/StringUtil.java b/src/main/java/seedu/address/commons/util/StringUtil.java index efa4fb59065..61cc8c9a1cb 100644 --- a/src/main/java/seedu/address/commons/util/StringUtil.java +++ b/src/main/java/seedu/address/commons/util/StringUtil.java @@ -31,9 +31,11 @@ public static boolean containsWordIgnoreCase(String sentence, String word) { checkArgument(!preppedWord.isEmpty(), "Word parameter cannot be empty"); checkArgument(preppedWord.split("\\s+").length == 1, "Word parameter should be a single word"); - String[] wordsInPreppedSentence = sentence.split("\\s+"); + String preppedSentence = sentence; + String[] wordsInPreppedSentence = preppedSentence.split("\\s+"); - return Arrays.stream(wordsInPreppedSentence).anyMatch(preppedWord::equalsIgnoreCase); + return Arrays.stream(wordsInPreppedSentence) + .anyMatch(preppedWord::equalsIgnoreCase); } /** @@ -43,7 +45,7 @@ public static String getDetails(Throwable t) { requireNonNull(t); StringWriter sw = new StringWriter(); t.printStackTrace(new PrintWriter(sw)); - return t.getMessage() + "\n" + sw; + return t.getMessage() + "\n" + sw.toString(); } /** diff --git a/src/main/java/seedu/address/commons/util/ToStringBuilder.java b/src/main/java/seedu/address/commons/util/ToStringBuilder.java index 78d86e4eb8b..d979b926734 100644 --- a/src/main/java/seedu/address/commons/util/ToStringBuilder.java +++ b/src/main/java/seedu/address/commons/util/ToStringBuilder.java @@ -16,7 +16,7 @@ public class ToStringBuilder { * Constructs a {@code ToStringBuilder} whose formatted output will be prefixed with {@code objectName}. */ public ToStringBuilder(String objectName) { - this.stringBuilder.append(objectName).append(ToStringBuilder.OBJECT_PREFIX); + stringBuilder.append(objectName).append(OBJECT_PREFIX); } /** @@ -35,11 +35,11 @@ public ToStringBuilder(Object object) { * @return A reference to this {@code ToStringBuilder} object, allowing method calls to be chained. */ public ToStringBuilder add(String fieldName, Object fieldValue) { - if (this.hasField) { - this.stringBuilder.append(ToStringBuilder.FIELD_SEPARATOR); + if (hasField) { + stringBuilder.append(FIELD_SEPARATOR); } - this.stringBuilder.append(fieldName).append(ToStringBuilder.FIELD_NAME_VALUE_SEPARATOR).append(fieldValue); - this.hasField = true; + stringBuilder.append(fieldName).append(FIELD_NAME_VALUE_SEPARATOR).append(fieldValue); + hasField = true; return this; } @@ -48,6 +48,6 @@ public ToStringBuilder add(String fieldName, Object fieldValue) { */ @Override public String toString() { - return this.stringBuilder + ToStringBuilder.OBJECT_SUFFIX; + return stringBuilder.toString() + OBJECT_SUFFIX; } } diff --git a/src/main/java/seedu/address/logic/commands/AddCommand.java b/src/main/java/seedu/address/logic/commands/AddCommand.java index 06f925dcbe7..5d7185a9680 100644 --- a/src/main/java/seedu/address/logic/commands/AddCommand.java +++ b/src/main/java/seedu/address/logic/commands/AddCommand.java @@ -45,19 +45,19 @@ public class AddCommand extends Command { */ public AddCommand(Person person) { requireNonNull(person); - this.toAdd = person; + toAdd = person; } @Override public CommandResult execute(Model model) throws CommandException { requireNonNull(model); - if (model.hasPerson(this.toAdd)) { - throw new CommandException(AddCommand.MESSAGE_DUPLICATE_PERSON); + if (model.hasPerson(toAdd)) { + throw new CommandException(MESSAGE_DUPLICATE_PERSON); } - model.addPerson(this.toAdd); - return new CommandResult(String.format(AddCommand.MESSAGE_SUCCESS, Messages.format(this.toAdd))); + model.addPerson(toAdd); + return new CommandResult(String.format(MESSAGE_SUCCESS, Messages.format(toAdd))); } @Override @@ -67,17 +67,18 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof AddCommand otherAddCommand)) { + if (!(other instanceof AddCommand)) { return false; } - return this.toAdd.equals(otherAddCommand.toAdd); + AddCommand otherAddCommand = (AddCommand) other; + return toAdd.equals(otherAddCommand.toAdd); } @Override public String toString() { return new ToStringBuilder(this) - .add("toAdd", this.toAdd) + .add("toAdd", toAdd) .toString(); } } diff --git a/src/main/java/seedu/address/logic/commands/ClearCommand.java b/src/main/java/seedu/address/logic/commands/ClearCommand.java index ec0719e929d..9c86b1fa6e4 100644 --- a/src/main/java/seedu/address/logic/commands/ClearCommand.java +++ b/src/main/java/seedu/address/logic/commands/ClearCommand.java @@ -18,6 +18,6 @@ public class ClearCommand extends Command { public CommandResult execute(Model model) { requireNonNull(model); model.setAddressBook(new AddressBook()); - return new CommandResult(ClearCommand.MESSAGE_SUCCESS); + return new CommandResult(MESSAGE_SUCCESS); } } diff --git a/src/main/java/seedu/address/logic/commands/CommandResult.java b/src/main/java/seedu/address/logic/commands/CommandResult.java index 308b8690b9c..249b6072d0d 100644 --- a/src/main/java/seedu/address/logic/commands/CommandResult.java +++ b/src/main/java/seedu/address/logic/commands/CommandResult.java @@ -37,15 +37,15 @@ public CommandResult(String feedbackToUser) { } public String getFeedbackToUser() { - return this.feedbackToUser; + return feedbackToUser; } public boolean isShowHelp() { - return this.showHelp; + return showHelp; } public boolean isExit() { - return this.exit; + return exit; } @Override @@ -55,26 +55,28 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof CommandResult otherCommandResult)) { + if (!(other instanceof CommandResult)) { return false; } - return this.feedbackToUser.equals(otherCommandResult.feedbackToUser) - && this.showHelp == otherCommandResult.showHelp - && this.exit == otherCommandResult.exit; + CommandResult otherCommandResult = (CommandResult) other; + return feedbackToUser.equals(otherCommandResult.feedbackToUser) + && showHelp == otherCommandResult.showHelp + && exit == otherCommandResult.exit; } @Override public int hashCode() { - return Objects.hash(this.feedbackToUser, this.showHelp, this.exit); + return Objects.hash(feedbackToUser, showHelp, exit); } @Override public String toString() { return new ToStringBuilder(this) - .add("feedbackToUser", this.feedbackToUser) - .add("showHelp", this.showHelp) - .add("exit", this.exit) + .add("feedbackToUser", feedbackToUser) + .add("showHelp", showHelp) + .add("exit", exit) .toString(); } + } diff --git a/src/main/java/seedu/address/logic/commands/HelpCommand.java b/src/main/java/seedu/address/logic/commands/HelpCommand.java index 45fa3bd08aa..bf824f91bd0 100644 --- a/src/main/java/seedu/address/logic/commands/HelpCommand.java +++ b/src/main/java/seedu/address/logic/commands/HelpCommand.java @@ -9,13 +9,13 @@ public class HelpCommand extends Command { public static final String COMMAND_WORD = "help"; - public static final String MESSAGE_USAGE = HelpCommand.COMMAND_WORD + ": Shows program usage instructions.\n" - + "Example: " + HelpCommand.COMMAND_WORD; + public static final String MESSAGE_USAGE = COMMAND_WORD + ": Shows program usage instructions.\n" + + "Example: " + COMMAND_WORD; public static final String SHOWING_HELP_MESSAGE = "Opened help window."; @Override public CommandResult execute(Model model) { - return new CommandResult(HelpCommand.SHOWING_HELP_MESSAGE, true, false); + return new CommandResult(SHOWING_HELP_MESSAGE, true, false); } } diff --git a/src/main/java/seedu/address/logic/commands/ListCommand.java b/src/main/java/seedu/address/logic/commands/ListCommand.java index f681639d601..84be6ad2596 100644 --- a/src/main/java/seedu/address/logic/commands/ListCommand.java +++ b/src/main/java/seedu/address/logic/commands/ListCommand.java @@ -19,6 +19,6 @@ public class ListCommand extends Command { public CommandResult execute(Model model) { requireNonNull(model); model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS); - return new CommandResult(ListCommand.MESSAGE_SUCCESS); + return new CommandResult(MESSAGE_SUCCESS); } } diff --git a/src/main/java/seedu/address/logic/commands/exceptions/CommandException.java b/src/main/java/seedu/address/logic/commands/exceptions/CommandException.java index f44c0c19186..a16bd14f2cd 100644 --- a/src/main/java/seedu/address/logic/commands/exceptions/CommandException.java +++ b/src/main/java/seedu/address/logic/commands/exceptions/CommandException.java @@ -1,7 +1,5 @@ package seedu.address.logic.commands.exceptions; -import seedu.address.logic.commands.Command; - /** * Represents an error which occurs during execution of a {@link Command}. */ diff --git a/src/main/java/seedu/address/logic/parser/AddCommandParser.java b/src/main/java/seedu/address/logic/parser/AddCommandParser.java index a9ee76f1bd1..4ff1a97ed77 100644 --- a/src/main/java/seedu/address/logic/parser/AddCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/AddCommandParser.java @@ -39,10 +39,10 @@ public AddCommand parse(String args) throws ParseException { } argMultimap.verifyNoDuplicatePrefixesFor(PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS); - Name name = ParserUtil.parseName(argMultimap.getValue(PREFIX_NAME).orElse(null)); - Phone phone = ParserUtil.parsePhone(argMultimap.getValue(PREFIX_PHONE).orElse(null)); - Email email = ParserUtil.parseEmail(argMultimap.getValue(PREFIX_EMAIL).orElse(null)); - Address address = ParserUtil.parseAddress(argMultimap.getValue(PREFIX_ADDRESS).orElse(null)); + Name name = ParserUtil.parseName(argMultimap.getValue(PREFIX_NAME).get()); + Phone phone = ParserUtil.parsePhone(argMultimap.getValue(PREFIX_PHONE).get()); + Email email = ParserUtil.parseEmail(argMultimap.getValue(PREFIX_EMAIL).get()); + Address address = ParserUtil.parseAddress(argMultimap.getValue(PREFIX_ADDRESS).get()); Set tagList = ParserUtil.parseTags(argMultimap.getAllValues(PREFIX_TAG)); Person person = new Person(name, phone, email, address, tagList); diff --git a/src/main/java/seedu/address/logic/parser/AddressBookParser.java b/src/main/java/seedu/address/logic/parser/AddressBookParser.java index 9c4c4309603..3149ee07e0b 100644 --- a/src/main/java/seedu/address/logic/parser/AddressBookParser.java +++ b/src/main/java/seedu/address/logic/parser/AddressBookParser.java @@ -51,20 +51,36 @@ public Command parseCommand(String userInput) throws ParseException { // Lower level log messages are used sparingly to minimize noise in the code. logger.fine("Command word: " + commandWord + "; Arguments: " + arguments); - return switch (commandWord) { - case AddCommand.COMMAND_WORD -> new AddCommandParser().parse(arguments); - case EditCommand.COMMAND_WORD -> new EditCommandParser().parse(arguments); - case DeleteCommand.COMMAND_WORD -> new DeleteCommandParser().parse(arguments); - case ClearCommand.COMMAND_WORD -> new ClearCommand(); - case FindCommand.COMMAND_WORD -> new FindCommandParser().parse(arguments); - case ListCommand.COMMAND_WORD -> new ListCommand(); - case ExitCommand.COMMAND_WORD -> new ExitCommand(); - case HelpCommand.COMMAND_WORD -> new HelpCommand(); - default -> { + switch (commandWord) { + + case AddCommand.COMMAND_WORD: + return new AddCommandParser().parse(arguments); + + case EditCommand.COMMAND_WORD: + return new EditCommandParser().parse(arguments); + + case DeleteCommand.COMMAND_WORD: + return new DeleteCommandParser().parse(arguments); + + case ClearCommand.COMMAND_WORD: + return new ClearCommand(); + + case FindCommand.COMMAND_WORD: + return new FindCommandParser().parse(arguments); + + case ListCommand.COMMAND_WORD: + return new ListCommand(); + + case ExitCommand.COMMAND_WORD: + return new ExitCommand(); + + case HelpCommand.COMMAND_WORD: + return new HelpCommand(); + + default: logger.finer("This user input caused a ParseException: " + userInput); throw new ParseException(MESSAGE_UNKNOWN_COMMAND); } - }; } } diff --git a/src/main/java/seedu/address/logic/parser/ArgumentMultimap.java b/src/main/java/seedu/address/logic/parser/ArgumentMultimap.java index e4dd985b4b4..21e26887a83 100644 --- a/src/main/java/seedu/address/logic/parser/ArgumentMultimap.java +++ b/src/main/java/seedu/address/logic/parser/ArgumentMultimap.java @@ -32,7 +32,7 @@ public class ArgumentMultimap { public void put(Prefix prefix, String argValue) { List argValues = getAllValues(prefix); argValues.add(argValue); - this.argMultimap.put(prefix, argValues); + argMultimap.put(prefix, argValues); } /** @@ -49,10 +49,10 @@ public Optional getValue(Prefix prefix) { * Modifying the returned list will not affect the underlying data structure of the ArgumentMultimap. */ public List getAllValues(Prefix prefix) { - if (!this.argMultimap.containsKey(prefix)) { + if (!argMultimap.containsKey(prefix)) { return new ArrayList<>(); } - return new ArrayList<>(this.argMultimap.get(prefix)); + return new ArrayList<>(argMultimap.get(prefix)); } /** @@ -68,7 +68,7 @@ public String getPreamble() { */ public void verifyNoDuplicatePrefixesFor(Prefix... prefixes) throws ParseException { Prefix[] duplicatedPrefixes = Stream.of(prefixes).distinct() - .filter(prefix -> this.argMultimap.containsKey(prefix) && this.argMultimap.get(prefix).size() > 1) + .filter(prefix -> argMultimap.containsKey(prefix) && argMultimap.get(prefix).size() > 1) .toArray(Prefix[]::new); if (duplicatedPrefixes.length > 0) { diff --git a/src/main/java/seedu/address/logic/parser/ArgumentTokenizer.java b/src/main/java/seedu/address/logic/parser/ArgumentTokenizer.java index a8eccd754cf..5c9aebfa488 100644 --- a/src/main/java/seedu/address/logic/parser/ArgumentTokenizer.java +++ b/src/main/java/seedu/address/logic/parser/ArgumentTokenizer.java @@ -2,7 +2,6 @@ import java.util.ArrayList; import java.util.Arrays; -import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; @@ -48,11 +47,11 @@ private static List findAllPrefixPositions(String argsString, Pr private static List findPrefixPositions(String argsString, Prefix prefix) { List positions = new ArrayList<>(); - int prefixPosition = findPrefixPosition(argsString, prefix.prefix(), 0); + int prefixPosition = findPrefixPosition(argsString, prefix.getPrefix(), 0); while (prefixPosition != -1) { PrefixPosition extendedPrefix = new PrefixPosition(prefix, prefixPosition); positions.add(extendedPrefix); - prefixPosition = findPrefixPosition(argsString, prefix.prefix(), prefixPosition); + prefixPosition = findPrefixPosition(argsString, prefix.getPrefix(), prefixPosition); } return positions; @@ -63,7 +62,8 @@ private static List findPrefixPositions(String argsString, Prefi * {@code argsString} starting from index {@code fromIndex}. An occurrence * is valid if there is a whitespace before {@code prefix}. Returns -1 if no * such occurrence can be found. - * E.g. if {@code argsString} = "e/hip/900", {@code prefix} = "p/" and + * + * E.g if {@code argsString} = "e/hip/900", {@code prefix} = "p/" and * {@code fromIndex} = 0, this method returns -1 as there are no valid * occurrences of "p/" with whitespace before it. However, if * {@code argsString} = "e/hi p/900", {@code prefix} = "p/" and @@ -87,7 +87,7 @@ private static int findPrefixPosition(String argsString, String prefix, int from private static ArgumentMultimap extractArguments(String argsString, List prefixPositions) { // Sort by start position - prefixPositions.sort(Comparator.comparingInt(PrefixPosition::startPosition)); + prefixPositions.sort((prefix1, prefix2) -> prefix1.getStartPosition() - prefix2.getStartPosition()); // Insert a PrefixPosition to represent the preamble PrefixPosition preambleMarker = new PrefixPosition(new Prefix(""), 0); @@ -101,10 +101,11 @@ private static ArgumentMultimap extractArguments(String argsString, List> parseTagsForEdit(Collection tags) throws Pars Collection tagSet = tags.size() == 1 && tags.contains("") ? Collections.emptySet() : tags; return Optional.of(ParserUtil.parseTags(tagSet)); } + } diff --git a/src/main/java/seedu/address/logic/parser/FindCommandParser.java b/src/main/java/seedu/address/logic/parser/FindCommandParser.java index cc2b3a893cc..2867bde857b 100644 --- a/src/main/java/seedu/address/logic/parser/FindCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/FindCommandParser.java @@ -29,4 +29,5 @@ public FindCommand parse(String args) throws ParseException { return new FindCommand(new NameContainsKeywordsPredicate(Arrays.asList(nameKeywords))); } + } diff --git a/src/main/java/seedu/address/logic/parser/Prefix.java b/src/main/java/seedu/address/logic/parser/Prefix.java index 5770f634efc..348b7686c8a 100644 --- a/src/main/java/seedu/address/logic/parser/Prefix.java +++ b/src/main/java/seedu/address/logic/parser/Prefix.java @@ -4,11 +4,25 @@ * A prefix that marks the beginning of an argument in an arguments string. * E.g. 't/' in 'add James t/ friend'. */ -public record Prefix(String prefix) { +public class Prefix { + private final String prefix; + + public Prefix(String prefix) { + this.prefix = prefix; + } + + public String getPrefix() { + return prefix; + } @Override public String toString() { - return this.prefix(); + return getPrefix(); + } + + @Override + public int hashCode() { + return prefix == null ? 0 : prefix.hashCode(); } @Override @@ -18,10 +32,11 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof Prefix otherPrefix)) { + if (!(other instanceof Prefix)) { return false; } - return this.prefix.equals(otherPrefix.prefix); + Prefix otherPrefix = (Prefix) other; + return prefix.equals(otherPrefix.prefix); } } diff --git a/src/main/java/seedu/address/model/AddressBook.java b/src/main/java/seedu/address/model/AddressBook.java index 143330432a4..73397161e84 100644 --- a/src/main/java/seedu/address/model/AddressBook.java +++ b/src/main/java/seedu/address/model/AddressBook.java @@ -17,10 +17,19 @@ public class AddressBook implements ReadOnlyAddressBook { private final UniquePersonList persons; - public AddressBook() { - this.persons = new UniquePersonList(); // Rid erstwhile-preexisting non-static initialization block code smell. + /* + * The 'unusual' code block below is a non-static initialization block, sometimes used to avoid duplication + * between constructors. See https://docs.oracle.com/javase/tutorial/java/javaOO/initial.html + * + * Note that non-static init blocks are not recommended to use. There are other ways to avoid duplication + * among constructors. + */ + { + persons = new UniquePersonList(); } + public AddressBook() {} + /** * Creates an AddressBook using the Persons in the {@code toBeCopied} */ @@ -45,7 +54,7 @@ public void setPersons(List persons) { public void resetData(ReadOnlyAddressBook newData) { requireNonNull(newData); - this.setPersons(newData.getPersonList()); + setPersons(newData.getPersonList()); } //// person-level operations @@ -55,7 +64,7 @@ public void resetData(ReadOnlyAddressBook newData) { */ public boolean hasPerson(Person person) { requireNonNull(person); - return this.persons.contains(person); + return persons.contains(person); } /** @@ -63,7 +72,7 @@ public boolean hasPerson(Person person) { * The person must not already exist in the address book. */ public void addPerson(Person p) { - this.persons.add(p); + persons.add(p); } /** @@ -74,7 +83,7 @@ public void addPerson(Person p) { public void setPerson(Person target, Person editedPerson) { requireNonNull(editedPerson); - this.persons.setPerson(target, editedPerson); + persons.setPerson(target, editedPerson); } /** @@ -82,7 +91,7 @@ public void setPerson(Person target, Person editedPerson) { * {@code key} must exist in the address book. */ public void removePerson(Person key) { - this.persons.remove(key); + persons.remove(key); } //// util methods @@ -90,13 +99,13 @@ public void removePerson(Person key) { @Override public String toString() { return new ToStringBuilder(this) - .add("persons", this.persons) + .add("persons", persons) .toString(); } @Override public ObservableList getPersonList() { - return this.persons.asUnmodifiableObservableList(); + return persons.asUnmodifiableObservableList(); } @Override @@ -106,15 +115,16 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof AddressBook otherAddressBook)) { + if (!(other instanceof AddressBook)) { return false; } - return this.persons.equals(otherAddressBook.persons); + AddressBook otherAddressBook = (AddressBook) other; + return persons.equals(otherAddressBook.persons); } @Override public int hashCode() { - return this.persons.hashCode(); + return persons.hashCode(); } } diff --git a/src/main/java/seedu/address/model/Model.java b/src/main/java/seedu/address/model/Model.java index 0307c1c4040..d54df471c1f 100644 --- a/src/main/java/seedu/address/model/Model.java +++ b/src/main/java/seedu/address/model/Model.java @@ -25,22 +25,22 @@ public interface Model { ReadOnlyUserPrefs getUserPrefs(); /** - * Returns the GUI settings of user prefs. + * Returns the user prefs' GUI settings. */ GuiSettings getGuiSettings(); /** - * Sets the GUI settings of user prefs. + * Sets the user prefs' GUI settings. */ void setGuiSettings(GuiSettings guiSettings); /** - * Returns the address book file path of user prefs. + * Returns the user prefs' address book file path. */ Path getAddressBookFilePath(); /** - * Sets the address book file path of user prefs. + * Sets the user prefs' address book file path. */ void setAddressBookFilePath(Path addressBookFilePath); diff --git a/src/main/java/seedu/address/model/ModelManager.java b/src/main/java/seedu/address/model/ModelManager.java index 4975619b651..57bc563fde6 100644 --- a/src/main/java/seedu/address/model/ModelManager.java +++ b/src/main/java/seedu/address/model/ModelManager.java @@ -29,17 +29,13 @@ public class ModelManager implements Model { public ModelManager(ReadOnlyAddressBook addressBook, ReadOnlyUserPrefs userPrefs) { requireAllNonNull(addressBook, userPrefs); - ModelManager.logger.fine( - "Initializing with address book: " + addressBook + " and user prefs " + userPrefs); + logger.fine("Initializing with address book: " + addressBook + " and user prefs " + userPrefs); this.addressBook = new AddressBook(addressBook); this.userPrefs = new UserPrefs(userPrefs); - this.filteredPersons = new FilteredList<>(this.addressBook.getPersonList()); + filteredPersons = new FilteredList<>(this.addressBook.getPersonList()); } - /** - * Initializes a ModelManager with default empty addressBook and userPrefs (Constructor Overloading). - */ public ModelManager() { this(new AddressBook(), new UserPrefs()); } @@ -54,29 +50,29 @@ public void setUserPrefs(ReadOnlyUserPrefs userPrefs) { @Override public ReadOnlyUserPrefs getUserPrefs() { - return this.userPrefs; + return userPrefs; } @Override public GuiSettings getGuiSettings() { - return this.userPrefs.getGuiSettings(); + return userPrefs.getGuiSettings(); } @Override public void setGuiSettings(GuiSettings guiSettings) { requireNonNull(guiSettings); - this.userPrefs.setGuiSettings(guiSettings); + userPrefs.setGuiSettings(guiSettings); } @Override public Path getAddressBookFilePath() { - return this.userPrefs.getAddressBookFilePath(); + return userPrefs.getAddressBookFilePath(); } @Override public void setAddressBookFilePath(Path addressBookFilePath) { requireNonNull(addressBookFilePath); - this.userPrefs.setAddressBookFilePath(addressBookFilePath); + userPrefs.setAddressBookFilePath(addressBookFilePath); } //=========== AddressBook ================================================================================ @@ -88,23 +84,23 @@ public void setAddressBook(ReadOnlyAddressBook addressBook) { @Override public ReadOnlyAddressBook getAddressBook() { - return this.addressBook; + return addressBook; } @Override public boolean hasPerson(Person person) { requireNonNull(person); - return this.addressBook.hasPerson(person); + return addressBook.hasPerson(person); } @Override public void deletePerson(Person target) { - this.addressBook.removePerson(target); + addressBook.removePerson(target); } @Override public void addPerson(Person person) { - this.addressBook.addPerson(person); + addressBook.addPerson(person); updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS); } @@ -112,7 +108,7 @@ public void addPerson(Person person) { public void setPerson(Person target, Person editedPerson) { requireAllNonNull(target, editedPerson); - this.addressBook.setPerson(target, editedPerson); + addressBook.setPerson(target, editedPerson); } //=========== Filtered Person List Accessors ============================================================= @@ -123,13 +119,13 @@ public void setPerson(Person target, Person editedPerson) { */ @Override public ObservableList getFilteredPersonList() { - return this.filteredPersons; + return filteredPersons; } @Override public void updateFilteredPersonList(Predicate predicate) { requireNonNull(predicate); - this.filteredPersons.setPredicate(predicate); + filteredPersons.setPredicate(predicate); } @Override @@ -139,12 +135,14 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof ModelManager otherModelManager)) { + if (!(other instanceof ModelManager)) { return false; } - return this.addressBook.equals(otherModelManager.addressBook) - && this.userPrefs.equals(otherModelManager.userPrefs) - && this.filteredPersons.equals(otherModelManager.filteredPersons); + ModelManager otherModelManager = (ModelManager) other; + return addressBook.equals(otherModelManager.addressBook) + && userPrefs.equals(otherModelManager.userPrefs) + && filteredPersons.equals(otherModelManager.filteredPersons); } + } diff --git a/src/main/java/seedu/address/model/ReadOnlyAddressBook.java b/src/main/java/seedu/address/model/ReadOnlyAddressBook.java index 6f862be2eca..6ddc2cd9a29 100644 --- a/src/main/java/seedu/address/model/ReadOnlyAddressBook.java +++ b/src/main/java/seedu/address/model/ReadOnlyAddressBook.java @@ -13,4 +13,5 @@ public interface ReadOnlyAddressBook { * This list will not contain any duplicate persons. */ ObservableList getPersonList(); + } diff --git a/src/main/java/seedu/address/model/ReadOnlyUserPrefs.java b/src/main/java/seedu/address/model/ReadOnlyUserPrefs.java index e6810b61b6b..befd58a4c73 100644 --- a/src/main/java/seedu/address/model/ReadOnlyUserPrefs.java +++ b/src/main/java/seedu/address/model/ReadOnlyUserPrefs.java @@ -12,4 +12,5 @@ public interface ReadOnlyUserPrefs { GuiSettings getGuiSettings(); Path getAddressBookFilePath(); + } diff --git a/src/main/java/seedu/address/model/UserPrefs.java b/src/main/java/seedu/address/model/UserPrefs.java index 47babd5d8ec..6be655fb4c7 100644 --- a/src/main/java/seedu/address/model/UserPrefs.java +++ b/src/main/java/seedu/address/model/UserPrefs.java @@ -34,12 +34,12 @@ public UserPrefs(ReadOnlyUserPrefs userPrefs) { */ public void resetData(ReadOnlyUserPrefs newUserPrefs) { requireNonNull(newUserPrefs); - this.setGuiSettings(newUserPrefs.getGuiSettings()); - this.setAddressBookFilePath(newUserPrefs.getAddressBookFilePath()); + setGuiSettings(newUserPrefs.getGuiSettings()); + setAddressBookFilePath(newUserPrefs.getAddressBookFilePath()); } public GuiSettings getGuiSettings() { - return this.guiSettings; + return guiSettings; } public void setGuiSettings(GuiSettings guiSettings) { @@ -63,22 +63,26 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof UserPrefs otherUserPrefs)) { + if (!(other instanceof UserPrefs)) { return false; } - return this.guiSettings.equals(otherUserPrefs.guiSettings) - && this.addressBookFilePath.equals(otherUserPrefs.addressBookFilePath); + UserPrefs otherUserPrefs = (UserPrefs) other; + return guiSettings.equals(otherUserPrefs.guiSettings) + && addressBookFilePath.equals(otherUserPrefs.addressBookFilePath); } @Override public int hashCode() { - return Objects.hash(this.guiSettings, this.addressBookFilePath); + return Objects.hash(guiSettings, addressBookFilePath); } @Override public String toString() { - return "Gui Settings : " + this.guiSettings - + "\nLocal data file location : " + this.addressBookFilePath; + StringBuilder sb = new StringBuilder(); + sb.append("Gui Settings : " + guiSettings); + sb.append("\nLocal data file location : " + addressBookFilePath); + return sb.toString(); } + } diff --git a/src/main/java/seedu/address/model/person/Address.java b/src/main/java/seedu/address/model/person/Address.java index a0bb0954d72..469a2cc9a1e 100644 --- a/src/main/java/seedu/address/model/person/Address.java +++ b/src/main/java/seedu/address/model/person/Address.java @@ -15,7 +15,7 @@ public class Address { * The first character of the address must not be a whitespace, * otherwise " " (a blank string) becomes a valid input. */ - public static final String VALIDATION_REGEX = "\\S.*"; + public static final String VALIDATION_REGEX = "[^\\s].*"; public final String value; @@ -26,20 +26,20 @@ public class Address { */ public Address(String address) { requireNonNull(address); - checkArgument(isValidAddress(address), Address.MESSAGE_CONSTRAINTS); - this.value = address; + checkArgument(isValidAddress(address), MESSAGE_CONSTRAINTS); + value = address; } /** * Returns true if a given string is a valid email. */ public static boolean isValidAddress(String test) { - return test.matches(Address.VALIDATION_REGEX); + return test.matches(VALIDATION_REGEX); } @Override public String toString() { - return this.value; + return value; } @Override @@ -49,15 +49,17 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof Address otherAddress)) { + if (!(other instanceof Address)) { return false; } - return this.value.equals(otherAddress.value); + Address otherAddress = (Address) other; + return value.equals(otherAddress.value); } @Override public int hashCode() { - return this.value.hashCode(); + return value.hashCode(); } + } diff --git a/src/main/java/seedu/address/model/person/Email.java b/src/main/java/seedu/address/model/person/Email.java index cd88d13c460..c62e512bc29 100644 --- a/src/main/java/seedu/address/model/person/Email.java +++ b/src/main/java/seedu/address/model/person/Email.java @@ -40,20 +40,20 @@ public class Email { */ public Email(String email) { requireNonNull(email); - checkArgument(isValidEmail(email), Email.MESSAGE_CONSTRAINTS); - this.value = email; + checkArgument(isValidEmail(email), MESSAGE_CONSTRAINTS); + value = email; } /** * Returns if a given string is a valid email. */ public static boolean isValidEmail(String test) { - return test.matches(Email.VALIDATION_REGEX); + return test.matches(VALIDATION_REGEX); } @Override public String toString() { - return this.value; + return value; } @Override @@ -63,15 +63,17 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof Email otherEmail)) { + if (!(other instanceof Email)) { return false; } - return this.value.equals(otherEmail.value); + Email otherEmail = (Email) other; + return value.equals(otherEmail.value); } @Override public int hashCode() { - return this.value.hashCode(); + return value.hashCode(); } + } diff --git a/src/main/java/seedu/address/model/person/Name.java b/src/main/java/seedu/address/model/person/Name.java index 068666a36f1..173f15b9b00 100644 --- a/src/main/java/seedu/address/model/person/Name.java +++ b/src/main/java/seedu/address/model/person/Name.java @@ -16,7 +16,7 @@ public class Name { * The first character of the address must not be a whitespace, * otherwise " " (a blank string) becomes a valid input. */ - public static final String VALIDATION_REGEX = "\\p{Alnum}[\\p{Alnum} ]*"; + public static final String VALIDATION_REGEX = "[\\p{Alnum}][\\p{Alnum} ]*"; public final String fullName; @@ -27,21 +27,21 @@ public class Name { */ public Name(String name) { requireNonNull(name); - checkArgument(isValidName(name), Name.MESSAGE_CONSTRAINTS); - this.fullName = name; + checkArgument(isValidName(name), MESSAGE_CONSTRAINTS); + fullName = name; } /** * Returns true if a given string is a valid name. */ public static boolean isValidName(String test) { - return test.matches(Name.VALIDATION_REGEX); + return test.matches(VALIDATION_REGEX); } @Override public String toString() { - return this.fullName; + return fullName; } @Override @@ -51,15 +51,17 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof Name otherName)) { + if (!(other instanceof Name)) { return false; } - return this.fullName.equals(otherName.fullName); + Name otherName = (Name) other; + return fullName.equals(otherName.fullName); } @Override public int hashCode() { - return this.fullName.hashCode(); + return fullName.hashCode(); } + } diff --git a/src/main/java/seedu/address/model/person/NameContainsKeywordsPredicate.java b/src/main/java/seedu/address/model/person/NameContainsKeywordsPredicate.java index c89b2829131..62d19be2977 100644 --- a/src/main/java/seedu/address/model/person/NameContainsKeywordsPredicate.java +++ b/src/main/java/seedu/address/model/person/NameContainsKeywordsPredicate.java @@ -8,7 +8,6 @@ /** * Tests that a {@code Person}'s {@code Name} matches any of the keywords given. - * This is different from Name class; it bundles boolean tests for keyword searches of names instead. */ public class NameContainsKeywordsPredicate implements Predicate { private final List keywords; @@ -19,7 +18,7 @@ public NameContainsKeywordsPredicate(List keywords) { @Override public boolean test(Person person) { - return this.keywords.stream() + return keywords.stream() .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(person.getName().fullName, keyword)); } @@ -30,15 +29,16 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof NameContainsKeywordsPredicate otherNameContainsKeywordsPredicate)) { + if (!(other instanceof NameContainsKeywordsPredicate)) { return false; } - return this.keywords.equals(otherNameContainsKeywordsPredicate.keywords); + NameContainsKeywordsPredicate otherNameContainsKeywordsPredicate = (NameContainsKeywordsPredicate) other; + return keywords.equals(otherNameContainsKeywordsPredicate.keywords); } @Override public String toString() { - return new ToStringBuilder(this).add("keywords", this.keywords).toString(); + return new ToStringBuilder(this).add("keywords", keywords).toString(); } } diff --git a/src/main/java/seedu/address/model/person/Person.java b/src/main/java/seedu/address/model/person/Person.java index ef8cef2a4bc..abe8c46b535 100644 --- a/src/main/java/seedu/address/model/person/Person.java +++ b/src/main/java/seedu/address/model/person/Person.java @@ -38,19 +38,19 @@ public Person(Name name, Phone phone, Email email, Address address, Set tag } public Name getName() { - return this.name; + return name; } public Phone getPhone() { - return this.phone; + return phone; } public Email getEmail() { - return this.email; + return email; } public Address getAddress() { - return this.address; + return address; } /** @@ -58,7 +58,7 @@ public Address getAddress() { * if modification is attempted. */ public Set getTags() { - return Collections.unmodifiableSet(this.tags); + return Collections.unmodifiableSet(tags); } /** @@ -71,7 +71,7 @@ public boolean isSamePerson(Person otherPerson) { } return otherPerson != null - && otherPerson.getName().equals(this.getName()); + && otherPerson.getName().equals(getName()); } /** @@ -85,31 +85,33 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof Person otherPerson)) { + if (!(other instanceof Person)) { return false; } - return this.name.equals(otherPerson.name) - && this.phone.equals(otherPerson.phone) - && this.email.equals(otherPerson.email) - && this.address.equals(otherPerson.address) - && this.tags.equals(otherPerson.tags); + Person otherPerson = (Person) other; + return name.equals(otherPerson.name) + && phone.equals(otherPerson.phone) + && email.equals(otherPerson.email) + && address.equals(otherPerson.address) + && tags.equals(otherPerson.tags); } @Override public int hashCode() { // use this method for custom fields hashing instead of implementing your own - return Objects.hash(this.name, this.phone, this.email, this.address, this.tags); + return Objects.hash(name, phone, email, address, tags); } @Override public String toString() { return new ToStringBuilder(this) - .add("name", this.name) - .add("phone", this.phone) - .add("email", this.email) - .add("address", this.address) - .add("tags", this.tags) + .add("name", name) + .add("phone", phone) + .add("email", email) + .add("address", address) + .add("tags", tags) .toString(); } + } diff --git a/src/main/java/seedu/address/model/person/Phone.java b/src/main/java/seedu/address/model/person/Phone.java index 1ebad4252d2..d733f63d739 100644 --- a/src/main/java/seedu/address/model/person/Phone.java +++ b/src/main/java/seedu/address/model/person/Phone.java @@ -22,20 +22,20 @@ public class Phone { */ public Phone(String phone) { requireNonNull(phone); - checkArgument(isValidPhone(phone), Phone.MESSAGE_CONSTRAINTS); - this.value = phone; + checkArgument(isValidPhone(phone), MESSAGE_CONSTRAINTS); + value = phone; } /** * Returns true if a given string is a valid phone number. */ public static boolean isValidPhone(String test) { - return test.matches(Phone.VALIDATION_REGEX); + return test.matches(VALIDATION_REGEX); } @Override public String toString() { - return this.value; + return value; } @Override @@ -45,15 +45,17 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof Phone otherPhone)) { + if (!(other instanceof Phone)) { return false; } - return this.value.equals(otherPhone.value); + Phone otherPhone = (Phone) other; + return value.equals(otherPhone.value); } @Override public int hashCode() { - return this.value.hashCode(); + return value.hashCode(); } + } diff --git a/src/main/java/seedu/address/model/person/UniquePersonList.java b/src/main/java/seedu/address/model/person/UniquePersonList.java index 9a5c0c2f37f..cc0a68d79f9 100644 --- a/src/main/java/seedu/address/model/person/UniquePersonList.java +++ b/src/main/java/seedu/address/model/person/UniquePersonList.java @@ -14,9 +14,10 @@ /** * A list of persons that enforces uniqueness between its elements and does not allow nulls. * A person is considered unique by comparing using {@code Person#isSamePerson(Person)}. As such, adding and updating of - * persons uses Person#isSamePerson(Person) for equality to ensure that the person being added or updated is - * unique in terms of identity in the UniquePersonList. However, the removal of a person uses Person#equals(Object) to - * ensure the person with exactly the same fields will be removed. + * persons uses Person#isSamePerson(Person) for equality so as to ensure that the person being added or updated is + * unique in terms of identity in the UniquePersonList. However, the removal of a person uses Person#equals(Object) so + * as to ensure that the person with exactly the same fields will be removed. + * * Supports a minimal set of list operations. * * @see Person#isSamePerson(Person) @@ -32,7 +33,7 @@ public class UniquePersonList implements Iterable { */ public boolean contains(Person toCheck) { requireNonNull(toCheck); - return this.internalList.stream().anyMatch(toCheck::isSamePerson); + return internalList.stream().anyMatch(toCheck::isSamePerson); } /** @@ -41,10 +42,10 @@ public boolean contains(Person toCheck) { */ public void add(Person toAdd) { requireNonNull(toAdd); - if (this.contains(toAdd)) { + if (contains(toAdd)) { throw new DuplicatePersonException(); } - this.internalList.add(toAdd); + internalList.add(toAdd); } /** @@ -55,7 +56,7 @@ public void add(Person toAdd) { public void setPerson(Person target, Person editedPerson) { requireAllNonNull(target, editedPerson); - int index = this.internalList.indexOf(target); + int index = internalList.indexOf(target); if (index == -1) { throw new PersonNotFoundException(); } @@ -64,7 +65,7 @@ public void setPerson(Person target, Person editedPerson) { throw new DuplicatePersonException(); } - this.internalList.set(index, editedPerson); + internalList.set(index, editedPerson); } /** @@ -73,14 +74,14 @@ public void setPerson(Person target, Person editedPerson) { */ public void remove(Person toRemove) { requireNonNull(toRemove); - if (!this.internalList.remove(toRemove)) { + if (!internalList.remove(toRemove)) { throw new PersonNotFoundException(); } } public void setPersons(UniquePersonList replacement) { requireNonNull(replacement); - this.internalList.setAll(replacement.internalList); + internalList.setAll(replacement.internalList); } /** @@ -93,19 +94,19 @@ public void setPersons(List persons) { throw new DuplicatePersonException(); } - this.internalList.setAll(persons); + internalList.setAll(persons); } /** * Returns the backing list as an unmodifiable {@code ObservableList}. */ public ObservableList asUnmodifiableObservableList() { - return this.internalUnmodifiableList; + return internalUnmodifiableList; } @Override public Iterator iterator() { - return this.internalList.iterator(); + return internalList.iterator(); } @Override @@ -115,21 +116,22 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof UniquePersonList otherUniquePersonList)) { + if (!(other instanceof UniquePersonList)) { return false; } - return this.internalList.equals(otherUniquePersonList.internalList); + UniquePersonList otherUniquePersonList = (UniquePersonList) other; + return internalList.equals(otherUniquePersonList.internalList); } @Override public int hashCode() { - return this.internalList.hashCode(); + return internalList.hashCode(); } @Override public String toString() { - return this.internalList.toString(); + return internalList.toString(); } /** @@ -139,7 +141,7 @@ private boolean personsAreUnique(List persons) { for (int i = 0; i < persons.size() - 1; i++) { for (int j = i + 1; j < persons.size(); j++) { if (persons.get(i).isSamePerson(persons.get(j))) { - return false; // Adaptive search. + return false; } } } diff --git a/src/main/java/seedu/address/model/tag/Tag.java b/src/main/java/seedu/address/model/tag/Tag.java index ee4bb6dea1f..f1a0d4e233b 100644 --- a/src/main/java/seedu/address/model/tag/Tag.java +++ b/src/main/java/seedu/address/model/tag/Tag.java @@ -7,26 +7,29 @@ * Represents a Tag in the address book. * Guarantees: immutable; name is valid as declared in {@link #isValidTagName(String)} */ -public record Tag(String tagName) { +public class Tag { public static final String MESSAGE_CONSTRAINTS = "Tags names should be alphanumeric"; public static final String VALIDATION_REGEX = "\\p{Alnum}+"; + public final String tagName; + /** * Constructs a {@code Tag}. * * @param tagName A valid tag name. */ - public Tag { + public Tag(String tagName) { requireNonNull(tagName); - checkArgument(isValidTagName(tagName), Tag.MESSAGE_CONSTRAINTS); + checkArgument(isValidTagName(tagName), MESSAGE_CONSTRAINTS); + this.tagName = tagName; } /** * Returns true if a given string is a valid tag name. */ public static boolean isValidTagName(String test) { - return test.matches(Tag.VALIDATION_REGEX); + return test.matches(VALIDATION_REGEX); } @Override @@ -36,17 +39,24 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof Tag otherTag)) { + if (!(other instanceof Tag)) { return false; } - return this.tagName.equals(otherTag.tagName); + Tag otherTag = (Tag) other; + return tagName.equals(otherTag.tagName); + } + + @Override + public int hashCode() { + return tagName.hashCode(); } /** * Format state as text for viewing. */ public String toString() { - return '[' + this.tagName + ']'; + return '[' + tagName + ']'; } + } diff --git a/src/main/java/seedu/address/model/util/SampleDataUtil.java b/src/main/java/seedu/address/model/util/SampleDataUtil.java index bab365f8586..1806da4facf 100644 --- a/src/main/java/seedu/address/model/util/SampleDataUtil.java +++ b/src/main/java/seedu/address/model/util/SampleDataUtil.java @@ -42,7 +42,7 @@ public static Person[] getSamplePersons() { public static ReadOnlyAddressBook getSampleAddressBook() { AddressBook sampleAb = new AddressBook(); - for (Person samplePerson : SampleDataUtil.getSamplePersons()) { + for (Person samplePerson : getSamplePersons()) { sampleAb.addPerson(samplePerson); } return sampleAb; @@ -52,6 +52,9 @@ public static ReadOnlyAddressBook getSampleAddressBook() { * Returns a tag set containing the list of strings given. */ public static Set getTagSet(String... strings) { - return Arrays.stream(strings).map(Tag::new).collect(Collectors.toSet()); + return Arrays.stream(strings) + .map(Tag::new) + .collect(Collectors.toSet()); } + } diff --git a/src/main/java/seedu/address/storage/JsonAdaptedPerson.java b/src/main/java/seedu/address/storage/JsonAdaptedPerson.java index ea7e2b7266a..bd1ca0f56c8 100644 --- a/src/main/java/seedu/address/storage/JsonAdaptedPerson.java +++ b/src/main/java/seedu/address/storage/JsonAdaptedPerson.java @@ -4,6 +4,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.stream.Collectors; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; @@ -55,7 +56,7 @@ public JsonAdaptedPerson(Person source) { address = source.getAddress().value; tags.addAll(source.getTags().stream() .map(JsonAdaptedTag::new) - .toList()); + .collect(Collectors.toList())); } /** @@ -65,47 +66,44 @@ public JsonAdaptedPerson(Person source) { */ public Person toModelType() throws IllegalValueException { final List personTags = new ArrayList<>(); - for (JsonAdaptedTag tag : this.tags) { + for (JsonAdaptedTag tag : tags) { personTags.add(tag.toModelType()); } - if (this.name == null) { - throw new IllegalValueException(String.format( - JsonAdaptedPerson.MISSING_FIELD_MESSAGE_FORMAT, Name.class.getSimpleName())); + if (name == null) { + throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Name.class.getSimpleName())); } - if (!Name.isValidName(this.name)) { + if (!Name.isValidName(name)) { throw new IllegalValueException(Name.MESSAGE_CONSTRAINTS); } - final Name modelName = new Name(this.name); + final Name modelName = new Name(name); if (phone == null) { - throw new IllegalValueException( - String.format(JsonAdaptedPerson.MISSING_FIELD_MESSAGE_FORMAT, Phone.class.getSimpleName())); + throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Phone.class.getSimpleName())); } - if (!Phone.isValidPhone(this.phone)) { + if (!Phone.isValidPhone(phone)) { throw new IllegalValueException(Phone.MESSAGE_CONSTRAINTS); } - final Phone modelPhone = new Phone(this.phone); + final Phone modelPhone = new Phone(phone); - if (this.email == null) { - throw new IllegalValueException( - String.format(JsonAdaptedPerson.MISSING_FIELD_MESSAGE_FORMAT, Email.class.getSimpleName())); + if (email == null) { + throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Email.class.getSimpleName())); } - if (!Email.isValidEmail(this.email)) { + if (!Email.isValidEmail(email)) { throw new IllegalValueException(Email.MESSAGE_CONSTRAINTS); } - final Email modelEmail = new Email(this.email); + final Email modelEmail = new Email(email); - if (this.address == null) { - throw new IllegalValueException( - String.format(JsonAdaptedPerson.MISSING_FIELD_MESSAGE_FORMAT, Address.class.getSimpleName())); + if (address == null) { + throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Address.class.getSimpleName())); } - if (!Address.isValidAddress(this.address)) { + if (!Address.isValidAddress(address)) { throw new IllegalValueException(Address.MESSAGE_CONSTRAINTS); } - final Address modelAddress = new Address(this.address); + final Address modelAddress = new Address(address); final Set modelTags = new HashSet<>(personTags); return new Person(modelName, modelPhone, modelEmail, modelAddress, modelTags); } + } diff --git a/src/main/java/seedu/address/storage/JsonAdaptedTag.java b/src/main/java/seedu/address/storage/JsonAdaptedTag.java index b66b06f5049..0df22bdb754 100644 --- a/src/main/java/seedu/address/storage/JsonAdaptedTag.java +++ b/src/main/java/seedu/address/storage/JsonAdaptedTag.java @@ -25,12 +25,12 @@ public JsonAdaptedTag(String tagName) { * Converts a given {@code Tag} into this class for Jackson use. */ public JsonAdaptedTag(Tag source) { - this.tagName = source.tagName(); + tagName = source.tagName; } @JsonValue public String getTagName() { - return this.tagName; + return tagName; } /** @@ -39,9 +39,10 @@ public String getTagName() { * @throws IllegalValueException if there were any data constraints violated in the adapted tag. */ public Tag toModelType() throws IllegalValueException { - if (!Tag.isValidTagName(this.tagName)) { + if (!Tag.isValidTagName(tagName)) { throw new IllegalValueException(Tag.MESSAGE_CONSTRAINTS); } - return new Tag(this.tagName); + return new Tag(tagName); } + } diff --git a/src/main/java/seedu/address/storage/JsonAddressBookStorage.java b/src/main/java/seedu/address/storage/JsonAddressBookStorage.java index 055c3936ec3..41e06f264e1 100644 --- a/src/main/java/seedu/address/storage/JsonAddressBookStorage.java +++ b/src/main/java/seedu/address/storage/JsonAddressBookStorage.java @@ -21,19 +21,19 @@ public class JsonAddressBookStorage implements AddressBookStorage { private static final Logger logger = LogsCenter.getLogger(JsonAddressBookStorage.class); - private final Path filePath; + private Path filePath; public JsonAddressBookStorage(Path filePath) { this.filePath = filePath; } public Path getAddressBookFilePath() { - return this.filePath; + return filePath; } @Override public Optional readAddressBook() throws DataLoadingException { - return readAddressBook(this.filePath); + return readAddressBook(filePath); } /** @@ -47,27 +47,21 @@ public Optional readAddressBook(Path filePath) throws DataL Optional jsonAddressBook = JsonUtil.readJsonFile( filePath, JsonSerializableAddressBook.class); - if (jsonAddressBook.isEmpty()) { + if (!jsonAddressBook.isPresent()) { return Optional.empty(); } try { return Optional.of(jsonAddressBook.get().toModelType()); } catch (IllegalValueException ive) { - JsonAddressBookStorage.logger.info("Illegal values found in " + filePath + ": " + ive.getMessage()); + logger.info("Illegal values found in " + filePath + ": " + ive.getMessage()); throw new DataLoadingException(ive); } } - /** - * Saves to {@link #filePath} instead of custom filepath in the other overloaded constructor below. - * - * @param addressBook cannot be null. - * @throws IOException exception if file alongside any missing parent directories cannot be created, or not savable. - */ @Override public void saveAddressBook(ReadOnlyAddressBook addressBook) throws IOException { - this.saveAddressBook(addressBook, this.filePath); + saveAddressBook(addressBook, filePath); } /** @@ -82,4 +76,5 @@ public void saveAddressBook(ReadOnlyAddressBook addressBook, Path filePath) thro FileUtil.createIfMissing(filePath); JsonUtil.saveJsonFile(new JsonSerializableAddressBook(addressBook), filePath); } + } diff --git a/src/main/java/seedu/address/storage/JsonSerializableAddressBook.java b/src/main/java/seedu/address/storage/JsonSerializableAddressBook.java index 4d5ad354473..5efd834091d 100644 --- a/src/main/java/seedu/address/storage/JsonSerializableAddressBook.java +++ b/src/main/java/seedu/address/storage/JsonSerializableAddressBook.java @@ -2,6 +2,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; @@ -36,7 +37,7 @@ public JsonSerializableAddressBook(@JsonProperty("persons") List readUserPrefs() throws DataLoadingException { - return readUserPrefs(this.filePath); + return readUserPrefs(filePath); } /** @@ -41,6 +41,7 @@ public Optional readUserPrefs(Path prefsFilePath) throws DataLoadingE @Override public void saveUserPrefs(ReadOnlyUserPrefs userPrefs) throws IOException { - JsonUtil.saveJsonFile(userPrefs, this.filePath); + JsonUtil.saveJsonFile(userPrefs, filePath); } + } diff --git a/src/main/java/seedu/address/storage/Storage.java b/src/main/java/seedu/address/storage/Storage.java index 93968155b86..9fba0c7a1d6 100644 --- a/src/main/java/seedu/address/storage/Storage.java +++ b/src/main/java/seedu/address/storage/Storage.java @@ -28,4 +28,5 @@ public interface Storage extends AddressBookStorage, UserPrefsStorage { @Override void saveAddressBook(ReadOnlyAddressBook addressBook) throws IOException; + } diff --git a/src/main/java/seedu/address/storage/StorageManager.java b/src/main/java/seedu/address/storage/StorageManager.java index fcf2484cdbc..8b84a9024d5 100644 --- a/src/main/java/seedu/address/storage/StorageManager.java +++ b/src/main/java/seedu/address/storage/StorageManager.java @@ -17,8 +17,8 @@ public class StorageManager implements Storage { private static final Logger logger = LogsCenter.getLogger(StorageManager.class); - private final AddressBookStorage addressBookStorage; - private final UserPrefsStorage userPrefsStorage; + private AddressBookStorage addressBookStorage; + private UserPrefsStorage userPrefsStorage; /** * Creates a {@code StorageManager} with the given {@code AddressBookStorage} and {@code UserPrefStorage}. @@ -32,17 +32,17 @@ public StorageManager(AddressBookStorage addressBookStorage, UserPrefsStorage us @Override public Path getUserPrefsFilePath() { - return this.userPrefsStorage.getUserPrefsFilePath(); + return userPrefsStorage.getUserPrefsFilePath(); } @Override public Optional readUserPrefs() throws DataLoadingException { - return this.userPrefsStorage.readUserPrefs(); + return userPrefsStorage.readUserPrefs(); } @Override public void saveUserPrefs(ReadOnlyUserPrefs userPrefs) throws IOException { - this.userPrefsStorage.saveUserPrefs(userPrefs); + userPrefsStorage.saveUserPrefs(userPrefs); } @@ -50,28 +50,29 @@ public void saveUserPrefs(ReadOnlyUserPrefs userPrefs) throws IOException { @Override public Path getAddressBookFilePath() { - return this.addressBookStorage.getAddressBookFilePath(); + return addressBookStorage.getAddressBookFilePath(); } @Override public Optional readAddressBook() throws DataLoadingException { - return this.readAddressBook(this.addressBookStorage.getAddressBookFilePath()); + return readAddressBook(addressBookStorage.getAddressBookFilePath()); } @Override public Optional readAddressBook(Path filePath) throws DataLoadingException { - StorageManager.logger.fine("Attempting to read data from file: " + filePath); - return this.addressBookStorage.readAddressBook(filePath); + logger.fine("Attempting to read data from file: " + filePath); + return addressBookStorage.readAddressBook(filePath); } @Override public void saveAddressBook(ReadOnlyAddressBook addressBook) throws IOException { - this.saveAddressBook(addressBook, this.addressBookStorage.getAddressBookFilePath()); + saveAddressBook(addressBook, addressBookStorage.getAddressBookFilePath()); } @Override public void saveAddressBook(ReadOnlyAddressBook addressBook, Path filePath) throws IOException { - StorageManager.logger.fine("Attempting to write to data file: " + filePath); - this.addressBookStorage.saveAddressBook(addressBook, filePath); + logger.fine("Attempting to write to data file: " + filePath); + addressBookStorage.saveAddressBook(addressBook, filePath); } + } diff --git a/src/main/java/seedu/address/storage/UserPrefsStorage.java b/src/main/java/seedu/address/storage/UserPrefsStorage.java index 4451edd541a..e94ca422ea8 100644 --- a/src/main/java/seedu/address/storage/UserPrefsStorage.java +++ b/src/main/java/seedu/address/storage/UserPrefsStorage.java @@ -32,4 +32,5 @@ public interface UserPrefsStorage { * @throws IOException if there was any problem writing to the file. */ void saveUserPrefs(ReadOnlyUserPrefs userPrefs) throws IOException; + } diff --git a/src/main/java/seedu/address/ui/PersonCard.java b/src/main/java/seedu/address/ui/PersonCard.java index 49a6c208edd..094c42cda82 100644 --- a/src/main/java/seedu/address/ui/PersonCard.java +++ b/src/main/java/seedu/address/ui/PersonCard.java @@ -53,7 +53,7 @@ public PersonCard(Person person, int displayedIndex) { address.setText(person.getAddress().value); email.setText(person.getEmail().value); person.getTags().stream() - .sorted(Comparator.comparing(tag -> tag.tagName())) - .forEach(tag -> tags.getChildren().add(new Label(tag.tagName()))); + .sorted(Comparator.comparing(tag -> tag.tagName)) + .forEach(tag -> tags.getChildren().add(new Label(tag.tagName))); } } diff --git a/src/test/java/seedu/address/commons/core/VersionTest.java b/src/test/java/seedu/address/commons/core/VersionTest.java index 76326a16994..495cd231554 100644 --- a/src/test/java/seedu/address/commons/core/VersionTest.java +++ b/src/test/java/seedu/address/commons/core/VersionTest.java @@ -24,9 +24,9 @@ public void versionParsing_wrongVersionString_throwIllegalArgumentException() { public void versionConstructor_correctParameter_valueAsExpected() { Version version = new Version(19, 10, 20, true); - assertEquals(19, version.major()); - assertEquals(10, version.minor()); - assertEquals(20, version.patch()); + assertEquals(19, version.getMajor()); + assertEquals(10, version.getMinor()); + assertEquals(20, version.getPatch()); assertEquals(true, version.isEarlyAccess()); } diff --git a/src/test/java/seedu/address/testutil/PersonUtil.java b/src/test/java/seedu/address/testutil/PersonUtil.java index 8f7e8cf3514..90849945183 100644 --- a/src/test/java/seedu/address/testutil/PersonUtil.java +++ b/src/test/java/seedu/address/testutil/PersonUtil.java @@ -35,7 +35,7 @@ public static String getPersonDetails(Person person) { sb.append(PREFIX_EMAIL + person.getEmail().value + " "); sb.append(PREFIX_ADDRESS + person.getAddress().value + " "); person.getTags().stream().forEach( - s -> sb.append(PREFIX_TAG + s.tagName() + " ") + s -> sb.append(PREFIX_TAG + s.tagName + " ") ); return sb.toString(); } @@ -54,7 +54,7 @@ public static String getEditPersonDescriptorDetails(EditPersonDescriptor descrip if (tags.isEmpty()) { sb.append(PREFIX_TAG); } else { - tags.forEach(s -> sb.append(PREFIX_TAG).append(s.tagName()).append(" ")); + tags.forEach(s -> sb.append(PREFIX_TAG).append(s.tagName).append(" ")); } } return sb.toString(); From 2c56fb686b9752af98820e4944710f3b2c6b9dab Mon Sep 17 00:00:00 2001 From: DESU-CLUB Date: Thu, 6 Mar 2025 00:51:55 +0800 Subject: [PATCH 010/296] docs: Add Warren's photo to docs --- docs/images/desuclub.png | Bin 0 -> 98580 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/desuclub.png diff --git a/docs/images/desuclub.png b/docs/images/desuclub.png new file mode 100644 index 0000000000000000000000000000000000000000..b5a50b8dea598841450f96294955e49f3e110dd4 GIT binary patch literal 98580 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 z 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 literal 0 HcmV?d00001 From be98797ff1fcf8587e56e664dcbf96ad7a0bd3a6 Mon Sep 17 00:00:00 2001 From: DESU-CLUB Date: Thu, 6 Mar 2025 02:58:01 +0800 Subject: [PATCH 011/296] chore: Update README.md to TalentMatch --- README.md | 54 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 44 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 16208adb9b6..c9784a0f231 100644 --- a/README.md +++ b/README.md @@ -2,13 +2,47 @@ ![Ui](docs/images/Ui.png) -* This is **a sample project for Software Engineering (SE) students**.
    - Example usages: - * as a starting point of a course project (as opposed to writing everything from scratch) - * as a case study -* The project simulates an ongoing software project for a desktop application (called _AddressBook_) used for managing contact details. - * It is **written in OOP fashion**. It provides a **reasonably well-written** code base **bigger** (around 6 KLoC) than what students usually write in beginner-level SE modules, without being overwhelmingly big. - * It comes with a **reasonable level of user and developer documentation**. -* It is named `AddressBook Level 3` (`AB3` for short) because it was initially created as a part of a series of `AddressBook` projects (`Level 1`, `Level 2`, `Level 3` ...). -* For the detailed documentation of this project, see the **[Address Book Product Website](https://se-education.org/addressbook-level3)**. -* This project is a **part of the se-education.org** initiative. If you would like to contribute code to this project, see [se-education.org](https://se-education.org/#contributing-to-se-edu) for more info. +# ✨ TalentMatch ✨ + +> 🚀 **Streamlining recruitment for SMEs targeting university talent** + +## 🎯 Target Audience + +Recruiters at SMEs focusing on recruitment of students for internships and entry-level full time roles + +--- + +## 💡 Value Proposition + +TalentMatch helps SME recruiters efficiently manage university candidate pipelines without the complexity of enterprise HR suites. This standalone desktop app streamlines: + +* ✅ **Candidate skill matching** +* 📅 **Availability tracking** +* 📊 **Recruitment status updates** + +Perfect for recruiters hiring interns and entry-level roles while keeping infrastructure minimal and costs low! + +--- + +## 🔍 About the Project + +* 💻 A **powerful desktop application** built with modern software engineering principles +* 🏗️ **Clean, object-oriented codebase** that's comprehensive yet approachable +* 📚 **Thorough documentation** for both users and developers + +
    +📋 Project Origins +This project extends the AddressBook Level 3 (AB3) application, originally created as a software engineering learning tool. +
    + +## 🔗 Resources + +* [TalentMatch Product Website](https://ay2425s2-cs2103t-t08-4.github.io/tp/UserGuide.html) - Full documentation and guides +* [Issue Tracker](https://github.com/AY2425S2-CS2103T-T08-4/tp/issues) - Report bugs or request features +* [Contributing Guide](https://ay2425s2-cs2103t-t08-4.github.io/tp/DeveloperGuide.html) - How to help improve TalentMatch + +--- + +### 👥 Contact Us + +Have questions? Reach out to our team in [GitHub Issues](https://github.com/AY2425S2-CS2103T-T08-4/tp/issues) From bada58d5b1c4c2962dbe48832d8e103bebf47c13 Mon Sep 17 00:00:00 2001 From: DESU-CLUB Date: Thu, 6 Mar 2025 13:06:09 +0800 Subject: [PATCH 012/296] docs: Add self intro to AboutUs.md --- docs/AboutUs.md | 18 +++++------------- docs/team/desuclub.md | 10 ++++++++++ 2 files changed, 15 insertions(+), 13 deletions(-) create mode 100644 docs/team/desuclub.md diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 8cf4ab68e9e..73fbaeebe71 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -40,22 +40,14 @@ You can reach us at the email `seer[at]comp.nus.edu.sg` * Role: Developer * Responsibilities: Data -### Jean Doe +### Warren Low - + -[[github](http://github.com/johndoe)] -[[portfolio](team/johndoe.md)] +[[github](http://github.com/DESU-CLUB)] +[[portfolio](team/desuclub.md)] * Role: Developer -* Responsibilities: Dev Ops + Threading - -### James Doe - - +* Responsibilities: Dev Ops -[[github](http://github.com/johndoe)] -[[portfolio](team/johndoe.md)] -* Role: Developer -* Responsibilities: UI diff --git a/docs/team/desuclub.md b/docs/team/desuclub.md new file mode 100644 index 00000000000..79c4e4bbc33 --- /dev/null +++ b/docs/team/desuclub.md @@ -0,0 +1,10 @@ +--- + layout: default.md + title: "desuclub's Project Portfolio Page" +--- + +### Project: TalentMatch + +TalentMatch is a desktop application designed to help users manage contact information efficiently. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and we will be implementing it over the course of the next few weeks. + +* _{you can add/remove categories in the list above}_ From 5830644592e79b70bcb117b9a690a778fa9525ca Mon Sep 17 00:00:00 2001 From: Timothy-Ho0203 <156638648+Timothy-Ho0203@users.noreply.github.com> Date: Thu, 6 Mar 2025 15:32:40 +0800 Subject: [PATCH 013/296] docs: Update AboutUs.md --- docs/AboutUs.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 8cf4ab68e9e..45025d7557e 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -31,11 +31,11 @@ You can reach us at the email `seer[at]comp.nus.edu.sg` * Role: Team Lead * Responsibilities: UI -### Johnny Doe +### Timothy Josef Ho - + -[[github](http://github.com/johndoe)] [[portfolio](team/johndoe.md)] +[[github](https://github.com/Timothy-Ho0203)] [[portfolio](https://linkedin.com/in/timothy-josef-ho)] * Role: Developer * Responsibilities: Data From 2c69694f6996b6d12641cef0a51b8b6ae4236cec Mon Sep 17 00:00:00 2001 From: Mingyuan03 Date: Thu, 6 Mar 2025 17:33:50 +0800 Subject: [PATCH 014/296] Add basic remark command --- .../seedu/address/commons/util/FileUtil.java | 2 +- .../java/seedu/address/logic/Messages.java | 2 + .../address/logic/commands/EditCommand.java | 21 ++++-- .../address/logic/commands/RemarkCommand.java | 69 +++++++++++++++++++ .../commands/exceptions/CommandException.java | 2 + .../logic/parser/AddCommandParser.java | 21 ++---- .../logic/parser/AddressBookParser.java | 55 +++++---------- .../seedu/address/logic/parser/CliSyntax.java | 2 +- .../address/logic/parser/ParserUtil.java | 11 +-- .../logic/parser/RemarkCommandParser.java | 27 ++++++++ .../seedu/address/model/person/Address.java | 2 +- .../seedu/address/model/person/Person.java | 14 +++- .../seedu/address/model/person/Remark.java | 50 ++++++++++++++ .../address/model/util/SampleDataUtil.java | 28 ++++---- .../address/storage/JsonAdaptedPerson.java | 20 +++--- .../java/seedu/address/ui/PersonCard.java | 3 + src/main/resources/view/PersonListCard.fxml | 1 + .../logic/commands/CommandTestUtil.java | 3 + .../logic/commands/RemarkCommandTest.java | 56 +++++++++++++++ .../logic/parser/RemarkCommandParserTest.java | 33 +++++++++ .../storage/JsonAdaptedPersonTest.java | 17 ++--- .../testutil/EditPersonDescriptorBuilder.java | 15 ++-- .../seedu/address/testutil/PersonBuilder.java | 22 ++++-- .../seedu/address/testutil/PersonUtil.java | 10 ++- .../address/testutil/TypicalPersons.java | 13 ++-- 25 files changed, 375 insertions(+), 124 deletions(-) create mode 100644 src/main/java/seedu/address/logic/commands/RemarkCommand.java create mode 100644 src/main/java/seedu/address/logic/parser/RemarkCommandParser.java create mode 100644 src/main/java/seedu/address/model/person/Remark.java create mode 100644 src/test/java/seedu/address/logic/commands/RemarkCommandTest.java create mode 100644 src/test/java/seedu/address/logic/parser/RemarkCommandParserTest.java diff --git a/src/main/java/seedu/address/commons/util/FileUtil.java b/src/main/java/seedu/address/commons/util/FileUtil.java index b1e2767cdd9..e38974eafa3 100644 --- a/src/main/java/seedu/address/commons/util/FileUtil.java +++ b/src/main/java/seedu/address/commons/util/FileUtil.java @@ -18,7 +18,7 @@ public static boolean isFileExists(Path file) { } /** - * Returns true if {@code path} can be converted into a {@code Path} via {@link Paths#get(String)}, + * Returns true if {@code path} can be converted into a {@code Path} via {@link Paths#get(String, String...)}, * otherwise returns false. * @param path A string representing the file path. Cannot be null. */ diff --git a/src/main/java/seedu/address/logic/Messages.java b/src/main/java/seedu/address/logic/Messages.java index ecd32c31b53..ff31f33aefb 100644 --- a/src/main/java/seedu/address/logic/Messages.java +++ b/src/main/java/seedu/address/logic/Messages.java @@ -43,6 +43,8 @@ public static String format(Person person) { .append(person.getEmail()) .append("; Address: ") .append(person.getAddress()) + .append("; Remark: ") + .append(person.getRemark()) .append("; Tags: "); person.getTags().forEach(builder::append); return builder.toString(); diff --git a/src/main/java/seedu/address/logic/commands/EditCommand.java b/src/main/java/seedu/address/logic/commands/EditCommand.java index 4b581c7331e..dac09db9a2a 100644 --- a/src/main/java/seedu/address/logic/commands/EditCommand.java +++ b/src/main/java/seedu/address/logic/commands/EditCommand.java @@ -21,11 +21,7 @@ import seedu.address.logic.Messages; import seedu.address.logic.commands.exceptions.CommandException; import seedu.address.model.Model; -import seedu.address.model.person.Address; -import seedu.address.model.person.Email; -import seedu.address.model.person.Name; -import seedu.address.model.person.Person; -import seedu.address.model.person.Phone; +import seedu.address.model.person.*; import seedu.address.model.tag.Tag; /** @@ -99,9 +95,10 @@ private static Person createEditedPerson(Person personToEdit, EditPersonDescript Phone updatedPhone = editPersonDescriptor.getPhone().orElse(personToEdit.getPhone()); Email updatedEmail = editPersonDescriptor.getEmail().orElse(personToEdit.getEmail()); Address updatedAddress = editPersonDescriptor.getAddress().orElse(personToEdit.getAddress()); + Remark updatedRemark = editPersonDescriptor.getRemark().orElse(personToEdit.getRemark()); Set updatedTags = editPersonDescriptor.getTags().orElse(personToEdit.getTags()); - return new Person(updatedName, updatedPhone, updatedEmail, updatedAddress, updatedTags); + return new Person(updatedName, updatedPhone, updatedEmail, updatedAddress, updatedRemark, updatedTags); } @Override @@ -137,6 +134,7 @@ public static class EditPersonDescriptor { private Phone phone; private Email email; private Address address; + private Remark remark; private Set tags; public EditPersonDescriptor() {} @@ -150,6 +148,7 @@ public EditPersonDescriptor(EditPersonDescriptor toCopy) { setPhone(toCopy.phone); setEmail(toCopy.email); setAddress(toCopy.address); + setRemark(toCopy.remark); setTags(toCopy.tags); } @@ -192,6 +191,14 @@ public Optional
    getAddress() { return Optional.ofNullable(address); } + public void setRemark(Remark remark) { + this.remark = remark; + } + + public Optional getRemark() { + return Optional.ofNullable(remark); + } + /** * Sets {@code tags} to this object's {@code tags}. * A defensive copy of {@code tags} is used internally. @@ -225,6 +232,7 @@ public boolean equals(Object other) { && Objects.equals(phone, otherEditPersonDescriptor.phone) && Objects.equals(email, otherEditPersonDescriptor.email) && Objects.equals(address, otherEditPersonDescriptor.address) + && Objects.equals(remark, otherEditPersonDescriptor.remark) && Objects.equals(tags, otherEditPersonDescriptor.tags); } @@ -235,6 +243,7 @@ public String toString() { .add("phone", phone) .add("email", email) .add("address", address) + .add("remark", remark) .add("tags", tags) .toString(); } diff --git a/src/main/java/seedu/address/logic/commands/RemarkCommand.java b/src/main/java/seedu/address/logic/commands/RemarkCommand.java new file mode 100644 index 00000000000..1a89d45d8db --- /dev/null +++ b/src/main/java/seedu/address/logic/commands/RemarkCommand.java @@ -0,0 +1,69 @@ +package seedu.address.logic.commands; + +import seedu.address.commons.core.index.Index; +import seedu.address.logic.Messages; +import seedu.address.logic.commands.exceptions.CommandException; +import seedu.address.model.Model; +import seedu.address.model.person.Person; +import seedu.address.model.person.Remark; + +import java.util.List; + +import static seedu.address.commons.util.CollectionUtil.requireAllNonNull; + +public class RemarkCommand extends Command { + public static final String COMMAND_WORD = "remark"; + public static final String MESSAGE_USAGE = RemarkCommand.COMMAND_WORD + + ": Edits the remark of the person identified " + + "by the index number used in the last person listing. " + + "Existing remark will be overwritten by the input.\n" + + "Parameters: INDEX (must be a positive integer) " + + "r/ [REMARK] \n" + + "Example: " + RemarkCommand.COMMAND_WORD + " 1 " + + "r/ Likes to swim."; + // public static final String MESSAGE_NOT_FULLY_IMPLEMENTED_YET = "Remark command not implemented fully yet"; + // public static final String MESSAGE_ARGUMENTS = "Index: %1$d, Remark: %2$s"; + public static final String MESSAGE_ADD_REMARK_SUCCESS = "Added remark to Person: %1$s"; + public static final String MESSAGE_DELETE_REMARK_SUCCESS = "Removed remark from Person: %1$s"; + + private final Index targetIndex; + private final String targetRemark; + + public RemarkCommand(Index newIndex, String newRemark) { + requireAllNonNull(newIndex, newRemark); + this.targetIndex = newIndex; + this.targetRemark = newRemark; + } + + @Override + public CommandResult execute(Model model) throws CommandException { + List lastShownList = model.getFilteredPersonList(); + if (targetIndex.getZeroBased() >= lastShownList.size()) { + throw new CommandException(Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX); + } + Person personToEdit = lastShownList.get(targetIndex.getZeroBased()); + Person editedPerson = new Person( + personToEdit.getName(), personToEdit.getPhone(), personToEdit.getEmail(), + personToEdit.getAddress(), personToEdit.getRemark(), personToEdit.getTags() + ); + model.setPerson(personToEdit, editedPerson); + model.updateFilteredPersonList(Model.PREDICATE_SHOW_ALL_PERSONS); + return new CommandResult(generateSuccessMessage(editedPerson)); + } + + private String generateSuccessMessage(Person personToEdit) { + String successMessage = !targetRemark.isEmpty() ? MESSAGE_ADD_REMARK_SUCCESS : MESSAGE_DELETE_REMARK_SUCCESS; + return String.format(successMessage, Messages.format(personToEdit)); + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + if (!(other instanceof RemarkCommand e)) { + return false; + } + return this.targetIndex.equals(e.targetIndex) && this.targetRemark.equals(e.targetRemark); + } +} diff --git a/src/main/java/seedu/address/logic/commands/exceptions/CommandException.java b/src/main/java/seedu/address/logic/commands/exceptions/CommandException.java index a16bd14f2cd..f44c0c19186 100644 --- a/src/main/java/seedu/address/logic/commands/exceptions/CommandException.java +++ b/src/main/java/seedu/address/logic/commands/exceptions/CommandException.java @@ -1,5 +1,7 @@ package seedu.address.logic.commands.exceptions; +import seedu.address.logic.commands.Command; + /** * Represents an error which occurs during execution of a {@link Command}. */ diff --git a/src/main/java/seedu/address/logic/parser/AddCommandParser.java b/src/main/java/seedu/address/logic/parser/AddCommandParser.java index 4ff1a97ed77..63245f7c09a 100644 --- a/src/main/java/seedu/address/logic/parser/AddCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/AddCommandParser.java @@ -1,22 +1,14 @@ package seedu.address.logic.parser; import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; -import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS; -import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; -import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; -import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE; -import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; +import static seedu.address.logic.parser.CliSyntax.*; import java.util.Set; import java.util.stream.Stream; import seedu.address.logic.commands.AddCommand; import seedu.address.logic.parser.exceptions.ParseException; -import seedu.address.model.person.Address; -import seedu.address.model.person.Email; -import seedu.address.model.person.Name; -import seedu.address.model.person.Person; -import seedu.address.model.person.Phone; +import seedu.address.model.person.*; import seedu.address.model.tag.Tag; /** @@ -31,21 +23,22 @@ public class AddCommandParser implements Parser { */ public AddCommand parse(String args) throws ParseException { ArgumentMultimap argMultimap = - ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS, PREFIX_TAG); + ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS, PREFIX_REMARK, PREFIX_TAG); - if (!arePrefixesPresent(argMultimap, PREFIX_NAME, PREFIX_ADDRESS, PREFIX_PHONE, PREFIX_EMAIL) + if (!arePrefixesPresent(argMultimap, PREFIX_NAME, PREFIX_ADDRESS, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_REMARK) || !argMultimap.getPreamble().isEmpty()) { throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE)); } - argMultimap.verifyNoDuplicatePrefixesFor(PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS); + argMultimap.verifyNoDuplicatePrefixesFor(PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS, PREFIX_REMARK); Name name = ParserUtil.parseName(argMultimap.getValue(PREFIX_NAME).get()); Phone phone = ParserUtil.parsePhone(argMultimap.getValue(PREFIX_PHONE).get()); Email email = ParserUtil.parseEmail(argMultimap.getValue(PREFIX_EMAIL).get()); Address address = ParserUtil.parseAddress(argMultimap.getValue(PREFIX_ADDRESS).get()); + Remark remark = ParserUtil.parseRemark(argMultimap.getValue(PREFIX_REMARK).get()); Set tagList = ParserUtil.parseTags(argMultimap.getAllValues(PREFIX_TAG)); - Person person = new Person(name, phone, email, address, tagList); + Person person = new Person(name, phone, email, address, remark, tagList); return new AddCommand(person); } diff --git a/src/main/java/seedu/address/logic/parser/AddressBookParser.java b/src/main/java/seedu/address/logic/parser/AddressBookParser.java index 3149ee07e0b..f51695cb658 100644 --- a/src/main/java/seedu/address/logic/parser/AddressBookParser.java +++ b/src/main/java/seedu/address/logic/parser/AddressBookParser.java @@ -8,15 +8,7 @@ import java.util.regex.Pattern; import seedu.address.commons.core.LogsCenter; -import seedu.address.logic.commands.AddCommand; -import seedu.address.logic.commands.ClearCommand; -import seedu.address.logic.commands.Command; -import seedu.address.logic.commands.DeleteCommand; -import seedu.address.logic.commands.EditCommand; -import seedu.address.logic.commands.ExitCommand; -import seedu.address.logic.commands.FindCommand; -import seedu.address.logic.commands.HelpCommand; -import seedu.address.logic.commands.ListCommand; +import seedu.address.logic.commands.*; import seedu.address.logic.parser.exceptions.ParseException; /** @@ -51,36 +43,21 @@ public Command parseCommand(String userInput) throws ParseException { // Lower level log messages are used sparingly to minimize noise in the code. logger.fine("Command word: " + commandWord + "; Arguments: " + arguments); - switch (commandWord) { - - case AddCommand.COMMAND_WORD: - return new AddCommandParser().parse(arguments); - - case EditCommand.COMMAND_WORD: - return new EditCommandParser().parse(arguments); - - case DeleteCommand.COMMAND_WORD: - return new DeleteCommandParser().parse(arguments); - - case ClearCommand.COMMAND_WORD: - return new ClearCommand(); - - case FindCommand.COMMAND_WORD: - return new FindCommandParser().parse(arguments); - - case ListCommand.COMMAND_WORD: - return new ListCommand(); - - case ExitCommand.COMMAND_WORD: - return new ExitCommand(); - - case HelpCommand.COMMAND_WORD: - return new HelpCommand(); - - default: - logger.finer("This user input caused a ParseException: " + userInput); - throw new ParseException(MESSAGE_UNKNOWN_COMMAND); - } + return switch (commandWord) { + case AddCommand.COMMAND_WORD -> new AddCommandParser().parse(arguments); + case EditCommand.COMMAND_WORD -> new EditCommandParser().parse(arguments); + case DeleteCommand.COMMAND_WORD -> new DeleteCommandParser().parse(arguments); + case ClearCommand.COMMAND_WORD -> new ClearCommand(); + case FindCommand.COMMAND_WORD -> new FindCommandParser().parse(arguments); + case ListCommand.COMMAND_WORD -> new ListCommand(); + case ExitCommand.COMMAND_WORD -> new ExitCommand(); + case HelpCommand.COMMAND_WORD -> new HelpCommand(); + case RemarkCommand.COMMAND_WORD -> new RemarkCommandParser().parse(arguments); + default -> { + logger.finer("This user input caused a ParseException: " + userInput); + throw new ParseException(MESSAGE_UNKNOWN_COMMAND); + } + }; } } diff --git a/src/main/java/seedu/address/logic/parser/CliSyntax.java b/src/main/java/seedu/address/logic/parser/CliSyntax.java index 75b1a9bf119..798f15d2d81 100644 --- a/src/main/java/seedu/address/logic/parser/CliSyntax.java +++ b/src/main/java/seedu/address/logic/parser/CliSyntax.java @@ -11,5 +11,5 @@ public class CliSyntax { public static final Prefix PREFIX_EMAIL = new Prefix("e/"); public static final Prefix PREFIX_ADDRESS = new Prefix("a/"); public static final Prefix PREFIX_TAG = new Prefix("t/"); - + public static final Prefix PREFIX_REMARK = new Prefix("r/"); } diff --git a/src/main/java/seedu/address/logic/parser/ParserUtil.java b/src/main/java/seedu/address/logic/parser/ParserUtil.java index b117acb9c55..d7de24fb99c 100644 --- a/src/main/java/seedu/address/logic/parser/ParserUtil.java +++ b/src/main/java/seedu/address/logic/parser/ParserUtil.java @@ -9,10 +9,7 @@ import seedu.address.commons.core.index.Index; import seedu.address.commons.util.StringUtil; import seedu.address.logic.parser.exceptions.ParseException; -import seedu.address.model.person.Address; -import seedu.address.model.person.Email; -import seedu.address.model.person.Name; -import seedu.address.model.person.Phone; +import seedu.address.model.person.*; import seedu.address.model.tag.Tag; /** @@ -80,6 +77,12 @@ public static Address parseAddress(String address) throws ParseException { return new Address(trimmedAddress); } + public static Remark parseRemark(String remark) { + requireNonNull(remark); + String trimmedRemark = remark.trim(); // Remark yet has format constraints. + return new Remark(trimmedRemark); + } + /** * Parses a {@code String email} into an {@code Email}. * Leading and trailing whitespaces will be trimmed. diff --git a/src/main/java/seedu/address/logic/parser/RemarkCommandParser.java b/src/main/java/seedu/address/logic/parser/RemarkCommandParser.java new file mode 100644 index 00000000000..d4e51e19525 --- /dev/null +++ b/src/main/java/seedu/address/logic/parser/RemarkCommandParser.java @@ -0,0 +1,27 @@ +package seedu.address.logic.parser; + +import seedu.address.commons.core.index.Index; +import seedu.address.commons.exceptions.IllegalValueException; +import seedu.address.logic.commands.RemarkCommand; +import seedu.address.logic.parser.exceptions.ParseException; + +import static java.util.Objects.requireNonNull; +import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; +import static seedu.address.logic.parser.CliSyntax.PREFIX_REMARK; + +public class RemarkCommandParser implements Parser { + @Override + public RemarkCommand parse(String userInput) throws ParseException { + requireNonNull(userInput); + ArgumentMultimap argMultimap = ArgumentTokenizer.tokenize(userInput, PREFIX_REMARK); + Index index; + try { + index = ParserUtil.parseIndex(argMultimap.getPreamble()); + } catch (IllegalValueException ive) { + throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, + RemarkCommand.MESSAGE_USAGE), ive); + } + String remark = argMultimap.getValue(PREFIX_REMARK).orElse(""); + return new RemarkCommand(index, remark); + } +} diff --git a/src/main/java/seedu/address/model/person/Address.java b/src/main/java/seedu/address/model/person/Address.java index 469a2cc9a1e..2a4ac9b1aaa 100644 --- a/src/main/java/seedu/address/model/person/Address.java +++ b/src/main/java/seedu/address/model/person/Address.java @@ -15,7 +15,7 @@ public class Address { * The first character of the address must not be a whitespace, * otherwise " " (a blank string) becomes a valid input. */ - public static final String VALIDATION_REGEX = "[^\\s].*"; + public static final String VALIDATION_REGEX = "\\S.*"; public final String value; diff --git a/src/main/java/seedu/address/model/person/Person.java b/src/main/java/seedu/address/model/person/Person.java index abe8c46b535..c42ae7d514c 100644 --- a/src/main/java/seedu/address/model/person/Person.java +++ b/src/main/java/seedu/address/model/person/Person.java @@ -23,17 +23,19 @@ public class Person { // Data fields private final Address address; + private final Remark remark; private final Set tags = new HashSet<>(); /** * Every field must be present and not null. */ - public Person(Name name, Phone phone, Email email, Address address, Set tags) { - requireAllNonNull(name, phone, email, address, tags); + public Person(Name name, Phone phone, Email email, Address address, Remark remark, Set tags) { + requireAllNonNull(name, phone, email, address, remark, tags); this.name = name; this.phone = phone; this.email = email; this.address = address; + this.remark = remark; this.tags.addAll(tags); } @@ -53,6 +55,10 @@ public Address getAddress() { return address; } + public Remark getRemark() { + return remark; + } + /** * Returns an immutable tag set, which throws {@code UnsupportedOperationException} * if modification is attempted. @@ -94,13 +100,14 @@ public boolean equals(Object other) { && phone.equals(otherPerson.phone) && email.equals(otherPerson.email) && address.equals(otherPerson.address) + && remark.equals(otherPerson.remark) && tags.equals(otherPerson.tags); } @Override public int hashCode() { // use this method for custom fields hashing instead of implementing your own - return Objects.hash(name, phone, email, address, tags); + return Objects.hash(name, phone, email, address, tags, remark); } @Override @@ -110,6 +117,7 @@ public String toString() { .add("phone", phone) .add("email", email) .add("address", address) + .add("remark", remark) .add("tags", tags) .toString(); } diff --git a/src/main/java/seedu/address/model/person/Remark.java b/src/main/java/seedu/address/model/person/Remark.java new file mode 100644 index 00000000000..262a31bdb69 --- /dev/null +++ b/src/main/java/seedu/address/model/person/Remark.java @@ -0,0 +1,50 @@ +package seedu.address.model.person; + +import static java.util.Objects.requireNonNull; +import static seedu.address.commons.util.AppUtil.checkArgument; + +/** + * Represents a Person's remark in the address book. + * Guarantees: immutable; is valid always. + */ +public class Remark { + + public static final String MESSAGE_CONSTRAINTS = "Remarks can take any values, and it should not be blank"; + + public final String value; + + /** + * Constructs an {@code Address}. + * + * @param remark A valid address. + */ + public Remark(String remark) { + requireNonNull(remark); + this.value = remark; + } + + @Override + public String toString() { + return this.value; + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + + // instanceof handles nulls + if (!(other instanceof Remark otherRemark)) { + return false; + } + + return this.value.equals(otherRemark.value); + } + + @Override + public int hashCode() { + return this.value.hashCode(); + } + +} \ No newline at end of file diff --git a/src/main/java/seedu/address/model/util/SampleDataUtil.java b/src/main/java/seedu/address/model/util/SampleDataUtil.java index 1806da4facf..3c482944771 100644 --- a/src/main/java/seedu/address/model/util/SampleDataUtil.java +++ b/src/main/java/seedu/address/model/util/SampleDataUtil.java @@ -6,11 +6,7 @@ import seedu.address.model.AddressBook; import seedu.address.model.ReadOnlyAddressBook; -import seedu.address.model.person.Address; -import seedu.address.model.person.Email; -import seedu.address.model.person.Name; -import seedu.address.model.person.Person; -import seedu.address.model.person.Phone; +import seedu.address.model.person.*; import seedu.address.model.tag.Tag; /** @@ -20,23 +16,23 @@ public class SampleDataUtil { public static Person[] getSamplePersons() { return new Person[] { new Person(new Name("Alex Yeoh"), new Phone("87438807"), new Email("alexyeoh@example.com"), - new Address("Blk 30 Geylang Street 29, #06-40"), + new Address("Blk 30 Geylang Street 29, #06-40"), new Remark("Best Friend"), getTagSet("friends")), new Person(new Name("Bernice Yu"), new Phone("99272758"), new Email("berniceyu@example.com"), - new Address("Blk 30 Lorong 3 Serangoon Gardens, #07-18"), - getTagSet("colleagues", "friends")), + new Address("Blk 30 Lorong 3 Serangoon Gardens, #07-18"), new Remark("Best Friend's Crush"), + getTagSet("colleagues", "friends")), new Person(new Name("Charlotte Oliveiro"), new Phone("93210283"), new Email("charlotte@example.com"), - new Address("Blk 11 Ang Mo Kio Street 74, #11-04"), - getTagSet("neighbours")), + new Address("Blk 11 Ang Mo Kio Street 74, #11-04"), new Remark("Exchange Student from Italy"), + getTagSet("neighbours")), new Person(new Name("David Li"), new Phone("91031282"), new Email("lidavid@example.com"), - new Address("Blk 436 Serangoon Gardens Street 26, #16-43"), - getTagSet("family")), + new Address("Blk 436 Serangoon Gardens Street 26, #16-43"), new Remark("Senior in internship firm"), + getTagSet("family")), new Person(new Name("Irfan Ibrahim"), new Phone("92492021"), new Email("irfan@example.com"), - new Address("Blk 47 Tampines Street 20, #17-35"), - getTagSet("classmates")), + new Address("Blk 47 Tampines Street 20, #17-35"), new Remark("Childhood Neighbour"), + getTagSet("classmates")), new Person(new Name("Roy Balakrishnan"), new Phone("92624417"), new Email("royb@example.com"), - new Address("Blk 45 Aljunied Street 85, #11-31"), - getTagSet("colleagues")) + new Address("Blk 45 Aljunied Street 85, #11-31"), new Remark("Army Buddy"), + getTagSet("colleagues")) }; } diff --git a/src/main/java/seedu/address/storage/JsonAdaptedPerson.java b/src/main/java/seedu/address/storage/JsonAdaptedPerson.java index bd1ca0f56c8..848de9b01a0 100644 --- a/src/main/java/seedu/address/storage/JsonAdaptedPerson.java +++ b/src/main/java/seedu/address/storage/JsonAdaptedPerson.java @@ -10,11 +10,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import seedu.address.commons.exceptions.IllegalValueException; -import seedu.address.model.person.Address; -import seedu.address.model.person.Email; -import seedu.address.model.person.Name; -import seedu.address.model.person.Person; -import seedu.address.model.person.Phone; +import seedu.address.model.person.*; import seedu.address.model.tag.Tag; /** @@ -28,6 +24,7 @@ class JsonAdaptedPerson { private final String phone; private final String email; private final String address; + private final String remark; private final List tags = new ArrayList<>(); /** @@ -36,11 +33,12 @@ class JsonAdaptedPerson { @JsonCreator public JsonAdaptedPerson(@JsonProperty("name") String name, @JsonProperty("phone") String phone, @JsonProperty("email") String email, @JsonProperty("address") String address, - @JsonProperty("tags") List tags) { + @JsonProperty("remark") String remark, @JsonProperty("tags") List tags) { this.name = name; this.phone = phone; this.email = email; this.address = address; + this.remark = remark; if (tags != null) { this.tags.addAll(tags); } @@ -54,9 +52,10 @@ public JsonAdaptedPerson(Person source) { phone = source.getPhone().value; email = source.getEmail().value; address = source.getAddress().value; + remark = source.getRemark().value; tags.addAll(source.getTags().stream() .map(JsonAdaptedTag::new) - .collect(Collectors.toList())); + .toList()); } /** @@ -102,8 +101,13 @@ public Person toModelType() throws IllegalValueException { } final Address modelAddress = new Address(address); + if (remark == null) { + throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Remark.class.getSimpleName())); + } + final Remark modelRemark = new Remark(remark); + final Set modelTags = new HashSet<>(personTags); - return new Person(modelName, modelPhone, modelEmail, modelAddress, modelTags); + return new Person(modelName, modelPhone, modelEmail, modelAddress, modelRemark, modelTags); } } diff --git a/src/main/java/seedu/address/ui/PersonCard.java b/src/main/java/seedu/address/ui/PersonCard.java index 094c42cda82..ed9a621d3a0 100644 --- a/src/main/java/seedu/address/ui/PersonCard.java +++ b/src/main/java/seedu/address/ui/PersonCard.java @@ -40,6 +40,8 @@ public class PersonCard extends UiPart { private Label email; @FXML private FlowPane tags; + @FXML + private Label remark; /** * Creates a {@code PersonCode} with the given {@code Person} and index to display. @@ -51,6 +53,7 @@ public PersonCard(Person person, int displayedIndex) { name.setText(person.getName().fullName); phone.setText(person.getPhone().value); address.setText(person.getAddress().value); + remark.setText(person.getRemark().value); email.setText(person.getEmail().value); person.getTags().stream() .sorted(Comparator.comparing(tag -> tag.tagName)) diff --git a/src/main/resources/view/PersonListCard.fxml b/src/main/resources/view/PersonListCard.fxml index 84e09833a87..be9f74750ea 100644 --- a/src/main/resources/view/PersonListCard.fxml +++ b/src/main/resources/view/PersonListCard.fxml @@ -31,6 +31,7 @@

    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�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 Date: Thu, 6 Mar 2025 22:27:36 +0800 Subject: [PATCH 027/296] Update README.md --- docs/AboutUs.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 763a8b1c846..c1a20de59ef 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -11,19 +11,18 @@ You can reach us at the email `seer[at]comp.nus.edu.sg` ## Project team -### John Doe +### Lu Mingyuan - + -[[homepage](http://www.comp.nus.edu.sg/~damithch)] -[[github](https://github.com/johndoe)] -[[portfolio](team/johndoe.md)] +[[github](https://github.com/mingyuan03)] -* Role: Project Advisor +* Role: Developer +* Responsiblities: Data & QA ### Advay Pakhale - + [[github](http://github.com/advaypakhale)] From 547f8e7595e5d12a5024d915689fbc20e60c4245 Mon Sep 17 00:00:00 2001 From: Mingyuan03 Date: Thu, 6 Mar 2025 23:08:05 +0800 Subject: [PATCH 028/296] Add explanation for record class use --- src/main/java/seedu/address/commons/core/Version.java | 2 +- src/test/java/seedu/address/commons/core/VersionTest.java | 6 +++--- src/test/java/seedu/address/testutil/PersonUtil.java | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/seedu/address/commons/core/Version.java b/src/main/java/seedu/address/commons/core/Version.java index ce106fbc38b..c6631a1adcb 100644 --- a/src/main/java/seedu/address/commons/core/Version.java +++ b/src/main/java/seedu/address/commons/core/Version.java @@ -7,7 +7,7 @@ import com.fasterxml.jackson.annotation.JsonValue; /** - * Represents a version with major, minor and patch number + * Represents a version with major, minor and patch number. Modified into a record class to reduce boilerplate. */ public record Version(int major, int minor, int patch, boolean isEarlyAccess) implements Comparable { diff --git a/src/test/java/seedu/address/commons/core/VersionTest.java b/src/test/java/seedu/address/commons/core/VersionTest.java index 76326a16994..c2ad4e82050 100644 --- a/src/test/java/seedu/address/commons/core/VersionTest.java +++ b/src/test/java/seedu/address/commons/core/VersionTest.java @@ -24,9 +24,9 @@ public void versionParsing_wrongVersionString_throwIllegalArgumentException() { public void versionConstructor_correctParameter_valueAsExpected() { Version version = new Version(19, 10, 20, true); - assertEquals(19, version.major()); - assertEquals(10, version.minor()); - assertEquals(20, version.patch()); + assertEquals(19, version.major()); // Implicit accessor for Java records + assertEquals(10, version.minor()); // Implicit accessor for Java records + assertEquals(20, version.patch()); // Implicit accessor for Java records assertEquals(true, version.isEarlyAccess()); } diff --git a/src/test/java/seedu/address/testutil/PersonUtil.java b/src/test/java/seedu/address/testutil/PersonUtil.java index 8f7e8cf3514..4613e3a3f87 100644 --- a/src/test/java/seedu/address/testutil/PersonUtil.java +++ b/src/test/java/seedu/address/testutil/PersonUtil.java @@ -35,7 +35,7 @@ public static String getPersonDetails(Person person) { sb.append(PREFIX_EMAIL + person.getEmail().value + " "); sb.append(PREFIX_ADDRESS + person.getAddress().value + " "); person.getTags().stream().forEach( - s -> sb.append(PREFIX_TAG + s.tagName() + " ") + s -> sb.append(PREFIX_TAG + s.tagName() + " ") // Implicit accessor for Java records ); return sb.toString(); } From b6d034d94e97cbc41098ac370662f29be97c9550 Mon Sep 17 00:00:00 2001 From: DESU-CLUB Date: Thu, 6 Mar 2025 23:25:00 +0800 Subject: [PATCH 029/296] docs: Add correct CI badge for project --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c9784a0f231..ed22e1e9195 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[![CI Status](https://github.com/se-edu/addressbook-level3/workflows/Java%20CI/badge.svg)](https://github.com/se-edu/addressbook-level3/actions) +[![CI Status](https://github.com/AY2425S2-CS2103T-T08-4/tp/workflows/Java%20CI/badge.svg)](https://github.com/AY2425S2-CS2103T-T08-4/tp/actions) ![Ui](docs/images/Ui.png) From 12e80e32d7afa99899a5d3af9c2b8000c3961efd Mon Sep 17 00:00:00 2001 From: Mingyuan03 Date: Thu, 6 Mar 2025 23:33:35 +0800 Subject: [PATCH 030/296] Remove one small bug --- src/test/java/seedu/address/testutil/PersonUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/seedu/address/testutil/PersonUtil.java b/src/test/java/seedu/address/testutil/PersonUtil.java index 444c0fa9085..18fc06488c1 100644 --- a/src/test/java/seedu/address/testutil/PersonUtil.java +++ b/src/test/java/seedu/address/testutil/PersonUtil.java @@ -37,7 +37,7 @@ public static String getPersonDetails(Person person) { sb.append(PREFIX_ADDRESS + person.getAddress().value + " "); sb.append(PREFIX_REMARK + person.getRemark().value + " "); person.getTags().stream().forEach( - s -> sb.append(PREFIX_TAG + s.tagName() + " ") // Implicit accessor for Java records + s -> sb.append(PREFIX_TAG + s.tagName + " ") // Implicit accessor for Java records ); return sb.toString(); } From 62839b5591251fff91c479a2873ee002d7efe028 Mon Sep 17 00:00:00 2001 From: Timothy-Ho0203 <156638648+Timothy-Ho0203@users.noreply.github.com> Date: Thu, 6 Mar 2025 23:38:17 +0800 Subject: [PATCH 031/296] docs: Update ReadMe for acknowledgments --- README.md | 4 ++++ docs/images/Ui.png | Bin 14607 -> 154258 bytes 2 files changed, 4 insertions(+) diff --git a/README.md b/README.md index c9784a0f231..8b71c1c987d 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,10 @@ This project extends the AddressBook Level 3 (AB3) application, originally creat --- +### Acknowledgements + +This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org). + ### 👥 Contact Us Have questions? Reach out to our team in [GitHub Issues](https://github.com/AY2425S2-CS2103T-T08-4/tp/issues) diff --git a/docs/images/Ui.png b/docs/images/Ui.png index 5bd77847aa2429edac366ebe3e00650b6dd909d8..d994646d922d477e28b35fa4ecdf11904129f946 100644 GIT binary patch literal 154258 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%0D@(hozC5wqD#=NH4`B8r~@ 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 literal 14607 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 RAXge19gVx{rMDi1{6Bg4z)AoB From 9792d1fe613d4c811ecf3c5475fdf9013583523b Mon Sep 17 00:00:00 2001 From: Mingyuan03 Date: Thu, 6 Mar 2025 23:40:57 +0800 Subject: [PATCH 032/296] Fix bugs --- src/test/java/seedu/address/commons/core/VersionTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/java/seedu/address/commons/core/VersionTest.java b/src/test/java/seedu/address/commons/core/VersionTest.java index c2ad4e82050..62d1bf022d5 100644 --- a/src/test/java/seedu/address/commons/core/VersionTest.java +++ b/src/test/java/seedu/address/commons/core/VersionTest.java @@ -24,9 +24,9 @@ public void versionParsing_wrongVersionString_throwIllegalArgumentException() { public void versionConstructor_correctParameter_valueAsExpected() { Version version = new Version(19, 10, 20, true); - assertEquals(19, version.major()); // Implicit accessor for Java records - assertEquals(10, version.minor()); // Implicit accessor for Java records - assertEquals(20, version.patch()); // Implicit accessor for Java records + assertEquals(19, version.getMajor()); // Implicit accessor for Java records + assertEquals(10, version.getMinor()); // Implicit accessor for Java records + assertEquals(20, version.getPatch()); // Implicit accessor for Java records assertEquals(true, version.isEarlyAccess()); } From fce9bba6b72391da1fda5f3d6dfd3dfcd7b87406 Mon Sep 17 00:00:00 2001 From: DESU-CLUB Date: Fri, 7 Mar 2025 00:23:53 +0800 Subject: [PATCH 033/296] docs: Add TalentMatch to all guides --- docs/AboutUs.md | 2 +- docs/DeveloperGuide.md | 55 +++++++++--------- docs/UserGuide.md | 6 +- .../{advaypakhale.jpg => advaypakhale.png} | Bin docs/index.md | 2 +- 5 files changed, 33 insertions(+), 32 deletions(-) rename docs/images/{advaypakhale.jpg => advaypakhale.png} (100%) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index c1a20de59ef..ca7ab5d4370 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -22,7 +22,7 @@ You can reach us at the email `seer[at]comp.nus.edu.sg` ### Advay Pakhale - + [[github](http://github.com/advaypakhale)] diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 3e971b623b9..bc73b501cb7 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -4,7 +4,7 @@ pageNav: 3 --- -# AB-3 Developer Guide +# TalentMatch Developer Guide @@ -35,7 +35,7 @@ Given below is a quick overview of main components and how they interact with ea **Main components of the architecture** -**`Main`** (consisting of classes [`Main`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/Main.java) and [`MainApp`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/MainApp.java)) is in charge of the app launch and shut down. +**`Main`** (consisting of classes [`Main`](https://github.com/AY2425S2-CS2103T-T08-4/tp/tree/master/src/main/java/seedu/address/Main.java) and [`MainApp`](https://github.com/AY2425S2-CS2103T-T08-4/tp/tree/master/src/main/java/seedu/address/MainApp.java)) is in charge of the app launch and shut down. * At app launch, it initializes the other components in the correct sequence, and connects them up with each other. * At shut down, it shuts down the other components and invokes cleanup methods where necessary. @@ -67,13 +67,13 @@ The sections below give more details of each component. ### UI component -The **API** of this component is specified in [`Ui.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/Ui.java) +The **API** of this component is specified in [`Ui.java`](https://github.com/AY2425S2-CS2103T-T08-4/tp/tree/master/src/main/java/seedu/address/ui/Ui.java) The UI consists of a `MainWindow` that is made up of parts e.g.`CommandBox`, `ResultDisplay`, `PersonListPanel`, `StatusBarFooter` etc. All these, including the `MainWindow`, inherit from the abstract `UiPart` class which captures the commonalities between classes that represent parts of the visible GUI. -The `UI` component uses the JavaFx UI framework. The layout of these UI parts are defined in matching `.fxml` files that are in the `src/main/resources/view` folder. For example, the layout of the [`MainWindow`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/MainWindow.java) is specified in [`MainWindow.fxml`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/resources/view/MainWindow.fxml) +The `UI` component uses the JavaFx UI framework. The layout of these UI parts are defined in matching `.fxml` files that are in the `src/main/resources/view` folder. For example, the layout of the [`MainWindow`](https://github.com/AY2425S2-CS2103T-T08-4/tp/tree/master/src/main/java/seedu/address/ui/MainWindow.java) is specified in [`MainWindow.fxml`](https://github.com/AY2425S2-CS2103T-T08-4/tp/tree/master/src/main/resources/view/MainWindow.fxml) The `UI` component, @@ -84,7 +84,7 @@ The `UI` component, ### Logic component -**API** : [`Logic.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/logic/Logic.java) +**API** : [`Logic.java`](https://github.com/AY2425S2-CS2103T-T08-4/tp/tree/master/src/main/java/seedu/address/logic/Logic.java) Here's a (partial) class diagram of the `Logic` component: @@ -101,7 +101,7 @@ The sequence diagram below illustrates the interactions within the `Logic` compo How the `Logic` component works: -1. When `Logic` is called upon to execute a command, it is passed to an `AddressBookParser` object which in turn creates a parser that matches the command (e.g., `DeleteCommandParser`) and uses it to parse the command. +1. When `Logic` is called upon to execute a command, it is passed to an `TalentMatchParser` object which in turn creates a parser that matches the command (e.g., `DeleteCommandParser`) and uses it to parse the command. 1. This results in a `Command` object (more precisely, an object of one of its subclasses e.g., `DeleteCommand`) which is executed by the `LogicManager`. 1. The command can communicate with the `Model` when it is executed (e.g. to delete a person).
    Note that although this is shown as a single step in the diagram above (for simplicity), in the code it can take several interactions (between the command object and the `Model`) to achieve. @@ -112,11 +112,11 @@ Here are the other classes in `Logic` (omitted from the class diagram above) tha How the parsing works: -* When called upon to parse a user command, the `AddressBookParser` class creates an `XYZCommandParser` (`XYZ` is a placeholder for the specific command name e.g., `AddCommandParser`) which uses the other classes shown above to parse the user command and create a `XYZCommand` object (e.g., `AddCommand`) which the `AddressBookParser` returns back as a `Command` object. +* When called upon to parse a user command, the `TalentMatchParser` class creates an `XYZCommandParser` (`XYZ` is a placeholder for the specific command name e.g., `AddCommandParser`) which uses the other classes shown above to parse the user command and create a `XYZCommand` object (e.g., `AddCommand`) which the `TalentMatchParser` returns back as a `Command` object. * All `XYZCommandParser` classes (e.g., `AddCommandParser`, `DeleteCommandParser`, ...) inherit from the `Parser` interface so that they can be treated similarly where possible e.g, during testing. ### Model component -**API** : [`Model.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/model/Model.java) +**API** : [`Model.java`](https://github.com/AY2425S2-CS2103T-T08-4/tp/tree/master/src/main/java/seedu/address/model/Model.java) @@ -125,12 +125,12 @@ The `Model` component, * stores the address book data i.e., all `Person` objects (which are contained in a `UniquePersonList` object). * stores the currently 'selected' `Person` objects (e.g., results of a search query) as a separate _filtered_ list which is exposed to outsiders as an unmodifiable `ObservableList` that can be 'observed' e.g. the UI can be bound to this list so that the UI automatically updates when the data in the list change. -* stores a `UserPref` object that represents the user’s preferences. This is exposed to the outside as a `ReadOnlyUserPref` objects. +* stores a `UserPref` object that represents the user's preferences. This is exposed to the outside as a `ReadOnlyUserPref` objects. * does not depend on any of the other three components (as the `Model` represents data entities of the domain, they should make sense on their own without depending on other components) -**Note:** An alternative (arguably, a more OOP) model is given below. It has a `Tag` list in the `AddressBook`, which `Person` references. This allows `AddressBook` to only require one `Tag` object per unique tag, instead of each `Person` needing their own `Tag` objects.
    +**Note:** An alternative (arguably, a more OOP) model is given below. It has a `Tag` list in the `TalentMatch`, which `Person` references. This allows `TalentMatch` to only require one `Tag` object per unique tag, instead of each `Person` needing their own `Tag` objects.
    @@ -139,13 +139,13 @@ The `Model` component, ### Storage component -**API** : [`Storage.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/storage/Storage.java) +**API** : [`Storage.java`](https://github.com/AY2425S2-CS2103T-T08-4/tp/tree/master/src/main/java/seedu/address/storage/Storage.java) The `Storage` component, * can save both address book data and user preference data in JSON format, and read them back into corresponding objects. -* inherits from both `AddressBookStorage` and `UserPrefStorage`, which means it can be treated as either one (if only the functionality of only one is needed). +* inherits from both `TalentMatchStorage` and `UserPrefStorage`, which means it can be treated as either one (if only the functionality of only one is needed). * depends on some classes in the `Model` component (because the `Storage` component's job is to save/retrieve objects that belong to the `Model`) ### Common classes @@ -162,42 +162,43 @@ This section describes some noteworthy details on how certain features are imple #### Proposed Implementation -The proposed undo/redo mechanism is facilitated by `VersionedAddressBook`. It extends `AddressBook` with an undo/redo history, stored internally as an `addressBookStateList` and `currentStatePointer`. Additionally, it implements the following operations: +The proposed undo/redo mechanism is facilitated by `VersionedTalentMatch`. It extends `TalentMatch` with an undo/redo history, stored internally as an `TalentMatchStateList` and `currentStatePointer`. Additionally, it implements the following operations: -* `VersionedAddressBook#commit()` — Saves the current address book state in its history. -* `VersionedAddressBook#undo()` — Restores the previous address book state from its history. -* `VersionedAddressBook#redo()` — Restores a previously undone address book state from its history. +* `VersionedTalentMatch#commit()` — Saves the current address book state in its history. +* `VersionedTalentMatch#undo()` — Restores the previous address book state from its history. +* `VersionedTalentMatch#redo()` — Restores a previously undone address book state from its history. -These operations are exposed in the `Model` interface as `Model#commitAddressBook()`, `Model#undoAddressBook()` and `Model#redoAddressBook()` respectively. + +These operations are exposed in the `Model` interface as `Model#commitTalentMatch()`, `Model#undoTalentMatch()` and `Model#redoTalentMatch()` respectively. Given below is an example usage scenario and how the undo/redo mechanism behaves at each step. -Step 1. The user launches the application for the first time. The `VersionedAddressBook` will be initialized with the initial address book state, and the `currentStatePointer` pointing to that single address book state. +Step 1. The user launches the application for the first time. The `VersionedTalentMatch` will be initialized with the initial address book state, and the `currentStatePointer` pointing to that single address book state. -Step 2. The user executes `delete 5` command to delete the 5th person in the address book. The `delete` command calls `Model#commitAddressBook()`, causing the modified state of the address book after the `delete 5` command executes to be saved in the `addressBookStateList`, and the `currentStatePointer` is shifted to the newly inserted address book state. +Step 2. The user executes `delete 5` command to delete the 5th person in the address book. The `delete` command calls `Model#commitTalentMatch()`, causing the modified state of the address book after the `delete 5` command executes to be saved in the `TalentMatchStateList`, and the `currentStatePointer` is shifted to the newly inserted address book state. -Step 3. The user executes `add n/David …​` to add a new person. The `add` command also calls `Model#commitAddressBook()`, causing another modified address book state to be saved into the `addressBookStateList`. +Step 3. The user executes `add n/David …​` to add a new person. The `add` command also calls `Model#commitTalentMatch()`, causing another modified address book state to be saved into the `TalentMatchStateList`. -**Note:** If a command fails its execution, it will not call `Model#commitAddressBook()`, so the address book state will not be saved into the `addressBookStateList`. +**Note:** If a command fails its execution, it will not call `Model#commitTalentMatch()`, so the address book state will not be saved into the `TalentMatchStateList`. -Step 4. The user now decides that adding the person was a mistake, and decides to undo that action by executing the `undo` command. The `undo` command will call `Model#undoAddressBook()`, which will shift the `currentStatePointer` once to the left, pointing it to the previous address book state, and restores the address book to that state. +Step 4. The user now decides that adding the person was a mistake, and decides to undo that action by executing the `undo` command. The `undo` command will call `Model#undoTalentMatch()`, which will shift the `currentStatePointer` once to the left, pointing it to the previous address book state, and restores the address book to that state. -**Note:** If the `currentStatePointer` is at index 0, pointing to the initial AddressBook state, then there are no previous AddressBook states to restore. The `undo` command uses `Model#canUndoAddressBook()` to check if this is the case. If so, it will return an error to the user rather +**Note:** If the `currentStatePointer` is at index 0, pointing to the initial TalentMatch state, then there are no previous TalentMatch states to restore. The `undo` command uses `Model#canUndoTalentMatch()` to check if this is the case. If so, it will return an error to the user rather than attempting to perform the undo. @@ -216,19 +217,19 @@ Similarly, how an undo operation goes through the `Model` component is shown bel -The `redo` command does the opposite — it calls `Model#redoAddressBook()`, which shifts the `currentStatePointer` once to the right, pointing to the previously undone state, and restores the address book to that state. +The `redo` command does the opposite — it calls `Model#redoTalentMatch()`, which shifts the `currentStatePointer` once to the right, pointing to the previously undone state, and restores the address book to that state. -**Note:** If the `currentStatePointer` is at index `addressBookStateList.size() - 1`, pointing to the latest address book state, then there are no undone AddressBook states to restore. The `redo` command uses `Model#canRedoAddressBook()` to check if this is the case. If so, it will return an error to the user rather than attempting to perform the redo. +**Note:** If the `currentStatePointer` is at index `TalentMatchStateList.size() - 1`, pointing to the latest address book state, then there are no undone TalentMatch states to restore. The `redo` command uses `Model#canRedoTalentMatch()` to check if this is the case. If so, it will return an error to the user rather than attempting to perform the redo. -Step 5. The user then decides to execute the command `list`. Commands that do not modify the address book, such as `list`, will usually not call `Model#commitAddressBook()`, `Model#undoAddressBook()` or `Model#redoAddressBook()`. Thus, the `addressBookStateList` remains unchanged. +Step 5. The user then decides to execute the command `list`. Commands that do not modify the address book, such as `list`, will usually not call `Model#commitTalentMatch()`, `Model#undoTalentMatch()` or `Model#redoTalentMatch()`. Thus, the `TalentMatchStateList` remains unchanged. -Step 6. The user executes `clear`, which calls `Model#commitAddressBook()`. Since the `currentStatePointer` is not pointing at the end of the `addressBookStateList`, all address book states after the `currentStatePointer` will be purged. Reason: It no longer makes sense to redo the `add n/David …​` command. This is the behavior that most modern desktop applications follow. +Step 6. The user executes `clear`, which calls `Model#commitTalentMatch()`. Since the `currentStatePointer` is not pointing at the end of the `TalentMatchStateList`, all address book states after the `currentStatePointer` will be purged. Reason: It no longer makes sense to redo the `add n/David …​` command. This is the behavior that most modern desktop applications follow. diff --git a/docs/UserGuide.md b/docs/UserGuide.md index aab9894c52b..db087e2d378 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -4,9 +4,9 @@ pageNav: 3 --- -# AB-3 User Guide +# TalentMatch User Guide -AddressBook Level 3 (AB3) is a **desktop app for managing contacts, optimized for use via a Line Interface** (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, AB3 can get your contact management tasks done faster than traditional GUI apps. +TalentMatch is a **desktop app for managing applicants, optimized for use via a Command Line Interface** (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, TalentMatch can get your applicant management tasks done faster than traditional GUI apps. @@ -107,7 +107,7 @@ Format: `edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [t/TAG]…​` * At least one of the optional fields must be provided. * Existing values will be updated to the input values. * When editing tags, the existing tags of the person will be removed i.e adding of tags is not cumulative. -* You can remove all the person’s tags by typing `t/` without +* You can remove all the person's tags by typing `t/` without specifying any tags after it. Examples: diff --git a/docs/images/advaypakhale.jpg b/docs/images/advaypakhale.png similarity index 100% rename from docs/images/advaypakhale.jpg rename to docs/images/advaypakhale.png diff --git a/docs/index.md b/docs/index.md index 8acbdd73507..d5efac619ca 100644 --- a/docs/index.md +++ b/docs/index.md @@ -3,7 +3,7 @@ title: "" --- -# AddressBook Level-3 +# TalentMatch [![CI Status](https://github.com/se-edu/addressbook-level3/workflows/Java%20CI/badge.svg)](https://github.com/se-edu/addressbook-level3/actions) [![codecov](https://codecov.io/gh/se-edu/addressbook-level3/branch/master/graph/badge.svg)](https://codecov.io/gh/se-edu/addressbook-level3) From 9de2ca32005c1781e3ae3a57988d92a0abb54cb2 Mon Sep 17 00:00:00 2001 From: DESU-CLUB Date: Tue, 11 Mar 2025 17:05:51 +0800 Subject: [PATCH 034/296] Add specializations and updated UI --- .vscode/settings.json | 3 ++ build.gradle | 22 ++++++++ .../java/seedu/address/model/tag/Tag.java | 2 +- .../java/seedu/address/ui/PersonCard.java | 30 +++++++++-- .../java/seedu/address/ui/util/IconUtil.java | 35 ++++++++++++ src/main/resources/view/DarkTheme.css | 29 ++++++++++ src/main/resources/view/PersonListCard.fxml | 53 +++++++++++++++++-- .../seedu/address/ui/util/IconUtilTest.java | 40 ++++++++++++++ 8 files changed, 205 insertions(+), 9 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 src/main/java/seedu/address/ui/util/IconUtil.java create mode 100644 src/test/java/seedu/address/ui/util/IconUtilTest.java diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000000..c5f3f6b9c75 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "java.configuration.updateBuildConfiguration": "interactive" +} \ No newline at end of file diff --git a/build.gradle b/build.gradle index 0db3743584e..c7a1fc5b4c5 100644 --- a/build.gradle +++ b/build.gradle @@ -56,6 +56,8 @@ dependencies { implementation group: 'org.openjfx', name: 'javafx-graphics', version: javaFxVersion, classifier: 'win' implementation group: 'org.openjfx', name: 'javafx-graphics', version: javaFxVersion, classifier: 'mac' implementation group: 'org.openjfx', name: 'javafx-graphics', version: javaFxVersion, classifier: 'linux' + implementation 'de.jensd:fontawesomefx-fontawesome:4.7.0-9.1.2' + implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.7.0' implementation group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310', version: '2.7.4' @@ -63,6 +65,13 @@ dependencies { testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: jUnitVersion testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: jUnitVersion + + // TestFX Dependencies + testImplementation 'org.testfx:testfx-core:4.0.16-alpha' + testImplementation 'org.testfx:testfx-junit5:4.0.16-alpha' + + // Optional: Monocle for headless testing (useful for CI environments) + testImplementation 'org.testfx:openjfx-monocle:jdk-12.0.1+2' } shadowJar { @@ -70,3 +79,16 @@ shadowJar { } defaultTasks 'clean', 'test' + +// Add this if you want to enable headless testing +test { + useJUnitPlatform() + + // Configure headless testing + systemProperty 'java.awt.headless', 'true' + systemProperty 'testfx.robot', 'glass' + systemProperty 'testfx.headless', 'true' + systemProperty 'prism.order', 'sw' + systemProperty 'prism.text', 't2k' + systemProperty 'testfx.setup.timeout', '2500' +} diff --git a/src/main/java/seedu/address/model/tag/Tag.java b/src/main/java/seedu/address/model/tag/Tag.java index f1a0d4e233b..819fdf7b1b4 100644 --- a/src/main/java/seedu/address/model/tag/Tag.java +++ b/src/main/java/seedu/address/model/tag/Tag.java @@ -9,7 +9,7 @@ */ public class Tag { - public static final String MESSAGE_CONSTRAINTS = "Tags names should be alphanumeric"; + public static final String MESSAGE_CONSTRAINTS = "Skill names should be alphanumeric"; public static final String VALIDATION_REGEX = "\\p{Alnum}+"; public final String tagName; diff --git a/src/main/java/seedu/address/ui/PersonCard.java b/src/main/java/seedu/address/ui/PersonCard.java index ed9a621d3a0..7b62c1059fb 100644 --- a/src/main/java/seedu/address/ui/PersonCard.java +++ b/src/main/java/seedu/address/ui/PersonCard.java @@ -2,12 +2,14 @@ import java.util.Comparator; +import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon; import javafx.fxml.FXML; import javafx.scene.control.Label; import javafx.scene.layout.FlowPane; import javafx.scene.layout.HBox; import javafx.scene.layout.Region; import seedu.address.model.person.Person; +import seedu.address.ui.util.IconUtil; /** * An UI component that displays information of a {@code Person}. @@ -33,15 +35,25 @@ public class PersonCard extends UiPart { @FXML private Label id; @FXML + private HBox phoneBox; + @FXML + private HBox addressBox; + @FXML + private HBox emailBox; + @FXML + private HBox remarkBox; + @FXML + private FlowPane tags; + @FXML private Label phone; @FXML private Label address; @FXML private Label email; @FXML - private FlowPane tags; - @FXML private Label remark; + @FXML + private HBox skillsBox; /** * Creates a {@code PersonCode} with the given {@code Person} and index to display. @@ -51,12 +63,24 @@ public PersonCard(Person person, int displayedIndex) { this.person = person; id.setText(displayedIndex + ". "); name.setText(person.getName().fullName); + // Phone with white icon + phoneBox.getChildren().add(0, IconUtil.createIcon(FontAwesomeIcon.PHONE, "white")); phone.setText(person.getPhone().value); + // Address with white icon + addressBox.getChildren().add(0, IconUtil.createIcon(FontAwesomeIcon.HOME, "white")); address.setText(person.getAddress().value); - remark.setText(person.getRemark().value); + // Email with white icon + emailBox.getChildren().add(0, IconUtil.createIcon(FontAwesomeIcon.ENVELOPE, "white")); email.setText(person.getEmail().value); + // Remark with white icon + remarkBox.getChildren().add(0, IconUtil.createIcon(FontAwesomeIcon.COMMENT, "white")); + remark.setText(person.getRemark().value); + // Skills with white icon + skillsBox.getChildren().add(0, IconUtil.createIcon(FontAwesomeIcon.TAGS, "white")); + // Add tags person.getTags().stream() .sorted(Comparator.comparing(tag -> tag.tagName)) .forEach(tag -> tags.getChildren().add(new Label(tag.tagName))); } } + diff --git a/src/main/java/seedu/address/ui/util/IconUtil.java b/src/main/java/seedu/address/ui/util/IconUtil.java new file mode 100644 index 00000000000..72fe5313607 --- /dev/null +++ b/src/main/java/seedu/address/ui/util/IconUtil.java @@ -0,0 +1,35 @@ +package seedu.address.ui.util; + +import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon; +import de.jensd.fx.glyphs.fontawesome.FontAwesomeIconView; +import javafx.scene.paint.Color; + +/** + * Utility class for creating FontAwesome icons. + */ +public class IconUtil { + + /** + * Creates a FontAwesome icon with the specified properties. + */ + public static FontAwesomeIconView createIcon(FontAwesomeIcon icon, String color, int size) { + FontAwesomeIconView iconView = new FontAwesomeIconView(icon); + iconView.setFill(Color.web(color)); + iconView.setGlyphSize(size); + return iconView; + } + + /** + * Creates a default-sized FontAwesome icon with the specified properties. + */ + public static FontAwesomeIconView createIcon(FontAwesomeIcon icon, String color) { + return createIcon(icon, color, 16); + } + + /** + * Creates a default FontAwesome icon (black, size 16). + */ + public static FontAwesomeIconView createIcon(FontAwesomeIcon icon) { + return createIcon(icon, "#000", 16); + } +} diff --git a/src/main/resources/view/DarkTheme.css b/src/main/resources/view/DarkTheme.css index 36e6b001cd8..07a09194375 100644 --- a/src/main/resources/view/DarkTheme.css +++ b/src/main/resources/view/DarkTheme.css @@ -350,3 +350,32 @@ -fx-background-radius: 2; -fx-font-size: 11; } + +.glyph-icon { + -fx-text-fill: -fx-primary-color; +} + +.phone-icon { + -glyph-size: 16px; + -fx-fill: #2196F3; /* blue */ +} + +.address-icon { + -glyph-size: 16px; + -fx-fill: #4CAF50; /* green */ +} + +.email-icon { + -glyph-size: 16px; + -fx-fill: #FF9800; /* orange */ +} + +.remark-icon { + -glyph-size: 16px; + -fx-fill: #9C27B0; /* purple */ +} + +.skills-icon { + -glyph-size: 16px; + -fx-fill: #F44336; /* red */ +} diff --git a/src/main/resources/view/PersonListCard.fxml b/src/main/resources/view/PersonListCard.fxml index be9f74750ea..d93e3e44047 100644 --- a/src/main/resources/view/PersonListCard.fxml +++ b/src/main/resources/view/PersonListCard.fxml @@ -19,6 +19,9 @@ + + + - -